Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| f55da0db17 |
@@ -0,0 +1,98 @@
|
||||
CHANGES.txt - 11/04/1999
|
||||
------------------------
|
||||
|
||||
CHANGES IN CUPS v1.0.2
|
||||
|
||||
- The HP-GL/2 filter didn't always scale the output
|
||||
correctly.
|
||||
- The HP-GL/2 filter now supports changing the page size
|
||||
automatically when the "fitplot" option is not used.
|
||||
- The cancel-job operation was expecting a resource name
|
||||
of the form "/job/#" instead of "/jobs/#"; this
|
||||
prevented the cancel and lprm commands from working.
|
||||
- The backends didn't log pages when files were printed
|
||||
using the "-oraw" option.
|
||||
- The authorization code did not work with the Slackware
|
||||
long shadow password package because its crypt() can
|
||||
return NULL.
|
||||
- The chunking code didn't work for reading the response
|
||||
of a POST request.
|
||||
- cupsGetPPD() now does authentication as needed.
|
||||
- The N-up code in the PostScript filter didn't work
|
||||
with some printers (grestoreall would restore the
|
||||
default blank page and device settings).
|
||||
- The N-up code in the PostScript filter didn't scale
|
||||
the pages to fit within the imageable area of the
|
||||
page.
|
||||
- Wasn't doing an fchown() on the request files. This
|
||||
caused problems when the default root account group
|
||||
and CUPS group were not the same.
|
||||
|
||||
|
||||
CHANGES IN CUPS v1.0.1
|
||||
|
||||
- Documentation updates.
|
||||
|
||||
- Fixed a bunch of possible buffer-overflow conditions.
|
||||
|
||||
- The scheduler now supports authentication using PAM.
|
||||
|
||||
- Updated the Italian message file.
|
||||
|
||||
- httpEncode64() didn't add an extra "=" if there was
|
||||
only one byte in the last three-byte group.
|
||||
|
||||
- Now drop any trailing character set from the locale
|
||||
string (e.g. "en_US.ISO_8859-1" becomes "en_US")
|
||||
|
||||
- Fixed "timezone" vs "tm_gmtoff" usage for BSD-based
|
||||
operating systems.
|
||||
|
||||
- Updated IPP security so that "get" operations can be
|
||||
done from any resource name; this allows the CGIs to
|
||||
work with printer authentication enabled so long as
|
||||
authentication isn't turned on for the whole "site".
|
||||
|
||||
- The IPP code didn't properly handle the "unsupported"
|
||||
group; this caused problems with the HP JetDirect since
|
||||
it doesn't seem to support the "copies" attribute.
|
||||
|
||||
- The HTTP chunking code was missing a CR LF pair at the
|
||||
end of a 0-length chunk.
|
||||
|
||||
- The httpSeparate() function didn't handle embedded
|
||||
usernames and passwords in the URI properly.
|
||||
|
||||
- Doing "lpadmin -p printer -E" didn't restart printing
|
||||
if there were pending jobs.
|
||||
|
||||
- The cancel-job operation now requires either a
|
||||
requesting-user-name attribute or an authenticated
|
||||
username.
|
||||
|
||||
- The add-printer code did not report errors if the
|
||||
interface script or PPD file could not be renamed.
|
||||
|
||||
- Request files are now created without world read
|
||||
permissions.
|
||||
|
||||
- Added a cupsLastError() function to the CUPS API to
|
||||
retrieve the IPP error code from the last request.
|
||||
|
||||
- Options are now case-insensitive.
|
||||
|
||||
- The lpq command now provides 10 characters for the
|
||||
username instead of the original (Berkeley standard)
|
||||
7.
|
||||
|
||||
- The cancel command needed a local CUPS server to work
|
||||
(or the appropriate ServerName in cupsd.conf)
|
||||
|
||||
- The cancel and lprm commands didn't report the IPP
|
||||
error if the job could not be cancelled.
|
||||
|
||||
- The lp and lpr commands didn't intercept SIGTERM to
|
||||
remove temporary files when printing from stdin.
|
||||
|
||||
- The lp and lpr commands didn't report the IPP error if
|
||||
the job could not be printed.
|
||||
@@ -44,7 +44,6 @@ RANLIB = @RANLIB@
|
||||
RM = @RM@ -f
|
||||
SED = @SED@
|
||||
SHELL = /bin/sh
|
||||
SMBCLIENT = @SMBCLIENT@
|
||||
|
||||
#
|
||||
# Libraries...
|
||||
|
||||
+24
-8
@@ -38,7 +38,7 @@ DIRS = cups backend berkeley cgi-bin filter man pstoraster \
|
||||
all:
|
||||
for dir in $(DIRS); do\
|
||||
echo Making all in $$dir... ;\
|
||||
(cd $$dir; make);\
|
||||
(cd $$dir; $(MAKE));\
|
||||
done
|
||||
|
||||
#
|
||||
@@ -48,7 +48,7 @@ all:
|
||||
clean:
|
||||
for dir in $(DIRS); do\
|
||||
echo Cleaning in $$dir... ;\
|
||||
(cd $$dir; make clean);\
|
||||
(cd $$dir; $(MAKE) clean);\
|
||||
done
|
||||
|
||||
#
|
||||
@@ -58,18 +58,34 @@ clean:
|
||||
install:
|
||||
for dir in $(DIRS); do\
|
||||
echo Installing in $$dir... ;\
|
||||
(cd $$dir; make install);\
|
||||
(cd $$dir; $(MAKE) install);\
|
||||
done
|
||||
echo Installing in conf...
|
||||
(cd conf; make install)
|
||||
(cd conf; $(MAKE) install)
|
||||
echo Installing in data...
|
||||
(cd data; make install)
|
||||
(cd data; $(MAKE) install)
|
||||
echo Installing in doc...
|
||||
(cd doc; make install)
|
||||
(cd doc; $(MAKE) install)
|
||||
echo Installing in fonts...
|
||||
(cd fonts; make install)
|
||||
(cd fonts; $(MAKE) install)
|
||||
echo Installing in ppd...
|
||||
(cd ppd; make install)
|
||||
(cd ppd; $(MAKE) install)
|
||||
|
||||
#
|
||||
# Make a software distribution...
|
||||
#
|
||||
|
||||
epm:
|
||||
epm -v cups
|
||||
|
||||
rpm:
|
||||
epm -v -f rpm cups
|
||||
|
||||
deb:
|
||||
epm -v -f deb cups
|
||||
|
||||
tardist:
|
||||
epm -v -f tardist cups
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
|
||||
+22
-6
@@ -1,5 +1,5 @@
|
||||
README - CUPS v1.0 - 10/01/1999
|
||||
-------------------------------
|
||||
README - CUPS v1.0.3 - 12/15/1999
|
||||
---------------------------------
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
@@ -46,7 +46,7 @@ the binary distributions from Easy Software Products:
|
||||
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
|
||||
- HP-UX 10.20 or higher
|
||||
- IRIX 5.3 or higher
|
||||
- Linux 2.0 with glibc2 or higher (tested with RedHat 5.2)
|
||||
- Linux 2.0 with glibc2 or higher
|
||||
- Solaris 2.5 or higher (SPARC or Intel)
|
||||
|
||||
|
||||
@@ -54,8 +54,9 @@ INSTALLING CUPS
|
||||
|
||||
We are currently distributing CUPS binary distributions in TAR format
|
||||
with installation and removal scripts generated by our ESP Package
|
||||
Manager (EPM) software, which is also included with the source
|
||||
distribution.
|
||||
Manager (EPM) software, which is available from:
|
||||
|
||||
http://www.easysw.com/epm
|
||||
|
||||
WARNING: Installing CUPS will overwrite your existing printing system.
|
||||
Backup files are made by the installation script and restored by the
|
||||
@@ -74,6 +75,20 @@ After asking you a few yes/no questions the CUPS software will be
|
||||
installed and the scheduler will be started automatically.
|
||||
|
||||
|
||||
READING THE DOCUMENTATION
|
||||
|
||||
Once you have installed the software you can access the documentation
|
||||
(and a bunch of other stuff) on-line at:
|
||||
|
||||
http://localhost:631
|
||||
|
||||
If you're having trouble getting that far, the documentation is located
|
||||
in the "/usr/share/cups/doc" directory in the binary distributions, and
|
||||
under the "doc" directory in the source archives.
|
||||
|
||||
Please read the documentation before asking questions.
|
||||
|
||||
|
||||
SETTING UP PRINTER QUEUES
|
||||
|
||||
CUPS works best with PPD (PostScript Printer Description) files. In a
|
||||
@@ -150,7 +165,8 @@ REPORTING PROBLEMS
|
||||
|
||||
If you have problems, please send an email to cups-support@cups.org.
|
||||
Include your operating system and version, compiler and version, and
|
||||
any errors or problems you've run into.
|
||||
any errors or problems you've run into. If you are running a version
|
||||
of Linux, be sure to provide the Linux distribution you have, too.
|
||||
|
||||
|
||||
OTHER RESOURCES
|
||||
|
||||
+12
-2
@@ -24,8 +24,8 @@
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
TARGETS = ipp lpd parallel serial socket
|
||||
OBJS = ipp.o lpd.o parallel.o serial.o socket.o
|
||||
TARGETS = betest ipp lpd parallel serial socket
|
||||
OBJS = betest.o ipp.o lpd.o parallel.o serial.o socket.o
|
||||
|
||||
#
|
||||
# Make all targets...
|
||||
@@ -50,6 +50,16 @@ install:
|
||||
-$(LN) ipp $(SERVERROOT)/backend/http
|
||||
$(CHMOD) u+s $(SERVERROOT)/backend/lpd
|
||||
|
||||
#
|
||||
# betest
|
||||
#
|
||||
|
||||
betest: betest.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o betest betest.o $(LIBS)
|
||||
|
||||
betest.o: ../cups/string.h ../Makedefs
|
||||
|
||||
#
|
||||
# ipp
|
||||
#
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Backend test program for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
* copyright law. Distribution and use rights are outlined in the file
|
||||
* "LICENSE" which should have been included with this file. If this
|
||||
* file is missing or damaged please contact Easy Software Products
|
||||
* at:
|
||||
*
|
||||
* Attn: CUPS Licensing Information
|
||||
* Easy Software Products
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Run the named backend.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <cups/string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Run the named backend.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* betest device-uri job-id user title copies options [file]
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments (7 or 8) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
char backend[255]; /* Method in URI */
|
||||
|
||||
|
||||
if (argc < 7 || argc > 8)
|
||||
{
|
||||
fputs("Usage: betest device-uri job-id user title copies options [file]\n",
|
||||
stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the method from the device-uri - that's the program we want to
|
||||
* execute.
|
||||
*/
|
||||
|
||||
if (sscanf(argv[1], "%254[^:]", backend) != 1)
|
||||
{
|
||||
fputs("betest: Bad device-uri - no colon!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Execute and return
|
||||
*/
|
||||
|
||||
execl(backend, argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7],
|
||||
NULL);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+465
-220
@@ -68,16 +68,19 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char password[255], /* Password info */
|
||||
uri[HTTP_MAX_URI];/* Updated URI without user/pass */
|
||||
http_status_t status; /* Status of HTTP job */
|
||||
ipp_status_t ipp_status; /* Status of IPP request */
|
||||
FILE *fp; /* File to print */
|
||||
http_t *http; /* HTTP connection */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
ipp_attribute_t *job_id; /* job-id attribute */
|
||||
ipp_attribute_t *copies_sup; /* copies-supported attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
struct stat fileinfo; /* File statistics */
|
||||
size_t nbytes, /* Number of bytes written */
|
||||
tbytes; /* Total bytes written */
|
||||
char buffer[8192]; /* Output buffer */
|
||||
int copies; /* Number of copies remaining */
|
||||
|
||||
|
||||
if (argc < 6 || argc > 7)
|
||||
@@ -89,18 +92,55 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
/*
|
||||
* If we have 7 arguments, print the file named on the command-line.
|
||||
* Otherwise, print stdin...
|
||||
* Otherwise, copy stdin to a temporary file and print the temporary
|
||||
* file.
|
||||
*/
|
||||
|
||||
if (argc == 6)
|
||||
fp = stdin;
|
||||
else if ((fp = fopen(argv[6], "rb")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Copy stdin to a temporary file...
|
||||
*/
|
||||
|
||||
FILE *fp; /* Temporary file */
|
||||
char buffer[8192]; /* Buffer for copying */
|
||||
int bytes; /* Number of bytes read */
|
||||
|
||||
|
||||
if ((fp = fopen(cupsTempFile(filename, sizeof(filename)), "w")) == NULL)
|
||||
{
|
||||
perror("ERROR: unable to create temporary file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
|
||||
if (fwrite(buffer, 1, bytes, fp) < bytes)
|
||||
{
|
||||
perror("ERROR: unable to write to temporary file");
|
||||
fclose(fp);
|
||||
unlink(filename);
|
||||
return (1);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(filename, argv[6], sizeof(filename) - 1);
|
||||
filename[sizeof(filename) - 1] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(filename, "rb")) == NULL)
|
||||
{
|
||||
perror("ERROR: Unable to open print file");
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
stat(argv[6], &fileinfo);
|
||||
stat(filename, &fileinfo);
|
||||
|
||||
/*
|
||||
* Extract the hostname and printer name from the URI...
|
||||
@@ -112,16 +152,24 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Try connecting to the remote server...
|
||||
*/
|
||||
|
||||
fprintf(stderr, "INFO: Connecting to %s...\n", hostname);
|
||||
|
||||
if ((http = httpConnect(hostname, port)) == NULL)
|
||||
do
|
||||
{
|
||||
perror("ERROR: Unable to connect to IPP host");
|
||||
fprintf(stderr, "INFO: Connecting to %s...\n", hostname);
|
||||
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
return (1);
|
||||
if ((http = httpConnect(hostname, port)) == NULL)
|
||||
if (errno == ECONNREFUSED)
|
||||
{
|
||||
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...",
|
||||
hostname);
|
||||
sleep(30);
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to connect to IPP host");
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
while (http == NULL);
|
||||
|
||||
/*
|
||||
* Build a URI for the printer and fill the standard IPP attributes for
|
||||
@@ -129,252 +177,451 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* might contain username:password information...
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
request->request.op.operation_id = IPP_PRINT_JOB;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
sprintf(uri, "%s://%s:%d%s", method, hostname, port, resource);
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL,
|
||||
language != NULL ? language->language : "C");
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, argv[2]);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, argv[3]);
|
||||
snprintf(uri, sizeof(uri), "%s://%s:%d%s", method, hostname, port, resource);
|
||||
|
||||
/*
|
||||
* Handle options on the command-line...
|
||||
* First validate the destination and see if the device supports multiple
|
||||
* copies. We have to do this because some IPP servers (e.g. HP JetDirect)
|
||||
* don't support the copies attribute...
|
||||
*/
|
||||
|
||||
options = NULL;
|
||||
num_options = cupsParseOptions(argv[5], 0, &options);
|
||||
language = cupsLangDefault();
|
||||
copies_sup = NULL;
|
||||
|
||||
if (cupsGetOption("raw", num_options, options))
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/vnd.cups-raw");
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/octet-stream");
|
||||
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
do
|
||||
{
|
||||
/*
|
||||
* Skip the "raw" option - handled above...
|
||||
* Build the IPP request...
|
||||
*/
|
||||
|
||||
if (strcmp(options[i].name, "raw") == 0)
|
||||
continue;
|
||||
request = ippNew();
|
||||
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL,
|
||||
language != NULL ? language->language : "C");
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
/*
|
||||
* See what the option value is; for compatibility with older interface
|
||||
* scripts, we have to support single-argument options as well as
|
||||
* option=value, option=low-high, and option=MxN.
|
||||
* Now fill in the HTTP request stuff...
|
||||
*/
|
||||
|
||||
option = options[i].name;
|
||||
val = options[i].value;
|
||||
|
||||
if (*val == '\0')
|
||||
val = NULL;
|
||||
|
||||
if (val != NULL)
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
|
||||
if (username[0])
|
||||
{
|
||||
if (strcasecmp(val, "true") == 0 ||
|
||||
strcasecmp(val, "on") == 0 ||
|
||||
strcasecmp(val, "yes") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - true...
|
||||
*/
|
||||
|
||||
n = 1;
|
||||
val = "";
|
||||
}
|
||||
else if (strcasecmp(val, "false") == 0 ||
|
||||
strcasecmp(val, "off") == 0 ||
|
||||
strcasecmp(val, "no") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - false...
|
||||
*/
|
||||
|
||||
n = 0;
|
||||
val = "";
|
||||
}
|
||||
|
||||
n = strtol(val, &s, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strncmp(option, "no", 2) == 0)
|
||||
{
|
||||
option += 2;
|
||||
n = 0;
|
||||
}
|
||||
else
|
||||
n = 1;
|
||||
|
||||
s = "";
|
||||
httpEncode64(password, username);
|
||||
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
|
||||
}
|
||||
|
||||
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
|
||||
/*
|
||||
* String value(s)...
|
||||
*/
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
else if (val != NULL)
|
||||
{
|
||||
/*
|
||||
* Numeric value, range, or resolution...
|
||||
*/
|
||||
|
||||
if (*s == '-')
|
||||
{
|
||||
n2 = strtol(s + 1, NULL, 0);
|
||||
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
|
||||
}
|
||||
else if (*s == 'x')
|
||||
{
|
||||
n2 = strtol(s + 1, &s, 0);
|
||||
|
||||
if (strcmp(s, "dpc") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
|
||||
else if (strcmp(s, "dpi") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
|
||||
else
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
}
|
||||
else
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
|
||||
}
|
||||
else
|
||||
/*
|
||||
* Boolean value...
|
||||
*/
|
||||
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now fill in the HTTP request stuff...
|
||||
*/
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
|
||||
httpEncode64(password, username);
|
||||
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
|
||||
|
||||
if (fp != stdin)
|
||||
{
|
||||
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
|
||||
sprintf(buffer, "%u", ippLength(request));
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
|
||||
}
|
||||
else
|
||||
httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked");
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* POST the request, retrying as needed...
|
||||
*/
|
||||
|
||||
if (httpPost(http, resource))
|
||||
{
|
||||
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
|
||||
sleep(10);
|
||||
httpReconnect(http);
|
||||
continue;
|
||||
}
|
||||
|
||||
fputs("INFO: POST successful, sending IPP request...\n", stderr);
|
||||
|
||||
/*
|
||||
* Send the IPP request...
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
request->state = IPP_IDLE;
|
||||
|
||||
if (ippWrite(http, request) == IPP_ERROR)
|
||||
for (;;)
|
||||
{
|
||||
fputs("ERROR: Unable to send IPP request!\n", stderr);
|
||||
status = HTTP_ERROR;
|
||||
/*
|
||||
* POST the request, retrying as needed...
|
||||
*/
|
||||
|
||||
if (httpPost(http, resource))
|
||||
{
|
||||
fputs("INFO: Unable to POST get-printer-attributes request; retrying...\n", stderr);
|
||||
sleep(10);
|
||||
httpReconnect(http);
|
||||
continue;
|
||||
}
|
||||
|
||||
fputs("INFO: POST successful, sending IPP request...\n", stderr);
|
||||
|
||||
/*
|
||||
* Send the IPP request...
|
||||
*/
|
||||
|
||||
request->state = IPP_IDLE;
|
||||
|
||||
if (ippWrite(http, request) == IPP_ERROR)
|
||||
{
|
||||
fputs("ERROR: Unable to send IPP request!\n", stderr);
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
fputs("INFO: IPP request sent, getting status...\n", stderr);
|
||||
|
||||
/*
|
||||
* Finally, check the status from the HTTP server...
|
||||
*/
|
||||
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
response = ippNew();
|
||||
ippRead(http, response);
|
||||
|
||||
ipp_status = response->request.status.status_code;
|
||||
|
||||
if (ipp_status > IPP_OK_CONFLICT)
|
||||
{
|
||||
if (ipp_status == IPP_PRINTER_BUSY ||
|
||||
ipp_status == IPP_SERVICE_UNAVAILABLE)
|
||||
{
|
||||
fputs("INFO: Printer busy; will retry in 10 seconds...\n", stderr);
|
||||
sleep(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "ERROR: Printer will not accept print file (%x)!\n",
|
||||
ipp_status);
|
||||
status = HTTP_ERROR;
|
||||
}
|
||||
}
|
||||
else if ((copies_sup = ippFindAttribute(response, "copies-supported",
|
||||
IPP_TAG_RANGE)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Has the "copies-supported" attribute - does it have an upper
|
||||
* bound > 1?
|
||||
*/
|
||||
|
||||
if (copies_sup->values[0].range.upper <= 1)
|
||||
copies_sup = NULL; /* No */
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (status == HTTP_ERROR)
|
||||
{
|
||||
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
|
||||
errno);
|
||||
status = HTTP_OK;
|
||||
ipp_status = IPP_PRINTER_BUSY;
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ERROR: Validate request was not accepted (%d)!\n", status);
|
||||
}
|
||||
|
||||
httpFlush(http);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
fputs("INFO: IPP request sent, sending print file...\n", stderr);
|
||||
|
||||
/*
|
||||
* Then send the file...
|
||||
*/
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
if (status != HTTP_OK)
|
||||
{
|
||||
tbytes += nbytes;
|
||||
fprintf(stderr, "INFO: Sending print file, %uk...\n", tbytes / 1024);
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
|
||||
if (httpWrite(http, buffer, nbytes) < nbytes)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
httpClose(http);
|
||||
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
while (ipp_status > IPP_OK_CONFLICT);
|
||||
|
||||
/*
|
||||
* See if the printer supports multiple copies...
|
||||
*/
|
||||
|
||||
if (copies_sup)
|
||||
copies = 1;
|
||||
else
|
||||
copies = atoi(argv[4]);
|
||||
|
||||
/*
|
||||
* Then issue the print-job request...
|
||||
*/
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
/*
|
||||
* If we are chunking the output from stdin, make sure we end up with
|
||||
* a 0-length chunk at the end...
|
||||
* Build the IPP request...
|
||||
*/
|
||||
|
||||
if (fp == stdin)
|
||||
httpWrite(http, buffer, 0);
|
||||
request = ippNew();
|
||||
request->request.op.operation_id = IPP_PRINT_JOB;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
fputs("INFO: Print file sent; checking status...\n", stderr);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL,
|
||||
language != NULL ? language->language : "C");
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
fprintf(stderr, "DEBUG: printer-uri = \"%s\"\n", uri);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, argv[2]);
|
||||
|
||||
fprintf(stderr, "DEBUG: requesting-user-name = \"%s\"\n", argv[2]);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
|
||||
argv[3]);
|
||||
|
||||
fprintf(stderr, "DEBUG: job-name = \"%s\"\n", argv[3]);
|
||||
|
||||
/*
|
||||
* Finally, check the status from the HTTP server...
|
||||
* Handle options on the command-line...
|
||||
*/
|
||||
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
options = NULL;
|
||||
num_options = cupsParseOptions(argv[5], 0, &options);
|
||||
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
response = ippNew();
|
||||
ippRead(http, response);
|
||||
|
||||
if (response->request.status.status_code > IPP_OK_CONFLICT)
|
||||
fprintf(stderr, "ERROR: Print file was not accepted (%04x)!\n",
|
||||
response->request.status.status_code);
|
||||
else if ((job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
|
||||
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
|
||||
else
|
||||
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n",
|
||||
job_id->values[0].integer);
|
||||
}
|
||||
if (cupsGetOption("raw", num_options, options))
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/vnd.cups-raw");
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/octet-stream");
|
||||
|
||||
if (copies_sup)
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
{
|
||||
response = NULL;
|
||||
/*
|
||||
* Skip the "raw" option - handled above...
|
||||
*/
|
||||
|
||||
if (strcasecmp(options[i].name, "raw") == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* See what the option value is; for compatibility with older interface
|
||||
* scripts, we have to support single-argument options as well as
|
||||
* option=value, option=low-high, and option=MxN.
|
||||
*/
|
||||
|
||||
option = options[i].name;
|
||||
val = options[i].value;
|
||||
|
||||
if (*val == '\0')
|
||||
val = NULL;
|
||||
|
||||
if (val != NULL)
|
||||
{
|
||||
if (strcasecmp(val, "true") == 0 ||
|
||||
strcasecmp(val, "on") == 0 ||
|
||||
strcasecmp(val, "yes") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - true...
|
||||
*/
|
||||
|
||||
n = 1;
|
||||
val = "";
|
||||
}
|
||||
else if (strcasecmp(val, "false") == 0 ||
|
||||
strcasecmp(val, "off") == 0 ||
|
||||
strcasecmp(val, "no") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - false...
|
||||
*/
|
||||
|
||||
n = 0;
|
||||
val = "";
|
||||
}
|
||||
|
||||
n = strtol(val, &s, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strncasecmp(option, "no", 2) == 0)
|
||||
{
|
||||
option += 2;
|
||||
n = 0;
|
||||
}
|
||||
else
|
||||
n = 1;
|
||||
|
||||
s = "";
|
||||
}
|
||||
|
||||
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
|
||||
/*
|
||||
* String value(s)...
|
||||
*/
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
else if (val != NULL)
|
||||
{
|
||||
/*
|
||||
* Numeric value, range, or resolution...
|
||||
*/
|
||||
|
||||
if (*s == '-')
|
||||
{
|
||||
n2 = strtol(s + 1, NULL, 0);
|
||||
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
|
||||
}
|
||||
else if (*s == 'x')
|
||||
{
|
||||
n2 = strtol(s + 1, &s, 0);
|
||||
|
||||
if (strcasecmp(s, "dpc") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
|
||||
else if (strcasecmp(s, "dpi") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
|
||||
else
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
}
|
||||
else
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
|
||||
}
|
||||
else
|
||||
/*
|
||||
* Boolean value...
|
||||
*/
|
||||
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now fill in the HTTP request stuff...
|
||||
*/
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
|
||||
if (username[0])
|
||||
{
|
||||
httpEncode64(password, username);
|
||||
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
|
||||
}
|
||||
|
||||
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* POST the request, retrying as needed...
|
||||
*/
|
||||
|
||||
httpReconnect(http);
|
||||
|
||||
if (httpPost(http, resource))
|
||||
{
|
||||
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
|
||||
sleep(10);
|
||||
continue;
|
||||
}
|
||||
|
||||
fputs("INFO: POST successful, sending IPP request...\n", stderr);
|
||||
|
||||
/*
|
||||
* Send the IPP request...
|
||||
*/
|
||||
|
||||
request->state = IPP_IDLE;
|
||||
|
||||
if (ippWrite(http, request) == IPP_ERROR)
|
||||
{
|
||||
fputs("ERROR: Unable to send IPP request!\n", stderr);
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
fputs("INFO: IPP request sent, sending print file...\n", stderr);
|
||||
|
||||
/*
|
||||
* Then send the file...
|
||||
*/
|
||||
|
||||
rewind(fp);
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
tbytes += nbytes;
|
||||
fprintf(stderr, "INFO: Sending print file, %uk...\n", tbytes / 1024);
|
||||
|
||||
if (httpWrite(http, buffer, nbytes) < nbytes)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fputs("INFO: Print file sent; checking status...\n", stderr);
|
||||
|
||||
/*
|
||||
* Finally, check the status from the HTTP server...
|
||||
*/
|
||||
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
response = ippNew();
|
||||
ippRead(http, response);
|
||||
|
||||
if ((ipp_status = response->request.status.status_code) > IPP_OK_CONFLICT)
|
||||
{
|
||||
if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
|
||||
ipp_status == IPP_PRINTER_BUSY)
|
||||
{
|
||||
fputs("INFO: Printer is busy; retrying print job...\n", stderr);
|
||||
sleep(10);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ERROR: Print file was not accepted (%04x)!\n",
|
||||
response->request.status.status_code);
|
||||
}
|
||||
else if ((job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
|
||||
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
|
||||
else
|
||||
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n",
|
||||
job_id->values[0].integer);
|
||||
}
|
||||
else
|
||||
{
|
||||
response = NULL;
|
||||
ipp_status = IPP_PRINTER_BUSY;
|
||||
|
||||
if (status == HTTP_ERROR)
|
||||
{
|
||||
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
|
||||
errno);
|
||||
status = HTTP_OK;
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ERROR: Print request was not accepted (%d)!\n", status);
|
||||
}
|
||||
|
||||
httpFlush(http);
|
||||
|
||||
fprintf(stderr, "ERROR: Print request was not accepted (%d)!\n", status);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
if (request != NULL)
|
||||
ippDelete(request);
|
||||
if (response != NULL)
|
||||
ippDelete(response);
|
||||
|
||||
if (ipp_status <= IPP_OK_CONFLICT)
|
||||
{
|
||||
fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1);
|
||||
copies --;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -382,17 +629,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
httpClose(http);
|
||||
if (request != NULL)
|
||||
ippDelete(request);
|
||||
if (response != NULL)
|
||||
ippDelete(response);
|
||||
|
||||
/*
|
||||
* Close the print file as needed...
|
||||
* Close and remove the temporary file if necessary...
|
||||
*/
|
||||
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
fclose(fp);
|
||||
|
||||
if (argc < 7)
|
||||
unlink(filename);
|
||||
|
||||
/*
|
||||
* Return the queue status...
|
||||
|
||||
+28
-12
@@ -125,7 +125,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
strcpy(filename, argv[6]);
|
||||
{
|
||||
strncpy(filename, argv[6], sizeof(filename) - 1);
|
||||
filename[sizeof(filename) - 1] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the hostname and printer name from the URI...
|
||||
@@ -137,8 +140,17 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Queue the job...
|
||||
*/
|
||||
|
||||
status = lpd_queue(hostname, resource + 1, filename,
|
||||
argv[2] /* user */, atoi(argv[4]) /* copies */);
|
||||
if (argc > 6)
|
||||
{
|
||||
status = lpd_queue(hostname, resource + 1, filename,
|
||||
argv[2] /* user */, atoi(argv[4]) /* copies */);
|
||||
|
||||
if (!status)
|
||||
fprintf(stderr, "PAGE: 1 %d\n", atoi(argv[4]));
|
||||
}
|
||||
else
|
||||
status = lpd_queue(hostname, resource + 1, filename,
|
||||
argv[2] /* user */, 1);
|
||||
|
||||
/*
|
||||
* Remove the temporary file if necessary...
|
||||
@@ -175,7 +187,7 @@ lpd_command(int fd, /* I - Socket connection to LPD host */
|
||||
*/
|
||||
|
||||
va_start(ap, format);
|
||||
bytes = vsprintf(buf, format, ap);
|
||||
bytes = vsnprintf(buf, sizeof(buf), format, ap);
|
||||
va_end(ap);
|
||||
|
||||
fprintf(stderr, "DEBUG: lpd_command %02.2x %s", buf[0], buf + 1);
|
||||
@@ -250,8 +262,9 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
{
|
||||
if ((fd = rresvport(&port)) < 0)
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
return (1);
|
||||
perror("ERROR: Unable to reserve port");
|
||||
sleep(30);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
@@ -275,7 +288,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
return (1);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -308,19 +321,22 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
gethostname(localhost, sizeof(localhost));
|
||||
localhost[31] = '\0'; /* RFC 1179, Section 7.2 - host name < 32 chars */
|
||||
|
||||
sprintf(control, "H%s\nP%s\n", localhost, user);
|
||||
snprintf(control, sizeof(control), "H%s\nP%s\n", localhost, user);
|
||||
cptr = control + strlen(control);
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
sprintf(cptr, "ldfA%03.3d%s\n", getpid() % 1000, localhost);
|
||||
|
||||
snprintf(cptr, sizeof(control) - (cptr - control), "ldfA%03.3d%s\n",
|
||||
getpid() % 1000, localhost);
|
||||
cptr += strlen(cptr);
|
||||
copies --;
|
||||
}
|
||||
|
||||
sprintf(cptr, "UdfA%03.3d%s\nNdfA%03.3d%s\n",
|
||||
getpid() % 1000, localhost,
|
||||
getpid() % 1000, localhost);
|
||||
snprintf(cptr, sizeof(control) - (cptr - control),
|
||||
"UdfA%03.3d%s\nNdfA%03.3d%s\n",
|
||||
getpid() % 1000, localhost,
|
||||
getpid() % 1000, localhost);
|
||||
|
||||
fprintf(stderr, "DEBUG: Control file is:\n%s", control);
|
||||
|
||||
|
||||
+30
-13
@@ -63,6 +63,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*options; /* Pointer to options */
|
||||
int port; /* Port number (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int fd; /* Parallel device */
|
||||
int error; /* Error code (if any) */
|
||||
size_t nbytes, /* Number of bytes written */
|
||||
@@ -83,7 +84,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
if (argc == 6)
|
||||
fp = stdin;
|
||||
{
|
||||
fp = stdin;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -95,6 +99,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
copies = atoi(argv[4]);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -143,23 +149,34 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while (copies > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
copies --;
|
||||
|
||||
if (write(fd, buffer, nbytes) < nbytes)
|
||||
if (fp != stdin)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
}
|
||||
else
|
||||
tbytes += nbytes;
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
|
||||
if (write(fd, buffer, nbytes) < nbytes)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
}
|
||||
else
|
||||
tbytes += nbytes;
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+30
-13
@@ -66,6 +66,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*ptr; /* Pointer into name or value */
|
||||
int port; /* Port number (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int fd; /* Parallel device */
|
||||
int error; /* Error code (if any) */
|
||||
size_t nbytes, /* Number of bytes written */
|
||||
@@ -86,7 +87,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
if (argc == 6)
|
||||
fp = stdin;
|
||||
{
|
||||
fp = stdin;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -98,6 +102,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
copies = atoi(argv[4]);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -261,23 +267,34 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while (copies > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
copies --;
|
||||
|
||||
if (write(fd, buffer, nbytes) < nbytes)
|
||||
if (fp != stdin)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
}
|
||||
else
|
||||
tbytes += nbytes;
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
|
||||
if (write(fd, buffer, nbytes) < nbytes)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
}
|
||||
else
|
||||
tbytes += nbytes;
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+87
-65
@@ -66,6 +66,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024]; /* Resource info (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int port; /* Port number */
|
||||
int fd; /* AppSocket */
|
||||
int error; /* Error code (if any) */
|
||||
@@ -93,7 +94,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
if (argc == 6)
|
||||
fp = stdin;
|
||||
{
|
||||
fp = stdin;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -105,6 +109,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
copies = atoi(argv[4]);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -135,91 +141,107 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
addr.sin_family = hostaddr->h_addrtype;
|
||||
addr.sin_port = htons(port);
|
||||
|
||||
for (;;)
|
||||
while (copies > 0)
|
||||
{
|
||||
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
for (;;)
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
{
|
||||
error = errno;
|
||||
close(fd);
|
||||
fd = -1;
|
||||
|
||||
if (error == ECONNREFUSED)
|
||||
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
|
||||
hostname);
|
||||
sleep(30);
|
||||
perror("ERROR: Unable to create socket");
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
{
|
||||
error = errno;
|
||||
close(fd);
|
||||
fd = -1;
|
||||
|
||||
if (error == ECONNREFUSED)
|
||||
{
|
||||
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
|
||||
hostname);
|
||||
sleep(30);
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
fputs("INFO: Connected to host, sending print job...\n", stderr);
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
|
||||
tbytes += nbytes;
|
||||
bufptr = buffer;
|
||||
|
||||
while (nbytes > 0)
|
||||
{
|
||||
if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
}
|
||||
|
||||
nbytes -= wbytes;
|
||||
bufptr += wbytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for possible data coming back from the printer...
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 0;
|
||||
FD_ZERO(&input);
|
||||
FD_SET(fd, &input);
|
||||
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
copies --;
|
||||
|
||||
if (fp != stdin)
|
||||
{
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
}
|
||||
|
||||
fputs("INFO: Connected to host, sending print job...\n", stderr);
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
/*
|
||||
* Grab the data coming back and spit it out to stderr...
|
||||
* Write the print data to the printer...
|
||||
*/
|
||||
|
||||
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
|
||||
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
|
||||
nbytes);
|
||||
tbytes += nbytes;
|
||||
bufptr = buffer;
|
||||
|
||||
while (nbytes > 0)
|
||||
{
|
||||
if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
}
|
||||
|
||||
nbytes -= wbytes;
|
||||
bufptr += wbytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for possible data coming back from the printer...
|
||||
*/
|
||||
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 0;
|
||||
FD_ZERO(&input);
|
||||
FD_SET(fd, &input);
|
||||
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
{
|
||||
/*
|
||||
* Grab the data coming back and spit it out to stderr...
|
||||
*/
|
||||
|
||||
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
|
||||
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
|
||||
nbytes);
|
||||
}
|
||||
else if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
}
|
||||
else if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
|
||||
/*
|
||||
* Close the socket connection...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the socket connection and input file and return...
|
||||
* Close the input file and return...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
|
||||
|
||||
+2
-1
@@ -411,7 +411,8 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
"attributes-natural-language", NULL,
|
||||
language->language);
|
||||
|
||||
sprintf(printer_uri, "ipp://localhost/printers/%s", printer);
|
||||
snprintf(printer_uri, sizeof(printer_uri),
|
||||
"ipp://localhost/printers/%s", printer);
|
||||
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||
"printer-uri", NULL, printer_uri);
|
||||
|
||||
|
||||
+5
-5
@@ -219,7 +219,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(resource, "ipp://localhost/printers/%s", dest);
|
||||
snprintf(resource, sizeof(resource), "ipp://localhost/printers/%s", dest);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
|
||||
NULL, resource);
|
||||
@@ -237,7 +237,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
*/
|
||||
|
||||
if (!longstatus)
|
||||
puts("Rank\tPri Owner Job Files Total Size");
|
||||
puts("Rank\tPri Owner Job Files Total Size");
|
||||
|
||||
jobcount = 0;
|
||||
|
||||
@@ -338,7 +338,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
}
|
||||
|
||||
printf("[job %03dlocalhost]\n", jobid);
|
||||
printf("\t%-33s%d bytes\n", jobname, jobsize);
|
||||
printf("\t%-32.32s %d bytes\n", jobname, jobsize);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -350,8 +350,8 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
rank ++;
|
||||
}
|
||||
|
||||
printf(" %-5d%-7.7s%-7d%-19s%d bytes\n", jobpriority, jobuser, jobid,
|
||||
jobname, jobsize);
|
||||
printf(" %-4d %-10.10s %-6d %-18.18s %d bytes\n", jobpriority, jobuser,
|
||||
jobid, jobname, jobsize);
|
||||
}
|
||||
if (attr == NULL)
|
||||
break;
|
||||
|
||||
+46
-4
@@ -23,7 +23,8 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Parse options and send files for printing.
|
||||
* main() - Parse options and send files for printing.
|
||||
* sighandler() - Signal catcher for when we print from stdin...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -35,6 +36,25 @@
|
||||
#include <cups/cups.h>
|
||||
|
||||
|
||||
#ifndef WIN32
|
||||
# include <signal.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local functions.
|
||||
*/
|
||||
|
||||
void sighandler(void);
|
||||
#endif /* !WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* Globals...
|
||||
*/
|
||||
|
||||
char tempfile[1024]; /* Temporary file for printing from stdin */
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Parse options and send files for printing.
|
||||
*/
|
||||
@@ -54,7 +74,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
cups_option_t *options; /* Options */
|
||||
int silent, /* Silent or verbose output? */
|
||||
deletefile; /* Delete file after print? */
|
||||
char tempfile[1024]; /* Temporary file for printing from stdin */
|
||||
char buffer[8192]; /* Copy buffer */
|
||||
FILE *temp; /* Temporary file pointer */
|
||||
|
||||
@@ -190,7 +209,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (job_id < 1)
|
||||
{
|
||||
fprintf(stderr, "lpr: unable to print file \'%s\'.\n", argv[i]);
|
||||
fprintf(stderr, "lpr: unable to print file \'%s\' - error code %x.\n",
|
||||
argv[i], cupsLastError());
|
||||
return (1);
|
||||
}
|
||||
else if (deletefile)
|
||||
@@ -209,6 +229,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
return (1);
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
signal(SIGTERM, sighandler);
|
||||
#endif /* !WIN32 */
|
||||
|
||||
temp = fopen(cupsTempFile(tempfile, sizeof(tempfile)), "w");
|
||||
|
||||
if (temp == NULL)
|
||||
@@ -238,7 +262,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (job_id < 1)
|
||||
{
|
||||
fputs("lpr: unable to print standard input.\n", stderr);
|
||||
fprintf(stderr, "lpr: unable to print standard input - error code %x.\n",
|
||||
cupsLastError());
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -247,6 +272,23 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
|
||||
|
||||
#ifndef WIN32
|
||||
/*
|
||||
* 'sighandler()' - Signal catcher for when we print from stdin...
|
||||
*/
|
||||
|
||||
void
|
||||
sighandler(void)
|
||||
{
|
||||
/*
|
||||
* Remove the temporary file we're using to print from stdin...
|
||||
*/
|
||||
|
||||
unlink(tempfile);
|
||||
}
|
||||
#endif /* !WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+21
-5
@@ -65,6 +65,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
job_id = 0;
|
||||
dest = cupsGetDefault();
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
|
||||
/*
|
||||
* Open a connection to the server...
|
||||
@@ -146,7 +147,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (dest)
|
||||
{
|
||||
sprintf(uri, "ipp://localhost/printers/%s", dest);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", dest);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||
"printer-uri", NULL, uri);
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
|
||||
@@ -159,6 +160,9 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
uri);
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requesting-user-name", NULL, cupsUser());
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
@@ -170,10 +174,22 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (response != NULL)
|
||||
{
|
||||
if (response->request.status.status_code == IPP_NOT_FOUND)
|
||||
fputs("lprm: Job or printer not found!\n", stderr);
|
||||
else if (response->request.status.status_code > IPP_OK_CONFLICT)
|
||||
fputs("lprm: Unable to cancel job(s)!\n", stderr);
|
||||
switch (response->request.status.status_code)
|
||||
{
|
||||
case IPP_NOT_FOUND :
|
||||
fputs("lprm: Job or printer not found!\n", stderr);
|
||||
break;
|
||||
case IPP_NOT_AUTHORIZED :
|
||||
fputs("lprm: Not authorized to lprm job(s)!\n", stderr);
|
||||
break;
|
||||
case IPP_FORBIDDEN :
|
||||
fprintf(stderr, "lprm: You don't own job ID %d!\n", job_id);
|
||||
break;
|
||||
default :
|
||||
if (response->request.status.status_code > IPP_OK_CONFLICT)
|
||||
fputs("lprm: Unable to lprm job(s)!\n", stderr);
|
||||
break;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
+13
-12
@@ -105,12 +105,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
|
||||
puts("<MAP NAME=\"navbar\">");
|
||||
#ifdef ESPPRINTPRO
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"jobs\" ALT=\"Current Jobs Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
#else
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
@@ -216,7 +216,7 @@ show_class_list(http_t *http, /* I - HTTP connection */
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/classes/")) != NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Loop through the classes returned in the list and display
|
||||
@@ -297,7 +297,7 @@ show_class_info(http_t *http,
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
sprintf(uri, "ipp://localhost/classes/%s", name);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/classes/%s", name);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
|
||||
@@ -305,7 +305,7 @@ show_class_info(http_t *http,
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, uri + 15)) == NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) == NULL)
|
||||
{
|
||||
puts("<P>Unable to communicate with CUPS server!");
|
||||
return;
|
||||
@@ -341,7 +341,8 @@ show_class_info(http_t *http,
|
||||
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
strcpy(uri, "http:");
|
||||
strcpy(uri + 5, strchr(attr->values[0].string.text, '/'));
|
||||
strncpy(uri + 5, strchr(attr->values[0].string.text, '/'), sizeof(uri) - 6);
|
||||
uri[sizeof(uri) - 1] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -397,11 +398,11 @@ show_class_info(http_t *http,
|
||||
"attributes-natural-language", NULL,
|
||||
language->language);
|
||||
|
||||
sprintf(uri, "ipp://localhost/printers/%s", name);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", name);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||
"printer-uri", NULL, uri);
|
||||
|
||||
jobs = cupsDoRequest(http, request, uri + 15);
|
||||
jobs = cupsDoRequest(http, request, "/");
|
||||
}
|
||||
else
|
||||
jobs = NULL;
|
||||
|
||||
+9
-10
@@ -105,12 +105,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
|
||||
puts("<MAP NAME=\"navbar\">");
|
||||
#ifdef ESPPRINTPRO
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"jobs\" ALT=\"Current Jobs Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
#else
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
@@ -217,7 +217,7 @@ show_job_list(http_t *http, /* I - HTTP connection */
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/jobs/")) != NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Do a table for the jobs...
|
||||
@@ -386,14 +386,14 @@ show_job_info(http_t *http, /* I - Server connection */
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
sprintf(uri, "ipp://localhost/jobs/%s", name);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%s", name);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, uri + 15)) == NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) == NULL)
|
||||
{
|
||||
puts("<P>Unable to communicate with CUPS server!");
|
||||
return;
|
||||
@@ -507,8 +507,7 @@ show_job_info(http_t *http, /* I - Server connection */
|
||||
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
{
|
||||
if (attr->group_tag != IPP_TAG_JOB &&
|
||||
attr->group_tag != IPP_TAG_EXTENSION)
|
||||
if (attr->group_tag != IPP_TAG_JOB)
|
||||
continue;
|
||||
|
||||
if (strcmp(attr->name, "job-uri") == 0 ||
|
||||
|
||||
+13
-12
@@ -105,12 +105,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
|
||||
puts("<MAP NAME=\"navbar\">");
|
||||
#ifdef ESPPRINTPRO
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"jobs\" ALT=\"Current Jobs Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,76,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
|
||||
#else
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
|
||||
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
|
||||
@@ -216,7 +216,7 @@ show_printer_list(http_t *http, /* I - HTTP connection */
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/printers/")) != NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Loop through the printers returned in the list and display
|
||||
@@ -297,7 +297,7 @@ show_printer_info(http_t *http,
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
sprintf(uri, "ipp://localhost/printers/%s", name);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", name);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
|
||||
@@ -305,7 +305,7 @@ show_printer_info(http_t *http,
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, uri + 15)) == NULL)
|
||||
if ((response = cupsDoRequest(http, request, "/")) == NULL)
|
||||
{
|
||||
puts("<P>Unable to communicate with CUPS server!");
|
||||
return;
|
||||
@@ -341,7 +341,8 @@ show_printer_info(http_t *http,
|
||||
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
strcpy(uri, "http:");
|
||||
strcpy(uri + 5, strchr(attr->values[0].string.text, '/'));
|
||||
strncpy(uri + 5, strchr(attr->values[0].string.text, '/'), sizeof(uri) - 6);
|
||||
uri[sizeof(uri) - 1] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -399,11 +400,11 @@ show_printer_info(http_t *http,
|
||||
"attributes-natural-language", NULL,
|
||||
language->language);
|
||||
|
||||
sprintf(uri, "ipp://localhost/printers/%s", name);
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", name);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||
"printer-uri", NULL, uri);
|
||||
|
||||
jobs = cupsDoRequest(http, request, uri + 15);
|
||||
jobs = cupsDoRequest(http, request, "/");
|
||||
}
|
||||
else
|
||||
jobs = NULL;
|
||||
|
||||
+5
-2
@@ -50,18 +50,21 @@ clean:
|
||||
install:
|
||||
-$(MKDIR) $(SERVERROOT)/conf
|
||||
for file in $(KEEP); do \
|
||||
if test -e $(SERVERROOT)/conf/$$file ; then \
|
||||
if test -r $(SERVERROOT)/conf/$$file ; then \
|
||||
$(CP) $$file $(SERVERROOT)/conf/$$file.N ; \
|
||||
else \
|
||||
$(CP) $$file $(SERVERROOT)/conf ; \
|
||||
fi ; \
|
||||
done
|
||||
for file in $(REPLACE); do \
|
||||
if test -e $(SERVERROOT)/conf/$$file ; then \
|
||||
if test -r $(SERVERROOT)/conf/$$file ; then \
|
||||
$(MV) $(SERVERROOT)/conf/$$file $(SERVERROOT)/conf/$$file.O ; \
|
||||
fi ; \
|
||||
$(CP) $$file $(SERVERROOT)/conf ; \
|
||||
done
|
||||
if test -r /etc/printcap -a ! -r /etc/printcap.O; then \
|
||||
$(CP) /etc/printcap /etc/printcap.O ; \
|
||||
fi
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
|
||||
+16
-1
@@ -28,7 +28,7 @@
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v1.0b9"
|
||||
#define CUPS_SVERSION "CUPS v1.0.3"
|
||||
|
||||
/*
|
||||
* Where are files stored?
|
||||
@@ -62,6 +62,14 @@
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
#undef HAVE_NDIR_H
|
||||
|
||||
/*
|
||||
* Do we have PAM stuff?
|
||||
*/
|
||||
|
||||
#ifndef HAVE_LIBPAM
|
||||
#define HAVE_LIBPAM 0
|
||||
#endif /* !HAVE_LIBPAM */
|
||||
|
||||
/*
|
||||
* Do we have <shadow.h>?
|
||||
*/
|
||||
@@ -82,6 +90,13 @@
|
||||
#undef HAVE_STRCASECMP
|
||||
#undef HAVE_STRNCASECMP
|
||||
|
||||
/*
|
||||
* Do we have the (v)snprintf() functions?
|
||||
*/
|
||||
|
||||
#undef HAVE_SNPRINTF
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/*
|
||||
* What signal functions to use?
|
||||
*/
|
||||
|
||||
+44
-19
@@ -42,11 +42,11 @@ AC_SUBST(OPTIM)
|
||||
PICFLAG=1
|
||||
CFLAGS="${CFLAGS:=}"
|
||||
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
|
||||
OPTIM="-g "
|
||||
fi])
|
||||
AC_ARG_ENABLE(shared, [ --disable-shared turn off shared libraries [default=no]])
|
||||
if test "$disable_shared" != "yes"; then
|
||||
AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [default=yes]])
|
||||
if test "$enable_shared" != "no"; then
|
||||
case "$uname" in
|
||||
SunOS* | UNIX_S*)
|
||||
LIBCUPS="libcups.so.1"
|
||||
@@ -58,7 +58,12 @@ if test "$disable_shared" != "yes"; then
|
||||
LIBCUPSIMAGE="libcupsimage.sl.1"
|
||||
DSO="ld -b -z +h \$@ -o"
|
||||
;;
|
||||
OSF1* | Linux* | FreeBSD*)
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
LIBCUPS="libcups.so.1"
|
||||
LIBCUPSIMAGE="libcupsimage.so.1"
|
||||
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
|
||||
;;
|
||||
OSF1* | Linux*)
|
||||
LIBCUPS="libcups.so.1"
|
||||
LIBCUPSIMAGE="libcupsimage.so.1"
|
||||
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
|
||||
@@ -83,6 +88,8 @@ else
|
||||
DSO=":"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
|
||||
|
||||
dnl Checks for programs...
|
||||
AC_PROG_AWK
|
||||
AC_PROG_CC
|
||||
@@ -120,12 +127,6 @@ fi
|
||||
AC_SUBST(CAT)
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(SED,sed)
|
||||
AC_PATH_PROG(SMBCLIENT,smbclient)
|
||||
if test "$SMBCLIENT" = ""; then
|
||||
echo "Looking for smbclient in standard locations..."
|
||||
AC_PATH_PROG(SMBCLIENT,smbclient,samba_not_detected,
|
||||
/usr/samba/bin:/usr/local/samba/bin:/usr/freeware/samba/bin:/opt/samba/bin)
|
||||
fi
|
||||
|
||||
dnl Architecture checks...
|
||||
AC_C_BIGENDIAN
|
||||
@@ -134,6 +135,10 @@ dnl Check for libraries...
|
||||
AC_CHECK_LIB(c,crypt,LIBS="$LIBS",AC_CHECK_LIB(crypt,crypt))
|
||||
AC_CHECK_HEADER(crypt.h, AC_DEFINE(HAVE_CRYPT_H))
|
||||
AC_CHECK_LIB(sec,getspent)
|
||||
if test "$enable_pam" != "no"; then
|
||||
AC_CHECK_LIB(dl,dlopen)
|
||||
AC_CHECK_LIB(pam,pam_start)
|
||||
fi
|
||||
|
||||
NETLIBS=""
|
||||
AC_SUBST(NETLIBS)
|
||||
@@ -150,6 +155,11 @@ else
|
||||
echo "Not using -lnsl since you are running IRIX."
|
||||
fi)
|
||||
|
||||
dnl Save the current libraries since we don't want the image libraries
|
||||
dnl included with every program...
|
||||
SAVELIBS="$LIBS"
|
||||
|
||||
dnl Check for image libraries...
|
||||
LIBJPEG=""
|
||||
LIBPNG=""
|
||||
LIBTIFF=""
|
||||
@@ -160,18 +170,31 @@ AC_SUBST(LIBPNG)
|
||||
AC_SUBST(LIBTIFF)
|
||||
AC_SUBST(LIBZ)
|
||||
|
||||
AC_CHECK_HEADER(jpeglib.h,
|
||||
AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
|
||||
AC_DEFINE(HAVE_LIBJPEG)
|
||||
LIBJPEG="-ljpeg")
|
||||
AC_CHECK_HEADER(png.h,
|
||||
LIBJPEG="-ljpeg"
|
||||
LIBS="$LIBS -ljpeg")
|
||||
|
||||
AC_CHECK_LIB(z, deflate,
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz")
|
||||
|
||||
dnl PNG library uses math library functions...
|
||||
AC_CHECK_LIB(m, pow)
|
||||
|
||||
dnl AC_CHECK_HEADER(png.h,
|
||||
AC_CHECK_LIB(png, png_read_info,
|
||||
AC_DEFINE(HAVE_LIBPNG)
|
||||
LIBPNG="-lpng")
|
||||
AC_CHECK_HEADER(tiff.h,
|
||||
|
||||
dnl AC_CHECK_HEADER(tiff.h,
|
||||
AC_CHECK_LIB(tiff, TIFFReadScanline,
|
||||
AC_DEFINE(HAVE_LIBTIFF)
|
||||
LIBTIFF="-ltiff")
|
||||
AC_CHECK_HEADER(zlib.h,
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz")
|
||||
|
||||
dnl Restore original LIBS settings...
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
@@ -182,6 +205,8 @@ dnl Checks for string functions.
|
||||
AC_CHECK_FUNCS(strdup)
|
||||
AC_CHECK_FUNCS(strcasecmp)
|
||||
AC_CHECK_FUNCS(strncasecmp)
|
||||
AC_CHECK_FUNCS(snprintf)
|
||||
AC_CHECK_FUNCS(vsnprintf)
|
||||
|
||||
dnl Checks for signal functions.
|
||||
AC_CHECK_FUNCS(sigset)
|
||||
@@ -192,9 +217,9 @@ AC_CHECK_FUNCS(waitpid)
|
||||
AC_CHECK_FUNCS(wait3)
|
||||
|
||||
dnl Update compiler options...
|
||||
if test -n "$GXX"; then
|
||||
if test -n "$GXX" -o $uname = Linux; then
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O2"
|
||||
OPTIM="-O2"
|
||||
fi
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-fPIC $OPTIM"
|
||||
|
||||
+319
@@ -0,0 +1,319 @@
|
||||
#
|
||||
# "$Id: cups.list 823 1999-12-15 21:16:02Z mike $"
|
||||
#
|
||||
# ESP Package Manager (EPM) file list for the Common UNIX Printing
|
||||
# System (CUPS).
|
||||
#
|
||||
# EPM can be found in the "epm" subdirectory of this distribution.
|
||||
# Please report problems and fixes to "epm@easysw.com".
|
||||
#
|
||||
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
# copyright law. Distribution and use rights are outlined in the file
|
||||
# "LICENSE.txt" which should have been included with this file. If this
|
||||
# file is missing or damaged please contact Easy Software Products
|
||||
# at:
|
||||
#
|
||||
# Attn: CUPS Licensing Information
|
||||
# Easy Software Products
|
||||
# 44141 Airport View Drive, Suite 204
|
||||
# Hollywood, Maryland 20636-3111 USA
|
||||
#
|
||||
# Voice: (301) 373-9603
|
||||
# EMail: cups-info@cups.org
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
|
||||
%product Common UNIX Printing System
|
||||
%copyright 1993-1999 by Easy Software Products, All Rights Reserved.
|
||||
%vendor Easy Software Products
|
||||
%license LICENSE.cups
|
||||
%readme README.cups
|
||||
%version 1.0.3
|
||||
%incompat printpro
|
||||
|
||||
%system all
|
||||
# Server files
|
||||
f 0555 root sys /var/cups/backend/ipp backend/ipp
|
||||
l 0555 root sys /var/cups/backend/http ipp
|
||||
f 4550 root sys /var/cups/backend/lpd backend/lpd
|
||||
f 0555 root sys /var/cups/backend/parallel backend/parallel
|
||||
f 0555 root sys /var/cups/backend/serial backend/serial
|
||||
f 0555 root sys /var/cups/backend/socket backend/socket
|
||||
f 0500 root sys /usr/sbin/cupsd scheduler/cupsd
|
||||
f 0555 root sys /var/cups/cgi-bin/classes.cgi cgi-bin/classes.cgi
|
||||
f 0555 root sys /var/cups/cgi-bin/jobs.cgi cgi-bin/jobs.cgi
|
||||
f 0555 root sys /var/cups/cgi-bin/printers.cgi cgi-bin/printers.cgi
|
||||
f 0555 root sys /var/cups/filter/pstoraster pstoraster/pstoraster
|
||||
l 0555 root sys /var/cups/filter/pdftops pstoraster
|
||||
f 0555 root sys /var/cups/filter/imagetops filter/imagetops
|
||||
f 0555 root sys /var/cups/filter/pstops filter/pstops
|
||||
f 0555 root sys /var/cups/filter/texttops filter/texttops
|
||||
f 0555 root sys /var/cups/filter/rastertohp filter/rastertohp
|
||||
f 0555 root sys /var/cups/filter/hpgltops filter/hpgltops
|
||||
f 0555 root sys /var/cups/filter/imagetoraster filter/imagetoraster
|
||||
|
||||
# Admin commands
|
||||
l 0555 root sys /usr/bin/disable /usr/sbin/accept
|
||||
l 0555 root sys /usr/bin/enable /usr/sbin/accept
|
||||
l 0555 root sys /usr/lib/accept /usr/sbin/accept
|
||||
l 0555 root sys /usr/lib/lpadmin /usr/sbin/lpadmin
|
||||
l 0555 root sys /usr/lib/reject accept
|
||||
f 0555 root sys /usr/sbin/accept systemv/accept
|
||||
f 0555 root sys /usr/sbin/esplicense license/esplicense
|
||||
f 0555 root sys /usr/sbin/lpadmin systemv/lpadmin
|
||||
f 0555 root sys /usr/sbin/lpc berkeley/lpc
|
||||
l 0555 root sys /usr/sbin/reject accept
|
||||
|
||||
# User commands
|
||||
f 0555 root sys /usr/bin/cancel systemv/cancel
|
||||
f 0555 root sys /usr/bin/lp systemv/lp
|
||||
f 0555 root sys /usr/bin/lpq berkeley/lpq
|
||||
f 0555 root sys /usr/bin/lpr berkeley/lpr
|
||||
f 0555 root sys /usr/bin/lprm berkeley/lprm
|
||||
f 0555 root sys /usr/bin/lpstat systemv/lpstat
|
||||
f 0555 root sys /usr/bin/lpwin gui/lpwin
|
||||
|
||||
# DSOs
|
||||
%system hpux
|
||||
f 0555 root sys /usr/lib/libcups.sl.1 cups/libcups.sl.1
|
||||
l 0555 root sys /usr/lib/libcups.sl libcups.sl.1
|
||||
f 0555 root sys /usr/lib/libcupsimage.sl.1 filter/libcupsimage.sl.1
|
||||
l 0555 root sys /usr/lib/libcupsimage.sl libcupsimage.sl.1
|
||||
%system irix-6.5
|
||||
f 0555 root sys /usr/lib32/libcups.so.1 cups/libcups.so.1
|
||||
l 0555 root sys /usr/lib32/libcups.so libcups.so.1
|
||||
f 0555 root sys /usr/lib32/libcupsimage.so.1 filter/libcupsimage.so.1
|
||||
l 0555 root sys /usr/lib32/libcupsimage.so libcupsimage.so.1
|
||||
%system !irix-6.5 !hpux
|
||||
f 0555 root sys /usr/lib/libcups.so.1 cups/libcups.so.1
|
||||
l 0555 root sys /usr/lib/libcups.so libcups.so.1
|
||||
f 0555 root sys /usr/lib/libcupsimage.so.1 filter/libcupsimage.so.1
|
||||
l 0555 root sys /usr/lib/libcupsimage.so libcupsimage.so.1
|
||||
%system all
|
||||
|
||||
# Directories
|
||||
d 0755 root sys /var/cups/interfaces
|
||||
d 0755 root sys /var/cups/logs
|
||||
d 0755 root sys /var/cups/ppd
|
||||
d 0755 root sys /var/cups/requests
|
||||
|
||||
# Data files
|
||||
f 0444 root sys /usr/lib/locale/C/cups_C locale/C/cups_C
|
||||
f 0444 root sys /usr/lib/locale/de/cups_de locale/de/cups_de
|
||||
f 0444 root sys /usr/lib/locale/en/cups_en locale/en/cups_en
|
||||
f 0444 root sys /usr/lib/locale/es/cups_es locale/es/cups_es
|
||||
f 0444 root sys /usr/lib/locale/fr/cups_fr locale/fr/cups_fr
|
||||
f 0444 root sys /usr/lib/locale/it/cups_it locale/it/cups_it
|
||||
f 0444 root sys /usr/share/cups/data/8859-1 data/8859-1
|
||||
f 0444 root sys /usr/share/cups/data/8859-14 data/8859-14
|
||||
f 0444 root sys /usr/share/cups/data/8859-15 data/8859-15
|
||||
f 0444 root sys /usr/share/cups/data/8859-2 data/8859-2
|
||||
f 0444 root sys /usr/share/cups/data/8859-3 data/8859-3
|
||||
f 0444 root sys /usr/share/cups/data/8859-4 data/8859-4
|
||||
f 0444 root sys /usr/share/cups/data/8859-5 data/8859-5
|
||||
f 0444 root sys /usr/share/cups/data/8859-6 data/8859-6
|
||||
f 0444 root sys /usr/share/cups/data/8859-7 data/8859-7
|
||||
f 0444 root sys /usr/share/cups/data/8859-8 data/8859-8
|
||||
f 0444 root sys /usr/share/cups/data/8859-9 data/8859-9
|
||||
f 0444 root sys /usr/share/cups/data/HPGLprolog data/HPGLprolog
|
||||
f 0444 root sys /usr/share/cups/data/psglyphs data/psglyphs
|
||||
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Book fonts/AvantGarde-Book
|
||||
f 0444 root sys /usr/share/cups/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
|
||||
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
|
||||
f 0444 root sys /usr/share/cups/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Bookman-Demi fonts/Bookman-Demi
|
||||
f 0444 root sys /usr/share/cups/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/Bookman-Light fonts/Bookman-Light
|
||||
f 0444 root sys /usr/share/cups/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/Courier fonts/Courier
|
||||
f 0444 root sys /usr/share/cups/fonts/Courier-Bold fonts/Courier-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Courier-Oblique fonts/Courier-Oblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica fonts/Helvetica
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Bold fonts/Helvetica-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
|
||||
f 0444 root sys /usr/share/cups/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
|
||||
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
|
||||
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
|
||||
f 0444 root sys /usr/share/cups/fonts/Palatino-Bold fonts/Palatino-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/Palatino-Italic fonts/Palatino-Italic
|
||||
f 0444 root sys /usr/share/cups/fonts/Palatino-Roman fonts/Palatino-Roman
|
||||
f 0444 root sys /usr/share/cups/fonts/Symbol fonts/Symbol
|
||||
f 0444 root sys /usr/share/cups/fonts/Times-Bold fonts/Times-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Times-BoldItalic fonts/Times-BoldItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/Times-Italic fonts/Times-Italic
|
||||
f 0444 root sys /usr/share/cups/fonts/Times-Roman fonts/Times-Roman
|
||||
f 0444 root sys /usr/share/cups/fonts/Utopia-Bold fonts/Utopia-Bold
|
||||
f 0444 root sys /usr/share/cups/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/Utopia-Italic fonts/Utopia-Italic
|
||||
f 0444 root sys /usr/share/cups/fonts/Utopia-Regular fonts/Utopia-Regular
|
||||
f 0444 root sys /usr/share/cups/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
|
||||
f 0444 root sys /usr/share/cups/fonts/ZapfDingbats fonts/ZapfDingbats
|
||||
f 0444 root sys /usr/share/cups/pstoraster/Fontmap pstoraster/Fontmap
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_l2img.ps pstoraster/gs_l2img.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pfbtogs.ps pstoraster/pfbtogs.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf_e.ps pstoraster/gs_pdf_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf.ps pstoraster/gs_pdf.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_sec.ps pstoraster/pdf_sec.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_res.ps pstoraster/gs_res.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_base.ps pstoraster/pdf_base.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_2ps.ps pstoraster/pdf_2ps.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_init.ps pstoraster/gs_init.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_draw.ps pstoraster/pdf_draw.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_font.ps pstoraster/pdf_font.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_pdfwr.ps pstoraster/gs_pdfwr.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
|
||||
f 0444 root sys /usr/share/cups/pstoraster/pdf_main.ps pstoraster/pdf_main.ps
|
||||
f 0444 root sys /usr/share/cups/model/deskjet.ppd ppd/deskjet.ppd
|
||||
f 0444 root sys /usr/share/cups/model/laserjet.ppd ppd/laserjet.ppd
|
||||
|
||||
# Config files
|
||||
c 0644 root sys /var/cups/conf/classes.conf conf/classes.conf
|
||||
c 0644 root sys /var/cups/conf/cupsd.conf conf/cupsd.conf
|
||||
f 0644 root sys /var/cups/conf/mime.convs conf/mime.convs
|
||||
f 0644 root sys /var/cups/conf/mime.types conf/mime.types
|
||||
c 0644 root sys /var/cups/conf/printers.conf conf/printers.conf
|
||||
|
||||
# Dummy printcap file for Digital UNIX and Linux...
|
||||
%system dunix linux
|
||||
%format !rpm
|
||||
f 0644 root sys /etc/printcap conf/printcap
|
||||
%system all
|
||||
%format all
|
||||
|
||||
# Developer files
|
||||
f 0444 root sys /usr/include/cups/cups.h cups/cups.h
|
||||
f 0444 root sys /usr/include/cups/http.h cups/http.h
|
||||
f 0444 root sys /usr/include/cups/ipp.h cups/ipp.h
|
||||
f 0444 root sys /usr/include/cups/language.h cups/language.h
|
||||
f 0444 root sys /usr/include/cups/mime.h cups/mime.h
|
||||
f 0444 root sys /usr/include/cups/ppd.h cups/ppd.h
|
||||
f 0444 root sys /usr/include/cups/raster.h cups/raster.h
|
||||
|
||||
%system irix-6.5
|
||||
f 0444 root sys /usr/lib32/libcups.a cups/libcups.a
|
||||
%system !irix-6.5
|
||||
f 0444 root sys /usr/lib/libcups.a cups/libcups.a
|
||||
%system all
|
||||
|
||||
# Documentation files
|
||||
f 0444 root sys /usr/share/cups/doc/cmp.html doc/cmp.html
|
||||
f 0444 root sys /usr/share/cups/doc/cmp.pdf doc/cmp.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/cupsdoc.css doc/cupsdoc.css
|
||||
f 0444 root sys /usr/share/cups/doc/cups.css doc/cups.css
|
||||
f 0444 root sys /usr/share/cups/doc/documentation.html doc/documentation.html
|
||||
f 0444 root sys /usr/share/cups/doc/idd.html doc/idd.html
|
||||
f 0444 root sys /usr/share/cups/doc/idd.pdf doc/idd.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/images/classes.gif doc/images/classes.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/cups-bar.gif doc/images/cups-bar.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/cups-large.gif doc/images/cups-large.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/cups-medium.gif doc/images/cups-medium.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/cups-small.gif doc/images/cups-small.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/logo.gif doc/images/logo.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/navbar.gif doc/images/navbar.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/printer-idle.gif doc/images/printer-idle.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/printer-processing.gif doc/images/printer-processing.gif
|
||||
f 0444 root sys /usr/share/cups/doc/images/printer-stopped.gif doc/images/printer-stopped.gif
|
||||
f 0444 root sys /usr/share/cups/doc/index.html doc/index.html
|
||||
f 0444 root sys /usr/share/cups/doc/overview.html doc/overview.html
|
||||
f 0444 root sys /usr/share/cups/doc/overview.pdf doc/overview.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/sam.html doc/sam.html
|
||||
f 0444 root sys /usr/share/cups/doc/sam.pdf doc/sam.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/sdd.html doc/sdd.html
|
||||
f 0444 root sys /usr/share/cups/doc/sdd.pdf doc/sdd.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/spm.html doc/spm.html
|
||||
f 0444 root sys /usr/share/cups/doc/spm.pdf doc/spm.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/ssr.html doc/ssr.html
|
||||
f 0444 root sys /usr/share/cups/doc/ssr.pdf doc/ssr.pdf
|
||||
f 0444 root sys /usr/share/cups/doc/sum.html doc/sum.html
|
||||
f 0444 root sys /usr/share/cups/doc/sum.pdf doc/sum.pdf
|
||||
|
||||
# Man pages
|
||||
%system irix
|
||||
f 0444 root sys /usr/share/catman/a_man/cat1/accept.z man/accept.z
|
||||
l 0444 root sys /usr/share/catman/a_man/cat1/reject.z accept.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/backend.z man/backend.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat5/classes.conf.z man/classes.conf.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat5/cupsd.conf.z man/cupsd.conf.z
|
||||
f 0444 root sys /usr/share/catman/a_man/cat1/cupsd.z man/cupsd.z
|
||||
f 0444 root sys /usr/share/catman/a_man/cat1/enable.z man/enable.z
|
||||
l 0444 root sys /usr/share/catman/a_man/cat1/disable.z enable.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/filter.z man/filter.z
|
||||
f 0444 root sys /usr/share/catman/a_man/cat1/lpadmin.z man/lpadmin.z
|
||||
f 0444 root sys /usr/share/catman/a_man/cat1/lpc.z man/lpc.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/lpq.z man/lpq.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/lprm.z man/lprm.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/lpr.z man/lpr.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/lpstat.z man/lpstat.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat1/lp.z man/lp.z
|
||||
l 0444 root sys /usr/share/catman/u_man/cat1/cancel.z lp.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat5/mime.convs.z man/mime.convs.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat5/mime.types.z man/mime.types.z
|
||||
f 0444 root sys /usr/share/catman/u_man/cat5/printers.conf.z man/printers.conf.z
|
||||
%system !irix
|
||||
f 0444 root sys /usr/man/man8/accept.8 man/accept.8
|
||||
l 0444 root sys /usr/man/man8/reject.8 accept.8
|
||||
f 0444 root sys /usr/man/man1/backend.1 man/backend.1
|
||||
f 0444 root sys /usr/man/man1/classes.conf.5 man/classes.conf.5
|
||||
f 0444 root sys /usr/man/man8/cupsd.8 man/cupsd.8
|
||||
f 0444 root sys /usr/man/man5/cupsd.conf.5 man/cupsd.conf.5
|
||||
f 0444 root sys /usr/man/man8/enable.8 man/enable.8
|
||||
l 0444 root sys /usr/man/man8/disable.8 enable.8
|
||||
f 0444 root sys /usr/man/man1/filter.1 man/filter.1
|
||||
f 0444 root sys /usr/man/man8/lpadmin.8 man/lpadmin.8
|
||||
f 0444 root sys /usr/man/man8/lpc.8 man/lpc.8
|
||||
f 0444 root sys /usr/man/man1/lpq.1 man/lpq.1
|
||||
f 0444 root sys /usr/man/man1/lprm.1 man/lprm.1
|
||||
f 0444 root sys /usr/man/man1/lpr.1 man/lpr.1
|
||||
f 0444 root sys /usr/man/man1/lpstat.1 man/lpstat.1
|
||||
f 0444 root sys /usr/man/man1/lp.1 man/lp.1
|
||||
l 0444 root sys /usr/man/man1/cancel.1 lp.1
|
||||
f 0444 root sys /usr/man/man5/mime.convs.5 man/mime.convs.5
|
||||
f 0444 root sys /usr/man/man5/mime.types.5 man/mime.types.5
|
||||
f 0444 root sys /usr/man/man5/printers.conf.5 man/printers.conf.5
|
||||
|
||||
# Startup script
|
||||
%system all
|
||||
i 0555 root sys cups cups.sh
|
||||
|
||||
#
|
||||
# End of "$Id: cups.list 823 1999-12-15 21:16:02Z mike $".
|
||||
#
|
||||
@@ -64,6 +64,11 @@ case "`uname`" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Change to the root directory first, in case we are being run from a
|
||||
# CD-ROM installation script...
|
||||
|
||||
cd /
|
||||
|
||||
# Start or stop the CUPS server based upon the first argument to the script.
|
||||
case $1 in
|
||||
start | restart | reload)
|
||||
|
||||
+25
-200
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: cups.spec 714 1999-10-01 14:40:53Z mike $"
|
||||
# "$Id: cups.spec 775 1999-11-04 13:35:01Z mike $"
|
||||
#
|
||||
# RPM "spec" file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
@@ -26,11 +26,11 @@
|
||||
|
||||
Summary: Common Unix Printing System
|
||||
Name: cups
|
||||
Version: 1.0
|
||||
Version: 1.0.2
|
||||
Release: 0
|
||||
Copyright: GPL
|
||||
Group: System Environment/Daemons
|
||||
Source: ftp://ftp.easysw.com/pub/cups/beta/cups-1.0-source.tar.gz
|
||||
Source: ftp://ftp.easysw.com/pub/cups/1.0.2/cups-1.0.2-source.tar.gz
|
||||
Url: http://www.cups.org
|
||||
Packager: Michael Sweet <mike@easysw.com>
|
||||
Vendor: Easy Software Products
|
||||
@@ -80,16 +80,22 @@ mkdir -p $RPM_BUILD_ROOT/usr/share/locale
|
||||
mkdir -p $RPM_BUILD_ROOT/var/cups
|
||||
mkdir -p $RPM_BUILD_ROOT/var/cups/conf
|
||||
mkdir -p $RPM_BUILD_ROOT/var/cups/logs
|
||||
mkdir -p $RPM_BUILD_ROOT/var/logs
|
||||
mkdir -p $RPM_BUILD_ROOT/var/log
|
||||
|
||||
ln -sf /var/cups/logs $RPM_BUILD_ROOT/var/logs/cups
|
||||
ln -sf /var/cups/logs $RPM_BUILD_ROOT/var/log/cups
|
||||
ln -sf /var/cups/conf $RPM_BUILD_ROOT/etc/cups
|
||||
|
||||
make prefix=$RPM_BUILD_ROOT/usr DATADIR=$RPM_BUILD_ROOT/usr/share/cups LOCALEDIR=$RPM_BUILD_ROOT/usr/share/locale SERVERROOT=$RPM_BUILD_ROOT/var/cups install
|
||||
|
||||
$RPM_BUILD_ROOT/etc/rc.d/init.d/cups
|
||||
install -m 755 -o root -g root cups.sh $RPM_BUILD_ROOT/etc/rc.d/init.d/cups
|
||||
|
||||
ln -sf /usr/sbin/accept $RPM_BUILD_ROOT/usr/bin/disable
|
||||
ln -sf /usr/sbin/accept $RPM_BUILD_ROOT/usr/bin/enable
|
||||
ln -sf /usr/sbin/accept $RPM_BUILD_ROOT/usr/lib/accept
|
||||
ln -sf /usr/sbin/accept $RPM_BUILD_ROOT/usr/lib/reject
|
||||
ln -sf /usr/sbin/accept $RPM_BUILD_ROOT/usr/sbin/reject
|
||||
ln -sf /usr/sbin/lpadmin $RPM_BUILD_ROOT/usr/lib/lpadmin
|
||||
|
||||
%post
|
||||
/sbin/chkconfig --add cups
|
||||
|
||||
@@ -101,209 +107,28 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
/etc/rc.d/init.d/cups
|
||||
%config /var/cups/conf/classes.conf
|
||||
%config /var/cups/conf/cupsd.conf
|
||||
%config /var/cups/conf/mime.convs
|
||||
%config /var/cups/conf/mime.types
|
||||
%config /var/cups/conf/printers.conf
|
||||
/usr/bin/lpr
|
||||
/usr/bin/lprm
|
||||
/usr/bin/disable
|
||||
/usr/bin/enable
|
||||
/usr/bin/cancel
|
||||
/usr/bin/lp
|
||||
/usr/bin/lpstat
|
||||
/usr/lib/accept
|
||||
/usr/lib/libcups.so.1
|
||||
/usr/lib/libcupsimage.so.1
|
||||
/usr/lib/lpadmin
|
||||
/usr/lib/reject
|
||||
/usr/man/man1/backend.1
|
||||
/usr/man/man1/filter.1
|
||||
/usr/man/man1/lprm.1
|
||||
/usr/man/man1/lpr.1
|
||||
/usr/man/man1/lpstat.1
|
||||
/usr/man/man1/lp.1
|
||||
/usr/man/man1/cancel.1
|
||||
/usr/man/man5/classes.conf.5
|
||||
/usr/man/man5/cupsd.conf.5
|
||||
/usr/man/man5/mime.convs.5
|
||||
/usr/man/man5/mime.types.5
|
||||
/usr/man/man5/printers.conf.5
|
||||
/usr/man/man8/accept.8
|
||||
/usr/man/man8/cupsd.8
|
||||
/usr/man/man8/enable.8
|
||||
/usr/man/man8/lpadmin.8
|
||||
/usr/man/man8/lpc.8
|
||||
/usr/man/man8/reject.8
|
||||
/usr/man/man8/disable.8
|
||||
/usr/sbin/accept
|
||||
/usr/sbin/cupsd
|
||||
/usr/sbin/lpadmin
|
||||
/usr/sbin/lpc
|
||||
/usr/sbin/reject
|
||||
%config /var/cups/conf/*
|
||||
/usr/bin/*
|
||||
/usr/lib/*
|
||||
/usr/man/*
|
||||
/usr/sbin/*
|
||||
%dir /usr/share/cups
|
||||
/usr/share/cups/data/8859-1
|
||||
/usr/share/cups/data/8859-14
|
||||
/usr/share/cups/data/8859-15
|
||||
/usr/share/cups/data/8859-2
|
||||
/usr/share/cups/data/8859-3
|
||||
/usr/share/cups/data/8859-4
|
||||
/usr/share/cups/data/8859-5
|
||||
/usr/share/cups/data/8859-6
|
||||
/usr/share/cups/data/8859-7
|
||||
/usr/share/cups/data/8859-8
|
||||
/usr/share/cups/data/8859-9
|
||||
/usr/share/cups/data/HPGLprolog
|
||||
/usr/share/cups/data/psglyphs
|
||||
/usr/share/cups/doc/cmp.html
|
||||
/usr/share/cups/doc/cmp.pdf
|
||||
/usr/share/cups/doc/cups.css
|
||||
/usr/share/cups/doc/cupsdoc.css
|
||||
/usr/share/cups/doc/documentation.html
|
||||
/usr/share/cups/doc/idd.html
|
||||
/usr/share/cups/doc/idd.pdf
|
||||
/usr/share/cups/doc/images/classes.gif
|
||||
/usr/share/cups/doc/images/cups-block-diagram.gif
|
||||
/usr/share/cups/doc/images/cups-large.gif
|
||||
/usr/share/cups/doc/images/cups-medium.gif
|
||||
/usr/share/cups/doc/images/cups-small.gif
|
||||
/usr/share/cups/doc/images/logo.gif
|
||||
/usr/share/cups/doc/images/navbar.gif
|
||||
/usr/share/cups/doc/images/printer-idle.gif
|
||||
/usr/share/cups/doc/images/printer-processing.gif
|
||||
/usr/share/cups/doc/images/printer-stopped.gif
|
||||
/usr/share/cups/doc/index.html
|
||||
/usr/share/cups/doc/overview.html
|
||||
/usr/share/cups/doc/overview.pdf
|
||||
/usr/share/cups/doc/sam.html
|
||||
/usr/share/cups/doc/sam.pdf
|
||||
/usr/share/cups/doc/sdd.html
|
||||
/usr/share/cups/doc/sdd.pdf
|
||||
/usr/share/cups/doc/ssr.html
|
||||
/usr/share/cups/doc/ssr.pdf
|
||||
/usr/share/cups/doc/stp.html
|
||||
/usr/share/cups/doc/stp.pdf
|
||||
/usr/share/cups/doc/sum.html
|
||||
/usr/share/cups/doc/sum.pdf
|
||||
/usr/share/cups/doc/svd.html
|
||||
/usr/share/cups/doc/svd.pdf
|
||||
/usr/share/cups/fonts/AvantGarde-Book
|
||||
/usr/share/cups/fonts/AvantGarde-BookOblique
|
||||
/usr/share/cups/fonts/AvantGarde-Demi
|
||||
/usr/share/cups/fonts/AvantGarde-DemiOblique
|
||||
/usr/share/cups/fonts/Bookman-Demi
|
||||
/usr/share/cups/fonts/Bookman-DemiItalic
|
||||
/usr/share/cups/fonts/Bookman-Light
|
||||
/usr/share/cups/fonts/Bookman-LightItalic
|
||||
/usr/share/cups/fonts/Courier
|
||||
/usr/share/cups/fonts/Courier-Bold
|
||||
/usr/share/cups/fonts/Courier-BoldOblique
|
||||
/usr/share/cups/fonts/Courier-Oblique
|
||||
/usr/share/cups/fonts/Helvetica
|
||||
/usr/share/cups/fonts/Helvetica-Bold
|
||||
/usr/share/cups/fonts/Helvetica-BoldOblique
|
||||
/usr/share/cups/fonts/Helvetica-Narrow
|
||||
/usr/share/cups/fonts/Helvetica-Narrow-Bold
|
||||
/usr/share/cups/fonts/Helvetica-Narrow-BoldOblique
|
||||
/usr/share/cups/fonts/Helvetica-Narrow-Oblique
|
||||
/usr/share/cups/fonts/Helvetica-Oblique
|
||||
/usr/share/cups/fonts/NewCenturySchlbk-Bold
|
||||
/usr/share/cups/fonts/NewCenturySchlbk-BoldItalic
|
||||
/usr/share/cups/fonts/NewCenturySchlbk-Italic
|
||||
/usr/share/cups/fonts/NewCenturySchlbk-Roman
|
||||
/usr/share/cups/fonts/Palatino-Bold
|
||||
/usr/share/cups/fonts/Palatino-BoldItalic
|
||||
/usr/share/cups/fonts/Palatino-Italic
|
||||
/usr/share/cups/fonts/Palatino-Roman
|
||||
/usr/share/cups/fonts/Symbol
|
||||
/usr/share/cups/fonts/Times-Bold
|
||||
/usr/share/cups/fonts/Times-BoldItalic
|
||||
/usr/share/cups/fonts/Times-Italic
|
||||
/usr/share/cups/fonts/Times-Roman
|
||||
/usr/share/cups/fonts/Utopia-Bold
|
||||
/usr/share/cups/fonts/Utopia-BoldItalic
|
||||
/usr/share/cups/fonts/Utopia-Italic
|
||||
/usr/share/cups/fonts/Utopia-Regular
|
||||
/usr/share/cups/fonts/ZapfChancery-MediumItalic
|
||||
/usr/share/cups/fonts/ZapfDingbats
|
||||
/usr/share/cups/model/deskjet.ppd
|
||||
/usr/share/cups/model/laserjet.ppd
|
||||
/usr/share/cups/pstoraster/Fontmap
|
||||
/usr/share/cups/pstoraster/gs_btokn.ps
|
||||
/usr/share/cups/pstoraster/gs_ccfnt.ps
|
||||
/usr/share/cups/pstoraster/gs_cidfn.ps
|
||||
/usr/share/cups/pstoraster/gs_cmap.ps
|
||||
/usr/share/cups/pstoraster/gs_cmdl.ps
|
||||
/usr/share/cups/pstoraster/gs_dbt_e.ps
|
||||
/usr/share/cups/pstoraster/gs_diskf.ps
|
||||
/usr/share/cups/pstoraster/gs_dps1.ps
|
||||
/usr/share/cups/pstoraster/gs_fform.ps
|
||||
/usr/share/cups/pstoraster/gs_fonts.ps
|
||||
/usr/share/cups/pstoraster/gs_init.ps
|
||||
/usr/share/cups/pstoraster/gs_iso_e.ps
|
||||
/usr/share/cups/pstoraster/gs_kanji.ps
|
||||
/usr/share/cups/pstoraster/gs_ksb_e.ps
|
||||
/usr/share/cups/pstoraster/gs_l2img.ps
|
||||
/usr/share/cups/pstoraster/gs_lev2.ps
|
||||
/usr/share/cups/pstoraster/gs_mex_e.ps
|
||||
/usr/share/cups/pstoraster/gs_mro_e.ps
|
||||
/usr/share/cups/pstoraster/gs_pdf.ps
|
||||
/usr/share/cups/pstoraster/gs_pdf_e.ps
|
||||
/usr/share/cups/pstoraster/gs_pdfwr.ps
|
||||
/usr/share/cups/pstoraster/gs_pfile.ps
|
||||
/usr/share/cups/pstoraster/gs_res.ps
|
||||
/usr/share/cups/pstoraster/gs_setpd.ps
|
||||
/usr/share/cups/pstoraster/gs_statd.ps
|
||||
/usr/share/cups/pstoraster/gs_std_e.ps
|
||||
/usr/share/cups/pstoraster/gs_sym_e.ps
|
||||
/usr/share/cups/pstoraster/gs_ttf.ps
|
||||
/usr/share/cups/pstoraster/gs_typ42.ps
|
||||
/usr/share/cups/pstoraster/gs_type1.ps
|
||||
/usr/share/cups/pstoraster/gs_wan_e.ps
|
||||
/usr/share/cups/pstoraster/gs_wl1_e.ps
|
||||
/usr/share/cups/pstoraster/gs_wl2_e.ps
|
||||
/usr/share/cups/pstoraster/gs_wl5_e.ps
|
||||
/usr/share/cups/pstoraster/pdf_2ps.ps
|
||||
/usr/share/cups/pstoraster/pdf_base.ps
|
||||
/usr/share/cups/pstoraster/pdf_draw.ps
|
||||
/usr/share/cups/pstoraster/pdf_font.ps
|
||||
/usr/share/cups/pstoraster/pdf_main.ps
|
||||
/usr/share/cups/pstoraster/pdf_sec.ps
|
||||
/usr/share/cups/pstoraster/pfbtogs.ps
|
||||
/usr/share/cups/*
|
||||
%dir /var/cups
|
||||
/var/cups/backend/http
|
||||
/var/cups/backend/ipp
|
||||
/var/cups/backend/lpd
|
||||
/var/cups/backend/parallel
|
||||
/var/cups/backend/serial
|
||||
/var/cups/backend/socket
|
||||
/var/cups/cgi-bin/classes.cgi
|
||||
/var/cups/cgi-bin/jobs.cgi
|
||||
/var/cups/cgi-bin/printers.cgi
|
||||
/var/cups/conf
|
||||
/var/cups/filter/hpgltops
|
||||
/var/cups/filter/imagetops
|
||||
/var/cups/filter/imagetoraster
|
||||
/var/cups/filter/pstops
|
||||
/var/cups/filter/pstoraster
|
||||
/var/cups/filter/rastertohp
|
||||
/var/cups/filter/texttops
|
||||
/var/cups/backend/*
|
||||
/var/cups/cgi-bin/*
|
||||
/var/cups/filter/*
|
||||
%dir /var/cups/interfaces
|
||||
%dir /var/cups/logs
|
||||
%dir /var/cups/ppd
|
||||
%dir /var/cups/requests
|
||||
%dir /etc/cups
|
||||
%dir /var/log/cups
|
||||
|
||||
%files devel
|
||||
%dir /usr/include/cups
|
||||
/usr/include/cups/cups.h
|
||||
/usr/include/cups/http.h
|
||||
/usr/include/cups/ipp.h
|
||||
/usr/include/cups/language.h
|
||||
/usr/include/cups/mime.h
|
||||
/usr/include/cups/ppd.h
|
||||
/usr/include/cups/raster.h
|
||||
/usr/include/cups/*
|
||||
|
||||
#
|
||||
# End of "$Id: cups.spec 714 1999-10-01 14:40:53Z mike $".
|
||||
# End of "$Id: cups.spec 775 1999-11-04 13:35:01Z mike $".
|
||||
#
|
||||
|
||||
+4
-2
@@ -29,8 +29,8 @@ include ../Makedefs
|
||||
#
|
||||
|
||||
LIBOBJS = emit.o filter.o http.o ipp.o language.o mark.o mime.o \
|
||||
options.o page.o ppd.o raster.o string.o type.o usersys.o \
|
||||
util.o
|
||||
options.o page.o ppd.o raster.o snprintf.o string.o type.o \
|
||||
usersys.o util.o
|
||||
OBJS = $(LIBOBJS) testhttp.o testmime.o testppd.o
|
||||
|
||||
#
|
||||
@@ -68,6 +68,7 @@ install: all
|
||||
-$(MKDIR) $(LIBDIR)
|
||||
$(CP) $(LIBCUPS) $(LIBDIR)
|
||||
if test $(LIBCUPS) != "libcups.a"; then \
|
||||
$(RM) `basename $(LIBCUPS) .1`; \
|
||||
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .1`; \
|
||||
fi
|
||||
|
||||
@@ -110,6 +111,7 @@ options.o: cups.h ../config.h ../Makedefs
|
||||
page.o: ppd.h ../config.h ../Makedefs
|
||||
ppd.o: language.h ppd.h ../config.h ../Makedefs
|
||||
raster.o: raster.h ../config.h ../Makedefs
|
||||
snprintf.o: string.h ../config.h ../Makedefs
|
||||
string.o: string.h ../config.h ../Makedefs
|
||||
type.o: mime.h ../config.h ../Makedefs
|
||||
usersys.o: cups.h ../config.h ../Makedefs
|
||||
|
||||
@@ -114,6 +114,7 @@ extern int cupsGetClasses(char ***classes);
|
||||
extern const char *cupsGetDefault(void);
|
||||
extern const char *cupsGetPPD(const char *printer);
|
||||
extern int cupsGetPrinters(char ***printers);
|
||||
extern ipp_status_t cupsLastError(void);
|
||||
extern int cupsPrintFile(const char *printer, const char *filename,
|
||||
const char *title, int num_options,
|
||||
cups_option_t *options);
|
||||
|
||||
+2
-2
@@ -86,8 +86,8 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (strcmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
|
||||
strcmp(choices[i]->choice, "Custom") == 0)
|
||||
if (strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
|
||||
strcasecmp(choices[i]->choice, "Custom") == 0)
|
||||
{
|
||||
/*
|
||||
* Variable size; write out standard size options (this should
|
||||
|
||||
+4
-2
@@ -88,7 +88,8 @@ mimeAddFilter(mime_t *mime, /* I - MIME database */
|
||||
if (temp->cost > cost)
|
||||
{
|
||||
temp->cost = cost;
|
||||
strcpy(temp->filter, filter);
|
||||
strncpy(temp->filter, filter, sizeof(temp->filter) - 1);
|
||||
temp->filter[sizeof(temp->filter) - 1] = '\0';
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -116,7 +117,8 @@ mimeAddFilter(mime_t *mime, /* I - MIME database */
|
||||
temp->src = src;
|
||||
temp->dst = dst;
|
||||
temp->cost = cost;
|
||||
strcpy(temp->filter, filter);
|
||||
strncpy(temp->filter, filter, sizeof(temp->filter) - 1);
|
||||
temp->filter[sizeof(temp->filter) - 1] = '\0';
|
||||
|
||||
if (mime->num_filters > 1)
|
||||
qsort(mime->filters, mime->num_filters, sizeof(mime_filter_t),
|
||||
|
||||
+66
-42
@@ -284,8 +284,7 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
* Copy the hostname and port and then "reconnect"...
|
||||
*/
|
||||
|
||||
strcpy(http->hostname, host);
|
||||
memset((char *)&(http->hostaddr), 0, sizeof(http->hostaddr));
|
||||
strncpy(http->hostname, host, sizeof(http->hostname) - 1);
|
||||
memcpy((char *)&(http->hostaddr.sin_addr), hostaddr->h_addr, hostaddr->h_length);
|
||||
http->hostaddr.sin_family = hostaddr->h_addrtype;
|
||||
#ifdef WIN32
|
||||
@@ -381,11 +380,11 @@ httpReconnect(http_t *http) /* I - HTTP data */
|
||||
|
||||
void
|
||||
httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
char *method, /* O - Method (http, https, etc.) */
|
||||
char *username, /* O - Username */
|
||||
char *host, /* O - Hostname */
|
||||
char *method, /* O - Method [32] (http, https, etc.) */
|
||||
char *username, /* O - Username [32] */
|
||||
char *host, /* O - Hostname [32] */
|
||||
int *port, /* O - Port number to use */
|
||||
char *resource) /* O - Resource/filename */
|
||||
char *resource) /* O - Resource/filename [1024] */
|
||||
{
|
||||
char *ptr; /* Pointer into string... */
|
||||
|
||||
@@ -415,7 +414,8 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
{
|
||||
if ((ptr = strchr(host, '/')) != NULL)
|
||||
{
|
||||
strcpy(resource, ptr);
|
||||
strncpy(resource, ptr, HTTP_MAX_URI - 1);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
*ptr = '\0';
|
||||
}
|
||||
else
|
||||
@@ -430,7 +430,10 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
*port = strtol(uri, (char **)&uri, 10);
|
||||
|
||||
if (*uri == '/')
|
||||
strcpy(resource, uri);
|
||||
{
|
||||
strncpy(resource, uri, HTTP_MAX_URI - 1);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
}
|
||||
else
|
||||
*port = 0;
|
||||
@@ -440,7 +443,10 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
return;
|
||||
}
|
||||
else
|
||||
strcpy(method, host);
|
||||
{
|
||||
strncpy(method, host, 31);
|
||||
method[31] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* If the method starts with less than 2 slashes then it is a local resource...
|
||||
@@ -448,7 +454,9 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
|
||||
if (strncmp(uri, "//", 2) != 0)
|
||||
{
|
||||
strcpy(resource, uri);
|
||||
strncpy(resource, uri, 1023);
|
||||
resource[1023] = '\0';
|
||||
|
||||
username[0] = '\0';
|
||||
host[0] = '\0';
|
||||
*port = 0;
|
||||
@@ -463,7 +471,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
uri ++;
|
||||
|
||||
ptr = host;
|
||||
while (*uri != ':' && *uri != '@' && *uri != '/' && *uri != '\0')
|
||||
while (!(*uri == ':' && isdigit(uri[1])) && *uri != '@' && *uri != '/' && *uri != '\0')
|
||||
*ptr ++ = *uri ++;
|
||||
|
||||
*ptr = '\0';
|
||||
@@ -474,9 +482,11 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
* Got a username...
|
||||
*/
|
||||
|
||||
strcpy(username, host);
|
||||
strncpy(username, host, 31);
|
||||
username[31] = '\0';
|
||||
|
||||
ptr = host;
|
||||
uri ++;
|
||||
while (*uri != ':' && *uri != '/' && *uri != '\0')
|
||||
*ptr ++ = *uri ++;
|
||||
|
||||
@@ -532,7 +542,8 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
* The remaining portion is the resource string...
|
||||
*/
|
||||
|
||||
strcpy(resource, uri);
|
||||
strncpy(resource, uri, HTTP_MAX_URI - 1);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
|
||||
|
||||
@@ -676,12 +687,15 @@ httpRead(http_t *http, /* I - HTTP data */
|
||||
return (0);
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
|
||||
http->data_remaining <= 0 &&
|
||||
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
|
||||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
|
||||
http->data_remaining <= 0)
|
||||
{
|
||||
DEBUG_puts("httpRead: Getting chunk length...");
|
||||
|
||||
if (httpGets(len, sizeof(len), http) == NULL)
|
||||
{
|
||||
DEBUG_puts("httpRead: Could not get length!");
|
||||
return (0);
|
||||
}
|
||||
|
||||
http->data_remaining = strtol(len, NULL, 16);
|
||||
}
|
||||
@@ -695,9 +709,7 @@ httpRead(http_t *http, /* I - HTTP data */
|
||||
* data, go idle...
|
||||
*/
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
|
||||
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
|
||||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
httpGets(len, sizeof(len), http);
|
||||
|
||||
if (http->state == HTTP_POST_RECV)
|
||||
@@ -739,9 +751,7 @@ httpRead(http_t *http, /* I - HTTP data */
|
||||
|
||||
if (http->data_remaining == 0)
|
||||
{
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
|
||||
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
|
||||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
httpGets(len, sizeof(len), http);
|
||||
|
||||
if (http->data_encoding != HTTP_ENCODE_CHUNKED)
|
||||
@@ -776,25 +786,30 @@ httpWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
http->activity = time(NULL);
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
|
||||
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
|
||||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
{
|
||||
if (httpPrintf(http, "%x\r\n", length) < 0)
|
||||
return (-1);
|
||||
|
||||
if (length == 0)
|
||||
{
|
||||
/*
|
||||
* A zero-length chunk ends a transfer; unless we are sending POST
|
||||
* data, go idle...
|
||||
*/
|
||||
if (length == 0)
|
||||
{
|
||||
/*
|
||||
* A zero-length chunk ends a transfer; unless we are sending POST
|
||||
* data, go idle...
|
||||
*/
|
||||
|
||||
if (http->state == HTTP_POST_RECV)
|
||||
http->state ++;
|
||||
else
|
||||
http->state = HTTP_WAITING;
|
||||
DEBUG_puts("httpWrite: changing states...");
|
||||
|
||||
return (0);
|
||||
if (http->state == HTTP_POST_RECV)
|
||||
http->state ++;
|
||||
else
|
||||
http->state = HTTP_WAITING;
|
||||
|
||||
if (httpPrintf(http, "\r\n") < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
tbytes = 0;
|
||||
@@ -816,9 +831,7 @@ httpWrite(http_t *http, /* I - HTTP data */
|
||||
http->data_remaining -= bytes;
|
||||
}
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
|
||||
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
|
||||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
if (httpPrintf(http, "\r\n") < 0)
|
||||
return (-1);
|
||||
|
||||
@@ -828,6 +841,8 @@ httpWrite(http_t *http, /* I - HTTP data */
|
||||
* Finished with the transfer; unless we are sending POST data, go idle...
|
||||
*/
|
||||
|
||||
DEBUG_puts("httpWrite: changing states...");
|
||||
|
||||
if (http->state == HTTP_POST_RECV)
|
||||
http->state ++;
|
||||
else
|
||||
@@ -973,7 +988,7 @@ httpPrintf(http_t *http, /* I - HTTP data */
|
||||
|
||||
|
||||
va_start(ap, format);
|
||||
bytes = vsprintf(buf, format, ap);
|
||||
bytes = vsnprintf(buf, sizeof(buf), format, ap);
|
||||
va_end(ap);
|
||||
|
||||
DEBUG_printf(("httpPrintf: %s", buf));
|
||||
@@ -1061,7 +1076,7 @@ httpGetDateTime(const char *s) /* I - Date/time string */
|
||||
int hour, min, sec; /* Time */
|
||||
|
||||
|
||||
if (sscanf(s, "%*s%d%s%d%d:%d:%d", &day, mon, &year, &hour, &min, &sec) < 6)
|
||||
if (sscanf(s, "%*s%d%15s%d%d:%d:%d", &day, mon, &year, &hour, &min, &sec) < 6)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < 12; i ++)
|
||||
@@ -1305,7 +1320,10 @@ httpEncode64(char *out, /* I - String to write to */
|
||||
|
||||
in ++;
|
||||
if (*in == '\0')
|
||||
{
|
||||
*outptr ++ = '=';
|
||||
break;
|
||||
}
|
||||
|
||||
*outptr ++ = base64[((in[0] << 2) | (in[1] >> 6)) & 63];
|
||||
|
||||
@@ -1335,14 +1353,18 @@ httpEncode64(char *out, /* I - String to write to */
|
||||
int /* O - Content length */
|
||||
httpGetLength(http_t *http) /* I - HTTP data */
|
||||
{
|
||||
DEBUG_printf(("httpGetLength(%08x)\n", http));
|
||||
|
||||
if (strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked") == 0)
|
||||
{
|
||||
DEBUG_puts("httpGetLength: chunked request!");
|
||||
|
||||
http->data_encoding = HTTP_ENCODE_CHUNKED;
|
||||
http->data_remaining = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
http->data_encoding = HTTP_ENCODE_LENGTH;
|
||||
http->data_encoding = HTTP_ENCODE_LENGTH;
|
||||
|
||||
/*
|
||||
* The following is a hack for HTTP servers that don't send a
|
||||
@@ -1356,6 +1378,8 @@ httpGetLength(http_t *http) /* I - HTTP data */
|
||||
http->data_remaining = 2147483647;
|
||||
else
|
||||
http->data_remaining = atoi(http->fields[HTTP_FIELD_CONTENT_LENGTH]);
|
||||
|
||||
DEBUG_printf(("httpGetLength: content_length = %d\n", http->data_remaining));
|
||||
}
|
||||
|
||||
return (http->data_remaining);
|
||||
|
||||
+2
-2
@@ -593,7 +593,7 @@ ippFindAttribute(ipp_t *ipp, /* I - IPP request */
|
||||
DEBUG_printf(("ippFindAttribute: attr = %08x, name = \'%s\'\n", attr,
|
||||
attr->name));
|
||||
|
||||
if (attr->name != NULL && strcmp(attr->name, name) == 0 &&
|
||||
if (attr->name != NULL && strcasecmp(attr->name, name) == 0 &&
|
||||
(attr->value_tag == type ||
|
||||
(attr->value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
|
||||
(attr->value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
|
||||
@@ -801,7 +801,7 @@ ippRead(http_t *http, /* I - HTTP data */
|
||||
ipp->state = IPP_DATA;
|
||||
break;
|
||||
}
|
||||
else if (tag <= IPP_TAG_UNSUPPORTED)
|
||||
else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
|
||||
{
|
||||
/*
|
||||
* Group tag... Set the current group and continue...
|
||||
|
||||
+2
-2
@@ -75,8 +75,8 @@ typedef enum /**** Format tags for attribute formats... ****/
|
||||
IPP_TAG_JOB,
|
||||
IPP_TAG_END,
|
||||
IPP_TAG_PRINTER,
|
||||
IPP_TAG_EXTENSION,
|
||||
IPP_TAG_UNSUPPORTED = 0x10,
|
||||
IPP_TAG_UNSUPPORTED_GROUP,
|
||||
IPP_TAG_UNSUPPORTED_VALUE = 0x10,
|
||||
IPP_TAG_DEFAULT,
|
||||
IPP_TAG_UNKNOWN,
|
||||
IPP_TAG_NOVALUE,
|
||||
|
||||
+20
-4
@@ -146,14 +146,29 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
* standard POSIX locale and is copied unchanged. Otherwise the
|
||||
* language string is converted from ll-cc (language-country) to ll_CC
|
||||
* to match the file naming convention used by all POSIX-compliant
|
||||
* operating systems.
|
||||
* operating systems. Any trailing character set specification is
|
||||
* dropped.
|
||||
*/
|
||||
|
||||
if (language == NULL || language[0] == '\0' ||
|
||||
strcmp(language, "POSIX") == 0)
|
||||
strcpy(langname, "C");
|
||||
else
|
||||
strcpy(langname, language);
|
||||
{
|
||||
/*
|
||||
* Copy the locale string over safely...
|
||||
*/
|
||||
|
||||
strncpy(langname, language, sizeof(langname) - 1);
|
||||
langname[sizeof(langname) - 1] = '\0';
|
||||
|
||||
/*
|
||||
* Strip charset from "locale.charset"...
|
||||
*/
|
||||
|
||||
if ((text = strchr(langname, '.')) != NULL)
|
||||
*text = '\0';
|
||||
}
|
||||
|
||||
if (strlen(langname) < 2)
|
||||
strcpy(real, "C");
|
||||
@@ -186,7 +201,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
if ((localedir = getenv("LOCALEDIR")) == NULL)
|
||||
localedir = CUPS_LOCALEDIR;
|
||||
|
||||
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir, real, real);
|
||||
|
||||
if ((fp = fopen(filename, "r")) == NULL)
|
||||
if (strlen(real) > 2)
|
||||
@@ -196,7 +211,8 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
*/
|
||||
|
||||
real[2] = '\0';
|
||||
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir, real,
|
||||
real);
|
||||
fp = fopen(filename, "r");
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -117,7 +117,7 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c1->marked)
|
||||
break;
|
||||
|
||||
if (j == 0)
|
||||
if (j == 0 || strcasecmp(c1->choice, "None") == 0)
|
||||
c1 = NULL;
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c2->marked)
|
||||
break;
|
||||
|
||||
if (j == 0)
|
||||
if (j == 0 || strcasecmp(c2->choice, "None") == 0)
|
||||
c2 = NULL;
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */
|
||||
return (NULL);
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, choice) == 0)
|
||||
if (strcasecmp(c->choice, choice) == 0)
|
||||
return (c);
|
||||
|
||||
return (NULL);
|
||||
@@ -239,12 +239,12 @@ ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
{
|
||||
for (j = g->num_options, o = g->options; j > 0; j --, o ++)
|
||||
if (strcmp(o->keyword, option) == 0)
|
||||
if (strcasecmp(o->keyword, option) == 0)
|
||||
return (o);
|
||||
|
||||
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
|
||||
for (k = sg->num_options, o = sg->options; k > 0; k --, o ++)
|
||||
if (strcmp(o->keyword, option) == 0)
|
||||
if (strcasecmp(o->keyword, option) == 0)
|
||||
return (o);
|
||||
}
|
||||
|
||||
@@ -320,7 +320,7 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
if (ppd == NULL)
|
||||
return (0);
|
||||
|
||||
if (strcmp(option, "PageSize") == 0 && strncmp(choice, "Custom.", 7) == 0)
|
||||
if (strcasecmp(option, "PageSize") == 0 && strncasecmp(choice, "Custom.", 7) == 0)
|
||||
{
|
||||
/*
|
||||
* Handle variable page sizes...
|
||||
@@ -334,7 +334,7 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
return (0);
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, choice) == 0)
|
||||
if (strcasecmp(c->choice, choice) == 0)
|
||||
break;
|
||||
|
||||
if (i)
|
||||
@@ -347,23 +347,23 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
|
||||
if (o->ui != PPD_UI_PICKMANY)
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, choice) != 0)
|
||||
if (strcasecmp(c->choice, choice) != 0)
|
||||
c->marked = 0;
|
||||
|
||||
if (strcmp(option, "PageSize") == 0 || strcmp(option, "PageRegion") == 0)
|
||||
if (strcasecmp(option, "PageSize") == 0 || strcasecmp(option, "PageRegion") == 0)
|
||||
{
|
||||
/*
|
||||
* Mark current page size...
|
||||
*/
|
||||
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, choice) == 0;
|
||||
ppd->sizes[i].marked = strcasecmp(ppd->sizes[i].name, choice) == 0;
|
||||
|
||||
/*
|
||||
* Unmark the current PageSize or PageRegion setting, as appropriate...
|
||||
*/
|
||||
|
||||
if (strcmp(option, "PageSize") == 0)
|
||||
if (strcasecmp(option, "PageSize") == 0)
|
||||
{
|
||||
if ((o = ppdFindOption(ppd, "PageRegion")) != NULL)
|
||||
for (i = 0; i < o->num_choices; i ++)
|
||||
@@ -399,7 +399,7 @@ ppd_defaults(ppd_file_t *ppd, /* I - PPD file */
|
||||
return;
|
||||
|
||||
for (i = g->num_options, o = g->options; i > 0; i --, o ++)
|
||||
if (strcmp(o->keyword, "PageRegion") != 0)
|
||||
if (strcasecmp(o->keyword, "PageRegion") != 0)
|
||||
ppdMarkOption(ppd, o->keyword, o->defchoice);
|
||||
|
||||
for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++)
|
||||
|
||||
+8
-3
@@ -33,6 +33,9 @@
|
||||
* Revision History:
|
||||
*
|
||||
* $Log: mime.c,v $
|
||||
* Revision 1.15 1999/10/10 15:40:23 mike
|
||||
* Scanf, strcpy, and sprintf security changes.
|
||||
*
|
||||
* Revision 1.14 1999/07/12 16:09:38 mike
|
||||
* Fixed all constant arrays to use "const" modifier.
|
||||
*
|
||||
@@ -198,7 +201,9 @@ mimeMerge(mime_t *mime, /* I - MIME database to add to */
|
||||
if (pathname == NULL)
|
||||
return (NULL);
|
||||
|
||||
strcpy(filename, pathname);
|
||||
strncpy(filename, pathname, sizeof(filename) - 1);
|
||||
filename[sizeof(filename) - 1] = '\0';
|
||||
|
||||
pathsep = filename + strlen(filename);
|
||||
if (pathsep == filename ||
|
||||
(pathsep[-1] != '/' && pathsep[-1] != '\\'))
|
||||
@@ -298,7 +303,7 @@ mimeMerge(mime_t *mime, /* I - MIME database to add to */
|
||||
* Load a mime.types file...
|
||||
*/
|
||||
|
||||
sprintf(filename, "%s/%s", pathname, dent->d_name);
|
||||
snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->d_name);
|
||||
load_types(mime, filename);
|
||||
}
|
||||
}
|
||||
@@ -318,7 +323,7 @@ mimeMerge(mime_t *mime, /* I - MIME database to add to */
|
||||
* Load a mime.convs file...
|
||||
*/
|
||||
|
||||
sprintf(filename, "%s/%s", pathname, dent->d_name);
|
||||
snprintf(filename, sizeof(filename), "%s/%s", pathname, dent->d_name);
|
||||
load_convs(mime, filename);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -62,7 +62,7 @@ cupsAddOption(const char *name, /* I - Name of option */
|
||||
*/
|
||||
|
||||
for (i = 0, temp = *options; i < num_options; i ++, temp ++)
|
||||
if (strcmp(temp->name, name) == 0)
|
||||
if (strcasecmp(temp->name, name) == 0)
|
||||
break;
|
||||
|
||||
if (i >= num_options)
|
||||
@@ -140,7 +140,7 @@ cupsGetOption(const char *name, /* I - Name of option */
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
if (strcmp(options[i].name, name) == 0)
|
||||
if (strcasecmp(options[i].name, name) == 0)
|
||||
return (options[i].value);
|
||||
|
||||
return (NULL);
|
||||
@@ -287,7 +287,7 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
conflict = 0;
|
||||
|
||||
for (i = num_options; i > 0; i --, options ++)
|
||||
if (strcmp(options->name, "media") == 0)
|
||||
if (strcasecmp(options->name, "media") == 0)
|
||||
{
|
||||
/*
|
||||
* Loop through the option string, separating it at commas and
|
||||
@@ -324,9 +324,9 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
conflict = 1;
|
||||
}
|
||||
}
|
||||
else if (strcmp(options->name, "sides") == 0)
|
||||
else if (strcasecmp(options->name, "sides") == 0)
|
||||
{
|
||||
if (strcmp(options->value, "one-sided") == 0)
|
||||
if (strcasecmp(options->value, "one-sided") == 0)
|
||||
{
|
||||
if (ppdMarkOption(ppd, "Duplex", "None"))
|
||||
conflict = 1;
|
||||
@@ -335,7 +335,7 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
if (ppdMarkOption(ppd, "KD03Duplex", "None")) /* Kodak */
|
||||
conflict = 1;
|
||||
}
|
||||
else if (strcmp(options->value, "two-sided-long-edge") == 0)
|
||||
else if (strcasecmp(options->value, "two-sided-long-edge") == 0)
|
||||
{
|
||||
if (ppdMarkOption(ppd, "Duplex", "DuplexNoTumble"))
|
||||
conflict = 1;
|
||||
@@ -344,7 +344,7 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
if (ppdMarkOption(ppd, "KD03Duplex", "DuplexNoTumble")) /* Kodak */
|
||||
conflict = 1;
|
||||
}
|
||||
else if (strcmp(options->value, "two-sided-short-edge") == 0)
|
||||
else if (strcasecmp(options->value, "two-sided-short-edge") == 0)
|
||||
{
|
||||
if (ppdMarkOption(ppd, "Duplex", "DuplexTumble"))
|
||||
conflict = 1;
|
||||
@@ -354,7 +354,7 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
conflict = 1;
|
||||
}
|
||||
}
|
||||
else if (strcmp(options->name, "resolution") == 0)
|
||||
else if (strcasecmp(options->name, "resolution") == 0)
|
||||
{
|
||||
if (ppdMarkOption(ppd, "Resolution", options->value))
|
||||
conflict = 1;
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
*/
|
||||
|
||||
units[0] = '\0';
|
||||
if (sscanf(name + 7, "%fx%f%s", &w, &l, units) < 2)
|
||||
if (sscanf(name + 7, "%fx%f%254s", &w, &l, units) < 2)
|
||||
return (NULL);
|
||||
|
||||
if (strcasecmp(units, "in") == 0)
|
||||
|
||||
+1
-1
@@ -1028,7 +1028,7 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
else if (strcmp(keyword, "OrderDependency") == 0 ||
|
||||
strcmp(keyword, "NonUIOrderDependency") == 0)
|
||||
{
|
||||
if (sscanf(string, "%f%s%s", &order, name, keyword) != 3)
|
||||
if (sscanf(string, "%f%40s%40s", &order, name, keyword) != 3)
|
||||
{
|
||||
ppdClose(ppd);
|
||||
safe_free(string);
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* snprintf functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-1999 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
* copyright law. Distribution and use rights are outlined in the file
|
||||
* "LICENSE.txt" which should have been included with this file. If this
|
||||
* file is missing or damaged please contact Easy Software Products
|
||||
* at:
|
||||
*
|
||||
* Attn: CUPS Licensing Information
|
||||
* Easy Software Products
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* vsnprintf() - Format a string into a fixed size buffer.
|
||||
* snprintf() - Format a string into a fixed size buffer.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
|
||||
|
||||
#ifndef HAVE_VSNPRINTF
|
||||
/*
|
||||
* 'vsnprintf()' - Format a string into a fixed size buffer.
|
||||
*/
|
||||
|
||||
int /* O - Number of bytes formatted */
|
||||
vsnprintf(char *buffer, /* O - Output buffer */
|
||||
size_t bufsize, /* O - Size of output buffer */
|
||||
const char *format, /* I - printf-style format string */
|
||||
va_list ap) /* I - Pointer to additional arguments */
|
||||
{
|
||||
char *bufptr, /* Pointer to position in buffer */
|
||||
*bufend, /* Pointer to end of buffer */
|
||||
sign, /* Sign of format width */
|
||||
size, /* Size character (h, l, L) */
|
||||
type; /* Format type character */
|
||||
const char *bufformat; /* Start of format */
|
||||
int width, /* Width of field */
|
||||
prec; /* Number of characters of precision */
|
||||
char tformat[100], /* Temporary format string for sprintf() */
|
||||
temp[1024]; /* Buffer for formatted numbers */
|
||||
int *chars; /* Pointer to integer for %p */
|
||||
char *s; /* Pointer to string */
|
||||
int slen; /* Length of string */
|
||||
|
||||
|
||||
/*
|
||||
* Loop through the format string, formatting as needed...
|
||||
*/
|
||||
|
||||
bufptr = buffer;
|
||||
bufend = buffer + bufsize - 1;
|
||||
|
||||
while (*format && bufptr < bufend)
|
||||
{
|
||||
if (*format == '%')
|
||||
{
|
||||
bufformat = format;
|
||||
format ++;
|
||||
|
||||
if (*format == '%')
|
||||
{
|
||||
*bufptr++ = *format++;
|
||||
continue;
|
||||
}
|
||||
else if (strchr(" -+#\'", *format))
|
||||
sign = *format++;
|
||||
else
|
||||
sign = 0;
|
||||
|
||||
width = 0;
|
||||
while (isdigit(*format))
|
||||
width = width * 10 + *format++ - '0';
|
||||
|
||||
if (*format == '.')
|
||||
{
|
||||
format ++;
|
||||
prec = 0;
|
||||
|
||||
while (isdigit(*format))
|
||||
prec = prec * 10 + *format++ - '0';
|
||||
}
|
||||
else
|
||||
prec = -1;
|
||||
|
||||
if (*format == 'l' && format[1] == 'l')
|
||||
{
|
||||
size = 'L';
|
||||
format += 2;
|
||||
}
|
||||
else if (*format == 'h' || *format == 'l' || *format == 'L')
|
||||
size = *format++;
|
||||
|
||||
if (!*format)
|
||||
break;
|
||||
|
||||
type = *format++;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 'E' : /* Floating point formats */
|
||||
case 'G' :
|
||||
case 'e' :
|
||||
case 'f' :
|
||||
case 'g' :
|
||||
if ((format - bufformat + 1) > sizeof(tformat) ||
|
||||
(width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
strncpy(tformat, bufformat, format - bufformat);
|
||||
tformat[format - bufformat] = '\0';
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, double));
|
||||
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, bufend - bufptr);
|
||||
bufptr = bufend;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'B' : /* Integer formats */
|
||||
case 'X' :
|
||||
case 'b' :
|
||||
case 'd' :
|
||||
case 'i' :
|
||||
case 'o' :
|
||||
case 'u' :
|
||||
case 'x' :
|
||||
if ((format - bufformat + 1) > sizeof(tformat) ||
|
||||
(width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
strncpy(tformat, bufformat, format - bufformat);
|
||||
tformat[format - bufformat] = '\0';
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, bufend - bufptr);
|
||||
bufptr = bufend;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p' : /* Pointer value */
|
||||
if ((chars = va_arg(ap, int *)) != NULL)
|
||||
*chars = bufptr - buffer;
|
||||
break;
|
||||
|
||||
case 'c' : /* Character or character array */
|
||||
if (width <= 1)
|
||||
*bufptr++ = va_arg(ap, int);
|
||||
else
|
||||
{
|
||||
if ((bufptr + width) > bufend)
|
||||
width = bufend - bufptr;
|
||||
|
||||
memcpy(bufptr, va_arg(ap, char *), width);
|
||||
bufptr += width;
|
||||
}
|
||||
break;
|
||||
|
||||
case 's' : /* String */
|
||||
if ((s = va_arg(ap, char *)) == NULL)
|
||||
s = "(null)";
|
||||
|
||||
slen = strlen(s);
|
||||
if (slen > width && prec != width)
|
||||
width = slen;
|
||||
|
||||
if ((bufptr + width) > bufend)
|
||||
width = bufend - bufptr;
|
||||
|
||||
if (slen > width)
|
||||
slen = width;
|
||||
|
||||
if (sign == '-')
|
||||
{
|
||||
strncpy(bufptr, s, slen);
|
||||
memset(bufptr + slen, ' ', width - slen);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(bufptr, ' ', width - slen);
|
||||
strncpy(bufptr + width - slen, s, slen);
|
||||
}
|
||||
|
||||
bufptr += width;
|
||||
break;
|
||||
|
||||
case 'n' : /* Output number of chars so far */
|
||||
if ((format - bufformat + 1) > sizeof(tformat) ||
|
||||
(width + 2) > sizeof(temp))
|
||||
break;
|
||||
|
||||
strncpy(tformat, bufformat, format - bufformat);
|
||||
tformat[format - bufformat] = '\0';
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, bufend - bufptr);
|
||||
bufptr = bufend;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
*bufptr++ = *format++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Nul-terminate the string and return the number of characters in it.
|
||||
*/
|
||||
|
||||
*bufptr = '\0';
|
||||
return (bufptr - buffer);
|
||||
}
|
||||
#endif /* !HAVE_VSNPRINT */
|
||||
|
||||
|
||||
#ifndef HAVE_SNPRINTF
|
||||
/*
|
||||
* 'snprintf()' - Format a string into a fixed size buffer.
|
||||
*/
|
||||
|
||||
int /* O - Number of bytes formatted */
|
||||
snprintf(char *buffer, /* O - Output buffer */
|
||||
size_t bufsize, /* O - Size of output buffer */
|
||||
const char *format, /* I - printf-style format string */
|
||||
...) /* I - Additional arguments as needed */
|
||||
{
|
||||
int bytes; /* Number of bytes formatted */
|
||||
va_list ap; /* Pointer to additional arguments */
|
||||
|
||||
|
||||
va_start(ap, format);
|
||||
bytes = vsnprintf(buffer, bufsize, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
#endif /* !HAVE_SNPRINTF */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdarg.h>
|
||||
# include <config.h>
|
||||
# include <string.h>
|
||||
|
||||
@@ -43,6 +45,15 @@
|
||||
# endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
@@ -59,6 +70,23 @@ extern int strcasecmp(const char *, const char *);
|
||||
extern int strncasecmp(const char *, const char *, size_t n);
|
||||
# endif /* !HAVE_STRNCASECMP */
|
||||
|
||||
# ifndef HAVE_SNPRINTF
|
||||
extern int snprintf(char *, size_t, const char *, ...);
|
||||
# endif /* !HAVE_SNPRINTF */
|
||||
|
||||
# ifndef HAVE_VSNPRINTF
|
||||
extern int vsnprintf(char *, size_t, const char *, va_list);
|
||||
# endif /* !HAVE_VSNPRINTF */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_STRING_H_ */
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
case 3 :
|
||||
src = mimeFileType(mime, argv[1]);
|
||||
|
||||
sscanf(argv[2], "%[^/]/%s", super, type);
|
||||
sscanf(argv[2], "%15[^/]/31%s", super, type);
|
||||
dst = mimeType(mime, super, type);
|
||||
|
||||
filters = mimeFilter(mime, src, dst, &num_filters);
|
||||
|
||||
+8
-5
@@ -108,8 +108,8 @@ mimeAddType(mime_t *mime, /* I - MIME database */
|
||||
mime->num_types ++;
|
||||
|
||||
*types = temp;
|
||||
strcpy(temp->super, super);
|
||||
strcpy(temp->type, type);
|
||||
strncpy(temp->super, super, sizeof(temp->super) - 1);
|
||||
strncpy(temp->type, type, sizeof(temp->type) - 1);
|
||||
|
||||
if (mime->num_types > 1)
|
||||
qsort(mime->types, mime->num_types, sizeof(mime_type_t *),
|
||||
@@ -392,7 +392,7 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
|
||||
* This is just a filename match on the extension...
|
||||
*/
|
||||
|
||||
sprintf(value[0], "*.%s", name);
|
||||
snprintf(value[0], sizeof(value[0]), "*.%s", name);
|
||||
length[0] = strlen(value[0]);
|
||||
num_values = 1;
|
||||
op = MIME_MAGIC_MATCH;
|
||||
@@ -582,8 +582,11 @@ mimeType(mime_t *mime, /* I - MIME database */
|
||||
* Lookup the type in the array...
|
||||
*/
|
||||
|
||||
strcpy(key.super, super);
|
||||
strcpy(key.type, type);
|
||||
strncpy(key.super, super, sizeof(key.super) - 1);
|
||||
key.super[sizeof(key.super) - 1] = '\0';
|
||||
strncpy(key.type, type, sizeof(key.type) - 1);
|
||||
key.type[sizeof(key.type) - 1] = '\0';
|
||||
|
||||
keyptr = &key;
|
||||
|
||||
match = (mime_type_t **)bsearch(&keyptr, mime->types, mime->num_types,
|
||||
|
||||
+171
-51
@@ -57,7 +57,9 @@
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static http_t *cups_server = NULL;
|
||||
static http_t *cups_server = NULL; /* Current server connection */
|
||||
static ipp_status_t last_error = IPP_OK; /* Last IPP error */
|
||||
static char authstring[255] = ""; /* Authorization string */
|
||||
|
||||
|
||||
/*
|
||||
@@ -98,6 +100,7 @@ cupsCancelJob(const char *name, /* I - Name of printer or class */
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
* job-id
|
||||
* [requesting-user-name]
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
@@ -114,21 +117,31 @@ cupsCancelJob(const char *name, /* I - Name of printer or class */
|
||||
"attributes-natural-language", NULL,
|
||||
language != NULL ? language->language : "C");
|
||||
|
||||
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
snprintf(uri, sizeof(uri), "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, cupsUser());
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/jobs/")) == NULL)
|
||||
{
|
||||
last_error = IPP_BAD_REQUEST;
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
last_error = response->request.status.status_code;
|
||||
ippDelete(response);
|
||||
|
||||
ippDelete(response);
|
||||
return (1);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,8 +165,6 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
|
||||
const char *password; /* Password string */
|
||||
char plain[255], /* Plaintext username:password */
|
||||
encode[255]; /* Encoded username:password */
|
||||
static char authstring[255] = "";
|
||||
/* Authorization string */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
|
||||
@@ -260,7 +271,10 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
httpFlush(http);
|
||||
|
||||
if ((password = cupsGetPassword("Password:")) != NULL)
|
||||
printf("Authentication required for %s on %s...\n", cupsUser(),
|
||||
http->hostname);
|
||||
|
||||
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Got a password; send it to the server...
|
||||
@@ -268,9 +282,9 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
if (!password[0])
|
||||
break;
|
||||
sprintf(plain, "%s:%s", cupsUser(), password);
|
||||
snprintf(plain, sizeof(plain), "%s:%s", cupsUser(), password);
|
||||
httpEncode64(encode, plain);
|
||||
sprintf(authstring, "Basic %s", encode);
|
||||
snprintf(authstring, sizeof(authstring), "Basic %s", encode);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -353,6 +367,7 @@ cupsGetClasses(char ***classes) /* O - Classes */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
char **temp; /* Temporary pointer */
|
||||
|
||||
|
||||
/*
|
||||
@@ -378,10 +393,10 @@ cupsGetClasses(char ***classes) /* O - Classes */
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
@@ -390,29 +405,46 @@ cupsGetClasses(char ***classes) /* O - Classes */
|
||||
n = 0;
|
||||
*classes = NULL;
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/classes/")) != NULL)
|
||||
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
|
||||
{
|
||||
last_error = response->request.status.status_code;
|
||||
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
if (strcmp(attr->name, "printer-name") == 0 &&
|
||||
if (attr->name != NULL &&
|
||||
strcasecmp(attr->name, "printer-name") == 0 &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
{
|
||||
if (n == 0)
|
||||
*classes = malloc(sizeof(char *));
|
||||
temp = malloc(sizeof(char *));
|
||||
else
|
||||
*classes = realloc(*classes, sizeof(char *) * (n + 1));
|
||||
temp = realloc(*classes, sizeof(char *) * (n + 1));
|
||||
|
||||
if (*classes == NULL)
|
||||
if (temp == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
while (n > 0)
|
||||
{
|
||||
n --;
|
||||
free((*classes)[n]);
|
||||
}
|
||||
|
||||
free(*classes);
|
||||
ippDelete(response);
|
||||
return (0);
|
||||
}
|
||||
|
||||
(*classes)[n] = strdup(attr->values[0].string.text);
|
||||
*classes = temp;
|
||||
temp[n] = strdup(attr->values[0].string.text);
|
||||
n ++;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
last_error = IPP_BAD_REQUEST;
|
||||
|
||||
return (n);
|
||||
}
|
||||
@@ -474,17 +506,22 @@ cupsGetDefault(void)
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
|
||||
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
|
||||
{
|
||||
last_error = response->request.status.status_code;
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
|
||||
{
|
||||
strcpy(def_printer, attr->values[0].string.text);
|
||||
strncpy(def_printer, attr->values[0].string.text, sizeof(def_printer) - 1);
|
||||
def_printer[sizeof(def_printer) - 1] = '\0';
|
||||
ippDelete(response);
|
||||
return (def_printer);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
last_error = IPP_BAD_REQUEST;
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -503,8 +540,12 @@ cupsGetPPD(const char *name) /* I - Printer name */
|
||||
char printer[HTTP_MAX_URI], /* Printer name */
|
||||
hostname[HTTP_MAX_URI], /* Hostname */
|
||||
resource[HTTP_MAX_URI]; /* Resource name */
|
||||
static char filename[HTTP_MAX_URI]; /* Local filename */
|
||||
char *tempdir; /* Temporary file directory */
|
||||
const char *password; /* Password string */
|
||||
char plain[255], /* Plaintext username:password */
|
||||
encode[255]; /* Encoded username:password */
|
||||
http_status_t status; /* HTTP status from server */
|
||||
static char filename[HTTP_MAX_URI]; /* Local filename */
|
||||
|
||||
|
||||
/*
|
||||
@@ -521,31 +562,66 @@ cupsGetPPD(const char *name) /* I - Printer name */
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
tempdir = "C:/WINDOWS/TEMP";
|
||||
|
||||
sprintf(filename, "%s/%s.ppd", tempdir, printer);
|
||||
snprintf(filename, sizeof(filename), "%s/%s.ppd", tempdir, printer);
|
||||
#else
|
||||
if ((tempdir = getenv("TMPDIR")) == NULL)
|
||||
tempdir = "/tmp";
|
||||
|
||||
sprintf(filename, "%s/%d.%s.ppd", tempdir, getuid(), printer);
|
||||
snprintf(filename, sizeof(filename), "%s/%d.%s.ppd", tempdir, getuid(), printer);
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
/*
|
||||
* And send a request to the HTTP server...
|
||||
*/
|
||||
|
||||
sprintf(resource, "/printers/%s.ppd", printer);
|
||||
snprintf(resource, sizeof(resource), "/printers/%s.ppd", printer);
|
||||
|
||||
httpClearFields(cups_server);
|
||||
httpSetField(cups_server, HTTP_FIELD_HOST, hostname);
|
||||
httpGet(cups_server, resource);
|
||||
|
||||
switch (httpUpdate(cups_server))
|
||||
do
|
||||
{
|
||||
case HTTP_OK : /* New file - get it! */
|
||||
httpClearFields(cups_server);
|
||||
httpSetField(cups_server, HTTP_FIELD_HOST, hostname);
|
||||
httpSetField(cups_server, HTTP_FIELD_AUTHORIZATION, authstring);
|
||||
|
||||
if (httpGet(cups_server, resource))
|
||||
{
|
||||
status = HTTP_UNAUTHORIZED;
|
||||
continue;
|
||||
}
|
||||
|
||||
while ((status = httpUpdate(cups_server)) == HTTP_CONTINUE);
|
||||
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
DEBUG_puts("cupsGetPPD: unauthorized...");
|
||||
|
||||
/*
|
||||
* Flush any error message...
|
||||
*/
|
||||
|
||||
httpFlush(cups_server);
|
||||
|
||||
printf("Authentication required for %s on %s...\n", cupsUser(),
|
||||
cups_server->hostname);
|
||||
|
||||
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Got a password; send it to the server...
|
||||
*/
|
||||
|
||||
if (!password[0])
|
||||
break;
|
||||
snprintf(plain, sizeof(plain), "%s:%s", cupsUser(), password);
|
||||
httpEncode64(encode, plain);
|
||||
snprintf(authstring, sizeof(authstring), "Basic %s", encode);
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
break;
|
||||
default :
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
while (status == HTTP_UNAUTHORIZED);
|
||||
|
||||
/*
|
||||
* OK, we need to copy the file; open the file and copy it...
|
||||
@@ -584,6 +660,7 @@ cupsGetPrinters(char ***printers) /* O - Printers */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
char **temp; /* Temporary pointer */
|
||||
|
||||
|
||||
/*
|
||||
@@ -609,10 +686,10 @@ cupsGetPrinters(char ***printers) /* O - Printers */
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
@@ -621,34 +698,62 @@ cupsGetPrinters(char ***printers) /* O - Printers */
|
||||
n = 0;
|
||||
*printers = NULL;
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
|
||||
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
|
||||
{
|
||||
last_error = response->request.status.status_code;
|
||||
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
if (strcmp(attr->name, "printer-name") == 0 &&
|
||||
if (attr->name != NULL &&
|
||||
strcasecmp(attr->name, "printer-name") == 0 &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
{
|
||||
if (n == 0)
|
||||
*printers = malloc(sizeof(char *));
|
||||
temp = malloc(sizeof(char *));
|
||||
else
|
||||
*printers = realloc(*printers, sizeof(char *) * (n + 1));
|
||||
temp = realloc(*printers, sizeof(char *) * (n + 1));
|
||||
|
||||
if (*printers == NULL)
|
||||
if (temp == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
while (n > 0)
|
||||
{
|
||||
n --;
|
||||
free((*printers)[n]);
|
||||
}
|
||||
|
||||
free(*printers);
|
||||
ippDelete(response);
|
||||
return (0);
|
||||
}
|
||||
|
||||
(*printers)[n] = strdup(attr->values[0].string.text);
|
||||
*printers = temp;
|
||||
temp[n] = strdup(attr->values[0].string.text);
|
||||
n ++;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
last_error = IPP_BAD_REQUEST;
|
||||
|
||||
return (n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsLastError()' - Return the last IPP error that occurred.
|
||||
*/
|
||||
|
||||
ipp_status_t /* O - IPP error code */
|
||||
cupsLastError(void)
|
||||
{
|
||||
return (last_error);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsPrintFile()' - Print a file to a printer or class.
|
||||
*/
|
||||
@@ -704,7 +809,7 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
|
||||
request->request.op.operation_id = IPP_PRINT_JOB;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
snprintf(uri, sizeof(uri), "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
@@ -745,7 +850,7 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
|
||||
* Skip the "raw" option - handled above...
|
||||
*/
|
||||
|
||||
if (strcmp(options[i].name, "raw") == 0)
|
||||
if (strcasecmp(options[i].name, "raw") == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
@@ -789,7 +894,7 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strncmp(option, "no", 2) == 0)
|
||||
if (strncasecmp(option, "no", 2) == 0)
|
||||
{
|
||||
option += 2;
|
||||
n = 0;
|
||||
@@ -829,9 +934,9 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
|
||||
{
|
||||
n2 = strtol(s + 1, &s, 0);
|
||||
|
||||
if (strcmp(s, "dpc") == 0)
|
||||
if (strcasecmp(s, "dpc") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
|
||||
else if (strcmp(s, "dpi") == 0)
|
||||
else if (strcasecmp(s, "dpi") == 0)
|
||||
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
|
||||
else
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
@@ -863,7 +968,7 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
|
||||
* Try printing the file...
|
||||
*/
|
||||
|
||||
sprintf(uri, "/printers/%s", printer);
|
||||
snprintf(uri, sizeof(uri), "/printers/%s", printer);
|
||||
|
||||
if ((response = cupsDoFileRequest(cups_server, request, uri, filename)) == NULL)
|
||||
jobid = 0;
|
||||
@@ -944,8 +1049,8 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
|
||||
|
||||
static char * /* I - Printer name or NULL */
|
||||
cups_connect(const char *name, /* I - Destination (printer[@host]) */
|
||||
char *printer, /* O - Printer name */
|
||||
char *hostname) /* O - Hostname */
|
||||
char *printer, /* O - Printer name [HTTP_MAX_URI] */
|
||||
char *hostname) /* O - Hostname [HTTP_MAX_URI] */
|
||||
{
|
||||
char hostbuf[HTTP_MAX_URI];
|
||||
/* Name of host */
|
||||
@@ -954,18 +1059,30 @@ cups_connect(const char *name, /* I - Destination (printer[@host]) */
|
||||
|
||||
|
||||
if (name == NULL)
|
||||
{
|
||||
last_error = IPP_BAD_REQUEST;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (sscanf(name, "%[^@]@%s", printerbuf, hostbuf) == 1)
|
||||
strcpy(hostbuf, cupsServer());
|
||||
if (sscanf(name, "%1023[^@]@%1023s", printerbuf, hostbuf) == 1)
|
||||
{
|
||||
strncpy(hostbuf, cupsServer(), sizeof(hostbuf) - 1);
|
||||
hostbuf[sizeof(hostbuf) - 1] = '\0';
|
||||
}
|
||||
|
||||
if (hostname != NULL)
|
||||
strcpy(hostname, hostbuf);
|
||||
{
|
||||
strncpy(hostname, hostbuf, HTTP_MAX_URI - 1);
|
||||
hostname[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
else
|
||||
hostname = hostbuf;
|
||||
|
||||
if (printer != NULL)
|
||||
strcpy(printer, printerbuf);
|
||||
{
|
||||
strncpy(printer, printerbuf, HTTP_MAX_URI - 1);
|
||||
printer[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
else
|
||||
printer = printerbuf;
|
||||
|
||||
@@ -978,7 +1095,10 @@ cups_connect(const char *name, /* I - Destination (printer[@host]) */
|
||||
}
|
||||
|
||||
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
|
||||
{
|
||||
last_error = IPP_SERVICE_UNAVAILABLE;
|
||||
return (NULL);
|
||||
}
|
||||
else
|
||||
return (printer);
|
||||
}
|
||||
|
||||
+12
-3
@@ -41,8 +41,8 @@ include ../Makedefs
|
||||
# Document files...
|
||||
#
|
||||
|
||||
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml ssr.shtml \
|
||||
stp.shtml sum.shtml
|
||||
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml spm.shtml \
|
||||
ssr.shtml stp.shtml sum.shtml
|
||||
DOCIMAGES = images/cups-block-diagram.gif images/cups-large.gif \
|
||||
images/cups-medium.gif images/cups-small.gif
|
||||
WEBPAGES = cups.css cupsdoc.css index.html documentation.html
|
||||
@@ -81,7 +81,8 @@ install:
|
||||
$(CP) $(DOCIMAGES) $(DATADIR)/doc/images
|
||||
|
||||
#
|
||||
# The overview, admin guide, and user's guide get special attention...
|
||||
# The overview, admin manual, programmers manual, and users manual get
|
||||
# special attention...
|
||||
#
|
||||
|
||||
overview.pdf: overview.html
|
||||
@@ -96,6 +97,14 @@ sam.pdf: sam.shtml
|
||||
htmldoc --title images/cups-large.gif --duplex --compression=9 \
|
||||
--jpeg -f $@ $<
|
||||
|
||||
spm.html: spm.shtml
|
||||
echo Formatting $@...
|
||||
htmldoc --title images/cups-large.gif -f $@ $<
|
||||
spm.pdf: spm.shtml
|
||||
echo Formatting $@...
|
||||
htmldoc --title images/cups-large.gif --duplex --compression=9 \
|
||||
--jpeg -f $@ $<
|
||||
|
||||
sum.html: sum.shtml
|
||||
echo Formatting $@...
|
||||
htmldoc --title images/cups-large.gif -f $@ $<
|
||||
|
||||
+220
-118
@@ -1,111 +1,213 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>CUPS Configuration Management Plan</TITLE>
|
||||
<META NAME="AUTHOR" CONTENT="Easy Software Products">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.0">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<STYLE>
|
||||
BODY { font-family: serif; font-size: 11.0pt }
|
||||
H1 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H2 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 20.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
|
||||
<H1>CUPS Configuration Management Plan</H1></A><BR>
|
||||
<CENTER><A HREF="#CONTENTS"><H1>CUPS Configuration Management Plan</H1></A><BR>
|
||||
CUPS-CMP-1.0<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-1999, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF=#1>1 Scope</A></B>
|
||||
<BR><B><A HREF="#1">1 Scope</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#1_1>1.1 Identification</A></LI>
|
||||
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
|
||||
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
|
||||
<LI><A HREF="#1_1">1.1 Identification</A></LI>
|
||||
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
|
||||
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#2>2 References</A></B>
|
||||
<B><A HREF="#2">2 References</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
|
||||
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#3>3 File Management</A></B>
|
||||
<B><A HREF="#3">3 File Management</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1>3.1 Directory Structure</A></LI>
|
||||
<LI><A HREF=#3_2>3.2 Source Files</A></LI>
|
||||
<LI><A HREF=#3_3>3.3 Configuration Management</A></LI>
|
||||
<LI><A HREF="#3_1">3.1 Directory Structure</A></LI>
|
||||
<LI><A HREF="#3_2">3.2 Source Files</A></LI>
|
||||
<LI><A HREF="#3_3">3.3 Configuration Management</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#4>4 Trouble Report Processing</A></B>
|
||||
<B><A HREF="#4">4 Trouble Report Processing</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#4_1>4.1 Classification</A></LI>
|
||||
<LI><A HREF=#4_2>4.2 Identification</A></LI>
|
||||
<LI><A HREF=#4_3>4.3 Correction</A></LI>
|
||||
<LI><A HREF=#4_4>4.4 Notification</A></LI>
|
||||
<LI><A HREF="#4_1">4.1 Classification</A></LI>
|
||||
<LI><A HREF="#4_2">4.2 Identification</A></LI>
|
||||
<LI><A HREF="#4_3">4.3 Correction</A></LI>
|
||||
<LI><A HREF="#4_4">4.4 Notification</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#5>5 Software Releases</A></B>
|
||||
<B><A HREF="#5">5 Software Releases</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#5_1>5.1 Version Numbering</A></LI>
|
||||
<LI><A HREF=#5_2>5.2 Generation</A></LI>
|
||||
<LI><A HREF=#5_3>5.3 Testing</A></LI>
|
||||
<LI><A HREF=#5_4>5.4 Release</A></LI>
|
||||
<LI><A HREF="#5_1">5.1 Version Numbering</A></LI>
|
||||
<LI><A HREF="#5_2">5.2 Generation</A></LI>
|
||||
<LI><A HREF="#5_3">5.3 Testing</A></LI>
|
||||
<LI><A HREF="#5_4">5.4 Release</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#6>A Glossary</A></B>
|
||||
<B><A HREF="#6">A Glossary</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#6_1>A.1 Terms</A></LI>
|
||||
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
|
||||
<LI><A HREF="#6_1">A.1 Terms</A></LI>
|
||||
<LI><A HREF="#6_2">A.2 Acronyms</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#7>B Coding Requirements</A></B>
|
||||
<B><A HREF="#7">B Coding Requirements</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#7_1>B.1 Source Files</A></LI>
|
||||
<LI><A HREF="#7_1">B.1 Source Files</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_1_1>B.1.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_1_2>B.1.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_1_1">B.1.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_1_2">B.1.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_2>B.2 Functions</A></LI>
|
||||
<LI><A HREF="#7_2">B.2 Functions</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_2_1>B.2.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_2_2>B.2.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_2_1">B.2.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_2_2">B.2.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_3>B.3 Methods</A></LI>
|
||||
<LI><A HREF="#7_3">B.3 Methods</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_3_1>B.3.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_3_2>B.3.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_3_1">B.3.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_3_2">B.3.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_4>B.4 Variables</A></LI>
|
||||
<LI><A HREF="#7_4">B.4 Variables</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_4_1>B.4.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_4_2>B.4.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_4_1">B.4.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_4_2">B.4.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_5>B.5 Types</A></LI>
|
||||
<LI><A HREF="#7_5">B.5 Types</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_5_1>B.5.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_5_2>B.5.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_5_1">B.5.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_5_2">B.5.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_6>B.6 Structures</A></LI>
|
||||
<LI><A HREF="#7_6">B.6 Structures</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_6_1>B.6.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_6_2>B.6.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_6_1">B.6.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_6_2">B.6.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_7>B.7 Classes</A></LI>
|
||||
<LI><A HREF="#7_7">B.7 Classes</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_7_1>B.7.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_7_2>B.7.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_7_1">B.7.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_7_2">B.7.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_8>B.8 Constants</A></LI>
|
||||
<LI><A HREF="#7_8">B.8 Constants</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_8_1>B.8.1 Naming</A></LI>
|
||||
<LI><A HREF=#7_8_2>B.8.2 Documentation</A></LI>
|
||||
<LI><A HREF="#7_8_1">B.8.1 Naming</A></LI>
|
||||
<LI><A HREF="#7_8_2">B.8.2 Documentation</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#7_9>B.9 Code</A></LI>
|
||||
<LI><A HREF="#7_9">B.9 Code</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#7_9_1>B.9.1 Documentation</A></LI>
|
||||
<LI><A HREF=#7_9_2>B.9.2 Style</A></LI>
|
||||
<LI><A HREF="#7_9_1">B.9.1 Documentation</A></LI>
|
||||
<LI><A HREF="#7_9_2">B.9.2 Style</A></LI>
|
||||
</UL>
|
||||
</UL>
|
||||
<B><A HREF=#8>C Software Trouble Report Form</A></B><HR>
|
||||
<H1><A NAME=1>1 Scope</A></H1>
|
||||
<H2><A NAME=1_1>1.1 Identification</A></H2>
|
||||
<B><A HREF="#8">C Software Trouble Report Form</A></B><HR>
|
||||
GIF89a¯ÿòÌÌÌ™™™fff333ÿÿÿÿÿÿÿÿÿ!ù,¯ÿBþXºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª2€0p,Ïtmßx®ï
|
||||
|
||||
<!--=�•pH,��Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€�bwz…jn‚‰Š‹Œ�9„†‘!-->
|
||||
;±Ýíˆndý !¸ ž³wà…MƒƒY~¿{,gÚ\‚äé
|
||||
Œ×Ø(tÙî!Ï=Ñ.ûz¯�áÑŸ:ì;Ã9qöíÉë]/¿ºÉ¤Et/†'Îþt9ÀØ–ž_ÙÇ\|W•wArö¸Ý�2Ô×
|
||||
tN°0Tï}�¡û‰$!‚yMxî)ˆš‰Ô�ø@nB°U½ÊwE„§!ŠF H L8B
|
||||
c‰;ždŠ-æDVWdг€h±äÚ“P¶%#(4Fiå•Ï\hŠ:�Re!\ÒÄ—X^¦%€¥À-$E€Ö/úHŽšlââöÌQX
|
||||
|
||||
<!--äÇ"iL :a7‚]›0IZ¡YØø¡‡D}¤–Uj±á
|
||||
^â䙿`Ú@¦5b|šà�«Á±§3Ñ KwÔ\ªB¨±H)+�=¡Ó©"
|
||||
©¢ 8uƒ†¸öŠD§•lþ:„d�RX�ilÌ:Ë!´;¹t+„e<
|
||||
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
|
||||
¸1Nô¯b"œŠüjåÁÂE0…È8ö5GkZ|ÒÁwt„C»ÔQSÇo6ÔÙ�[�W„$²*Ž+4Pb-8¹P1þ'8"‘ФÄ$ Cyê‘„)>ãŠtè`Ð3‡‹¾z"«rE'Âqfä°Ë
|
||||
‘qÂ\|€„Ž¡ôö»%É(.—bڽȀ�íÉ`{¬EÇ1w’ »[Hß`(B6ö�“
|
||||
†')ÊRŽÎa[�ÃrbC!Tå°Œ
|
||||
2Q·ÈHZê#–®üË/àô¯FÝê(Û²% ºXË9öÀbÁ4f.ù-oý�™XËB…�IÎÒ7¹*@ÃÓŽÍT€hà‘ÌWâ�™Ã$f:µyžn†ó†r„'té�Kv`
|
||||
Ç+dª– œ79s�ò|'=×¢Ìx¶òœÿ„¦œˆeÎ;*à$þ” IÝÆaÏ{–3ŽÅ�Á
|
||||
P“ÍS[ÙL¨3©òQ7éÆò#ãûô0F×ðsE°t§@‘ØQÜ´´ ©:3ÓRíd �¥*MITnŒ£¨H]ØQÁd
|
||||
@òþ—¬rMœŽaO
|
||||
<!--x‹ŒÖ3½4 °XT'ª®ƒ:T£uéWeºádËeú¸è¬Ù7
|
||||
|
||||
ëÒÏ;„sœåµ7m(ýПtl¤RV�)-->
|
||||
rë^yÀ·(¸îéêû$uDòrã/a,I.°ÙUÀœb hˆ`�¾B ë"
|
||||
Ü`HØxȸo1þ[á\8f^æ|\ý‚¢¢zø0(ˆ\ {ƒÄgäÞõ€çâ§Á˜0*\³n¼‹m¶/Äeª±ÿ†ì
|
||||
Ç,½DN2€œº+ùÉ|í0L¡Le*ð¸Ã>­2ëf,eIPOËÅàr—±”80SAŸcFªatç»ãy¤¸ršçÌ¡5ïoõËsžï|¿8˙Φ¬þ,ï¼èà)ÁÌ;øk¡—†dDpÑòø2¢q�fHã!Ë“~ÙŸ-í
|
||||
'g:,æ4y?ýäP‹Z›ž#ÏÕ´Î5AK‰k]ûš›ÒKõ¯‡më€õzØÈƫ؎Ý>B{PЪ.6hf]º?©ÌIŽuO„í�M‚ÌÇÜcµ3˜
|
||||
61‹NÒ[†W£ ¦m¿­{ÂPâvζKnUˆ[ ònĽ±÷n?l:Áž3ušë�¬sP[ÿnn¾çP�…WõÔFj[Â÷
|
||||
¹vÏ™à‰˜xú�'ˆ£ÀÀ†p¸4.êãKÇ¿ÂÁ±o§¢ü"Á|Nk`îʘ
|
||||
<!--•¤7 yþ D-->
|
||||
�
|
||||
jl©ÌuˆËi™0pmC´«+‰÷6¤2­éÏe`(ŽJ]¥iõð3ƒØí"p|ª!:qøFس 6£
|
||||
@­,þŠqüã��oÌÇ®ž�ÖüV�“¶QÇ›Evî¹²É8ÙªS"æÀç‡x± àþ‡�>—Iãg
|
||||
ïÝ>Y‰çN80æ§ ±¾GLLìÕµ…(1Þ¼!8}þ¬“*…ª‰Ùì:e»´œ
|
||||
ª¿ên_6ÂÃSÀ`eG;Ö„CƒCcˆ¿‡4¸yeî¯Í)oøByRm½0?íLîÅ`QÿjÓÙ/ºôÓN|Ý
|
||||
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏ�Iw1ßþZÈN¥Ex£&\(¤á[ɤ€v2€WW-->
|
||||
|
||||
þÙAÜŒÁ¸D5©D a�ævx ?жx°DM@•!h‰àÈ€Ž§®
|
||||
• �á×B`ð¤ªE?›“”Þdƒ"8$Ý`Ki0…OðƒnΓ±µvtžè€I([,¹Ndɨh\'6X
|
||||
�Pã—Š‰Éøt ¢‘¥�˜¬è €ˆ†Ky™FˆŒë`š”yƒ„¨š €š‰ƒM©‡øFQhY„
|
||||
9¶X¯×–í4š¤™Y\)"¹AN]‰xéz÷Gq07�)�©ñ™•Y€r°ŒŽi‹ �z ™ÇäFÍÉT�–ù›
|
||||
ËŽC œwI›üX]‹¹\ëY]þf lïYbj8ŸÈuœbŸÍÅtú©fÞןfBI—“*øé:ÛØUj Ò
|
||||
ˆõ¹ Õp $(~ ¡Ú ¡gù{îp�ZI?¡ƒîÀv:“a¦˜6¢§Ô]Ý‘(ªê)!ŸÚ¢:
|
||||
jwµ¡4ÚvíHÛǘ9ºXhó•üù£¥Á¢VÉ{Dº2š‰(°¤3š¤a÷ +У¥“p¢þò4Vº—
|
||||
E´¥è¤k°7ºhT*€¿èw`ÚžiÄ …S¦Æ¦mê Nêƒ#ú¢f€ xê†ý
|
||||
8z©7�uÚp{Ú=~]7`«h‡ÚsÚg:…zd˜ó§ÎA-vþAñr¦'–AÚ)9–š¢âSi;£…š 1�ªo"ª
|
||||
¦J;“º rº8Ui|é>¡Úœú
|
||||
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì‹s«ÁÖÚàé¨Ûº=¤zŽŸú6áUä
|
||||
Øš¨¿újá
|
||||
¦0®éJ«
|
||||
¯NÕ井öÐVeζ¯õbm¶7ù´Ž-->
|
||||
“ë¥Dfný2»ƒ–0j«�®»ºK;zë¢Íö»—!µ—S»³r>K+6ˆ‹¨XÒ»; CÈ
|
||||
8Ê;¢»ÃÛ/Œ‹¥ž!¬s½VR½óõÏ‹Oâ[/çK¨þ˜Ñ:Í‹\Ý+ Sc:ïËž’º¶ë9Æ»
|
||||
<!--ëSç�½¤tj ½YUÀœãÀ©%
|
||||
Ìró)Á0¨§—³½Ç…Á¬Ì¤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
|
||||
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
|
||||
ô 8ly$
|
||||
8©ÙÅmX2Ùh>—?¯!šHüÁ^LsP,Ÿ«Y‹âá¿ÿtšì‚£Y
|
||||
r¦Éš¥9ÇjžÄ8-ÆÇŒ¶iêPÂbA˜ù‰Ã¸š»³7RœCWRoìŠå MŒŠ�”åt™ Œ›�réÉq
|
||||
<!--Zva&‹Z¤jzÊŠ¬‡7èV)“‹|›ká�!¦*€Á¶öÄ84’Wž¶L�Êñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
|
||||
%|‹Û¬Å$-->
|
||||
|
||||
å�>}�Lê}ÎǨ 5:àŒ|�"þÇwÐsøæ�Nΰ¹#R>~-N‰®èƒ ßcðÞÚÎÑ¥®åGÎâ툉Ýè*‚¸
|
||||
=‚ž ºëâ…­ëÀ>Û·žën^žmèÊëð¼ã>å×Λ«}êØ÷
|
||||
“�Œ¬ËI�Á·AÔNÍëv>]t.âÚLЫþíï¾ñnäÖÜæs¹¿±â°+†
|
||||
¬UØïî•.ç¬ÎìÍ.è´ÞŠG=ðù��‚§ž¯”ë^äÛ®êh-‹ê�ê!i!�ÕvMíiªîþ¾òîá/þÑ-OÖGð,oñº!å’gOâ P�OìOôBþÈàhâ+?ï>ßÊVHÀsaõ™€õ$óSîõ—»�ó8.žß¹
|
||||
~áßÈ©ö»]ò3ëÆt_÷[ïôb¯ç‚Ü÷Õ«@u™ð;zܘ‘Ü@óŽ2’?ùƒ¸ÙlùF ¶™¯ù›N ž0œú£¶¤ÿ0#9:�ß§½ž©Ÿ\#ÃÙæó2é+û‚ÀÓ¸�_äM/ÓtaÚý3”]Ù«¿¸iîaF>ª�}ŒØvÍïMÍ÷Ðëä©îrÜŒöqñ_ÀüªrâF®ò
|
||||
ýþ¸—hT_ã�4sx”ýÝî)ç.Qgû�àŸÏ%ì‹}i´ASû|þð@QÜ
|
||||
$J9€»-̱÷Üô�MØ‘hZ˜¦:°œ*ÏlßxÒ|ϼ¡ÅLÀ� ¬Áfù9BÑdìÁ|«VV„¢�“énKv
|
||||
<!--u贮̮iiçͦt›šV/.²ê}mywu#|Yc‚X|jŽ�x‹dE“)0U
|
||||
�’ T–<W€o zbQ`F�¥2›�³:�°Ctª·‰!™²*¨…º»¢~аz¬†Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
|
||||
-->
|
||||
|
||||
kB�_ƒg 3ʳ8#Þ¬L=0;J¤äÈ@¤F|'i~±© žaÊŠÆg;d*3²”©bPÏ¢TäHô¦?�[†
|
||||
ÄäƒhN6ZM¢D:c*BR!$±ckƒ’V­-uÛ@[øp„Ÿ]¼8ö-1{TήWÏ2ñ� Šp=¸q«Ñ½es.‰„4+#Ëe¦¥W5µekxr䛓/XÍš5Iǃ=kÝúµì˰û�N–2q�Å[r¦yZ£QŽ›ÇÞ�txŠäcK—Ííɹ
|
||||
iþ¡9¼m1oñ¢©/²8îìSté4l’Wm¾9óéÖÛÐãã{{üzÞ¿çøêöÞzà}œàL¨ "˜
|
||||
ÄÐsà¶PGLUúå`MÞ ¡†9¬§Û{pX¸¡wÚw߇¡¨ ‰í "M�UXNx
|
||||
<!--É……¡×ƒ��à¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜�:@Ùw¸ YÝ‹tIã’Ö”˜$…a(å‹X¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
|
||||
+l´á¦
|
||||
j²F:Á.êÆÛj¤³Búî ¼Ê«/£Ö’[н#í+ð¥ænJÞ¸«æ;ð©õ‹¨ _ËðÄŠÒ»*º?
|
||||
ƒÂwœ�Ãyzh±°Øzl2,#oZ2È›r|òË‚°¼$Ç)ë
|
||||
óÍÙÔ,éfs€1Î@/øîÏPõÌiÐH·�ðÃBkLtÒP¯bôS;NÝWÔXÏ
|
||||
ó’dlÍtÖ`�°tžOc óÅa§}AÄ›²1vËjÇmþu+`ÍÍÁ·qwü6˜‚ì½sÞXŸ�¨Ë$xM6àP³-iÉSÚ½AÙˆïë84–ø=xä8^!ä*L>Þ˜ƒk¹Œ({Iè�^!ḘN$ê
|
||||
«®ç!ºû‚ÿÝ ë¯ßoî—Oü¨¾ÿî9í]ñÞ{ñÙÊ®ãlhŽ(èÌÃê¼~ÔS¢|öÕŸzýw¬Ë§|øÝ—*½ŒÈ×­|úåwzþæ“)Nrû¾Ê?*ô¥
|
||||
¿*÷ô7ú½~Múúú÷ª÷Ɉ•S3x*ûí�P”ùH£�°°àó(è¾í-Jƒú™
|
||||
åAF�{#\”g…Áœ)�!),Ô #ÓÂǼ�jþ1œŒþh©²K„9$ƒYè)Ž ˆA È
|
||||
—‡)#1‰Óp"˜ð'Ã%n‰P´‡Ù¨-‹1³¢^\%ƈÔp„CLÖ5Ã
|
||||
<!--a‘�^œßâx¯
|
||||
€±peŒ-->
|
||||
<HR>
|
||||
<H1><A NAME="1">1 Scope</A></H1>
|
||||
<H2><A NAME="1_1">1.1 Identification</A></H2>
|
||||
This configuration management plan document provides the guidelines
|
||||
for development and maintainance of the Common UNIX Printing System
|
||||
("CUPS") Version 1.0 software.
|
||||
<H2><A NAME=1_2>1.2 System Overview</A></H2>
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX vendors
|
||||
@@ -121,7 +223,7 @@ applications under UNIX. </P>
|
||||
<P>CUPS also includes a customized version of GNU GhostScript
|
||||
(currently based off GNU GhostScript 4.03) and an image file RIP that
|
||||
can be used to support non-PostScript printers. </P>
|
||||
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
This configuration management document is organized into the following
|
||||
sections:
|
||||
<UL>
|
||||
@@ -133,8 +235,8 @@ sections:
|
||||
<LI>A - Glossary</LI>
|
||||
<LI>B - Coding Requirements</LI>
|
||||
</UL>
|
||||
<H1><A NAME=2>2 References</A></H1>
|
||||
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
|
||||
<H1><A NAME="2">2 References</A></H1>
|
||||
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
|
||||
The following CUPS documentation is referenced by this document:
|
||||
<UL>
|
||||
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
|
||||
@@ -147,7 +249,7 @@ sections:
|
||||
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
|
||||
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
|
||||
</UL>
|
||||
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
|
||||
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
|
||||
The following non-CUPS documents are referenced by this document:
|
||||
<UL>
|
||||
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
|
||||
@@ -157,22 +259,22 @@ sections:
|
||||
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
|
||||
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
|
||||
</UL>
|
||||
<H1><A NAME=3>3 File Management</A></H1>
|
||||
<H2><A NAME=3_1>3.1 Directory Structure</A></H2>
|
||||
<H1><A NAME="3">3 File Management</A></H1>
|
||||
<H2><A NAME="3_1">3.1 Directory Structure</A></H2>
|
||||
Each source file shall be placed a sub-directory corresponding to the
|
||||
software sub-system it belongs to ("scheduler", "libcups", etc.) To
|
||||
remain compatible with older UNIX filesystems, directory names shall
|
||||
not exceed 16 characters in length.
|
||||
<H2><A NAME=3_2>3.2 Source Files</A></H2>
|
||||
<H2><A NAME="3_2">3.2 Source Files</A></H2>
|
||||
Source files shall be documented and formatted as described in
|
||||
Appendix B, Coding Requirements.
|
||||
<H2><A NAME=3_3>3.3 Configuration Management</A></H2>
|
||||
<H2><A NAME="3_3">3.3 Configuration Management</A></H2>
|
||||
Source files shall be placed under the control of the Concurrent
|
||||
Versions System ("CVS") software. Source files shall be "checked in"
|
||||
with each change so that modifications can be tracked.
|
||||
<P>Documentation on the CVS software is included with the whitepaper,
|
||||
"CVS II: Parallelizing Software Development". </P>
|
||||
<H1><A NAME=4>4 Trouble Report Processing</A></H1>
|
||||
<H1><A NAME="4">4 Trouble Report Processing</A></H1>
|
||||
A Software Trouble Report ("STR") shall be submitted every time a user
|
||||
or vendor experiences a problem with the CUPS software. Trouble reports
|
||||
are maintained in a database with one of the following states:
|
||||
@@ -183,7 +285,7 @@ are maintained in a database with one of the following states:
|
||||
<LI>STR is pending (new STR or additional information available)</LI>
|
||||
</OL>
|
||||
Trouble reports shall be processed using the following steps.
|
||||
<H2><A NAME=4_1>4.1 Classification</A></H2>
|
||||
<H2><A NAME="4_1">4.1 Classification</A></H2>
|
||||
When a trouble report is received it must be classified at one of the
|
||||
following levels:
|
||||
<OL>
|
||||
@@ -199,7 +301,7 @@ following levels:
|
||||
<LI>Specific to an operating system</LI>
|
||||
<LI>Applies to all machines and operating systems</LI>
|
||||
</OL>
|
||||
<H2><A NAME=4_2>4.2 Identification</A></H2>
|
||||
<H2><A NAME="4_2">4.2 Identification</A></H2>
|
||||
Once the level and scope of the trouble report is determined the
|
||||
software sub-system(s) involved with the problem are determined. This
|
||||
may involve additional communication with the user or vendor to isolate
|
||||
@@ -207,16 +309,16 @@ the problem to a specific cause.
|
||||
<P>When the sub-system(s) involved have been identified, an engineer
|
||||
will then determine the change(s) needed and estimate the time required
|
||||
for the change(s). </P>
|
||||
<H2><A NAME=4_3>4.3 Correction</A></H2>
|
||||
<H2><A NAME="4_3">4.3 Correction</A></H2>
|
||||
Corrections are scheduled based upon the severity and complexity of
|
||||
the problem. Once all changes have been made, documented, and tested
|
||||
successfully a new software release snapshot is generated. Additional
|
||||
tests are added as necessary for proper testing of the changes.
|
||||
<H2><A NAME=4_4>4.4 Notification</A></H2>
|
||||
<H2><A NAME="4_4">4.4 Notification</A></H2>
|
||||
The user or vendor is notified when the fix is available or if the
|
||||
problem was caused by user error.
|
||||
<H1><A NAME=5>5 Software Releases</A></H1>
|
||||
<H2><A NAME=5_1>5.1 Version Numbering</A></H2>
|
||||
<H1><A NAME="5">5 Software Releases</A></H1>
|
||||
<H2><A NAME="5_1">5.1 Version Numbering</A></H2>
|
||||
CUPS uses a three-part version number separated by periods to
|
||||
represent the major, minor, and patch release numbers:
|
||||
<UL>
|
||||
@@ -261,22 +363,22 @@ numbers reset to 0:
|
||||
2.0.0 Production release of 2.0.0
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=5_2>5.2 Generation</A></H2>
|
||||
<H2><A NAME="5_2">5.2 Generation</A></H2>
|
||||
Software releases shall be generated for each successfully completed
|
||||
software trouble report. All object and executable files shall be
|
||||
deleted prior to performing a full build to ensure that source files
|
||||
are recompiled.
|
||||
<H2><A NAME=5_3>5.3 Testing</A></H2>
|
||||
<H2><A NAME="5_3">5.3 Testing</A></H2>
|
||||
Software testing shall be conducted according to the CUPS Software
|
||||
Test Plan, CUPS-STP-1.0. Failed tests cause STRs to be generated to
|
||||
correct the problems found.
|
||||
<H2><A NAME=5_4>5.4 Release</A></H2>
|
||||
<H2><A NAME="5_4">5.4 Release</A></H2>
|
||||
When testing has been completed successfully a new distribution image
|
||||
is created from the current CVS code "snapshot". No production release
|
||||
shall contain software that has not passed the appropriate software
|
||||
tests.
|
||||
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
|
||||
<H2><A NAME=6_1>A.1 Terms</A></H2>
|
||||
<H1 TYPE="A" VALUE="1"><A NAME="6">A Glossary</A></H1>
|
||||
<H2><A NAME="6_1">A.1 Terms</A></H2>
|
||||
<DL>
|
||||
<DT>C </DT>
|
||||
<DD>A computer language. </DD>
|
||||
@@ -289,7 +391,7 @@ tests.
|
||||
<DT>socket </DT>
|
||||
<DD>A two-way network communications channel. </DD>
|
||||
</DL>
|
||||
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
|
||||
<H2><A NAME="6_2">A.2 Acronyms</A></H2>
|
||||
<DL>
|
||||
<DT>ASCII </DT>
|
||||
<DD>American Standard Code for Information Interchange </DD>
|
||||
@@ -324,23 +426,23 @@ tests.
|
||||
<DT>TFTP </DT>
|
||||
<DD>Trivial File Transfer Protocol </DD>
|
||||
</DL>
|
||||
<H1><A NAME=7>B Coding Requirements</A></H1>
|
||||
<H1><A NAME="7">B Coding Requirements</A></H1>
|
||||
These coding requirements provide detailed information on source file
|
||||
formatting and documentation content. These guidelines shall be applied
|
||||
to all C and C++ source files provided with CUPS.
|
||||
<H2><A NAME=7_1>B.1 Source Files</A></H2>
|
||||
<H3><A NAME=7_1_1>B.1.1 Naming</A></H3>
|
||||
<H2><A NAME="7_1">B.1 Source Files</A></H2>
|
||||
<H3><A NAME="7_1_1">B.1.1 Naming</A></H3>
|
||||
All source files names shall be 16 characters or less in length to
|
||||
ensure compatibility with older UNIX filesystems. Source files
|
||||
containing functions shall have an extension of ".c" for ANSI C and
|
||||
".cpp" for C++ source files. All other "include" files shall have an
|
||||
extension of ".h".
|
||||
<H3><A NAME=7_1_2>B.1.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_1_2">B.1.2 Documentation</A></H3>
|
||||
The top of each source file shall contain a header giving the name of
|
||||
the file, the purpose or nature of the source file, the copyright and
|
||||
licensing notice, and the functions contained in the file. The file
|
||||
name and revision information is provided by the CVS "$Id: cmp.shtml,v
|
||||
1.3 1999/05/21 20:54:04 mike Exp $" tag:
|
||||
1.4 1999/09/22 20:06:18 mike Exp $" tag:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -376,7 +478,7 @@ name and revision information is provided by the CVS "$Id: cmp.shtml,v
|
||||
</PRE>
|
||||
</UL>
|
||||
The bottom of each source file shall contain a trailer giving the name
|
||||
of the file using the CVS "$Id: cmp.shtml,v 1.3 1999/05/21 20:54:04
|
||||
of the file using the CVS "$Id: cmp.shtml,v 1.4 1999/09/22 20:06:18
|
||||
mike Exp $" tag. The primary purpose of this is to mark the end of a
|
||||
source file; if the trailer is missing it is possible that code has
|
||||
been lost near the end of the file:
|
||||
@@ -387,8 +489,8 @@ been lost near the end of the file:
|
||||
*/
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_2>B.2 Functions</A></H2>
|
||||
<H3><A NAME=7_2_1>B.2.1 Naming</A></H3>
|
||||
<H2><A NAME="7_2">B.2 Functions</A></H2>
|
||||
<H3><A NAME="7_2_1">B.2.1 Naming</A></H3>
|
||||
Functions with a global scope shall be capitalized ("DoThis",
|
||||
"DoThat", "DoSomethingElse", etc.) The only exception to this rule
|
||||
shall be the CUPS interface library functions which may begin with a
|
||||
@@ -396,7 +498,7 @@ prefix word in lowercase ("cupsDoThis", "cupsDoThat", etc.)
|
||||
<P>Functions with a local scope shall be declared "static" and be
|
||||
lowercase with underscores between words ("do_this", "do_that",
|
||||
"do_something_else", etc.) </P>
|
||||
<H3><A NAME=7_2_2>B.2.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_2_2">B.2.2 Documentation</A></H3>
|
||||
Each function shall begin with a comment header describing what the
|
||||
function does, the possible input limits (if any), and the possible
|
||||
output values (if any), and any special information needed:
|
||||
@@ -416,11 +518,11 @@ do_this(float x) /* I - Power value (0.0 <= x <= 1.0) */
|
||||
}
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_3>B.3 Methods</A></H2>
|
||||
<H3><A NAME=7_3_1>B.3.1 Naming</A></H3>
|
||||
<H2><A NAME="7_3">B.3 Methods</A></H2>
|
||||
<H3><A NAME="7_3_1">B.3.1 Naming</A></H3>
|
||||
Methods shall be in lowercase with underscores between words
|
||||
("do_this", "do_that", "do_something_else", etc.)
|
||||
<H3><A NAME=7_3_2>B.3.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_3_2">B.3.2 Documentation</A></H3>
|
||||
Each method shall begin with a comment header describing what the
|
||||
method does, the possible input limits (if any), and the possible
|
||||
output values (if any), and any special information needed:
|
||||
@@ -440,8 +542,8 @@ class::do_this(float x) /* I - Power value (0.0 <= x <= 1.0) */
|
||||
}
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_4>B.4 Variables</A></H2>
|
||||
<H3><A NAME=7_4_1>B.4.1 Naming</A></H3>
|
||||
<H2><A NAME="7_4">B.4 Variables</A></H2>
|
||||
<H3><A NAME="7_4_1">B.4.1 Naming</A></H3>
|
||||
Variables with a global scope shall be capitalized ("ThisVariable",
|
||||
"ThatVariable", "ThisStateVariable", etc.) The only exception to this
|
||||
rule shall be the CUPS interface library global variables which must
|
||||
@@ -452,7 +554,7 @@ possible.
|
||||
between words ("this_variable", "that_variable", etc.) Any local
|
||||
variables shared by functions within a source file shall be declared
|
||||
"static". </P>
|
||||
<H3><A NAME=7_4_2>B.4.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_4_2">B.4.2 Documentation</A></H3>
|
||||
Each variable shall be declared on a separate line and shall be
|
||||
immediately followed by a comment block describing the variable:
|
||||
<UL>
|
||||
@@ -461,12 +563,12 @@ int this_variable; /* The current state of this */
|
||||
int that_variable; /* The current state of that */
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_5>B.5 Types</A></H2>
|
||||
<H3><A NAME=7_5_1>B.5.1 Naming</A></H3>
|
||||
<H2><A NAME="7_5">B.5 Types</A></H2>
|
||||
<H3><A NAME="7_5_1">B.5.1 Naming</A></H3>
|
||||
All type names shall be lowercase with underscores between words and
|
||||
"_t" appended to the end of the name ("this_type_t", "that_type_t",
|
||||
etc.)
|
||||
<H3><A NAME=7_5_2>B.5.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_5_2">B.5.2 Documentation</A></H3>
|
||||
Each type shall have a comment block immediately before the typedef:
|
||||
<UL>
|
||||
<PRE>
|
||||
@@ -476,12 +578,12 @@ etc.)
|
||||
typedef int cups_this_type_t;
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_6>B.6 Structures</A></H2>
|
||||
<H3><A NAME=7_6_1>B.6.1 Naming</A></H3>
|
||||
<H2><A NAME="7_6">B.6 Structures</A></H2>
|
||||
<H3><A NAME="7_6_1">B.6.1 Naming</A></H3>
|
||||
All structure names shall be lowercase with underscores between words
|
||||
and "_str" appended to the end of the name ("this_struct_str",
|
||||
"that_struct_str", etc.)
|
||||
<H3><A NAME=7_6_2>B.6.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_6_2">B.6.2 Documentation</A></H3>
|
||||
Each structure shall have a comment block immediately before the
|
||||
struct and each member shall be documented in accordance with the
|
||||
variable naming policy above:
|
||||
@@ -497,11 +599,11 @@ struct cups_this_struct_str
|
||||
};
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_7>B.7 Classes</A></H2>
|
||||
<H3><A NAME=7_7_1>B.7.1 Naming</A></H3>
|
||||
<H2><A NAME="7_7">B.7 Classes</A></H2>
|
||||
<H3><A NAME="7_7_1">B.7.1 Naming</A></H3>
|
||||
All class names shall be lowercase with underscores between words
|
||||
("this_class", "that_class", etc.)
|
||||
<H3><A NAME=7_7_2>B.7.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_7_2">B.7.2 Documentation</A></H3>
|
||||
Each class shall have a comment block immediately before the class and
|
||||
each member shall be documented in accordance with the variable naming
|
||||
policy above:
|
||||
@@ -517,15 +619,15 @@ class cups_this_class
|
||||
};
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_8>B.8 Constants</A></H2>
|
||||
<H3><A NAME=7_8_1>B.8.1 Naming</A></H3>
|
||||
<H2><A NAME="7_8">B.8 Constants</A></H2>
|
||||
<H3><A NAME="7_8_1">B.8.1 Naming</A></H3>
|
||||
All constant names shall be uppercase with underscored between words
|
||||
("THIS_CONSTANT", "THAT_CONSTANT", etc.) Constants defined for the CUPS
|
||||
interface library must begin with an uppercase prefix
|
||||
("CUPS_THIS_CONSTANT", "CUPS_THAT_CONSTANT", etc.)
|
||||
<P>Typed enumerations shall be used whenever possible to allow for type
|
||||
checking by the compiler. </P>
|
||||
<H3><A NAME=7_8_2>B.8.2 Documentation</A></H3>
|
||||
<H3><A NAME="7_8_2">B.8.2 Documentation</A></H3>
|
||||
Comment blocks shall immediately follow each constant:
|
||||
<UL>
|
||||
<PRE>
|
||||
@@ -536,8 +638,8 @@ enum
|
||||
};
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=7_9>B.9 Code</A></H2>
|
||||
<H3><A NAME=7_9_1>B.9.1 Documentation</A></H3>
|
||||
<H2><A NAME="7_9">B.9 Code</A></H2>
|
||||
<H3><A NAME="7_9_1">B.9.1 Documentation</A></H3>
|
||||
All source code shall utilize block comments within functions to
|
||||
describe the operations being performed by a group of statements:
|
||||
<UL>
|
||||
@@ -564,8 +666,8 @@ do
|
||||
} while (i == (sizeof(array) / sizeof(array[0])));
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=7_9_2>B.9.2 Style</A></H3>
|
||||
<H4 TYPE=a>B.9.2.a Indentation</H4>
|
||||
<H3><A NAME="7_9_2">B.9.2 Style</A></H3>
|
||||
<H4 TYPE="a">B.9.2.a Indentation</H4>
|
||||
All code blocks enclosed by brackets shall begin with the opening
|
||||
brace on a new line. The code then follows starting on a new line after
|
||||
the brace and is indented 2 spaces. The closing brace is then placed on
|
||||
@@ -626,20 +728,20 @@ for (i = sizeof(array) / sizeof(array[0]) - 1; i >= 0; i --)
|
||||
array[i] = STATE_IDLE;
|
||||
</PRE>
|
||||
</UL>
|
||||
<H1 ALIGN=RIGHT><A NAME=8>C Software Trouble Report Form</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="8">C Software Trouble Report Form</A></H1>
|
||||
<CENTER>
|
||||
<TABLE WIDTH=80%>
|
||||
<TR><TH ALIGN=RIGHT>Summary of Problem:</TH><TD ALIGN=LEFT>
|
||||
<TABLE WIDTH="80%">
|
||||
<TR><TH ALIGN="RIGHT">Summary of Problem:</TH><TD ALIGN="LEFT">
|
||||
________________________________________</TD></TR>
|
||||
<TR><TH ALIGN=RIGHT>Problem Severity:</TH><TD ALIGN=LEFT>__1=RFE
|
||||
<TR><TH ALIGN="RIGHT">Problem Severity:</TH><TD ALIGN="LEFT">__1=RFE
|
||||
<BR>__2=Documentation-Error
|
||||
<BR>__3=Unable-to-Print-a-File
|
||||
<BR>__4=Unable-to-Print-to-a-Printer
|
||||
<BR>__5=Unable-to-Print-at-All</TD></TR>
|
||||
<TR><TH ALIGN=RIGHT>Problem Scope:</TH><TD ALIGN=LEFT>__1=Machine
|
||||
<TR><TH ALIGN="RIGHT">Problem Scope:</TH><TD ALIGN="LEFT">__1=Machine
|
||||
__2=Operating-System __3=All</TD></TR>
|
||||
<TR><TH ALIGN=RIGHT VALIGN=TOP>Detailed Description of Problem:</TH><TD ALIGN=LEFT>
|
||||
________________________________________
|
||||
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Detailed Description of Problem:</TH><TD
|
||||
ALIGN="LEFT">________________________________________
|
||||
<BR>________________________________________
|
||||
<BR>________________________________________
|
||||
<BR>________________________________________
|
||||
|
||||
+725
-744
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -35,6 +35,10 @@ The following documentation for CUPS is available on this server:
|
||||
<A HREF="sam.html">HTML</A> |
|
||||
<A HREF="sam.pdf">PDF</A> )
|
||||
|
||||
<LI>Software Programmers Manual (
|
||||
<A HREF="spm.html">HTML</A> |
|
||||
<A HREF="spm.pdf">PDF</A> )
|
||||
|
||||
<LI>Configuration Management Plan (
|
||||
<A HREF="cmp.html">HTML</A> |
|
||||
<A HREF="cmp.pdf">PDF</A> )
|
||||
|
||||
+213
-111
@@ -1,91 +1,193 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>CUPS Interface Design Description</TITLE>
|
||||
<META NAME="AUTHOR" CONTENT="Easy Software Products">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-IDD-1.0">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<STYLE>
|
||||
BODY { font-family: serif; font-size: 11.0pt }
|
||||
H1 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H2 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 20.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
|
||||
<H1>CUPS Interface Design Description</H1></A><BR>
|
||||
<CENTER><A HREF="#CONTENTS"><H1>CUPS Interface Design Description</H1></A><BR>
|
||||
CUPS-IDD-1.0<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-1999, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF=#1>1 Scope</A></B>
|
||||
<BR><B><A HREF="#1">1 Scope</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#1_1>1.1 Identification</A></LI>
|
||||
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
|
||||
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
|
||||
<LI><A HREF="#1_1">1.1 Identification</A></LI>
|
||||
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
|
||||
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#2>2 References</A></B>
|
||||
<B><A HREF="#2">2 References</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
|
||||
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#3>3 Internal Interfaces</A></B>
|
||||
<B><A HREF="#3">3 Internal Interfaces</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1>3.1 Character Set Files</A></LI>
|
||||
<LI><A HREF=#3_2>3.2 Language Files</A></LI>
|
||||
<LI><A HREF=#3_3>3.3 MIME Files</A></LI>
|
||||
<LI><A HREF="#3_1">3.1 Character Set Files</A></LI>
|
||||
<LI><A HREF="#3_2">3.2 Language Files</A></LI>
|
||||
<LI><A HREF="#3_3">3.3 MIME Files</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_3_1>3.3.1 mime.types</A></LI>
|
||||
<LI><A HREF=#3_3_2>3.3.2 mime.convs</A></LI>
|
||||
<LI><A HREF="#3_3_1">3.3.1 mime.types</A></LI>
|
||||
<LI><A HREF="#3_3_2">3.3.2 mime.convs</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_4>3.4 PostScript Printer Description Files</A></LI>
|
||||
<LI><A HREF="#3_4">3.4 PostScript Printer Description Files</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_4_1>3.4.1 CUPS Extensions to PPD Files</A></LI>
|
||||
<LI><A HREF="#3_4_1">3.4.1 CUPS Extensions to PPD Files</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_5>3.5 Scheduler Configuration Files</A></LI>
|
||||
<LI><A HREF="#3_5">3.5 Scheduler Configuration Files</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_5_1>3.5.1 classes.conf</A></LI>
|
||||
<LI><A HREF=#3_5_2>3.5.2 cupsd.conf</A></LI>
|
||||
<LI><A HREF=#3_5_3>3.5.3 printers.conf</A></LI>
|
||||
<LI><A HREF="#3_5_1">3.5.1 classes.conf</A></LI>
|
||||
<LI><A HREF="#3_5_2">3.5.2 cupsd.conf</A></LI>
|
||||
<LI><A HREF="#3_5_3">3.5.3 printers.conf</A></LI>
|
||||
</UL>
|
||||
</UL>
|
||||
<B><A HREF=#4>4 External Interfaces</A></B>
|
||||
<B><A HREF="#4">4 External Interfaces</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#4_1>4.1 AppSocket Protocol</A></LI>
|
||||
<LI><A HREF=#4_2>4.2 CUPS Browsing Protocol</A></LI>
|
||||
<LI><A HREF=#4_3>4.3 CUPS PostScript File</A></LI>
|
||||
<LI><A HREF=#4_4>4.4 CUPS Raster File</A></LI>
|
||||
<LI><A HREF=#4_5>4.5 CUPS Raw Files</A></LI>
|
||||
<LI><A HREF=#4_6>4.6 Internet Printing Protocol</A></LI>
|
||||
<LI><A HREF="#4_1">4.1 AppSocket Protocol</A></LI>
|
||||
<LI><A HREF="#4_2">4.2 CUPS Browsing Protocol</A></LI>
|
||||
<LI><A HREF="#4_3">4.3 CUPS PostScript File</A></LI>
|
||||
<LI><A HREF="#4_4">4.4 CUPS Raster File</A></LI>
|
||||
<LI><A HREF="#4_5">4.5 CUPS Raw Files</A></LI>
|
||||
<LI><A HREF="#4_6">4.6 Internet Printing Protocol</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#4_6_1>4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
|
||||
<LI><A HREF="#4_6_1">4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
|
||||
0x4001)</A></LI>
|
||||
<LI><A HREF=#4_6_2>4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
|
||||
<LI><A HREF=#4_6_3>4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
|
||||
<LI><A HREF=#4_6_4>4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
|
||||
<LI><A HREF="#4_6_2">4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
|
||||
<LI><A HREF="#4_6_3">4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
|
||||
<LI><A HREF="#4_6_4">4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
|
||||
</LI>
|
||||
<LI><A HREF=#4_6_5>4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
|
||||
<LI><A HREF=#4_6_6>4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
|
||||
<LI><A HREF=#4_6_7>4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
|
||||
<LI><A HREF=#4_6_8>4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
|
||||
<LI><A HREF=#4_6_9>4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
|
||||
<LI><A HREF=#4_6_10>4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
|
||||
0x400A)</A></LI>
|
||||
<LI><A HREF="#4_6_5">4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
|
||||
<LI><A HREF="#4_6_6">4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
|
||||
<LI><A HREF="#4_6_7">4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
|
||||
<LI><A HREF="#4_6_8">4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
|
||||
<LI><A HREF="#4_6_9">4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
|
||||
<LI><A HREF="#4_6_10">4.6.10 Set Default Destination (CUPS_SET_DEFAULT
|
||||
= 0x400A)</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#4_7>4.7 Line Printer Daemon Protocol</A></LI>
|
||||
<LI><A HREF=#4_8>4.8 Server Message Block Protocol</A></LI>
|
||||
<LI><A HREF="#4_7">4.7 Line Printer Daemon Protocol</A></LI>
|
||||
<LI><A HREF="#4_8">4.8 Server Message Block Protocol</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#5>5 5 - Directories</A></B>
|
||||
<B><A HREF="#5">5 5 - Directories</A></B>
|
||||
<BR>
|
||||
<BR><B><A HREF=#6>A Glossary</A></B>
|
||||
<BR><B><A HREF="#6">A Glossary</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#6_1>A.1 Terms</A></LI>
|
||||
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
|
||||
<LI><A HREF="#6_1">A.1 Terms</A></LI>
|
||||
<LI><A HREF="#6_2">A.2 Acronyms</A></LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<H1><A NAME=1>1 Scope</A></H1>
|
||||
<H2><A NAME=1_1>1.1 Identification</A></H2>
|
||||
GIF89a¯ÿòÌÌÌ™™™fff333ÿÿÿÿÿÿÿÿÿ!ù,¯ÿBþXºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª2€0p,Ïtmßx®ï
|
||||
|
||||
<!--=�•pH,��Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€�bwz…jn‚‰Š‹Œ�9„†‘!-->
|
||||
;±Ýíˆndý !¸ ž³wà…MƒƒY~¿{,gÚ\‚äé
|
||||
Œ×Ø(tÙî!Ï=Ñ.ûz¯�áÑŸ:ì;Ã9qöíÉë]/¿ºÉ¤Et/†'Îþt9ÀØ–ž_ÙÇ\|W•wArö¸Ý�2Ô×
|
||||
tN°0Tï}�¡û‰$!‚yMxî)ˆš‰Ô�ø@nB°U½ÊwE„§!ŠF H L8B
|
||||
c‰;ždŠ-æDVWdг€h±äÚ“P¶%#(4Fiå•Ï\hŠ:�Re!\ÒÄ—X^¦%€¥À-$E€Ö/úHŽšlââöÌQX
|
||||
|
||||
<!--äÇ"iL :a7‚]›0IZ¡YØø¡‡D}¤–Uj±á
|
||||
^â䙿`Ú@¦5b|šà�«Á±§3Ñ KwÔ\ªB¨±H)+�=¡Ó©"
|
||||
©¢ 8uƒ†¸öŠD§•lþ:„d�RX�ilÌ:Ë!´;¹t+„e<
|
||||
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
|
||||
¸1Nô¯b"œŠüjåÁÂE0…È8ö5GkZ|ÒÁwt„C»ÔQSÇo6ÔÙ�[�W„$²*Ž+4Pb-8¹P1þ'8"‘ФÄ$ Cyê‘„)>ãŠtè`Ð3‡‹¾z"«rE'Âqfä°Ë
|
||||
‘qÂ\|€„Ž¡ôö»%É(.—bڽȀ�íÉ`{¬EÇ1w’ »[Hß`(B6ö�“
|
||||
†')ÊRŽÎa[�ÃrbC!Tå°Œ
|
||||
2Q·ÈHZê#–®üË/àô¯FÝê(Û²% ºXË9öÀbÁ4f.ù-oý�™XËB…�IÎÒ7¹*@ÃÓŽÍT€hà‘ÌWâ�™Ã$f:µyžn†ó†r„'té�Kv`
|
||||
Ç+dª– œ79s�ò|'=×¢Ìx¶òœÿ„¦œˆeÎ;*à$þ” IÝÆaÏ{–3ŽÅ�Á
|
||||
P“ÍS[ÙL¨3©òQ7éÆò#ãûô0F×ðsE°t§@‘ØQÜ´´ ©:3ÓRíd �¥*MITnŒ£¨H]ØQÁd
|
||||
@òþ—¬rMœŽaO
|
||||
<!--x‹ŒÖ3½4 °XT'ª®ƒ:T£uéWeºádËeú¸è¬Ù7
|
||||
|
||||
ëÒÏ;„sœåµ7m(ýПtl¤RV�)-->
|
||||
rë^yÀ·(¸îéêû$uDòrã/a,I.°ÙUÀœb hˆ`�¾B ë"
|
||||
Ü`HØxȸo1þ[á\8f^æ|\ý‚¢¢zø0(ˆ\ {ƒÄgäÞõ€çâ§Á˜0*\³n¼‹m¶/Äeª±ÿ†ì
|
||||
Ç,½DN2€œº+ùÉ|í0L¡Le*ð¸Ã>­2ëf,eIPOËÅàr—±”80SAŸcFªatç»ãy¤¸ršçÌ¡5ïoõËsžï|¿8˙Φ¬þ,ï¼èà)ÁÌ;øk¡—†dDpÑòø2¢q�fHã!Ë“~ÙŸ-í
|
||||
'g:,æ4y?ýäP‹Z›ž#ÏÕ´Î5AK‰k]ûš›ÒKõ¯‡më€õzØÈƫ؎Ý>B{PЪ.6hf]º?©ÌIŽuO„í�M‚ÌÇÜcµ3˜
|
||||
61‹NÒ[†W£ ¦m¿­{ÂPâvζKnUˆ[ ònĽ±÷n?l:Áž3ušë�¬sP[ÿnn¾çP�…WõÔFj[Â÷
|
||||
¹vÏ™à‰˜xú�'ˆ£ÀÀ†p¸4.êãKÇ¿ÂÁ±o§¢ü"Á|Nk`îʘ
|
||||
<!--•¤7 yþ D-->
|
||||
�
|
||||
jl©ÌuˆËi™0pmC´«+‰÷6¤2­éÏe`(ŽJ]¥iõð3ƒØí"p|ª!:qøFس 6£
|
||||
@­,þŠqüã��oÌÇ®ž�ÖüV�“¶QÇ›Evî¹²É8ÙªS"æÀç‡x± àþ‡�>—Iãg
|
||||
ïÝ>Y‰çN80æ§ ±¾GLLìÕµ…(1Þ¼!8}þ¬“*…ª‰Ùì:e»´œ
|
||||
ª¿ên_6ÂÃSÀ`eG;Ö„CƒCcˆ¿‡4¸yeî¯Í)oøByRm½0?íLîÅ`QÿjÓÙ/ºôÓN|Ý
|
||||
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏ�Iw1ßþZÈN¥Ex£&\(¤á[ɤ€v2€WW-->
|
||||
|
||||
þÙAÜŒÁ¸D5©D a�ævx ?жx°DM@•!h‰àÈ€Ž§®
|
||||
• �á×B`ð¤ªE?›“”Þdƒ"8$Ý`Ki0…OðƒnΓ±µvtžè€I([,¹Ndɨh\'6X
|
||||
�Pã—Š‰Éøt ¢‘¥�˜¬è €ˆ†Ky™FˆŒë`š”yƒ„¨š €š‰ƒM©‡øFQhY„
|
||||
9¶X¯×–í4š¤™Y\)"¹AN]‰xéz÷Gq07�)�©ñ™•Y€r°ŒŽi‹ �z ™ÇäFÍÉT�–ù›
|
||||
ËŽC œwI›üX]‹¹\ëY]þf lïYbj8ŸÈuœbŸÍÅtú©fÞןfBI—“*øé:ÛØUj Ò
|
||||
ˆõ¹ Õp $(~ ¡Ú ¡gù{îp�ZI?¡ƒîÀv:“a¦˜6¢§Ô]Ý‘(ªê)!ŸÚ¢:
|
||||
jwµ¡4ÚvíHÛǘ9ºXhó•üù£¥Á¢VÉ{Dº2š‰(°¤3š¤a÷ +У¥“p¢þò4Vº—
|
||||
E´¥è¤k°7ºhT*€¿èw`ÚžiÄ …S¦Æ¦mê Nêƒ#ú¢f€ xê†ý
|
||||
8z©7�uÚp{Ú=~]7`«h‡ÚsÚg:…zd˜ó§ÎA-vþAñr¦'–AÚ)9–š¢âSi;£…š 1�ªo"ª
|
||||
¦J;“º rº8Ui|é>¡Úœú
|
||||
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì‹s«ÁÖÚàé¨Ûº=¤zŽŸú6áUä
|
||||
Øš¨¿újá
|
||||
¦0®éJ«
|
||||
¯NÕ井öÐVeζ¯õbm¶7ù´Ž-->
|
||||
“ë¥Dfný2»ƒ–0j«�®»ºK;zë¢Íö»—!µ—S»³r>K+6ˆ‹¨XÒ»; CÈ
|
||||
8Ê;¢»ÃÛ/Œ‹¥ž!¬s½VR½óõÏ‹Oâ[/çK¨þ˜Ñ:Í‹\Ý+ Sc:ïËž’º¶ë9Æ»
|
||||
<!--ëSç�½¤tj ½YUÀœãÀ©%
|
||||
Ìró)Á0¨§—³½Ç…Á¬Ì¤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
|
||||
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
|
||||
ô 8ly$
|
||||
8©ÙÅmX2Ùh>—?¯!šHüÁ^LsP,Ÿ«Y‹âá¿ÿtšì‚£Y
|
||||
r¦Éš¥9ÇjžÄ8-ÆÇŒ¶iêPÂbA˜ù‰Ã¸š»³7RœCWRoìŠå MŒŠ�”åt™ Œ›�réÉq
|
||||
<!--Zva&‹Z¤jzÊŠ¬‡7èV)“‹|›ká�!¦*€Á¶öÄ84’Wž¶L�Êñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
|
||||
%|‹Û¬Å$-->
|
||||
|
||||
å�>}�Lê}ÎǨ 5:àŒ|�"þÇwÐsøæ�Nΰ¹#R>~-N‰®èƒ ßcðÞÚÎÑ¥®åGÎâ툉Ýè*‚¸
|
||||
=‚ž ºëâ…­ëÀ>Û·žën^žmèÊëð¼ã>å×Λ«}êØ÷
|
||||
“�Œ¬ËI�Á·AÔNÍëv>]t.âÚLЫþíï¾ñnäÖÜæs¹¿±â°+†
|
||||
¬UØïî•.ç¬ÎìÍ.è´ÞŠG=ðù��‚§ž¯”ë^äÛ®êh-‹ê�ê!i!�ÕvMíiªîþ¾òîá/þÑ-OÖGð,oñº!å’gOâ P�OìOôBþÈàhâ+?ï>ßÊVHÀsaõ™€õ$óSîõ—»�ó8.žß¹
|
||||
~áßÈ©ö»]ò3ëÆt_÷[ïôb¯ç‚Ü÷Õ«@u™ð;zܘ‘Ü@óŽ2’?ùƒ¸ÙlùF ¶™¯ù›N ž0œú£¶¤ÿ0#9:�ß§½ž©Ÿ\#ÃÙæó2é+û‚ÀÓ¸�_äM/ÓtaÚý3”]Ù«¿¸iîaF>ª�}ŒØvÍïMÍ÷Ðëä©îrÜŒöqñ_ÀüªrâF®ò
|
||||
ýþ¸—hT_ã�4sx”ýÝî)ç.Qgû�àŸÏ%ì‹}i´ASû|þð@QÜ
|
||||
$J9€»-̱÷Üô�MØ‘hZ˜¦:°œ*ÏlßxÒ|ϼ¡ÅLÀ� ¬Áfù9BÑdìÁ|«VV„¢�“énKv
|
||||
<!--u贮̮iiçͦt›šV/.²ê}mywu#|Yc‚X|jŽ�x‹dE“)0U
|
||||
�’ T–<W€o zbQ`F�¥2›�³:�°Ctª·‰!™²*¨…º»¢~аz¬†Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
|
||||
-->
|
||||
|
||||
kB�_ƒg 3ʳ8#Þ¬L=0;J¤äÈ@¤F|'i~±© žaÊŠÆg;d*3²”©bPÏ¢TäHô¦?�[†
|
||||
ÄäƒhN6ZM¢D:c*BR!$±ckƒ’V­-uÛ@[øp„Ÿ]¼8ö-1{TήWÏ2ñ� Šp=¸q«Ñ½es.‰„4+#Ëe¦¥W5µekxr䛓/XÍš5Iǃ=kÝúµì˰û�N–2q�Å[r¦yZ£QŽ›ÇÞ�txŠäcK—Ííɹ
|
||||
iþ¡9¼m1oñ¢©/²8îìSté4l’Wm¾9óéÖÛÐãã{{üzÞ¿çøêöÞzà}œàL¨ "˜
|
||||
ÄÐsà¶PGLUúå`MÞ ¡†9¬§Û{pX¸¡wÚw߇¡¨ ‰í "M�UXNx
|
||||
<!--É……¡×ƒ��à¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜�:@Ùw¸ YÝ‹tIã’Ö”˜$…a(å‹X¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
|
||||
+l´á¦
|
||||
j²F:Á.êÆÛj¤³Búî ¼Ê«/£Ö’[н#í+ð¥ænJÞ¸«æ;ð©õ‹¨ _ËðÄŠÒ»*º?
|
||||
ƒÂwœ�Ãyzh±°Øzl2,#oZ2È›r|òË‚°¼$Ç)ë
|
||||
óÍÙÔ,éfs€1Î@/øîÏPõÌiÐH·�ðÃBkLtÒP¯bôS;NÝWÔXÏ
|
||||
ó’dlÍtÖ`�°tžOc óÅa§}AÄ›²1vËjÇmþu+`ÍÍÁ·qwü6˜‚ì½sÞXŸ�¨Ë$xM6àP³-iÉSÚ½AÙˆïë84–ø=xä8^!ä*L>Þ˜ƒk¹Œ({Iè�^!ḘN$ê
|
||||
«®ç!ºû‚ÿÝ ë¯ßoî—Oü¨¾ÿî9í]ñÞ{ñÙÊ®ãlhŽ(èÌÃê¼~ÔS¢|öÕŸzýw¬Ë§|øÝ—*½ŒÈ×­|úåwzþæ“)Nrû¾Ê?*ô¥
|
||||
¿*÷ô7ú½~Múúú÷ª÷Ɉ•S3x*ûí�P”ùH£�°°àó(è¾í-Jƒú™
|
||||
åAF�{#\”g…Áœ)�!),Ô #ÓÂǼ�jþ1œŒþh©²K„9$ƒYè)Ž ˆA È
|
||||
—‡)#1‰Óp"˜ð'Ã%n‰P´‡Ù¨-‹1³¢^\%ƈÔp„CLÖ5Ã
|
||||
<!--a‘�^œßâx¯
|
||||
€±peŒ-->
|
||||
<HR>
|
||||
<H1><A NAME="1">1 Scope</A></H1>
|
||||
<H2><A NAME="1_1">1.1 Identification</A></H2>
|
||||
<P>This interface design description document provides detailed file
|
||||
formats, message formats, and program conventions for the Common UNIX
|
||||
Printing System ("CUPS") Version 1.0. </P>
|
||||
<H2><A NAME=1_2>1.2 System Overview</A></H2>
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
<P>The Common UNIX Printing System provides a portable printing layer
|
||||
for UNIX® operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX vendors
|
||||
@@ -101,7 +203,7 @@ applications under UNIX. </P>
|
||||
<P>CUPS also includes a customized version of GNU GhostScript
|
||||
(currently based off GNU GhostScript 4.03) and an image file RIP that
|
||||
can be used to support non-PostScript printers. </P>
|
||||
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
<P>This interface design description document is organized into the
|
||||
following sections: </P>
|
||||
<UL>
|
||||
@@ -112,8 +214,8 @@ following sections: </P>
|
||||
<LI>5 - Directories </LI>
|
||||
<LI>A - Glossary </LI>
|
||||
</UL>
|
||||
<H1><A NAME=2>2 References</A></H1>
|
||||
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
|
||||
<H1><A NAME="2">2 References</A></H1>
|
||||
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
|
||||
<P>The following CUPS documentation is referenced by this document: </P>
|
||||
<UL>
|
||||
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
|
||||
@@ -126,7 +228,7 @@ following sections: </P>
|
||||
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
|
||||
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
|
||||
</UL>
|
||||
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
|
||||
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
|
||||
<P>The following non-CUPS documents are referenced by this document: </P>
|
||||
<UL>
|
||||
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
|
||||
@@ -136,8 +238,8 @@ following sections: </P>
|
||||
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
|
||||
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
|
||||
</UL>
|
||||
<H1><A NAME=3>3 Internal Interfaces</A></H1>
|
||||
<H2><A NAME=3_1>3.1 Character Set Files</A></H2>
|
||||
<H1><A NAME="3">3 Internal Interfaces</A></H1>
|
||||
<H2><A NAME="3_1">3.1 Character Set Files</A></H2>
|
||||
<P>The character set files define a mapping between 8-bit characters
|
||||
and the Unicode character set. They are named using the ISO standard
|
||||
number defined for the character set. Each file consists of up to 256
|
||||
@@ -145,7 +247,7 @@ lines of ASCII text. Each line consists of two hexadecimal numbers; the
|
||||
first number is the character number in the character set (0x00 to
|
||||
0xff), and the second number is the Unicode character number (0x0000 to
|
||||
0xffff). </P>
|
||||
<H2><A NAME=3_2>3.2 Language Files</A></H2>
|
||||
<H2><A NAME="3_2">3.2 Language Files</A></H2>
|
||||
<P>The language files define the default character set and a collection
|
||||
of text messages in that language. They are named by prefixing the
|
||||
string "cups_" to the front of the language specifier (e.g. "cups_en",
|
||||
@@ -170,9 +272,9 @@ messages. The currently recognized values are: </P>
|
||||
<P>The second and succeeding lines define text messages. If the message
|
||||
text is preceded by a number, then the current message number is
|
||||
updated and the text after the number is used. </P>
|
||||
<H2><A NAME=3_3>3.3 MIME Files</A></H2>
|
||||
<H2><A NAME="3_3">3.3 MIME Files</A></H2>
|
||||
<P>CUPS uses two MIME files in its standard configuration. </P>
|
||||
<H3><A NAME=3_3_1>3.3.1 mime.types</A></H3>
|
||||
<H3><A NAME="3_3_1">3.3.1 mime.types</A></H3>
|
||||
<P>The mime.types file defines the recognized file types and consists
|
||||
of 1 or more lines of ASCII text. Comment lines start with the pound
|
||||
("#") character. The backslash ("\") character can be used at the end
|
||||
@@ -203,7 +305,7 @@ operator := "+" | [ logical AND ]
|
||||
<P>The <CODE>int</CODE> and <CODE>short</CODE> rules match look for
|
||||
integers in network byte order (a.k.a. big-endian) with the
|
||||
most-significant byte first. </P>
|
||||
<H3><A NAME=3_3_2>3.3.2 mime.convs</A></H3>
|
||||
<H3><A NAME="3_3_2">3.3.2 mime.convs</A></H3>
|
||||
<P>The mime.types file defines the recognized file filters and consists
|
||||
of 1 or more lines of ASCII text. Comment lines start with the pound
|
||||
("#") character. </P>
|
||||
@@ -212,12 +314,12 @@ of 1 or more lines of ASCII text. Comment lines start with the pound
|
||||
the MIME types are a cost value (0 to 100) and the filter program to
|
||||
use. If the filter program is not specified using the full path then it
|
||||
must reside in the CUPS filter directory. </P>
|
||||
<H2><A NAME=3_4>3.4 PostScript Printer Description Files</A></H2>
|
||||
<H2><A NAME="3_4">3.4 PostScript Printer Description Files</A></H2>
|
||||
<P>The PostScript Printer Description (PPD) file format is described in <A
|
||||
HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf>
|
||||
Adobe TechNote #5003: PostScript Printer Description File Format
|
||||
HREF="http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf">
|
||||
Adobe TechNote #5003: PostScript Printer Description File Format
|
||||
Specification Version 4.3</A>. </P>
|
||||
<H3><A NAME=3_4_1>3.4.1 CUPS Extensions to PPD Files</A></H3>
|
||||
<H3><A NAME="3_4_1">3.4.1 CUPS Extensions to PPD Files</A></H3>
|
||||
<P>CUPS adds several new attributes that are described below. </P>
|
||||
<H4>3.4.1.1 cupsFilter</H4>
|
||||
<P>This string attribute provides a conversion rule of the form: </P>
|
||||
@@ -261,7 +363,7 @@ after</I> the CMY transformation. </P>
|
||||
<P>This required attribute describes which version of the CUPS IDD was
|
||||
used for the PPD file extensions. Currently it must be the string
|
||||
"1.0". </P>
|
||||
<H2><A NAME=3_5>3.5 Scheduler Configuration Files</A></H2>
|
||||
<H2><A NAME="3_5">3.5 Scheduler Configuration Files</A></H2>
|
||||
<P>The scheduler reads three configuration files that define the
|
||||
available printers, classes, and services: </P>
|
||||
<DL>
|
||||
@@ -273,15 +375,15 @@ the scheduler. </DD>
|
||||
<DT>printers.conf </DT>
|
||||
<DD>This file defines all of the printers known to the system. </DD>
|
||||
</DL>
|
||||
<H3><A NAME=3_5_1>3.5.1 classes.conf</A></H3>
|
||||
<H3><A NAME="3_5_1">3.5.1 classes.conf</A></H3>
|
||||
<P>The classes.conf file consists of 1 or more lines of ASCII text.
|
||||
Comment lines start with the pound ("#") character. </P>
|
||||
<P>Each non-blank line starts with the name of a configuration
|
||||
directive followed by its value. The following directives are
|
||||
understood:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=90%>
|
||||
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
|
||||
<TABLE BORDER="1" WIDTH="90%">
|
||||
<TR><TH WIDTH="25%">Directive</TH><TH>Description</TH></TR>
|
||||
<TR><TD><Class name>
|
||||
<BR> </Class></TD><TD>Surrounds a class definition.</TD></TR>
|
||||
<TR><TD><DefaultClass name>
|
||||
@@ -298,15 +400,15 @@ class.</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
</P>
|
||||
<H3><A NAME=3_5_2>3.5.2 cupsd.conf</A></H3>
|
||||
<H3><A NAME="3_5_2">3.5.2 cupsd.conf</A></H3>
|
||||
<P>The cupsd.conf file consists of 1 or more lines of ASCII text.
|
||||
Comment lines start with the pound ("#") character. </P>
|
||||
<P>Each non-blank line starts with the name of a configuration
|
||||
directive followed by its value. The following directives are
|
||||
understood:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=90%>
|
||||
<TR><TH WIDTH=25%>Directive</TH><TH>Default</TH><TH>Description</TH></TR>
|
||||
<TABLE BORDER="1" WIDTH="90%">
|
||||
<TR><TH WIDTH="25%">Directive</TH><TH>Default</TH><TH>Description</TH></TR>
|
||||
<TR><TD>AccessLog</TD><TD>logs/access_log</TD><TD>Specifies the
|
||||
location of the access log file.</TD></TR>
|
||||
<TR><TD>Allow</TD><TD>-</TD><TD>Allows connections from the specified
|
||||
@@ -396,15 +498,15 @@ running external programs.</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
</P>
|
||||
<H3><A NAME=3_5_3>3.5.3 printers.conf</A></H3>
|
||||
<H3><A NAME="3_5_3">3.5.3 printers.conf</A></H3>
|
||||
<P>The printers.conf file consists of 1 or more lines of ASCII text.
|
||||
Comment lines start with the pound ("#") character. </P>
|
||||
<P>Each non-blank line starts with the name of a configuration
|
||||
directive followed by its value. The following directives are
|
||||
understood:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=90%>
|
||||
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
|
||||
<TABLE BORDER="1" WIDTH="90%">
|
||||
<TR><TH WIDTH="25%">Directive</TH><TH>Description</TH></TR>
|
||||
<TR><TD>Accepting</TD><TD>Specifies whether the printer is accepting
|
||||
new jobs. May be the names "Yes" or "No".</TD></TR>
|
||||
<TR><TD><DefaultPrinter name>
|
||||
@@ -423,11 +525,11 @@ be "Idle" or "Stopped".</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
</P>
|
||||
<H1><A NAME=4>4 External Interfaces</A></H1>
|
||||
<H2><A NAME=4_1>4.1 AppSocket Protocol</A></H2>
|
||||
<H1><A NAME="4">4 External Interfaces</A></H1>
|
||||
<H2><A NAME="4_1">4.1 AppSocket Protocol</A></H2>
|
||||
<P>The AppSocket protocol is an 8-bit clean TCP/IP socket connection.
|
||||
The default IP service port is 9100. The URI method name is "socket". </P>
|
||||
<H2><A NAME=4_2>4.2 CUPS Browsing Protocol</A></H2>
|
||||
<H2><A NAME="4_2">4.2 CUPS Browsing Protocol</A></H2>
|
||||
<P>The CUPS Browsing Protocol is a UDP/IP-based broadcast service. By
|
||||
default this service operates on IP service port 631. </P>
|
||||
<P>Each broadcast packet describes the state of a single printer or
|
||||
@@ -443,8 +545,8 @@ printer-state</CODE> and <CODE>printer-uri-supported</CODE> attributes. </P>
|
||||
<P>The <I>type</I> value is a hexadecimal number string representing
|
||||
capability/type bits:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=40%>
|
||||
<TR><TH WIDTH=8%>Bit</TH><TH>Description</TH></TR>
|
||||
<TABLE BORDER="1" WIDTH="40%">
|
||||
<TR><TH WIDTH="8%">Bit</TH><TH>Description</TH></TR>
|
||||
<TR><TD>0</TD><TD>0 = printer
|
||||
<BR> 1 = class</TD></TR>
|
||||
<TR><TD>1</TD><TD>0 = local
|
||||
@@ -467,13 +569,13 @@ capability/type bits:
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
</P>
|
||||
<H2><A NAME=4_3>4.3 CUPS PostScript File</A></H2>
|
||||
<H2><A NAME="4_3">4.3 CUPS PostScript File</A></H2>
|
||||
<P>CUPS PostScript files are device-dependent Adobe PostScript program
|
||||
files. The PostScript language is described in the <A HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf>
|
||||
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
|
||||
files. The PostScript language is described in the <A HREF="http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf">
|
||||
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
|
||||
<P>The MIME type for CUPS PostScript files is <CODE>
|
||||
application/vnd.cups-postscript</CODE>. </P>
|
||||
<H2><A NAME=4_4>4.4 CUPS Raster File</A></H2>
|
||||
<H2><A NAME="4_4">4.4 CUPS Raster File</A></H2>
|
||||
<P>CUPS raster files are device-dependent raster image files that
|
||||
contain a PostScript page device dictionary and device-dependent raster
|
||||
imagery for each page in the document. These files are used to
|
||||
@@ -491,8 +593,8 @@ automatically. </P>
|
||||
Each page starts with a page device dictionary header and is followed
|
||||
immediately by the raster data for that page.
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=80%>
|
||||
<TR><TH WIDTH=10%>Bytes</TH><TH WIDTH=20%>Description</TH><TH>Values</TH>
|
||||
<TABLE BORDER="1" WIDTH="80%">
|
||||
<TR><TH WIDTH="10%">Bytes</TH><TH WIDTH="20%">Description</TH><TH>Values</TH>
|
||||
</TR>
|
||||
<TR><TD>0-63</TD><TD>MediaClass</TD><TD>Nul-terminated ASCII string</TD></TR>
|
||||
<TR><TD>64-127</TD><TD>MediaColor</TD><TD>Nul-terminated ASCII string</TD>
|
||||
@@ -599,40 +701,40 @@ CMYK CMYK)
|
||||
</P>
|
||||
<P>The MIME type for CUPS Raster files is <CODE>
|
||||
application/vnd.cups-raster</CODE>. </P>
|
||||
<H2><A NAME=4_5>4.5 CUPS Raw Files</A></H2>
|
||||
<H2><A NAME="4_5">4.5 CUPS Raw Files</A></H2>
|
||||
<P>Raw files are printer-dependent print files that are in a format
|
||||
suitable to the destination printer (e.g. HP-PCL, HP-RTL, etc.) The
|
||||
MIME type for CUPS Raw files is <CODE>application/vnd.cups-raw</CODE>. </P>
|
||||
<H2><A NAME=4_6>4.6 Internet Printing Protocol</A></H2>
|
||||
<H2><A NAME="4_6">4.6 Internet Printing Protocol</A></H2>
|
||||
<P>The Internet Printing Protocol is described by the following RFCs: </P>
|
||||
<UL>
|
||||
<LI><A HREF=http://www.ietf.org/rfc/rfc2565.txt>RFC 2565: Internet
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2565.txt"> RFC 2565: Internet
|
||||
Printing Protocol/1.0: Encoding and Transport</A></LI>
|
||||
<LI><A HREF=http://www.ietf.org/rfc/rfc2566.txt>RFC 2566: Internet
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2566.txt"> RFC 2566: Internet
|
||||
Printing Protocol/1.0: Model and Semantics</A></LI>
|
||||
<LI><A HREF=http://www.ietf.org/rfc/rfc2567.txt>RFC 2567: Design Goals
|
||||
for an Internet Printing Protocol</A></LI>
|
||||
<LI><A HREF=http://www.ietf.org/rfc/rfc2568.txt>RFC 2568: Rationale for
|
||||
the Structure of the Model and Protocol for the Internet Printing
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2567.txt"> RFC 2567: Design
|
||||
Goals for an Internet Printing Protocol</A></LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2568.txt"> RFC 2568: Rationale
|
||||
for the Structure of the Model and Protocol for the Internet Printing
|
||||
Protocol</A></LI>
|
||||
<LI><A HREF=http://www.ietf.org/rfc/rfc2569.txt>RFC 2569: Mapping
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2569.txt"> RFC 2569: Mapping
|
||||
between LPD and IPP Protocols</A></LI>
|
||||
</UL>
|
||||
<P>The URI method name for IPP is "ipp". </P>
|
||||
<P>CUPS defines the following extension operations to IPP. </P>
|
||||
<H3><A NAME=4_6_1>4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
|
||||
<H3><A NAME="4_6_1">4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
|
||||
0x4001)</A></H3>
|
||||
<P>The get default destination operation returns the printer attributes
|
||||
for the system default printer or class. The only required attributes
|
||||
are <CODE>attributes-charset</CODE> and <CODE>
|
||||
attributes-natural-language</CODE>. </P>
|
||||
<P>Get default destination will only return <CODE>ipp-ok</CODE>. </P>
|
||||
<H3><A NAME=4_6_2>4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
|
||||
<H3><A NAME="4_6_2">4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
|
||||
<P>The get printers operation returns the printer attributes for all
|
||||
printers known to the system. The only required attributes are <CODE>
|
||||
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
|
||||
<P>Get printers will only return <CODE>ipp-ok</CODE>. </P>
|
||||
<H3><A NAME=4_6_3>4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
|
||||
<H3><A NAME="4_6_3">4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
|
||||
<P>The add printer operation adds or replaces the specified printer.
|
||||
The <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
|
||||
and <CODE>printer-uri</CODE> attributes are required. </P>
|
||||
@@ -645,19 +747,19 @@ body. If a valid interface script or PPD file is not provided then the
|
||||
printer is treated as a generic PostScript device. </P>
|
||||
<P>Add printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
|
||||
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
|
||||
<H3><A NAME=4_6_4>4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
|
||||
<H3><A NAME="4_6_4">4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
|
||||
</H3>
|
||||
<P>The delete printer operation removes the specified printer. The only
|
||||
required attributes are <CODE>attributes-charset</CODE>, <CODE>
|
||||
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
|
||||
<P>Delete printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
|
||||
, or <CODE>ipp-not-authorized</CODE>. </P>
|
||||
<H3><A NAME=4_6_5>4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
|
||||
<H3><A NAME="4_6_5">4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
|
||||
<P>The get classes operation returns the printer attributes for all
|
||||
classes known to the system. The only required attributes are <CODE>
|
||||
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
|
||||
<P>Get classes will only return <CODE>ipp-ok</CODE>. </P>
|
||||
<H3><A NAME=4_6_6>4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
|
||||
<H3><A NAME="4_6_6">4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
|
||||
<P>The add class operation adds or replaces the specified class. The <CODE>
|
||||
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
|
||||
and <CODE>printer-uri</CODE> attributes are required. </P>
|
||||
@@ -667,27 +769,27 @@ required when initially adding a printer and optional when modifying a
|
||||
printer. </P>
|
||||
<P>Add class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
|
||||
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
|
||||
<H3><A NAME=4_6_7>4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
|
||||
<H3><A NAME="4_6_7">4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
|
||||
<P>The delete class operation removes the specified class. The only
|
||||
required attributes are <CODE>attributes-charset</CODE>, <CODE>
|
||||
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
|
||||
<P>Delete class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
|
||||
, or <CODE>ipp-not-authorized</CODE>. </P>
|
||||
<H3><A NAME=4_6_8>4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
|
||||
<H3><A NAME="4_6_8">4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
|
||||
<P>The accept jobs operation allows jobs to be accepted by the
|
||||
specified destination. The only required attributes are <CODE>
|
||||
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
|
||||
and <CODE>printer-uri</CODE>. </P>
|
||||
<P>Accept jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
|
||||
, or <CODE>ipp-not-authorized</CODE>. </P>
|
||||
<H3><A NAME=4_6_9>4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
|
||||
<H3><A NAME="4_6_9">4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
|
||||
<P>The reject jobs operation prevents jobs from being accepted by the
|
||||
specified destination. The only required attributes are <CODE>
|
||||
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
|
||||
and <CODE>printer-uri</CODE>. </P>
|
||||
<P>Reject jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
|
||||
, or <CODE>ipp-not-authorized</CODE>. </P>
|
||||
<H3><A NAME=4_6_10>4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
|
||||
<H3><A NAME="4_6_10">4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
|
||||
0x400A)</A></H3>
|
||||
<P>The set default destination operation returns the printer attributes
|
||||
for the system default printer or class. The only required attributes
|
||||
@@ -696,16 +798,16 @@ are <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
|
||||
<P>Set default destination will return <CODE>ipp-ok</CODE>, <CODE>
|
||||
ipp-not-authorized</CODE>, <CODE>ipp-bad-request</CODE>, or <CODE>
|
||||
ipp-not-found</CODE>. </P>
|
||||
<H2><A NAME=4_7>4.7 Line Printer Daemon Protocol</A></H2>
|
||||
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF=http://www.ietf.org/rfc/rfc1179.txt>
|
||||
<H2><A NAME="4_7">4.7 Line Printer Daemon Protocol</A></H2>
|
||||
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF="http://www.ietf.org/rfc/rfc1179.txt">
|
||||
RFC 1179: Line Printer Daemon Protocol</A>. </P>
|
||||
<P>The URI method name for LPD is "lpd". </P>
|
||||
<H2><A NAME=4_8>4.8 Server Message Block Protocol</A></H2>
|
||||
<H2><A NAME="4_8">4.8 Server Message Block Protocol</A></H2>
|
||||
<P>The Server Message Block (SMB) and related Common Internet File
|
||||
System (CIFS) protocols are described at <A HREF=http://anu.samba.org/cifs>
|
||||
System (CIFS) protocols are described at <A HREF="http://anu.samba.org/cifs">
|
||||
http://anu.samba.org/cifs</A>. </P>
|
||||
<P>The URI method name for SMB is "smb". </P>
|
||||
<H1><A NAME=5>5 5 - Directories</A></H1>
|
||||
<H1><A NAME="5">5 5 - Directories</A></H1>
|
||||
<DL>
|
||||
<DT>/usr/bin </DT>
|
||||
<DD>The <CODE>cancel</CODE>, <CODE>lp</CODE>, <CODE>lpq</CODE>, <CODE>
|
||||
@@ -746,8 +848,8 @@ page_log</CODE> files reside here. </DD>
|
||||
<DT>/var/cups/requests </DT>
|
||||
<DD>This directory contains pending print job files. </DD>
|
||||
</DL>
|
||||
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
|
||||
<H2><A NAME=6_1>A.1 Terms</A></H2>
|
||||
<H1 TYPE="A" VALUE="1"><A NAME="6">A Glossary</A></H1>
|
||||
<H2><A NAME="6_1">A.1 Terms</A></H2>
|
||||
<DL>
|
||||
<DT>C </DT>
|
||||
<DD>A computer language. </DD>
|
||||
@@ -760,7 +862,7 @@ page_log</CODE> files reside here. </DD>
|
||||
<DT>socket </DT>
|
||||
<DD>A two-way network communications channel. </DD>
|
||||
</DL>
|
||||
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
|
||||
<H2><A NAME="6_2">A.2 Acronyms</A></H2>
|
||||
<DL>
|
||||
<DT>ASCII </DT>
|
||||
<DD>American Standard Code for Information Interchange </DD>
|
||||
|
||||
+1169
-1170
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+3
-3
@@ -11,7 +11,7 @@
|
||||
<TD><H1 ALIGN=right>An Overview of the<BR>
|
||||
Common UNIX Printing System</H1></DIV>
|
||||
|
||||
<P ALIGN=right>September 14, 1999<BR>
|
||||
<P ALIGN=right>October 4, 1999<BR>
|
||||
Michael Sweet, Easy Software Products<BR>
|
||||
Copyright 1998-1999, All Rights Reserved.</P>
|
||||
</TD>
|
||||
@@ -229,8 +229,8 @@ interfaces to ensure compatibility with existing applications.
|
||||
|
||||
<H2>Licensing</H2>
|
||||
|
||||
CUPS is available under the terms of the Aladdin Free Public
|
||||
License, which means that it is basically free except for commercial
|
||||
CUPS is available under the terms of the GNU General Public License
|
||||
which means that it is basically free except for binary-only
|
||||
distribution. Vendors wishing to license CUPS for their printing
|
||||
solution should contact Easy Software Products at:
|
||||
|
||||
|
||||
Arquivo binário não exibido.
+265
-116
@@ -1,99 +1,207 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>CUPS Software Administrators Manual</TITLE>
|
||||
<META NAME="AUTHOR" CONTENT="Easy Software Products">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.0">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.3">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<STYLE>
|
||||
BODY { font-family: serif; font-size: 11.0pt }
|
||||
H1 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H2 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 20.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
|
||||
<H1>CUPS Software Administrators Manual</H1></A><BR>
|
||||
CUPS-SAM-1.0.0<BR>
|
||||
<CENTER><A HREF="#CONTENTS"><H1>CUPS Software Administrators Manual</H1></A><BR>
|
||||
CUPS-SAM-1.0.3<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-1999, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF=#1>Preface</A></B>
|
||||
<BR><B><A HREF="#1">Preface</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#1_1>System Overview</A></LI>
|
||||
<LI><A HREF=#1_2>Document Overview</A></LI>
|
||||
<LI><A HREF="#1_1">System Overview</A></LI>
|
||||
<LI><A HREF="#1_2">Document Overview</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#2>1 - Printing System Overview</A></B>
|
||||
<B><A HREF="#2">1 - Printing System Overview</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#2_1>The Printing Problem</A></LI>
|
||||
<LI><A HREF=#2_2>The Technology</A></LI>
|
||||
<LI><A HREF=#2_3>Jobs</A></LI>
|
||||
<LI><A HREF=#2_4>Classes</A></LI>
|
||||
<LI><A HREF=#2_5>Filters</A></LI>
|
||||
<LI><A HREF=#2_6>Printer Drivers</A></LI>
|
||||
<LI><A HREF=#2_7>Networking</A></LI>
|
||||
<LI><A HREF="#2_1">The Printing Problem</A></LI>
|
||||
<LI><A HREF="#2_2">The Technology</A></LI>
|
||||
<LI><A HREF="#2_3">Jobs</A></LI>
|
||||
<LI><A HREF="#2_4">Classes</A></LI>
|
||||
<LI><A HREF="#2_5">Filters</A></LI>
|
||||
<LI><A HREF="#2_6">Printer Drivers</A></LI>
|
||||
<LI><A HREF="#2_7">Networking</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#3>2 - Building and Installing CUPS</A></B>
|
||||
<B><A HREF="#3">2 - Building and Installing CUPS</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1>Installing a Source Distribution</A></LI>
|
||||
<LI><A HREF="#3_1">Installing a Source Distribution</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1_1>Requirements</A></LI>
|
||||
<LI><A HREF=#3_1_2>Compiling CUPS</A></LI>
|
||||
<LI><A HREF=#3_1_3>Installing the Software</A></LI>
|
||||
<LI><A HREF=#3_1_4>Running the Software</A></LI>
|
||||
<LI><A HREF="#3_1_1">Requirements</A></LI>
|
||||
<LI><A HREF="#3_1_2">Compiling CUPS</A></LI>
|
||||
<LI><A HREF="#3_1_3">Installing the Software</A></LI>
|
||||
<LI><A HREF="#3_1_4">Running the Software</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#binary>Installing a Binary Distribution</A></LI>
|
||||
<LI><A HREF="#binary">Installing a Binary Distribution</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#4>3 - Printer Queue Management</A></B>
|
||||
<B><A HREF="#4">3 - Printer Queue Management</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#4_1>The lpadmin Command</A></LI>
|
||||
<LI><A HREF=#4_2>Adding and Modifying Printers</A></LI>
|
||||
<LI><A HREF="#4_1">The lpadmin Command</A></LI>
|
||||
<LI><A HREF="#4_2">Adding and Modifying Printers</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#4_2_1>Using Standard Printer Drivers</A></LI>
|
||||
<LI><A HREF="#4_2_1">Using Standard Printer Drivers</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#4_3>Removing Printers</A></LI>
|
||||
<LI><A HREF=#4_4>Printer Classes</A></LI>
|
||||
<LI><A HREF=#4_5>Setting the Default Printer</A></LI>
|
||||
<LI><A HREF=#4_6>Starting and Stopping Printers</A></LI>
|
||||
<LI><A HREF=#4_7>Accepting and Rejecting Print Jobs</A></LI>
|
||||
<LI><A HREF="#4_3">Removing Printers</A></LI>
|
||||
<LI><A HREF="#4_4">Printer Classes</A></LI>
|
||||
<LI><A HREF="#4_5">Setting the Default Printer</A></LI>
|
||||
<LI><A HREF="#4_6">Starting and Stopping Printers</A></LI>
|
||||
<LI><A HREF="#4_7">Accepting and Rejecting Print Jobs</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#5>4 - Printing System Management</A></B>
|
||||
<B><A HREF="#5">4 - Printing System Management</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#5_1>Changing the Configuration Files</A></LI>
|
||||
<LI><A HREF=#5_2>Temporary Files</A></LI>
|
||||
<LI><A HREF=#5_3>Network Configuration</A></LI>
|
||||
<LI><A HREF="#5_1">Changing the Configuration Files</A></LI>
|
||||
<LI><A HREF="#5_2">Temporary Files</A></LI>
|
||||
<LI><A HREF="#5_3">Network Configuration</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#5_3_1>Port</A></LI>
|
||||
<LI><A HREF=#5_3_2>Listen</A></LI>
|
||||
<LI><A HREF=#5_3_3>BrowsePort</A></LI>
|
||||
<LI><A HREF=#5_3_4>BrowseAddress</A></LI>
|
||||
<LI><A HREF="#5_3_1">Port</A></LI>
|
||||
<LI><A HREF="#5_3_2">Listen</A></LI>
|
||||
<LI><A HREF="#5_3_3">BrowsePort</A></LI>
|
||||
<LI><A HREF="#5_3_4">BrowseAddress</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#5_4>Printer Security</A></LI>
|
||||
<LI><A HREF="#5_4">Printer Security</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#5_4_1>Location</A></LI>
|
||||
<LI><A HREF=#5_4_2>Order</A></LI>
|
||||
<LI><A HREF=#5_4_3>Allow</A></LI>
|
||||
<LI><A HREF=#5_4_4>Deny</A></LI>
|
||||
<LI><A HREF=#5_4_5>AuthType</A></LI>
|
||||
<LI><A HREF=#5_4_6>AuthClass</A></LI>
|
||||
<LI><A HREF=#5_4_7>AuthGroupName</A></LI>
|
||||
<LI><A HREF=#5_4_8>SystemGroup</A></LI>
|
||||
<LI><A HREF="#5_4_1">Location</A></LI>
|
||||
<LI><A HREF="#5_4_2">Order</A></LI>
|
||||
<LI><A HREF="#5_4_3">Allow</A></LI>
|
||||
<LI><A HREF="#5_4_4">Deny</A></LI>
|
||||
<LI><A HREF="#5_4_5">AuthType</A></LI>
|
||||
<LI><A HREF="#5_4_6">AuthClass</A></LI>
|
||||
<LI><A HREF="#5_4_7">AuthGroupName</A></LI>
|
||||
<LI><A HREF="#5_4_8">SystemGroup</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#5_5>File Formats</A></LI>
|
||||
<LI><A HREF="#5_5">File Formats</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#5_5_1>mime.types</A></LI>
|
||||
<LI><A HREF=#5_5_2>mime.convs</A></LI>
|
||||
<LI><A HREF="#5_5_1">mime.types</A></LI>
|
||||
<LI><A HREF="#5_5_2">mime.convs</A></LI>
|
||||
</UL>
|
||||
</UL>
|
||||
<B><A HREF=#6>5 - Printer Accounting</A></B>
|
||||
<B><A HREF="#6">5 - Printer Accounting</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#6_1>Where to Find the Log Files</A></LI>
|
||||
<LI><A HREF=#6_2>The access_log File</A></LI>
|
||||
<LI><A HREF=#6_3>The error_log File</A></LI>
|
||||
<LI><A HREF=#6_4>The page_log File</A></LI>
|
||||
<LI><A HREF="#6_1">Where to Find the Log Files</A></LI>
|
||||
<LI><A HREF="#6_2">The access_log File</A></LI>
|
||||
<LI><A HREF="#6_3">The error_log File</A></LI>
|
||||
<LI><A HREF="#6_4">The page_log File</A></LI>
|
||||
</UL>
|
||||
<B><A HREF="#7">A - Using CUPS with SAMBA</A></B>
|
||||
<UL>
|
||||
<LI><A HREF="#7_1">What is SAMBA?</A></LI>
|
||||
<LI><A HREF="#7_2">How Do I Configure SAMBA for CUPS?</A></LI>
|
||||
<LI><A HREF="#7_3">How Do I Configure CUPS for SAMBA?</A></LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
|
||||
GIF89a¯ÿòÌÌÌ™™™fff333ÿÿÿÿÿÿÿÿÿ!ù,¯ÿBþXºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª2€0p,Ïtmßx®ï
|
||||
|
||||
<!--=�•pH,��Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€�bwz…jn‚‰Š‹Œ�9„†‘!-->
|
||||
;±Ýíˆndý !¸ ž³wà…MƒƒY~¿{,gÚ\‚äé
|
||||
Œ×Ø(tÙî!Ï=Ñ.ûz¯�áÑŸ:ì;Ã9qöíÉë]/¿ºÉ¤Et/†'Îþt9ÀØ–ž_ÙÇ\|W•wArö¸Ý�2Ô×
|
||||
tN°0Tï}�¡û‰$!‚yMxî)ˆš‰Ô�ø@nB°U½ÊwE„§!ŠF H L8B
|
||||
c‰;ždŠ-æDVWdг€h±äÚ“P¶%#(4Fiå•Ï\hŠ:�Re!\ÒÄ—X^¦%€¥À-$E€Ö/úHŽšlââöÌQX
|
||||
|
||||
<!--äÇ"iL :a7‚]›0IZ¡YØø¡‡D}¤–Uj±á
|
||||
^â䙿`Ú@¦5b|šà�«Á±§3Ñ KwÔ\ªB¨±H)+�=¡Ó©"
|
||||
©¢ 8uƒ†¸öŠD§•lþ:„d�RX�ilÌ:Ë!´;¹t+„e<
|
||||
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
|
||||
¸1Nô¯b"œŠüjåÁÂE0…È8ö5GkZ|ÒÁwt„C»ÔQSÇo6ÔÙ�[�W„$²*Ž+4Pb-8¹P1þ'8"‘ФÄ$ Cyê‘„)>ãŠtè`Ð3‡‹¾z"«rE'Âqfä°Ë
|
||||
‘qÂ\|€„Ž¡ôö»%É(.—bڽȀ�íÉ`{¬EÇ1w’ »[Hß`(B6ö�“
|
||||
†')ÊRŽÎa[�ÃrbC!Tå°Œ
|
||||
2Q·ÈHZê#–®üË/àô¯FÝê(Û²% ºXË9öÀbÁ4f.ù-oý�™XËB…�IÎÒ7¹*@ÃÓŽÍT€hà‘ÌWâ�™Ã$f:µyžn†ó†r„'té�Kv`
|
||||
Ç+dª– œ79s�ò|'=×¢Ìx¶òœÿ„¦œˆeÎ;*à$þ” IÝÆaÏ{–3ŽÅ�Á
|
||||
P“ÍS[ÙL¨3©òQ7éÆò#ãûô0F×ðsE°t§@‘ØQÜ´´ ©:3ÓRíd �¥*MITnŒ£¨H]ØQÁd
|
||||
@òþ—¬rMœŽaO
|
||||
<!--x‹ŒÖ3½4 °XT'ª®ƒ:T£uéWeºádËeú¸è¬Ù7
|
||||
|
||||
ëÒÏ;„sœåµ7m(ýПtl¤RV�)-->
|
||||
rë^yÀ·(¸îéêû$uDòrã/a,I.°ÙUÀœb hˆ`�¾B ë"
|
||||
Ü`HØxȸo1þ[á\8f^æ|\ý‚¢¢zø0(ˆ\ {ƒÄgäÞõ€çâ§Á˜0*\³n¼‹m¶/Äeª±ÿ†ì
|
||||
Ç,½DN2€œº+ùÉ|í0L¡Le*ð¸Ã>­2ëf,eIPOËÅàr—±”80SAŸcFªatç»ãy¤¸ršçÌ¡5ïoõËsžï|¿8˙Φ¬þ,ï¼èà)ÁÌ;øk¡—†dDpÑòø2¢q�fHã!Ë“~ÙŸ-í
|
||||
'g:,æ4y?ýäP‹Z›ž#ÏÕ´Î5AK‰k]ûš›ÒKõ¯‡më€õzØÈƫ؎Ý>B{PЪ.6hf]º?©ÌIŽuO„í�M‚ÌÇÜcµ3˜
|
||||
61‹NÒ[†W£ ¦m¿­{ÂPâvζKnUˆ[ ònĽ±÷n?l:Áž3ušë�¬sP[ÿnn¾çP�…WõÔFj[Â÷
|
||||
¹vÏ™à‰˜xú�'ˆ£ÀÀ†p¸4.êãKÇ¿ÂÁ±o§¢ü"Á|Nk`îʘ
|
||||
<!--•¤7 yþ D-->
|
||||
�
|
||||
jl©ÌuˆËi™0pmC´«+‰÷6¤2­éÏe`(ŽJ]¥iõð3ƒØí"p|ª!:qøFس 6£
|
||||
@­,þŠqüã��oÌÇ®ž�ÖüV�“¶QÇ›Evî¹²É8ÙªS"æÀç‡x± àþ‡�>—Iãg
|
||||
ïÝ>Y‰çN80æ§ ±¾GLLìÕµ…(1Þ¼!8}þ¬“*…ª‰Ùì:e»´œ
|
||||
ª¿ên_6ÂÃSÀ`eG;Ö„CƒCcˆ¿‡4¸yeî¯Í)oøByRm½0?íLîÅ`QÿjÓÙ/ºôÓN|Ý
|
||||
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏ�Iw1ßþZÈN¥Ex£&\(¤á[ɤ€v2€WW-->
|
||||
|
||||
þÙAÜŒÁ¸D5©D a�ævx ?жx°DM@•!h‰àÈ€Ž§®
|
||||
• �á×B`ð¤ªE?›“”Þdƒ"8$Ý`Ki0…OðƒnΓ±µvtžè€I([,¹Ndɨh\'6X
|
||||
�Pã—Š‰Éøt ¢‘¥�˜¬è €ˆ†Ky™FˆŒë`š”yƒ„¨š €š‰ƒM©‡øFQhY„
|
||||
9¶X¯×–í4š¤™Y\)"¹AN]‰xéz÷Gq07�)�©ñ™•Y€r°ŒŽi‹ �z ™ÇäFÍÉT�–ù›
|
||||
ËŽC œwI›üX]‹¹\ëY]þf lïYbj8ŸÈuœbŸÍÅtú©fÞןfBI—“*øé:ÛØUj Ò
|
||||
ˆõ¹ Õp $(~ ¡Ú ¡gù{îp�ZI?¡ƒîÀv:“a¦˜6¢§Ô]Ý‘(ªê)!ŸÚ¢:
|
||||
jwµ¡4ÚvíHÛǘ9ºXhó•üù£¥Á¢VÉ{Dº2š‰(°¤3š¤a÷ +У¥“p¢þò4Vº—
|
||||
E´¥è¤k°7ºhT*€¿èw`ÚžiÄ …S¦Æ¦mê Nêƒ#ú¢f€ xê†ý
|
||||
8z©7�uÚp{Ú=~]7`«h‡ÚsÚg:…zd˜ó§ÎA-vþAñr¦'–AÚ)9–š¢âSi;£…š 1�ªo"ª
|
||||
¦J;“º rº8Ui|é>¡Úœú
|
||||
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì‹s«ÁÖÚàé¨Ûº=¤zŽŸú6áUä
|
||||
Øš¨¿újá
|
||||
¦0®éJ«
|
||||
¯NÕ井öÐVeζ¯õbm¶7ù´Ž-->
|
||||
“ë¥Dfný2»ƒ–0j«�®»ºK;zë¢Íö»—!µ—S»³r>K+6ˆ‹¨XÒ»; CÈ
|
||||
8Ê;¢»ÃÛ/Œ‹¥ž!¬s½VR½óõÏ‹Oâ[/çK¨þ˜Ñ:Í‹\Ý+ Sc:ïËž’º¶ë9Æ»
|
||||
<!--ëSç�½¤tj ½YUÀœãÀ©%
|
||||
Ìró)Á0¨§—³½Ç…Á¬Ì¤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
|
||||
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
|
||||
ô 8ly$
|
||||
8©ÙÅmX2Ùh>—?¯!šHüÁ^LsP,Ÿ«Y‹âá¿ÿtšì‚£Y
|
||||
r¦Éš¥9ÇjžÄ8-ÆÇŒ¶iêPÂbA˜ù‰Ã¸š»³7RœCWRoìŠå MŒŠ�”åt™ Œ›�réÉq
|
||||
<!--Zva&‹Z¤jzÊŠ¬‡7èV)“‹|›ká�!¦*€Á¶öÄ84’Wž¶L�Êñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
|
||||
%|‹Û¬Å$-->
|
||||
|
||||
å�>}�Lê}ÎǨ 5:àŒ|�"þÇwÐsøæ�Nΰ¹#R>~-N‰®èƒ ßcðÞÚÎÑ¥®åGÎâ툉Ýè*‚¸
|
||||
=‚ž ºëâ…­ëÀ>Û·žën^žmèÊëð¼ã>å×Λ«}êØ÷
|
||||
“�Œ¬ËI�Á·AÔNÍëv>]t.âÚLЫþíï¾ñnäÖÜæs¹¿±â°+†
|
||||
¬UØïî•.ç¬ÎìÍ.è´ÞŠG=ðù��‚§ž¯”ë^äÛ®êh-‹ê�ê!i!�ÕvMíiªîþ¾òîá/þÑ-OÖGð,oñº!å’gOâ P�OìOôBþÈàhâ+?ï>ßÊVHÀsaõ™€õ$óSîõ—»�ó8.žß¹
|
||||
~áßÈ©ö»]ò3ëÆt_÷[ïôb¯ç‚Ü÷Õ«@u™ð;zܘ‘Ü@óŽ2’?ùƒ¸ÙlùF ¶™¯ù›N ž0œú£¶¤ÿ0#9:�ß§½ž©Ÿ\#ÃÙæó2é+û‚ÀÓ¸�_äM/ÓtaÚý3”]Ù«¿¸iîaF>ª�}ŒØvÍïMÍ÷Ðëä©îrÜŒöqñ_ÀüªrâF®ò
|
||||
ýþ¸—hT_ã�4sx”ýÝî)ç.Qgû�àŸÏ%ì‹}i´ASû|þð@QÜ
|
||||
$J9€»-̱÷Üô�MØ‘hZ˜¦:°œ*ÏlßxÒ|ϼ¡ÅLÀ� ¬Áfù9BÑdìÁ|«VV„¢�“énKv
|
||||
<!--u贮̮iiçͦt›šV/.²ê}mywu#|Yc‚X|jŽ�x‹dE“)0U
|
||||
�’ T–<W€o zbQ`F�¥2›�³:�°Ctª·‰!™²*¨…º»¢~аz¬†Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
|
||||
-->
|
||||
|
||||
kB�_ƒg 3ʳ8#Þ¬L=0;J¤äÈ@¤F|'i~±© žaÊŠÆg;d*3²”©bPÏ¢TäHô¦?�[†
|
||||
ÄäƒhN6ZM¢D:c*BR!$±ckƒ’V­-uÛ@[øp„Ÿ]¼8ö-1{TήWÏ2ñ� Šp=¸q«Ñ½es.‰„4+#Ëe¦¥W5µekxr䛓/XÍš5Iǃ=kÝúµì˰û�N–2q�Å[r¦yZ£QŽ›ÇÞ�txŠäcK—Ííɹ
|
||||
iþ¡9¼m1oñ¢©/²8îìSté4l’Wm¾9óéÖÛÐãã{{üzÞ¿çøêöÞzà}œàL¨ "˜
|
||||
ÄÐsà¶PGLUúå`MÞ ¡†9¬§Û{pX¸¡wÚw߇¡¨ ‰í "M�UXNx
|
||||
<!--É……¡×ƒ��à¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜�:@Ùw¸ YÝ‹tIã’Ö”˜$…a(å‹X¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
|
||||
+l´á¦
|
||||
j²F:Á.êÆÛj¤³Búî ¼Ê«/£Ö’[н#í+ð¥ænJÞ¸«æ;ð©õ‹¨ _ËðÄŠÒ»*º?
|
||||
ƒÂwœ�Ãyzh±°Øzl2,#oZ2È›r|òË‚°¼$Ç)ë
|
||||
óÍÙÔ,éfs€1Î@/øîÏPõÌiÐH·�ðÃBkLtÒP¯bôS;NÝWÔXÏ
|
||||
ó’dlÍtÖ`�°tžOc óÅa§}AÄ›²1vËjÇmþu+`ÍÍÁ·qwü6˜‚ì½sÞXŸ�¨Ë$xM6àP³-iÉSÚ½AÙˆïë84–ø=xä8^!ä*L>Þ˜ƒk¹Œ({Iè�^!ḘN$ê
|
||||
«®ç!ºû‚ÿÝ ë¯ßoî—Oü¨¾ÿî9í]ñÞ{ñÙÊ®ãlhŽ(èÌÃê¼~ÔS¢|öÕŸzýw¬Ë§|øÝ—*½ŒÈ×­|úåwzþæ“)Nrû¾Ê?*ô¥
|
||||
¿*÷ô7ú½~Múúú÷ª÷Ɉ•S3x*ûí�P”ùH£�°°àó(è¾í-Jƒú™
|
||||
åAF�{#\”g…Áœ)�!),Ô #ÓÂǼ�jþ1œŒþh©²K„9$ƒYè)Ž ˆA È
|
||||
—‡)#1‰Óp"˜ð'Ã%n‰P´‡Ù¨-‹1³¢^\%ƈÔp„CLÖ5Ã
|
||||
<!--a‘�^œßâx¯
|
||||
€±peŒ-->
|
||||
<HR>
|
||||
<H1 ALIGN="RIGHT"><A NAME="1">Preface</A></H1>
|
||||
This software administrators manual provides printer administration
|
||||
information for the Common UNIX Printing System ("CUPS") Version 1.0.0.
|
||||
<H2><A NAME=1_1>System Overview</A></H2>
|
||||
information for the Common UNIX Printing System ("CUPS") Version 1.0.3.
|
||||
<H2><A NAME="1_1">System Overview</A></H2>
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX vendors
|
||||
@@ -109,7 +217,7 @@ applications under UNIX. </P>
|
||||
<P>CUPS also includes a customized version of GNU GhostScript
|
||||
(currently based off GNU GhostScript 4.03) and an image file RIP that
|
||||
can be used to support non-PostScript printers. </P>
|
||||
<H2><A NAME=1_2>Document Overview</A></H2>
|
||||
<H2><A NAME="1_2">Document Overview</A></H2>
|
||||
<P>This software administrators manual is organized into the following
|
||||
sections:</P>
|
||||
<UL>
|
||||
@@ -118,11 +226,12 @@ sections:</P>
|
||||
<LI>3 - Printer Queue Management</LI>
|
||||
<LI>4 - Printing System Management</LI>
|
||||
<LI>5 - Printer Accounting</LI>
|
||||
<LI>A - Using CUPS with SAMBA</LI>
|
||||
</UL>
|
||||
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="2">1 - Printing System Overview</A></H1>
|
||||
<P>This chapter provides an overview of how the Common UNIX Printing
|
||||
System works. </P>
|
||||
<H2><A NAME=2_1>The Printing Problem</A></H2>
|
||||
<H2><A NAME="2_1">The Printing Problem</A></H2>
|
||||
<P>For years <I>the printing problem</I> has plagued UNIX®. Unlike
|
||||
Microsoft® Windows® or MacOS, UNIX has no standard interface or system
|
||||
in place for supporting printers. Among the solutions previously
|
||||
@@ -144,7 +253,7 @@ that supports a wide range of file formats with little or no effort.
|
||||
Since CUPS provides both the System V and Berkeley printing commands,
|
||||
users (and applications) can reap the benefits of this new technology
|
||||
with no changes. </P>
|
||||
<H2><A NAME=2_2>The Technology</A></H2>
|
||||
<H2><A NAME="2_2">The Technology</A></H2>
|
||||
<P>CUPS is based upon an emerging Internet standard called the Internet
|
||||
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
|
||||
and printer server manufacturers, and will be supported by the next
|
||||
@@ -164,17 +273,17 @@ using their web browser. </P>
|
||||
Basic authentication and domain or IP-based access control. Digest
|
||||
authentication and TLS encryption will be available in future versions
|
||||
of CUPS. </P>
|
||||
<H2><A NAME=2_3>Jobs</A></H2>
|
||||
<H2><A NAME="2_3">Jobs</A></H2>
|
||||
<P>Each file that is submitted for printing is called a <I>job</I>.
|
||||
Jobs are identified by a unique number starting at 1 and are assigned
|
||||
to a particular destination (usually a printer). Jobs can also have
|
||||
options associated with them such as media size, number of copies, and
|
||||
priority. </P>
|
||||
<H2><A NAME=2_4>Classes</A></H2>
|
||||
<H2><A NAME="2_4">Classes</A></H2>
|
||||
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
|
||||
sent to a class are forwarded to the first available printer in the
|
||||
class. </P>
|
||||
<H2><A NAME=2_5>Filters</A></H2>
|
||||
<H2><A NAME="2_5">Filters</A></H2>
|
||||
<P>Filters allow a user or application to print many types of files
|
||||
without extra effort. Print jobs sent to a CUPS server are filtered
|
||||
before sending them to a printer. Some filters convert job files to
|
||||
@@ -190,13 +299,13 @@ printer. </P>
|
||||
<P>CUPS provides backends for printing over parallel and serial ports,
|
||||
and over the network via the JetDirect (AppSocket), Server Message
|
||||
Block, and Line Printer Daemon protocols. </P>
|
||||
<H2><A NAME=2_6>Printer Drivers</A></H2>
|
||||
<H2><A NAME="2_6">Printer Drivers</A></H2>
|
||||
<P>Printer drivers in CUPS consist of one of more filters specific to a
|
||||
printer. CUPS includes a sample printer driver for Hewlett-Packard
|
||||
LaserJet and DeskJet printers. While this driver does not generate
|
||||
optimal output for different printer models, it does demonstrate how
|
||||
you can write your own printer drivers and incorporate them into CUPS. </P>
|
||||
<H2><A NAME=2_7>Networking</A></H2>
|
||||
<H2><A NAME="2_7">Networking</A></H2>
|
||||
<P>Printers and classes on the local system are automatically shared
|
||||
with other systems on the network. This allows you to setup one system
|
||||
to print to a printer and use this system as a printer server or spool
|
||||
@@ -212,13 +321,13 @@ example, so that you aren't relying on a single system for printing.
|
||||
Because this also works with printer classes, you can setup multiple
|
||||
servers and printers and never worry about a "single point of failure"
|
||||
unless all of the printers and servers goes down! </P>
|
||||
<H1 ALIGN=RIGHT><A NAME=3>2 - Building and Installing CUPS</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="3">2 - Building and Installing CUPS</A></H1>
|
||||
<P>This chapter shows how to build and install the Common UNIX Printing
|
||||
System. If you are installing a binary distribution from the CUPS web
|
||||
site, proceed to the section titled, <A HREF=#binary>Installing a
|
||||
site, proceed to the section titled, <A HREF="#binary">Installing a
|
||||
Binary Distribution</A>. </P>
|
||||
<H2><A NAME=3_1>Installing a Source Distribution</A></H2>
|
||||
<H3><A NAME=3_1_1>Requirements</A></H3>
|
||||
<H2><A NAME="3_1">Installing a Source Distribution</A></H2>
|
||||
<H3><A NAME="3_1_1">Requirements</A></H3>
|
||||
<P>You'll need an ANSI C compiler to build CUPS on your system. As its
|
||||
name implies, CUPS is designed to run on the UNIX operating system,
|
||||
however the CUPS interface library and most of the filters and backends
|
||||
@@ -229,24 +338,24 @@ reduced functionality. Easy Software Products maintains a mirror of the
|
||||
current versions of these libraries at: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
<A HREF=ftp://ftp.easysw.com/pub/libraries>ftp://ftp.easysw.com/pub/libraries</A>
|
||||
<A HREF="ftp://ftp.easysw.com/pub/libraries">ftp://ftp.easysw.com/pub/libraries</A>
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>If you make changes to the man pages you'll need GNU groff or
|
||||
another nroff-like package. GNU groff is available from: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
<A HREF=ftp://ftp.gnu.org/pub/groff>ftp://ftp.gnu.org/pub/groff</A>
|
||||
<A HREF="ftp://ftp.gnu.org/pub/groff">ftp://ftp.gnu.org/pub/groff</A>
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The documentation is formatted using the HTMLDOC software. If you
|
||||
need to make changes you can get the HTMLDOC software from: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
<A HREF=http://www.easysw.com/htmldoc>http://www.easysw.com/htmldoc</A>
|
||||
<A HREF="http://www.easysw.com/htmldoc">http://www.easysw.com/htmldoc</A>
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=3_1_2>Compiling CUPS</A></H3>
|
||||
<H3><A NAME="3_1_2">Compiling CUPS</A></H3>
|
||||
<P>CUPS uses GNU autoconf to configure the makefiles and source code
|
||||
for your system. To configure CUPS for your system type: </P>
|
||||
<UL>
|
||||
@@ -281,14 +390,14 @@ LDFLAGS</CODE> environment variables prior to running configure: </P>
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>to build the software. </P>
|
||||
<H3><A NAME=3_1_3>Installing the Software</A></H3>
|
||||
<H3><A NAME="3_1_3">Installing the Software</A></H3>
|
||||
<P>To install the software type: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
% make install ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=3_1_4>Running the Software</A></H3>
|
||||
<H3><A NAME="3_1_4">Running the Software</A></H3>
|
||||
Once you have installed the software you can start the CUPS daemon by
|
||||
typing:
|
||||
<UL>
|
||||
@@ -296,7 +405,7 @@ typing:
|
||||
% /usr/sbin/cupsd & ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=binary>Installing a Binary Distribution</A></H2>
|
||||
<H2><A NAME="binary">Installing a Binary Distribution</A></H2>
|
||||
<P>We are currently distributing CUPS binary distributions in TAR
|
||||
format with installation and removal scripts. </P>
|
||||
<UL><B>WARNING:</B>
|
||||
@@ -316,16 +425,16 @@ installation script with: </P>
|
||||
</UL>
|
||||
<P>After asking you a few yes/no questions the CUPS software will be
|
||||
installed and the scheduler will be started automatically. </P>
|
||||
<H1 ALIGN=RIGHT><A NAME=4>3 - Printer Queue Management</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="4">3 - Printer Queue Management</A></H1>
|
||||
<P>This chapter discusses how to add, modify, and delete print queues
|
||||
on your system. </P>
|
||||
<H2><A NAME=4_1>The lpadmin Command</A></H2>
|
||||
<H2><A NAME="4_1">The lpadmin Command</A></H2>
|
||||
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
|
||||
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
|
||||
is also a System V printing system command, it is located in the <CODE>
|
||||
/usr/lib</CODE> directory instead of a more common one like <CODE>
|
||||
/usr/bin</CODE> or <CODE>/usr/sbin</CODE>. </P>
|
||||
<H2><A NAME=4_2>Adding and Modifying Printers</A></H2>
|
||||
<H2><A NAME="4_2">Adding and Modifying Printers</A></H2>
|
||||
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE>
|
||||
command with the "-p" option: </P>
|
||||
<UL>
|
||||
@@ -366,6 +475,7 @@ character:
|
||||
</UL>
|
||||
</DD>
|
||||
<DT>smb://[username:password@]hostname/queue </DT>
|
||||
<DT>smb://[username:password@]workgroup/hostname/queue </DT>
|
||||
<DD>Sends all output to the specified SMB (Windows) printer queue
|
||||
using the SAMBA software. </DD>
|
||||
<DT>socket://hostname[:port] </DT>
|
||||
@@ -376,7 +486,7 @@ protocol. The <I>port</I> parameter defaults to 9100. </DD>
|
||||
file to use for this printer. Many options (such as media size, etc.)
|
||||
will not be available if you omit this part of the <CODE>lpadmin</CODE>
|
||||
command. </P>
|
||||
<H3><A NAME=4_2_1>Using Standard Printer Drivers</A></H3>
|
||||
<H3><A NAME="4_2_1">Using Standard Printer Drivers</A></H3>
|
||||
<P>The <CODE>lpadmin</CODE> command allows you to use "standard" PPD
|
||||
files and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
|
||||
directory with the "-m" option: </P>
|
||||
@@ -394,7 +504,7 @@ would use: </P>
|
||||
% /usr/lib/lpadmin -pDeskJet -E -vparallel:/dev/par1 -mdeskjet.ppd ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=4_3>Removing Printers</A></H2>
|
||||
<H2><A NAME="4_3">Removing Printers</A></H2>
|
||||
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE>
|
||||
command with the "-x" option: </P>
|
||||
<UL>
|
||||
@@ -402,7 +512,7 @@ would use: </P>
|
||||
% /usr/lib/lpadmin -x<I>printer</I> ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=4_4>Printer Classes</A></H2>
|
||||
<H2><A NAME="4_4">Printer Classes</A></H2>
|
||||
<P>CUPS allows you to group similar printers in a <I>printer class</I>.
|
||||
When a user sends a print job to a class, the job will be processed by
|
||||
the first available printer in that class. </P>
|
||||
@@ -420,7 +530,7 @@ remove a class just use the "-x" option: </P>
|
||||
% /usr/lib/lpadmin -x<I>class</I> ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<H2><A NAME=4_5>Setting the Default Printer</A></H2>
|
||||
<H2><A NAME="4_5">Setting the Default Printer</A></H2>
|
||||
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
|
||||
command with the "-d" option: </P>
|
||||
<UL>
|
||||
@@ -429,7 +539,7 @@ remove a class just use the "-x" option: </P>
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The <I>destination</I> argument is the name of the printer or class. </P>
|
||||
<H2><A NAME=4_6>Starting and Stopping Printers</A></H2>
|
||||
<H2><A NAME="4_6">Starting and Stopping Printers</A></H2>
|
||||
<P>The <CODE>enable</CODE> and <CODE>disable</CODE> commands start and
|
||||
stop printer queues, respectively: </P>
|
||||
<UL>
|
||||
@@ -442,7 +552,7 @@ stop printer queues, respectively: </P>
|
||||
won't actually print any files until they are restarted. This is useful
|
||||
if the printer malfunctions and you need time to correct the problem.
|
||||
Any queues jobs are printed after the printer is enabled (started). </P>
|
||||
<H2><A NAME=4_7>Accepting and Rejecting Print Jobs</A></H2>
|
||||
<H2><A NAME="4_7">Accepting and Rejecting Print Jobs</A></H2>
|
||||
<P>The <CODE>accept</CODE> and <CODE>reject</CODE> commands accept and
|
||||
reject print jobs for the named printer, respectively: </P>
|
||||
<UL>
|
||||
@@ -456,9 +566,9 @@ jobs. A printer can also be rejecting new print jobs while it finishes
|
||||
those that have been queued. This is useful for when you must perform
|
||||
maintenance on the printer and will not have it available to users for
|
||||
a long period of time. </P>
|
||||
<H1 ALIGN=RIGHT><A NAME=5>4 - Printing System Management</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="5">4 - Printing System Management</A></H1>
|
||||
<P>This chapter shows how you can configure the CUPS server. </P>
|
||||
<H2><A NAME=5_1>Changing the Configuration Files</A></H2>
|
||||
<H2><A NAME="5_1">Changing the Configuration Files</A></H2>
|
||||
<P>All of the server configuration files are located in the <CODE>
|
||||
/var/cups/conf</CODE> directory. Once you have made a change to a file
|
||||
you need to restart the CUPS server by sending it a HUP signal or using
|
||||
@@ -471,7 +581,7 @@ the supplied script "<CODE>cups.sh</CODE>": </P>
|
||||
<P>The binary distribution installs the script in the <CODE>init.d</CODE>
|
||||
directory with the name <CODE>lp</CODE> or <CODE>lpd</CODE> depending
|
||||
on the vendor-supplied printing system. </P>
|
||||
<H2><A NAME=5_2>Temporary Files</A></H2>
|
||||
<H2><A NAME="5_2">Temporary Files</A></H2>
|
||||
<P>Normally CUPS puts all of its temporary files in <CODE>/var/tmp</CODE>
|
||||
. If you'd like to change this directory you'll need to edit the <CODE>
|
||||
/var/cups/conf/cupsd.conf</CODE> file. </P>
|
||||
@@ -492,19 +602,19 @@ TempDir <I>/foo/bar/tmp</I>
|
||||
</UL>
|
||||
<P>Finally, restart the server as outlined in the first section of this
|
||||
chapter. </P>
|
||||
<H2><A NAME=5_3>Network Configuration</A></H2>
|
||||
<H2><A NAME="5_3">Network Configuration</A></H2>
|
||||
<P>The default configuration of the CUPS server listens for connections
|
||||
from all network interfaces on port 631 (the standard IPP port).
|
||||
Administration functions are limited to local connections with the
|
||||
appropriate username and password. </P>
|
||||
<P>If you'd like to limit access to your system you'll need to edit the <CODE>
|
||||
/var/cups/conf/cupsd.conf</CODE> file. </P>
|
||||
<H3><A NAME=5_3_1>Port</A></H3>
|
||||
<H3><A NAME="5_3_1">Port</A></H3>
|
||||
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
|
||||
all interfaces. Besides the standard IPP port (631) you can also setup
|
||||
your server to listen on the HTTP port (80) to use your CUPS server as
|
||||
a standard web server as well. </P>
|
||||
<H3><A NAME=5_3_2>Listen</A></H3>
|
||||
<H3><A NAME="5_3_2">Listen</A></H3>
|
||||
<P>The <CODE>Listen</CODE> directive specifies a listening address and
|
||||
port, extending the functionality of the <CODE>Port</CODE> directive.
|
||||
If you want to allow connections only from the local machine you can
|
||||
@@ -518,7 +628,7 @@ Listen 127.0.0.1:631
|
||||
<P>If you want to limit access to a specific network/subnet, make sure
|
||||
you specify only the network address and not your system's network
|
||||
address! </P>
|
||||
<H3><A NAME=5_3_3>BrowsePort</A></H3>
|
||||
<H3><A NAME="5_3_3">BrowsePort</A></H3>
|
||||
<P>The <CODE>BrowsePort</CODE> directive controls which port is
|
||||
monitored for remote printers. By default it is set to the IPP port
|
||||
(631), however you can change it as needed. </P>
|
||||
@@ -526,7 +636,7 @@ monitored for remote printers. By default it is set to the IPP port
|
||||
<P>You must set the <CODE>BrowsePort</CODE> to the same value on all
|
||||
of the systems that you want to see. </P>
|
||||
</UL>
|
||||
<H3><A NAME=5_3_4>BrowseAddress</A></H3>
|
||||
<H3><A NAME="5_3_4">BrowseAddress</A></H3>
|
||||
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast
|
||||
address to use when sending printer status updates over the network.
|
||||
The default browse address is <CODE>255.255.255.255</CODE> which will
|
||||
@@ -536,10 +646,10 @@ send printer information to all subnets. </P>
|
||||
bits, printer browsing (and in fact all broadcast reception) will not
|
||||
work. This problem appears to be fixed in HP-UX 11.0. </P>
|
||||
</UL>
|
||||
<H2><A NAME=5_4>Printer Security</A></H2>
|
||||
<H2><A NAME="5_4">Printer Security</A></H2>
|
||||
<P>CUPS provides IP and domain-name based access control and Basic
|
||||
authentication for authentication. </P>
|
||||
<H3><A NAME=5_4_1>Location</A></H3>
|
||||
<H3><A NAME="5_4_1">Location</A></H3>
|
||||
<P>The <CODE>Location</CODE> directive defines access control for a
|
||||
specific HTTP directory. The following pseudo directories are provided
|
||||
by the CUPS server: </P>
|
||||
@@ -570,7 +680,7 @@ Allow From 127.0.0.1
|
||||
</Location>
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=5_4_2>Order</A></H3>
|
||||
<H3><A NAME="5_4_2">Order</A></H3>
|
||||
<P>The <CODE>Order</CODE> directive defines the default access control.
|
||||
The following values are supported: </P>
|
||||
<UL>
|
||||
@@ -581,7 +691,7 @@ listed in an <CODE>Allow</CODE> directive. </LI>
|
||||
</UL>
|
||||
<P>The <CODE>Order</CODE> directive must appear inside a <CODE>Location</CODE>
|
||||
directive. </P>
|
||||
<H3><A NAME=5_4_3>Allow</A></H3>
|
||||
<H3><A NAME="5_4_3">Allow</A></H3>
|
||||
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address,
|
||||
or network that is allowed access to the server: </P>
|
||||
<UL>
|
||||
@@ -603,7 +713,7 @@ Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
Allow</CODE> directives can be used to allow access for multiple hosts
|
||||
or networks. The <CODE>/mm</CODE> notation specifies a CIDR netmask:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=80%>
|
||||
<TABLE BORDER="1" WIDTH="80%">
|
||||
<TR><TH>mm</TH><TH>netmask</TH></TR>
|
||||
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
|
||||
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
|
||||
@@ -618,7 +728,7 @@ or networks. The <CODE>/mm</CODE> notation specifies a CIDR netmask:
|
||||
</P>
|
||||
<P>The <CODE>Allow</CODE> directive must appear inside a <CODE>Location</CODE>
|
||||
directive. </P>
|
||||
<H3><A NAME=5_4_4>Deny</A></H3>
|
||||
<H3><A NAME="5_4_4">Deny</A></H3>
|
||||
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
|
||||
network that is allowed access to the server: </P>
|
||||
<UL>
|
||||
@@ -640,7 +750,7 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
directives can be used to allow access for multiple hosts or networks.
|
||||
The <CODE>/mm</CODE> notation specifies a CIDR netmask:
|
||||
<CENTER>
|
||||
<TABLE BORDER=1 WIDTH=80%>
|
||||
<TABLE BORDER="1" WIDTH="80%">
|
||||
<TR><TH>mm</TH><TH>netmask</TH></TR>
|
||||
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
|
||||
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
|
||||
@@ -655,7 +765,7 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
</P>
|
||||
<P>The <CODE>Deny</CODE> directive must appear inside a <CODE>Location</CODE>
|
||||
directive. </P>
|
||||
<H3><A NAME=5_4_5>AuthType</A></H3>
|
||||
<H3><A NAME="5_4_5">AuthType</A></H3>
|
||||
<P>The <CODE>AuthType</CODE> directive defines the type of
|
||||
authentication to perform: </P>
|
||||
<UL>
|
||||
@@ -666,7 +776,7 @@ using the UNIX password and group files. </LI>
|
||||
</UL>
|
||||
<P>The <CODE>AuthType</CODE> directive must appear inside a <CODE>
|
||||
Location</CODE> directive. </P>
|
||||
<H3><A NAME=5_4_6>AuthClass</A></H3>
|
||||
<H3><A NAME="5_4_6">AuthClass</A></H3>
|
||||
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>
|
||||
Basic</CODE> access is required: </P>
|
||||
<UL>
|
||||
@@ -682,21 +792,21 @@ AuthGroupName</CODE> directive. </LI>
|
||||
</UL>
|
||||
<P>The <CODE>AuthClass</CODE> directive must appear inside a <CODE>
|
||||
Location</CODE> directive. </P>
|
||||
<H3><A NAME=5_4_7>AuthGroupName</A></H3>
|
||||
<H3><A NAME="5_4_7">AuthGroupName</A></H3>
|
||||
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for <CODE>
|
||||
Group</CODE> authentication. </P>
|
||||
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a <CODE>
|
||||
Location</CODE> directive. </P>
|
||||
<H3><A NAME=5_4_8>SystemGroup</A></H3>
|
||||
<H3><A NAME="5_4_8">SystemGroup</A></H3>
|
||||
<P>The <CODE>SystemGroup</CODE> directive sets the administration group
|
||||
used when authenticating the <CODE>System</CODE> type. It defaults to
|
||||
the "sys" group. </P>
|
||||
<H2><A NAME=5_5>File Formats</A></H2>
|
||||
<H2><A NAME="5_5">File Formats</A></H2>
|
||||
<P>CUPS provides a MIME-based file typing and filtering mechanism to
|
||||
convert files to a printable format for each printer. The <CODE>
|
||||
mime.types</CODE> and <CODE>mime.convs</CODE> files define the file
|
||||
type and filters that are available on the system. </P>
|
||||
<H3><A NAME=5_5_1>mime.types</A></H3>
|
||||
<H3><A NAME="5_5_1">mime.types</A></H3>
|
||||
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
|
||||
of the file starts with the MIME type and may be followed by one or
|
||||
more file type recognition rules. For example, the <CODE>text/html</CODE>
|
||||
@@ -738,7 +848,7 @@ identical (network or "big-endian" byte order) </LI>
|
||||
<LI><CODE>locale("string")</CODE> - True if current locale matches
|
||||
string </LI>
|
||||
</UL>
|
||||
<H3><A NAME=5_5_2>mime.convs</A></H3>
|
||||
<H3><A NAME="5_5_2">mime.convs</A></H3>
|
||||
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs
|
||||
that are known to the system. Each line consists of: </P>
|
||||
<UL>
|
||||
@@ -775,13 +885,13 @@ program job user title options [filename]
|
||||
<P>If specified, the <I>filename</I> argument defines a file to read
|
||||
when filtering, otherwise the filter must read from the standard input.
|
||||
All filtered output must go to the standard output. </P>
|
||||
<H1 ALIGN=RIGHT><A NAME=6>5 - Printer Accounting</A></H1>
|
||||
<H1 ALIGN="RIGHT"><A NAME="6">5 - Printer Accounting</A></H1>
|
||||
This chapter describes the CUPS log files.
|
||||
<H2><A NAME=6_1>Where to Find the Log Files</A></H2>
|
||||
<H2><A NAME="6_1">Where to Find the Log Files</A></H2>
|
||||
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
|
||||
directory. You can change this by editing the <CODE>
|
||||
/var/cups/conf/cupsd.conf</CODE> configuration file. </P>
|
||||
<H2><A NAME=6_2>The access_log File</A></H2>
|
||||
<H2><A NAME="6_2">The access_log File</A></H2>
|
||||
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is
|
||||
accessed by a web browser or CUPS/IPP client. Each line is in the
|
||||
so-called "Common Log Format" used by many web servers and web
|
||||
@@ -820,7 +930,7 @@ above. </P>
|
||||
<P>The <I>bytes</I> field contains the number of bytes in the request.
|
||||
For POST requests the <I>bytes</I> field contains the number of bytes
|
||||
of non-IPP data that is received from the client. </P>
|
||||
<H2><A NAME=6_3>The error_log File</A></H2>
|
||||
<H2><A NAME="6_3">The error_log File</A></H2>
|
||||
<P>The <CODE>error_log</CODE> file lists messages from the scheduler
|
||||
(errors, warnings, etc.): </P>
|
||||
<UL>
|
||||
@@ -843,7 +953,7 @@ I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
|
||||
page started printing. The format of this field is identical to the <I>
|
||||
data-time</I> field in the <CODE>access_log</CODE> file. </P>
|
||||
<P>The <I>message</I> fields contains a free-form textual message. </P>
|
||||
<H2><A NAME=6_4>The page_log File</A></H2>
|
||||
<H2><A NAME="6_4">The page_log File</A></H2>
|
||||
<P>The <CODE>page_log</CODE> file lists each page that is sent to a
|
||||
printer. Each line contains the following information: </P>
|
||||
<UL>
|
||||
@@ -869,5 +979,44 @@ data-time</I> field in the <CODE>access_log</CODE> file. </P>
|
||||
number and number of copies being printed of that page. For printer
|
||||
that can not produce copies on their own, the <I>num-pages</I> field
|
||||
will always be 1. </P>
|
||||
<H1 ALIGN="RIGHT"><A NAME="7">A - Using CUPS with SAMBA</A></H1>
|
||||
<P>This appendix describes how to use CUPS with SAMBA. </P>
|
||||
<H2><A NAME="7_1">What is SAMBA?</A></H2>
|
||||
<P>In case you haven't heard of SAMBA, it is basically a software
|
||||
package that allows you to configure your UNIX system as a Windows file
|
||||
and printer server. It also allows you to access files and printers on
|
||||
a Windows system. Like CUPS, SAMBA is free software. </P>
|
||||
<P>SAMBA version 2.0.6 is the first release of SAMBA that supports
|
||||
CUPS. You can download SAMBA from: </P>
|
||||
<P ALIGN="CENTER"><A HREF="http://www.samba.org">http://www.samba.org</A>
|
||||
</P>
|
||||
<H2><A NAME="7_2">How Do I Configure SAMBA for CUPS?</A></H2>
|
||||
<P>To configure SAMBA for CUPS, edit the <CODE>smb.conf</CODE> file and
|
||||
replace the existing printing commands and options with the line: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
printing = cups
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>That's all there is to it! Remote users will now be able to browse
|
||||
and print to printers on your system. </P>
|
||||
<H2><A NAME="7_3">How Do I Configure CUPS for SAMBA?</A></H2>
|
||||
<P>To configure CUPS for SAMBA, run the following command: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
% ln -s `which smbspool` /var/cups/backend/smb ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The <CODE>smbspool</CODE> program is provided with SAMBA starting
|
||||
with SAMBA 2.0.6. Once you have made the link you can use the <CODE>smb</CODE>
|
||||
method in the device URI for your printers: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
% lpadmin -p <I>printer</I> -v smb://<I>hostname/printer</I> ... ENTER
|
||||
% lpadmin -p <I>printer</I> -v smb://<I>workgroup/hostname/printer</I> ... ENTER
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The second form only needs to be used if the Windows system is in a
|
||||
different workgroup. </P>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
+1019
-933
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+52
-2
@@ -1,7 +1,7 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.0">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.3">
|
||||
<META NAME="Author" CONTENT="Easy Software Products">
|
||||
<TITLE>CUPS Software Administrators Manual</TITLE>
|
||||
</HEAD>
|
||||
@@ -10,7 +10,7 @@
|
||||
<H1 ALIGN=RIGHT>Preface</H1>
|
||||
|
||||
This software administrators manual provides printer administration
|
||||
information for the Common UNIX Printing System ("CUPS") Version 1.0.0.
|
||||
information for the Common UNIX Printing System ("CUPS") Version 1.0.3.
|
||||
|
||||
<H2>System Overview</H2>
|
||||
|
||||
@@ -42,6 +42,7 @@ can be used to support non-PostScript printers.
|
||||
<LI>3 - Printer Queue Management</LI>
|
||||
<LI>4 - Printing System Management</LI>
|
||||
<LI>5 - Printer Accounting</LI>
|
||||
<LI>A - Using CUPS with SAMBA</LI>
|
||||
</UL>
|
||||
|
||||
<H1 ALIGN=RIGHT>1 - Printing System Overview</H1>
|
||||
@@ -344,6 +345,7 @@ CUPS:
|
||||
</UL>
|
||||
|
||||
<DT>smb://[username:password@]hostname/queue
|
||||
<DT>smb://[username:password@]workgroup/hostname/queue
|
||||
<DD>Sends all output to the specified SMB (Windows) printer queue
|
||||
using the SAMBA software.
|
||||
|
||||
@@ -1034,5 +1036,53 @@ field in the <CODE>access_log</CODE> file.
|
||||
and number of copies being printed of that page. For printer that can not
|
||||
produce copies on their own, the <I>num-pages</I> field will always be 1.
|
||||
|
||||
<H1 ALIGN="RIGHT">A - Using CUPS with SAMBA</H1>
|
||||
|
||||
<P>This appendix describes how to use CUPS with SAMBA.
|
||||
|
||||
<H2>What is SAMBA?</H2>
|
||||
|
||||
<P>In case you haven't heard of SAMBA, it is basically a software package
|
||||
that allows you to configure your UNIX system as a Windows file and printer
|
||||
server. It also allows you to access files and printers on a Windows system.
|
||||
Like CUPS, SAMBA is free software.
|
||||
|
||||
<P>SAMBA version 2.0.6 is the first release of SAMBA that supports CUPS.
|
||||
You can download SAMBA from:
|
||||
|
||||
<P ALIGN="CENTER"><A HREF="http://www.samba.org">http://www.samba.org</A></P>
|
||||
|
||||
<H2>How Do I Configure SAMBA for CUPS?</H2>
|
||||
|
||||
<P>To configure SAMBA for CUPS, edit the <CODE>smb.conf</CODE> file and
|
||||
replace the existing printing commands and options with the line:
|
||||
|
||||
<UL><PRE>
|
||||
printing = cups
|
||||
</PRE></UL>
|
||||
|
||||
<P>That's all there is to it! Remote users will now be able to browse and
|
||||
print to printers on your system.
|
||||
|
||||
<H2>How Do I Configure CUPS for SAMBA?</H2>
|
||||
|
||||
<P>To configure CUPS for SAMBA, run the following command:
|
||||
|
||||
<UL><PRE>
|
||||
% ln -s `which smbspool` /var/cups/backend/smb ENTER
|
||||
</PRE></UL>
|
||||
|
||||
<P>The <CODE>smbspool</CODE> program is provided with SAMBA starting with
|
||||
SAMBA 2.0.6. Once you have made the link you can use the <CODE>smb</CODE>
|
||||
method in the device URI for your printers:
|
||||
|
||||
<UL><PRE>
|
||||
% lpadmin -p <I>printer</I> -v smb://<I>hostname/printer</I> ... ENTER
|
||||
% lpadmin -p <I>printer</I> -v smb://<I>workgroup/hostname/printer</I> ... ENTER
|
||||
</PRE></UL>
|
||||
|
||||
<P>The second form only needs to be used if the Windows system is in a
|
||||
different workgroup.
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
+227
-125
@@ -1,110 +1,212 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>CUPS Software Design Description</TITLE>
|
||||
<META NAME="AUTHOR" CONTENT="Easy Software Products">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SDD-1.0">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<STYLE>
|
||||
BODY { font-family: serif; font-size: 11.0pt }
|
||||
H1 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H2 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 20.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
|
||||
<H1>CUPS Software Design Description</H1></A><BR>
|
||||
<CENTER><A HREF="#CONTENTS"><H1>CUPS Software Design Description</H1></A><BR>
|
||||
CUPS-SDD-1.0<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-1999, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF=#1>1 Scope</A></B>
|
||||
<BR><B><A HREF="#1">1 Scope</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#1_1>1.1 Identification</A></LI>
|
||||
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
|
||||
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
|
||||
<LI><A HREF="#1_1">1.1 Identification</A></LI>
|
||||
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
|
||||
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#2>2 References</A></B>
|
||||
<B><A HREF="#2">2 References</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
|
||||
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#3>3 Design Overview</A></B>
|
||||
<B><A HREF="#3">3 Design Overview</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1>3.1 Backends</A></LI>
|
||||
<LI><A HREF="#3_1">3.1 Backends</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1_1>3.1.1 ipp</A></LI>
|
||||
<LI><A HREF=#3_1_2>3.1.2 lpd</A></LI>
|
||||
<LI><A HREF=#3_1_3>3.1.3 parallel</A></LI>
|
||||
<LI><A HREF=#3_1_4>3.1.4 serial</A></LI>
|
||||
<LI><A HREF=#3_1_5>3.1.5 socket</A></LI>
|
||||
<LI><A HREF="#3_1_1">3.1.1 ipp</A></LI>
|
||||
<LI><A HREF="#3_1_2">3.1.2 lpd</A></LI>
|
||||
<LI><A HREF="#3_1_3">3.1.3 parallel</A></LI>
|
||||
<LI><A HREF="#3_1_4">3.1.4 serial</A></LI>
|
||||
<LI><A HREF="#3_1_5">3.1.5 socket</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_2>3.2 Berkeley Commands</A></LI>
|
||||
<LI><A HREF="#3_2">3.2 Berkeley Commands</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_2_1>3.2.1 lpc</A></LI>
|
||||
<LI><A HREF=#3_2_2>3.2.2 lpr</A></LI>
|
||||
<LI><A HREF=#3_2_3>3.2.3 lprm</A></LI>
|
||||
<LI><A HREF="#3_2_1">3.2.1 lpc</A></LI>
|
||||
<LI><A HREF="#3_2_2">3.2.2 lpr</A></LI>
|
||||
<LI><A HREF="#3_2_3">3.2.3 lprm</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_3>3.3 CGI</A></LI>
|
||||
<LI><A HREF="#3_3">3.3 CGI</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_3_1>3.3.1 classes.cgi</A></LI>
|
||||
<LI><A HREF=#3_3_2>3.3.2 jobs.cgi</A></LI>
|
||||
<LI><A HREF=#3_3_3>3.3.3 printers.cgi</A></LI>
|
||||
<LI><A HREF="#3_3_1">3.3.1 classes.cgi</A></LI>
|
||||
<LI><A HREF="#3_3_2">3.3.2 jobs.cgi</A></LI>
|
||||
<LI><A HREF="#3_3_3">3.3.3 printers.cgi</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_4>3.4 CUPS Interface Library</A></LI>
|
||||
<LI><A HREF="#3_4">3.4 CUPS Interface Library</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_4_1>3.4.1 Convenience Functions</A></LI>
|
||||
<LI><A HREF=#3_4_2>3.4.2 HTTP Functions</A></LI>
|
||||
<LI><A HREF=#3_4_3>3.4.3 IPP Functions</A></LI>
|
||||
<LI><A HREF=#3_4_4>3.4.4 Language Functions</A></LI>
|
||||
<LI><A HREF=#3_4_5>3.4.5 MIME Functions</A></LI>
|
||||
<LI><A HREF=#3_4_6>3.4.6 PPD Functions</A></LI>
|
||||
<LI><A HREF=#3_4_7>3.4.7 Raster Functions</A></LI>
|
||||
<LI><A HREF="#3_4_1">3.4.1 Convenience Functions</A></LI>
|
||||
<LI><A HREF="#3_4_2">3.4.2 HTTP Functions</A></LI>
|
||||
<LI><A HREF="#3_4_3">3.4.3 IPP Functions</A></LI>
|
||||
<LI><A HREF="#3_4_4">3.4.4 Language Functions</A></LI>
|
||||
<LI><A HREF="#3_4_5">3.4.5 MIME Functions</A></LI>
|
||||
<LI><A HREF="#3_4_6">3.4.6 PPD Functions</A></LI>
|
||||
<LI><A HREF="#3_4_7">3.4.7 Raster Functions</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_5>3.5 Filters</A></LI>
|
||||
<LI><A HREF="#3_5">3.5 Filters</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_5_1>3.5.1 hpgltops</A></LI>
|
||||
<LI><A HREF=#3_5_2>3.5.2 imagetops</A></LI>
|
||||
<LI><A HREF=#3_5_3>3.5.3 imagetoraster</A></LI>
|
||||
<LI><A HREF=#3_5_4>3.5.4 pstops</A></LI>
|
||||
<LI><A HREF=#3_5_5>3.5.5 pstoraster</A></LI>
|
||||
<LI><A HREF=#3_5_6>3.5.6 rastertohp</A></LI>
|
||||
<LI><A HREF=#3_5_7>3.5.7 texttops</A></LI>
|
||||
<LI><A HREF="#3_5_1">3.5.1 hpgltops</A></LI>
|
||||
<LI><A HREF="#3_5_2">3.5.2 imagetops</A></LI>
|
||||
<LI><A HREF="#3_5_3">3.5.3 imagetoraster</A></LI>
|
||||
<LI><A HREF="#3_5_4">3.5.4 pstops</A></LI>
|
||||
<LI><A HREF="#3_5_5">3.5.5 pstoraster</A></LI>
|
||||
<LI><A HREF="#3_5_6">3.5.6 rastertohp</A></LI>
|
||||
<LI><A HREF="#3_5_7">3.5.7 texttops</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_6>3.6 Scheduler</A></LI>
|
||||
<LI><A HREF="#3_6">3.6 Scheduler</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_6_1>3.6.1 Authorization</A></LI>
|
||||
<LI><A HREF=#3_6_2>3.6.2 Classes</A></LI>
|
||||
<LI><A HREF=#3_6_3>3.6.3 Client</A></LI>
|
||||
<LI><A HREF=#3_6_4>3.6.4 Configuration</A></LI>
|
||||
<LI><A HREF=#3_6_5>3.6.5 Directory Services</A></LI>
|
||||
<LI><A HREF=#3_6_6>3.6.6 IPP</A></LI>
|
||||
<LI><A HREF=#3_6_7>3.6.7 Jobs</A></LI>
|
||||
<LI><A HREF=#3_6_8>3.6.8 Logging</A></LI>
|
||||
<LI><A HREF=#3_6_9>3.6.9 Main</A></LI>
|
||||
<LI><A HREF=#3_6_10>3.6.10 Printers</A></LI>
|
||||
<LI><A HREF="#3_6_1">3.6.1 Authorization</A></LI>
|
||||
<LI><A HREF="#3_6_2">3.6.2 Classes</A></LI>
|
||||
<LI><A HREF="#3_6_3">3.6.3 Client</A></LI>
|
||||
<LI><A HREF="#3_6_4">3.6.4 Configuration</A></LI>
|
||||
<LI><A HREF="#3_6_5">3.6.5 Directory Services</A></LI>
|
||||
<LI><A HREF="#3_6_6">3.6.6 IPP</A></LI>
|
||||
<LI><A HREF="#3_6_7">3.6.7 Jobs</A></LI>
|
||||
<LI><A HREF="#3_6_8">3.6.8 Logging</A></LI>
|
||||
<LI><A HREF="#3_6_9">3.6.9 Main</A></LI>
|
||||
<LI><A HREF="#3_6_10">3.6.10 Printers</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF=#3_7>3.7 System V Commands</A></LI>
|
||||
<LI><A HREF="#3_7">3.7 System V Commands</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF=#3_7_1>3.7.1 accept</A></LI>
|
||||
<LI><A HREF=#3_7_2>3.7.2 cancel</A></LI>
|
||||
<LI><A HREF=#3_7_3>3.7.3 disable</A></LI>
|
||||
<LI><A HREF=#3_7_4>3.7.4 enable</A></LI>
|
||||
<LI><A HREF=#3_7_5>3.7.5 lp</A></LI>
|
||||
<LI><A HREF=#3_7_6>3.7.6 lpadmin</A></LI>
|
||||
<LI><A HREF=#3_7_7>3.7.7 lpstat</A></LI>
|
||||
<LI><A HREF=#3_7_8>3.7.8 reject</A></LI>
|
||||
<LI><A HREF="#3_7_1">3.7.1 accept</A></LI>
|
||||
<LI><A HREF="#3_7_2">3.7.2 cancel</A></LI>
|
||||
<LI><A HREF="#3_7_3">3.7.3 disable</A></LI>
|
||||
<LI><A HREF="#3_7_4">3.7.4 enable</A></LI>
|
||||
<LI><A HREF="#3_7_5">3.7.5 lp</A></LI>
|
||||
<LI><A HREF="#3_7_6">3.7.6 lpadmin</A></LI>
|
||||
<LI><A HREF="#3_7_7">3.7.7 lpstat</A></LI>
|
||||
<LI><A HREF="#3_7_8">3.7.8 reject</A></LI>
|
||||
</UL>
|
||||
</UL>
|
||||
<B><A HREF=#4>A Glossary</A></B>
|
||||
<B><A HREF="#4">A Glossary</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#4_1>A.1 Terms</A></LI>
|
||||
<LI><A HREF=#4_2>A.2 Acronyms</A></LI>
|
||||
<LI><A HREF="#4_1">A.1 Terms</A></LI>
|
||||
<LI><A HREF="#4_2">A.2 Acronyms</A></LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<H1><A NAME=1>1 Scope</A></H1>
|
||||
<H2><A NAME=1_1>1.1 Identification</A></H2>
|
||||
GIF89a¯ÿòÌÌÌ™™™fff333ÿÿÿÿÿÿÿÿÿ!ù,¯ÿBþXºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª2€0p,Ïtmßx®ï
|
||||
|
||||
<!--=�•pH,ŹťÖ«Çl:źĐ¨”ů ŻŘ¬ÖXNżŕ°xL~¬Ű´zmxËđ¸|N§ŮřĽ(Pďű˙€�bwz…jn‚‰Š‹ŚŤ9„†‘!-->
|
||||
;±Ýí�ndý !¸ ž³wà…M��Y~¿{,gÚ\‚äé
|
||||
Ś×Ø(tÙî!Ï=Ñ.ûz¯ŤáÑź:ì;Ã9qöíÉë]/¿ºÉ¤Et/†'Îþt9ÀØ–ž_ÙÇ\|W•wArö¸Ý�2Ô×
|
||||
tN°0Tï}�¡û‰$!‚yMxî)�š‰Ô�ø@nB°U½ÊwE„§!ŠF H L8B
|
||||
c‰;ždŠ-æDVWdг€h±äÚ“P¶%#(4Fiå•Ï\hŠ:ŤRe!\ÒÄ—X^¦%€¥À-$E€Ö/úHŽšlââöÌQX
|
||||
|
||||
<!--äÇ"iL :a7‚]›0IZˇYŘřˇ‡D}¤–Uj±á
|
||||
^âä™ć`Ú@¦5b|šŕ�«Á±§3Ń KwÔ\ŞB¨±H)+Ź=ˇÓ©"
|
||||
©˘ 8u�†¸öŠD§•lţ:„d�RXťilĚ:Ë!´;ąt+„e<
|
||||
‡;řô+‚bbhaÚ0Ę6é.D™đ޹̹ńÖkoę({ďľü{fż-->
|
||||
¸1Nô¯b"śŠüjåÁÂE0…È8ö5GkZ|ÒÁwt„C»ÔQSÇo6ÔÙ�[�W„$²*Ž+4Pb-8¹P1þ'8"‘ФÄ$ Cyê‘„)>ãŠtè`Ð3‡‹¾z"«rE'Âqfä°Ë
|
||||
‘qÂ\|€„Ž¡ôö»%É(.—bڽȀ�íÉ`{¬EÇ1w’ »[Hß`(B6ö�“
|
||||
†')ÊRŽÎa[�ÃrbC!Tå°Ś
|
||||
2Q·ÈHZê#–®üË/àô¯FÝê(Û²% ºXË9öÀbÁ4f.ù-oýŹ™XËB…�IÎÒ7¹*@ÃÓŽÍT€hà‘ÌWâ�™Ã$f:µyžn†ó†r„'téŤKv`
|
||||
Ç+dª– ś79sťò|'=×¢Ìx¶òśÿ„¦ś�eÎ;*à$þ” IÝÆaÏ{–3ŽÅ�Á
|
||||
P“ÍS[ÙL¨3©òQ7éÆò#ãûô0F×ðsE°t§@‘ØQÜ´´ ©:3ÓRíd �¥*MITnŚ£¨H]ØQÁd
|
||||
@òþ—¬rMśŽaO
|
||||
<!--x‹ŚÖ3˝4 °XT'Ş®�:TŁuéWeşádËeú¸č¬Ů7
|
||||
|
||||
ëŇĎ;„sśĺµ7m(ýĐźtl¤RVť)-->
|
||||
rë^yÀ·(¸îéêû$uDòrã/a,I.°ÙUÀśb h�`Ť¾B ë"
|
||||
Ü`HØxȸo1þ[á\8f^æ|\ý‚¢¢zø0(�\ {�ÄgäÞõ€çâ§Á�0*\³n¼‹m¶/Äeª±ÿ†ì
|
||||
Ç,½DN2€śº+ùÉ|í0L¡Le*ð¸Ã>­2ëf,eIPOËÅàr—±”80SAźcFªatç»ãy¤¸ršçÌ¡5ïoõËsžï|¿8˙Φ¬þ,ï¼èà)ÁÌ;øk¡—†dDpÑòø2¢q�fHã!Ë“~Ùź-í
|
||||
'g:,æ4y?ýäP‹Z›ž#ÏÕ´Î5AK‰k]ûš›ÒKõ¯‡më€õzØÈƫ؎Ý>B{PЪ.6hf]º?©ÌIŽuO„íŤM‚ÌÇÜcµ3�
|
||||
61‹NÒ[†W£ ¦m¿­{ÂPâvζKnU�[ ònĽ±÷n?l:Áž3ušëť¬sP[ÿnn¾çPŤ…WõÔFj[Â÷
|
||||
¹vÏ™à‰�xúŤ'�£ÀÀ†p¸4.êãKÇ¿ÂÁ±o§¢ü"Á|Nk`îÊ�
|
||||
<!--•¤7 yţ D-->
|
||||
ť
|
||||
jl©Ìu�Ëi™0pmC´«+‰÷6¤2­éÏe`(ŽJ]¥iõð3�Øí"p|ª!:qøFس 6£
|
||||
@­,þŠqüã��oÌÇ®žŤÖüVŹ“¶QÇ›Evî¹²É8ÙªS"æÀç‡x± àþ‡Ź>—Iãg
|
||||
ïÝ>Y‰çN80æ§ ±¾GLLìÕµ…(1Þ¼!8}þ¬“*…ª‰Ùì:e»´ś
|
||||
ª¿ên_6ÂÃSÀ`eG;Ö„C�Cc�¿‡4¸yeî¯Í)oøByRm½0?íLîÅ`QÿjÓÙ/ºôÓN|Ý
|
||||
<!--â9ço‘SŽŕ•?śýáużţáŻ~!ŇźżÍĎüýĎťIw1ßţZČNĄExŁ&\(¤á[ɤ€v2€WW-->
|
||||
|
||||
þÙAÜŚÁ¸D5©D aŤævx ?жx°DM@•!h‰àÈ€Ž§®
|
||||
• Źá×B`ð¤ªE?›“”Þd�"8$Ý`Ki0…Oð�nΓ±µvtžè€I([,¹Ndɨh\'6X
|
||||
ŤPã—Š‰Éøt ¢‘¥��¬è €�†Ky™F�Śë`š”y�„¨š €š‰�M©‡øFQhY„
|
||||
9¶X¯×–í4š¤™Y\)"¹AN]‰xéz÷Gq07�)�©ñ™•Y€r°ŚŽi‹ �z ™ÇäFÍÉT�–ù›
|
||||
ËŽC śwI›üX]‹¹\ëY]þf lïYbj8źÈuśbźÍÅtú©fÞןfBI—“*øé:ÛØUj Ò
|
||||
�õ¹ Õp $(~ ¡Ú ¡gù{îpŹZI?¡�îÀv:“a¦�6¢§Ô]Ý‘(ªê)!źÚ¢:
|
||||
jwµ¡4ÚvíHÛÇ�9ºXhó•üù£¥Á¢VÉ{Dº2š‰(°¤3š¤a÷ +У¥“p¢þò4Vº—
|
||||
E´¥è¤k°7ºhT*€¿èw`ÚžiÄ …S¦Æ¦mê Nê�#ú¢f€ xê†ý
|
||||
8z©7ŹuÚp{Ú=~]7`«h‡ÚsÚg:…zd�ó§ÎA-vþAñr¦'–AÚ)9–š¢âSi;£…š 1Źªo"ª
|
||||
¦J;“º rº8Ui|é>¡Úśú
|
||||
<!--pvł2<�jŁ·«É¦kÉ 1Š:¬Če ”«ÉÚlŃ•ŞÍZnŻŠ2Ě‹s«ÁÖÚŕé¨Űş=¤zŽźú6áUä
|
||||
Řš¨żújá
|
||||
¦0®éJ«
|
||||
ŻNŐäş•öĐVeζŻőbm¶7ů´Ž-->
|
||||
“ë¥Dfný2»�–0j«�®»ºK;zë¢Íö»—!µ—S»³r>K+6�‹¨XÒ»; CÈ
|
||||
8Ê;¢»ÃÛ/Ś‹¥ž!¬s½VR½óõÏ‹Oâ[/çK¨þ�Ñ:Í‹\Ý+ Sc:ïËž’º¶ë9Æ»
|
||||
<!--ëSç�˝¤tj ˝YUŔśăŔ©%
|
||||
Ěró)Á0¨§—ł˝Ç…Á¬Ě¤LŰ6řK!<Á:Ŕę*Ş…ĂÁî…Á.‡˛
|
||||
ĄĽ‘z Âä ¦ýËŔ~¸7<,´GóĂý‹ÂöęŔe:̉°ë«ŁmŁ,žyAIˇ…�Q!8-->
|
||||
ô 8ly$
|
||||
8©ÙÅmX2Ùh>—?¯!šHüÁ^LsP,ź«Y‹âá¿ÿtšì‚£Y
|
||||
r¦Éš¥9ÇjžÄ8-ÆÇڶiêPÂbAÂ�ù‰Ã¸š»³7RśCWRoìŠå MŚŠť”åt™ Ś›ŹréÉq
|
||||
<!--Zva&‹Z¤jzĘŠ¬‡7čV)“‹|›káť!¦*€Á¶öÄ84’Wž¶L�Ęń˝FŞ6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+č•L˘
|
||||
%|‹Ű¬Ĺ$-->
|
||||
|
||||
å�>}ŤLê}ÎǨ 5:àŚ|�"þÇwÐsøæ�Nΰ¹#R>~-N‰®è� ßcðÞÚÎÑ¥®åGÎâí�‰Ýè*‚¸
|
||||
=‚ž ºëâ…­ëÀ>Û·žën^žmèÊëð¼ã>å×Λ«}êØ÷
|
||||
“ťŚ¬ËIťÁ·AÔNÍëv>]t.âÚLЫþíï¾ñnäÖÜæs¹¿±â°+†
|
||||
¬UØïî•.ç¬ÎìÍ.è´ÞŠG=ðùŤŤ‚§ž¯”ë^äÛ®êh-‹êŹê!i!ŹÕvMíiªîþ¾òîá/þÑ-OÖGð,oñº!å’gOâ PŤOìOôBþÈàhâ+?ï>ßÊVHÀsaõ™€õ$óSîõ—»ťó8.žß¹
|
||||
~áßÈ©ö»]ò3ëÆt_÷[ïôb¯ç‚Ü÷Õ«@u™ð;zÜ�‘Ü@óŽ2’?ù�¸ÙlùF ¶™¯ù›N ž0śú£¶¤ÿ0#9:�ß§½ž©ź\#ÃÙæó2é+û‚ÀÓ¸�_äM/ÓtaÚý3”]Ù«¿¸iîaF>ª�}ŚØvÍïMÍ÷Ðëä©îrÜŚöqñ_ÀüªrâF®ò
|
||||
ýþ¸—hT_ãŤ4sx”ýÝî)ç.Qgû�àźÏ%ì‹}i´ASû|þð@QÜ
|
||||
$J9€»-̱÷ÜôŤMØ‘hZ�¦:°ś*ÏlßxÒ|ϼ¡ÅLÀ� ¬Áfù9BÑdìÁ|«VV„¢�“énKv
|
||||
<!--u贮̮iiçͦt›šV/.˛ę}mywu#|Yc‚X|jŽŹx‹dE“)0U
|
||||
Ť’ T–<W€o zbQ`F�Ą2›�ł:ť°CtŞ·‰!™˛*¨…ş»˘~аz¬†ÁŻÄ‡´Ő޶Ó(iĂm˛F›ÍÚhÜޓơօäc|ŘËUŇŮţ˛ëřçő�łÜŘ<î™w‰ÖżEéhä›@đÂ
|
||||
-->
|
||||
|
||||
kBŹ_�g 3ʳ8#Þ¬L=0;J¤äÈ@¤F|'i~±© žaÊŠÆg;d*3²”©bPÏ¢TäHô¦?ť[†
|
||||
Ää�hN6ZM¢D:c*BR!$±ck�’V­-uÛ@[øp„ź]¼8ö-1{TήWÏ2ñŤ Šp=¸q«Ñ½es.‰„4+#Ëe¦¥W5µekxr䛓/XÍš5IÇ�=kÝúµì˰ûŤN–2q�Å[r¦yZ£QŽ›ÇÞťtxŠäcK—Ííɹ
|
||||
iþ¡9¼m1oñ¢©/²8îìSté4l’Wm¾9óéÖÛÐãã{{üzÞ¿çøêöÞzà}śàL¨ "�
|
||||
ÄÐsà¶PGLUúå`MÞ ¡†9¬§Û{pX¸¡wÚw߇¡¨ ‰í "M�UXNx
|
||||
<!--É……ˇ×�ŤŹŕ¨âŠęÄő#�哎:Ĺ(ă4Ö¸Až�Ź:@Ůw¸ YÝ‹tIă’Ö”�$…a(ĺ‹XĄF7×IČbŠ["Y€M縹K~`¶Řä-->
|
||||
+l´á¦
|
||||
j²F:Á.êÆÛj¤³Búî ¼Ê«/£Ö’[н#í+ð¥ænJÞ¸«æ;ð©õ‹¨ _ËðÄŠÒ»*º?
|
||||
�ÂwśŤÃyzh±°Øzl2,#oZ2È›r|òË‚°¼$Ç)ë
|
||||
óÍÙÔ,éfs€1Î@/øîÏPõÌiÐH·�ðÃBkLtÒP¯bôS;NÝWÔXÏ
|
||||
ó’dlÍtÖ`ʰtžOc óÅa§}AÄ›²1vËjÇmþu+`ÍÍÁ·qwü6�‚ì½sÞXźŤ¨Ë$xM6àP³-iÉSÚ½AÙ�ïë84–ø=xä8^!ä*L>Þ��k¹Ś({IèŹ^!á¸�N$ê
|
||||
«®ç!ºû‚ÿÝ ë¯ßoî—Oü¨¾ÿî9í]ñÞ{ñÙÊ®ãlhŽ(èÌÃê¼~ÔS¢|öÕźzýw¬Ë§|øÝ—*½ŚÈ×­|úåwzþæ“)Nrû¾Ê?*ô¥
|
||||
¿*÷ô7ú½~Múúú÷ª÷É�•S3x*ûíŹP”ùH£�°°àó(è¾í-J�ú™
|
||||
åAF�{#\”g…Áś)�!),Ô #ÓÂǼ�jþ1śŚþh©²K„9$�Yè)Ž �A È
|
||||
—‡)#1‰Óp"�ð'Ã%n‰P´‡Ù¨-‹1³¢^\%Æ�Ôp„CLÖ5Ã
|
||||
<!--a‘�^śßâxŻ
|
||||
€±peŚ-->
|
||||
<HR>
|
||||
<H1><A NAME="1">1 Scope</A></H1>
|
||||
<H2><A NAME="1_1">1.1 Identification</A></H2>
|
||||
This software design description document provides detailed
|
||||
information on the architecture and coding of the Common UNIX Printing
|
||||
System ("CUPS") Version 1.0.
|
||||
<H2><A NAME=1_2>1.2 System Overview</A></H2>
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX vendors
|
||||
@@ -120,7 +222,7 @@ applications under UNIX. </P>
|
||||
<P>CUPS also includes a customized version of GNU GhostScript
|
||||
(currently based off GNU GhostScript 4.03) and an image file RIP that
|
||||
can be used to support non-PostScript printers. </P>
|
||||
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
This software design description document is organized into the
|
||||
following sections:
|
||||
<UL>
|
||||
@@ -129,8 +231,8 @@ can be used to support non-PostScript printers. </P>
|
||||
<LI>3 - Design Overview </LI>
|
||||
<LI>A - Glossary </LI>
|
||||
</UL>
|
||||
<H1><A NAME=2>2 References</A></H1>
|
||||
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
|
||||
<H1><A NAME="2">2 References</A></H1>
|
||||
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
|
||||
The following CUPS documentation is referenced by this document:
|
||||
<UL>
|
||||
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
|
||||
@@ -143,7 +245,7 @@ can be used to support non-PostScript printers. </P>
|
||||
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
|
||||
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
|
||||
</UL>
|
||||
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
|
||||
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
|
||||
The following non-CUPS documents are referenced by this document:
|
||||
<UL>
|
||||
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
|
||||
@@ -153,7 +255,7 @@ can be used to support non-PostScript printers. </P>
|
||||
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
|
||||
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
|
||||
</UL>
|
||||
<H1><A NAME=3>3 Design Overview</A></H1>
|
||||
<H1><A NAME="3">3 Design Overview</A></H1>
|
||||
CUPS is composed of 7 software sub-systems that operate together to
|
||||
perform common printing tasks:
|
||||
<UL>
|
||||
@@ -165,7 +267,7 @@ can be used to support non-PostScript printers. </P>
|
||||
<LI>Scheduler </LI>
|
||||
<LI>System V Commands </LI>
|
||||
</UL>
|
||||
<H2><A NAME=3_1>3.1 Backends</A></H2>
|
||||
<H2><A NAME="3_1">3.1 Backends</A></H2>
|
||||
The backends implement communications over a number of different
|
||||
interfaces. All backends are called with a common set of arguments:
|
||||
<UL>
|
||||
@@ -184,18 +286,18 @@ interfaces. All backends are called with a common set of arguments:
|
||||
</UL>
|
||||
Backends are named using the method of the URI, so a URI of
|
||||
"ipp://hostname/resource" would be processed by the "ipp" backend.
|
||||
<H3><A NAME=3_1_1>3.1.1 ipp</A></H3>
|
||||
<H3><A NAME="3_1_1">3.1.1 ipp</A></H3>
|
||||
The ipp backend sends the specified job to a network printer or host
|
||||
using the Internet Printing Protocol. The URI is as specified by the <CODE>
|
||||
printer-uri-supported</CODE> attribute from the printer or host.
|
||||
<H3><A NAME=3_1_2>3.1.2 lpd</A></H3>
|
||||
<H3><A NAME="3_1_2">3.1.2 lpd</A></H3>
|
||||
The lpd backend sends the specified job to a network printer or host
|
||||
using the Line Printer Daemon protocol. The URI is of the form:
|
||||
<UL>
|
||||
<PRE>lpd://hostname/queue
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=3_1_3>3.1.3 parallel</A></H3>
|
||||
<H3><A NAME="3_1_3">3.1.3 parallel</A></H3>
|
||||
The parallel backend sends the specified job to a local printer
|
||||
connected via the specified parallel port device. The URI is of the
|
||||
form:
|
||||
@@ -203,7 +305,7 @@ form:
|
||||
<PRE>parallel:/dev/file
|
||||
</PRE>
|
||||
</UL>
|
||||
<H3><A NAME=3_1_4>3.1.4 serial</A></H3>
|
||||
<H3><A NAME="3_1_4">3.1.4 serial</A></H3>
|
||||
The serial backend sends the specified job to a local printer
|
||||
connected via the specified serial port device. The URI is of the
|
||||
form:
|
||||
@@ -219,7 +321,7 @@ form:
|
||||
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity checking. </LI>
|
||||
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
|
||||
</UL>
|
||||
<H3><A NAME=3_1_5>3.1.5 socket</A></H3>
|
||||
<H3><A NAME="3_1_5">3.1.5 socket</A></H3>
|
||||
The socket backend sends the specified job to a network host using the
|
||||
AppSocket protocol commonly used by Hewlett-Packard and Tektronix
|
||||
printers. The URI is of the form:
|
||||
@@ -228,11 +330,11 @@ printers. The URI is of the form:
|
||||
</PRE>
|
||||
</UL>
|
||||
The default port number is 9100.
|
||||
<H2><A NAME=3_2>3.2 Berkeley Commands</A></H2>
|
||||
<H2><A NAME="3_2">3.2 Berkeley Commands</A></H2>
|
||||
The Berkeley commands provide a simple command-line interface to CUPS
|
||||
to submit and control print jobs. It is provided for compatibility with
|
||||
existing software that is hard coded to use the Berkeley commands.
|
||||
<H3><A NAME=3_2_1>3.2.1 lpc</A></H3>
|
||||
<H3><A NAME="3_2_1">3.2.1 lpc</A></H3>
|
||||
The lpc command allows users and administrators to check the status
|
||||
and control print queues. The version provided with CUPS supports the
|
||||
following commands:
|
||||
@@ -240,57 +342,57 @@ following commands:
|
||||
<LI>quit - Quits the lpc command. </LI>
|
||||
<LI>status - Shows the status of printers and jobs in the queue. </LI>
|
||||
</UL>
|
||||
<H3><A NAME=3_2_2>3.2.2 lpr</A></H3>
|
||||
<H3><A NAME="3_2_2">3.2.2 lpr</A></H3>
|
||||
The lpr command submits a job for printing. The CUPS version of lpr
|
||||
silently ignores the "i", "t", "m", "h", and "s" options.
|
||||
<H3><A NAME=3_2_3>3.2.3 lprm</A></H3>
|
||||
<H3><A NAME="3_2_3">3.2.3 lprm</A></H3>
|
||||
The lprm removes one or more print jobs.
|
||||
<H2><A NAME=3_3>3.3 CGI</A></H2>
|
||||
<H2><A NAME="3_3">3.3 CGI</A></H2>
|
||||
The Common Gateway Interface (CGI) programs provide a web-based status
|
||||
interface to monitor the status of printers, classes, and jobs.
|
||||
<H3><A NAME=3_3_1>3.3.1 classes.cgi</A></H3>
|
||||
<H3><A NAME="3_3_1">3.3.1 classes.cgi</A></H3>
|
||||
The classes CGI lists the available printer classes and any pending
|
||||
jobs for the class. The user can click on individual classes to limit
|
||||
the display and click on jobs to see the job status.
|
||||
<H3><A NAME=3_3_2>3.3.2 jobs.cgi</A></H3>
|
||||
<H3><A NAME="3_3_2">3.3.2 jobs.cgi</A></H3>
|
||||
The jobs CGI lists the queued print jobs in order of priority. The
|
||||
list can be limited by printer or job. When the user displays the
|
||||
status of an individual print job all job options are displayed.
|
||||
<H3><A NAME=3_3_3>3.3.3 printers.cgi</A></H3>
|
||||
<H3><A NAME="3_3_3">3.3.3 printers.cgi</A></H3>
|
||||
The printers CGI lists the available printer queues and any pending
|
||||
jobs for the printer. The user can click on individual printers to
|
||||
limit the display and click on jobs to see the job status.
|
||||
<H2><A NAME=3_4>3.4 CUPS Interface Library</A></H2>
|
||||
<H2><A NAME="3_4">3.4 CUPS Interface Library</A></H2>
|
||||
The CUPS interface library provides common convenience, HTTP, IPP,
|
||||
language, MIME, PPD, and raster functions used by the CUPS software.
|
||||
<H3><A NAME=3_4_1>3.4.1 Convenience Functions</A></H3>
|
||||
<H3><A NAME="3_4_1">3.4.1 Convenience Functions</A></H3>
|
||||
Convenience functions are provided to submit an IPP request, send a
|
||||
print file, cancel a job, get a list of available printers, get a list
|
||||
of available classes, get the default printer or class, get the default
|
||||
server name, get the local username, and get a password string.
|
||||
<H3><A NAME=3_4_2>3.4.2 HTTP Functions</A></H3>
|
||||
<H3><A NAME="3_4_2">3.4.2 HTTP Functions</A></H3>
|
||||
The HTTP functions provide functions to connect to HTTP servers, issue
|
||||
requests, read data from a server, and write data to a server.
|
||||
<H3><A NAME=3_4_3>3.4.3 IPP Functions</A></H3>
|
||||
<H3><A NAME="3_4_3">3.4.3 IPP Functions</A></H3>
|
||||
The IPP function provide functions to manage IPP request data and
|
||||
attributes, read IPP responses from a server, and write IPP requests to
|
||||
a server.
|
||||
<H3><A NAME=3_4_4>3.4.4 Language Functions</A></H3>
|
||||
<H3><A NAME="3_4_4">3.4.4 Language Functions</A></H3>
|
||||
The language functions provide a standard interface for retrieving
|
||||
common textual messages for a particular locale and determining the
|
||||
correct encoding (e.g. US ASCII, ISO-8859-1, etc.)
|
||||
<H3><A NAME=3_4_5>3.4.5 MIME Functions</A></H3>
|
||||
<H3><A NAME="3_4_5">3.4.5 MIME Functions</A></H3>
|
||||
The Multimedia Internet Mail Exchange functions manage a MIME type and
|
||||
conversion database that supports file typing by extension and content,
|
||||
and least-cost file filtering from a source to a destination file type.
|
||||
<H3><A NAME=3_4_6>3.4.6 PPD Functions</A></H3>
|
||||
<H3><A NAME="3_4_6">3.4.6 PPD Functions</A></H3>
|
||||
The PostScript Printer Description functions manage PPD files, select
|
||||
options, check for option conflicts, and emit selected options in the
|
||||
correct order.
|
||||
<H3><A NAME=3_4_7>3.4.7 Raster Functions</A></H3>
|
||||
<H3><A NAME="3_4_7">3.4.7 Raster Functions</A></H3>
|
||||
The raster functions manage streams of CUPS raster data (described in
|
||||
the Interface Design Document) used by non-PostScript printer drivers.
|
||||
<H2><A NAME=3_5>3.5 Filters</A></H2>
|
||||
<H2><A NAME="3_5">3.5 Filters</A></H2>
|
||||
The filters implement file conversion services for CUPS. All filters
|
||||
are called with a common set of arguments:
|
||||
<UL>
|
||||
@@ -307,37 +409,37 @@ are called with a common set of arguments:
|
||||
</UL>
|
||||
Filters are added to the MIME conversion data file and implement all
|
||||
necessary conversions from one file type to another.
|
||||
<H3><A NAME=3_5_1>3.5.1 hpgltops</A></H3>
|
||||
<H3><A NAME="3_5_1">3.5.1 hpgltops</A></H3>
|
||||
The hpgltops filter converts HP-GL/2 files into PostScript.
|
||||
<H3><A NAME=3_5_2>3.5.2 imagetops</A></H3>
|
||||
<H3><A NAME="3_5_2">3.5.2 imagetops</A></H3>
|
||||
The imagetops filter converts image files into PostScript.
|
||||
<H3><A NAME=3_5_3>3.5.3 imagetoraster</A></H3>
|
||||
<H3><A NAME="3_5_3">3.5.3 imagetoraster</A></H3>
|
||||
The imagetoraster filter converts image files into CUPS raster data.
|
||||
<H3><A NAME=3_5_4>3.5.4 pstops</A></H3>
|
||||
<H3><A NAME="3_5_4">3.5.4 pstops</A></H3>
|
||||
The pstops filter inserts printer-specific commands from PPD files and
|
||||
performs page filtering as requested by the user.
|
||||
<H3><A NAME=3_5_5>3.5.5 pstoraster</A></H3>
|
||||
<H3><A NAME="3_5_5">3.5.5 pstoraster</A></H3>
|
||||
The pstoraster filter converts PostScript program data into CUPS
|
||||
raster data.
|
||||
<H3><A NAME=3_5_6>3.5.6 rastertohp</A></H3>
|
||||
<H3><A NAME="3_5_6">3.5.6 rastertohp</A></H3>
|
||||
The rastertohp filter handles converting CUPS raster data to HP PCL
|
||||
and supports both color and black-and-white printers.
|
||||
<H3><A NAME=3_5_7>3.5.7 texttops</A></H3>
|
||||
<H3><A NAME="3_5_7">3.5.7 texttops</A></H3>
|
||||
The texttops filter converts text files into PostScript.
|
||||
<H2><A NAME=3_6>3.6 Scheduler</A></H2>
|
||||
<H2><A NAME="3_6">3.6 Scheduler</A></H2>
|
||||
The scheduler is a fully-functional HTTP/1.1 and IPP/1.0 server that
|
||||
manages the printers, classes, and jobs in the system. It also handles
|
||||
a simple broadcast-based directory service so that remote print queues
|
||||
and classes can be accessed transparently from the local system.
|
||||
<H3><A NAME=3_6_1>3.6.1 Authorization</A></H3>
|
||||
<H3><A NAME="3_6_1">3.6.1 Authorization</A></H3>
|
||||
The authorization module is responsible for performing access control
|
||||
and authentication for all HTTP and IPP requests entering the system.
|
||||
<H3><A NAME=3_6_2>3.6.2 Classes</A></H3>
|
||||
<H3><A NAME="3_6_2">3.6.2 Classes</A></H3>
|
||||
The classes module is responsible for managing printer classes in the
|
||||
system. Each class is a collection of local and/or remote printers.
|
||||
The classes module also reads and writes the classes configuration
|
||||
file.
|
||||
<H3><A NAME=3_6_3>3.6.3 Client</A></H3>
|
||||
<H3><A NAME="3_6_3">3.6.3 Client</A></H3>
|
||||
The client module is responsible for all HTTP client communications.
|
||||
It handles listening on selected interfaces, accepting connections
|
||||
from prospective clients, processing incoming HTTP requests, and
|
||||
@@ -345,13 +447,13 @@ sending HTTP responses to those requests. The client module also is
|
||||
responsible for executing the external CGI programs as needed to
|
||||
support web-based printer, class, and job status monitoring.
|
||||
<P>Once authorized, all IPP requests are sent to the IPP module. </P>
|
||||
<H3><A NAME=3_6_4>3.6.4 Configuration</A></H3>
|
||||
<H3><A NAME="3_6_4">3.6.4 Configuration</A></H3>
|
||||
The configuration module is responsible for reading the CUPS
|
||||
configuration file and initializing the appropriate data structures and
|
||||
values. The configuration module also stops CUPS services before
|
||||
reading the configuration file and restarts them after the
|
||||
configuration file has been read.
|
||||
<H3><A NAME=3_6_5>3.6.5 Directory Services</A></H3>
|
||||
<H3><A NAME="3_6_5">3.6.5 Directory Services</A></H3>
|
||||
The directory services module sends and recieves printer state
|
||||
information over a broadcast socket. Remote printers and classes are
|
||||
automatically added to or removed from the local printer and class
|
||||
@@ -359,63 +461,63 @@ lists as needed.
|
||||
<P>The directory services module can only recieve printer state
|
||||
information over a single UDP port, however it can broadcast to
|
||||
multiple addresses and ports as needed. </P>
|
||||
<H3><A NAME=3_6_6>3.6.6 IPP</A></H3>
|
||||
<H3><A NAME="3_6_6">3.6.6 IPP</A></H3>
|
||||
The IPP module handles IPP requests and acts accordingly. URI
|
||||
validation is also performed here, as a client can post IPP data to any
|
||||
URI on the server which might sidestep the access control or
|
||||
authentication of the HTTP server.
|
||||
<H3><A NAME=3_6_7>3.6.7 Jobs</A></H3>
|
||||
<H3><A NAME="3_6_7">3.6.7 Jobs</A></H3>
|
||||
The jobs module manages print jobs, starts filter and backend
|
||||
processes for jobs to be printed, and monitors status messages from
|
||||
those filters and backends.
|
||||
<H3><A NAME=3_6_8>3.6.8 Logging</A></H3>
|
||||
<H3><A NAME="3_6_8">3.6.8 Logging</A></H3>
|
||||
The logging module manages the access, error, and page log files that
|
||||
are generated by the scheduler.
|
||||
<H3><A NAME=3_6_9>3.6.9 Main</A></H3>
|
||||
<H3><A NAME="3_6_9">3.6.9 Main</A></H3>
|
||||
The main module is responsible for timing out and dispatching input
|
||||
and output for client connections. It also watches for incoming <CODE>
|
||||
SIGHUP</CODE> and <CODE>SIGCHLD</CODE> signals, reloads the server
|
||||
configuration files as needed, and handles child process errors and
|
||||
exits.
|
||||
<H3><A NAME=3_6_10>3.6.10 Printers</A></H3>
|
||||
<H3><A NAME="3_6_10">3.6.10 Printers</A></H3>
|
||||
The printers module is responsible for managing printers and PPD files
|
||||
in the system. The printers module also reads and writes the printers
|
||||
configuration file.
|
||||
<H2><A NAME=3_7>3.7 System V Commands</A></H2>
|
||||
<H2><A NAME="3_7">3.7 System V Commands</A></H2>
|
||||
The System V commands provide a robust command-line interface to CUPS
|
||||
to submit and control printers and jobs.
|
||||
<H3><A NAME=3_7_1>3.7.1 accept</A></H3>
|
||||
<H3><A NAME="3_7_1">3.7.1 accept</A></H3>
|
||||
The accept command tells the scheduler to accept new jobs for specific
|
||||
printers.
|
||||
<H3><A NAME=3_7_2>3.7.2 cancel</A></H3>
|
||||
<H3><A NAME="3_7_2">3.7.2 cancel</A></H3>
|
||||
The cancel command tells the scheduler to cancel one or more jobs that
|
||||
are queued for printing.
|
||||
<H3><A NAME=3_7_3>3.7.3 disable</A></H3>
|
||||
<H3><A NAME="3_7_3">3.7.3 disable</A></H3>
|
||||
The disable command tells the scheduler to stop printing jobs on the
|
||||
specified printers.
|
||||
<H3><A NAME=3_7_4>3.7.4 enable</A></H3>
|
||||
<H3><A NAME="3_7_4">3.7.4 enable</A></H3>
|
||||
The enable command tells the scheduler to start printing jobs on the
|
||||
specified printers.
|
||||
<H3><A NAME=3_7_5>3.7.5 lp</A></H3>
|
||||
<H3><A NAME="3_7_5">3.7.5 lp</A></H3>
|
||||
The lp command submits submits files for printing. Unlike the
|
||||
standard System V lp command, a single CUPS lp command will generate a
|
||||
separate job ID for each file that is printed. Also, the Solaris "f",
|
||||
"H", "P", "S", and "y" options are silently ignored.
|
||||
<H3><A NAME=3_7_6>3.7.6 lpadmin</A></H3>
|
||||
<H3><A NAME="3_7_6">3.7.6 lpadmin</A></H3>
|
||||
The lpadmin command manages printer queues and classes. The Solaris
|
||||
"A", "F", "I", "M", "P", "Q", "S", "T", "U", "W", "f", "l", "m", "o",
|
||||
"s", "t", and "u" options are not supported, and new options "P" (PPD
|
||||
file), "F" (filter), and "E" (enable and accept) are provided to
|
||||
configure CUPS-specific features such as PPD file and conversion
|
||||
filters.
|
||||
<H3><A NAME=3_7_7>3.7.7 lpstat</A></H3>
|
||||
<H3><A NAME="3_7_7">3.7.7 lpstat</A></H3>
|
||||
The lpstat command lists printers, classes, and jobs as requested by
|
||||
the user.
|
||||
<H3><A NAME=3_7_8>3.7.8 reject</A></H3>
|
||||
<H3><A NAME="3_7_8">3.7.8 reject</A></H3>
|
||||
The reject command tells the scheduler not to accept new jobs for
|
||||
specific printers.
|
||||
<H1 TYPE=A VALUE=1><A NAME=4>A Glossary</A></H1>
|
||||
<H2><A NAME=4_1>A.1 Terms</A></H2>
|
||||
<H1 TYPE="A" VALUE="1"><A NAME="4">A Glossary</A></H1>
|
||||
<H2><A NAME="4_1">A.1 Terms</A></H2>
|
||||
<DL>
|
||||
<DT>C </DT>
|
||||
<DD>A computer language. </DD>
|
||||
@@ -428,7 +530,7 @@ specific printers.
|
||||
<DT>socket </DT>
|
||||
<DD>A two-way network communications channel. </DD>
|
||||
</DL>
|
||||
<H2><A NAME=4_2>A.2 Acronyms</A></H2>
|
||||
<H2><A NAME="4_2">A.2 Acronyms</A></H2>
|
||||
<DL>
|
||||
<DT>ASCII </DT>
|
||||
<DD>American Standard Code for Information Interchange </DD>
|
||||
|
||||
+749
-786
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+4090
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+9119
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+4555
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+135
-33
@@ -1,52 +1,154 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>DRAFT - CUPS Software Security Report</TITLE>
|
||||
<META NAME="AUTHOR" CONTENT="Easy Software Products">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-SSR-1.0">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<STYLE>
|
||||
BODY { font-family: serif; font-size: 11.0pt }
|
||||
H1 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H2 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 20.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 20.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
|
||||
<H1>DRAFT - CUPS Software Security Report</H1></A><BR>
|
||||
<CENTER><A HREF="#CONTENTS"><H1>DRAFT - CUPS Software Security Report</H1></A><BR>
|
||||
CUPS-SSR-1.0<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-1999, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF=#1>1 Scope</A></B>
|
||||
<BR><B><A HREF="#1">1 Scope</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#1_1>1.1 Identification</A></LI>
|
||||
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
|
||||
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
|
||||
<LI><A HREF="#1_1">1.1 Identification</A></LI>
|
||||
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
|
||||
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#2>2 References</A></B>
|
||||
<B><A HREF="#2">2 References</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
|
||||
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
|
||||
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#3>3 Local Access Risks</A></B>
|
||||
<B><A HREF="#3">3 Local Access Risks</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#3_1>3.1 Security Breaches</A></LI>
|
||||
<LI><A HREF="#3_1">3.1 Security Breaches</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#4>4 Remote Access Risks</A></B>
|
||||
<B><A HREF="#4">4 Remote Access Risks</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#4_1>4.1 Denial of Service Attacks</A></LI>
|
||||
<LI><A HREF=#4_2>4.2 Security Breaches</A></LI>
|
||||
<LI><A HREF="#4_1">4.1 Denial of Service Attacks</A></LI>
|
||||
<LI><A HREF="#4_2">4.2 Security Breaches</A></LI>
|
||||
</UL>
|
||||
<B><A HREF=#5>A Glossary</A></B>
|
||||
<B><A HREF="#5">A Glossary</A></B>
|
||||
<UL>
|
||||
<LI><A HREF=#5_1>A.1 Terms</A></LI>
|
||||
<LI><A HREF=#5_2>A.2 Acronyms</A></LI>
|
||||
<LI><A HREF="#5_1">A.1 Terms</A></LI>
|
||||
<LI><A HREF="#5_2">A.2 Acronyms</A></LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<H1><A NAME=1>1 Scope</A></H1>
|
||||
<H2><A NAME=1_1>1.1 Identification</A></H2>
|
||||
GIF89a¯ÿòÌÌÌ™™™fff333ÿÿÿÿÿÿÿÿÿ!ù,¯ÿBþXºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª2€0p,Ïtmßx®ï
|
||||
|
||||
<!--=�•pH,��Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€�bwz…jn‚‰Š‹Œ�9„†‘!-->
|
||||
;±Ýíˆndý !¸ ž³wà…MƒƒY~¿{,gÚ\‚äé
|
||||
Œ×Ø(tÙî!Ï=Ñ.ûz¯�áÑŸ:ì;Ã9qöíÉë]/¿ºÉ¤Et/†'Îþt9ÀØ–ž_ÙÇ\|W•wArö¸Ý�2Ô×
|
||||
tN°0Tï}�¡û‰$!‚yMxî)ˆš‰Ô�ø@nB°U½ÊwE„§!ŠF H L8B
|
||||
c‰;ždŠ-æDVWdг€h±äÚ“P¶%#(4Fiå•Ï\hŠ:�Re!\ÒÄ—X^¦%€¥À-$E€Ö/úHŽšlââöÌQX
|
||||
|
||||
<!--äÇ"iL :a7‚]›0IZ¡YØø¡‡D}¤–Uj±á
|
||||
^â䙿`Ú@¦5b|šà�«Á±§3Ñ KwÔ\ªB¨±H)+�=¡Ó©"
|
||||
©¢ 8uƒ†¸öŠD§•lþ:„d�RX�ilÌ:Ë!´;¹t+„e<
|
||||
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
|
||||
¸1Nô¯b"œŠüjåÁÂE0…È8ö5GkZ|ÒÁwt„C»ÔQSÇo6ÔÙ�[�W„$²*Ž+4Pb-8¹P1þ'8"‘ФÄ$ Cyê‘„)>ãŠtè`Ð3‡‹¾z"«rE'Âqfä°Ë
|
||||
‘qÂ\|€„Ž¡ôö»%É(.—bڽȀ�íÉ`{¬EÇ1w’ »[Hß`(B6ö�“
|
||||
†')ÊRŽÎa[�ÃrbC!Tå°Œ
|
||||
2Q·ÈHZê#–®üË/àô¯FÝê(Û²% ºXË9öÀbÁ4f.ù-oý�™XËB…�IÎÒ7¹*@ÃÓŽÍT€hà‘ÌWâ�™Ã$f:µyžn†ó†r„'té�Kv`
|
||||
Ç+dª– œ79s�ò|'=×¢Ìx¶òœÿ„¦œˆeÎ;*à$þ” IÝÆaÏ{–3ŽÅ�Á
|
||||
P“ÍS[ÙL¨3©òQ7éÆò#ãûô0F×ðsE°t§@‘ØQÜ´´ ©:3ÓRíd �¥*MITnŒ£¨H]ØQÁd
|
||||
@òþ—¬rMœŽaO
|
||||
<!--x‹ŒÖ3½4 °XT'ª®ƒ:T£uéWeºádËeú¸è¬Ù7
|
||||
|
||||
ëÒÏ;„sœåµ7m(ýПtl¤RV�)-->
|
||||
rë^yÀ·(¸îéêû$uDòrã/a,I.°ÙUÀœb hˆ`�¾B ë"
|
||||
Ü`HØxȸo1þ[á\8f^æ|\ý‚¢¢zø0(ˆ\ {ƒÄgäÞõ€çâ§Á˜0*\³n¼‹m¶/Äeª±ÿ†ì
|
||||
Ç,½DN2€œº+ùÉ|í0L¡Le*ð¸Ã>­2ëf,eIPOËÅàr—±”80SAŸcFªatç»ãy¤¸ršçÌ¡5ïoõËsžï|¿8˙Φ¬þ,ï¼èà)ÁÌ;øk¡—†dDpÑòø2¢q�fHã!Ë“~ÙŸ-í
|
||||
'g:,æ4y?ýäP‹Z›ž#ÏÕ´Î5AK‰k]ûš›ÒKõ¯‡më€õzØÈƫ؎Ý>B{PЪ.6hf]º?©ÌIŽuO„í�M‚ÌÇÜcµ3˜
|
||||
61‹NÒ[†W£ ¦m¿­{ÂPâvζKnUˆ[ ònĽ±÷n?l:Áž3ušë�¬sP[ÿnn¾çP�…WõÔFj[Â÷
|
||||
¹vÏ™à‰˜xú�'ˆ£ÀÀ†p¸4.êãKÇ¿ÂÁ±o§¢ü"Á|Nk`îʘ
|
||||
<!--•¤7 yþ D-->
|
||||
�
|
||||
jl©ÌuˆËi™0pmC´«+‰÷6¤2­éÏe`(ŽJ]¥iõð3ƒØí"p|ª!:qøFس 6£
|
||||
@­,þŠqüã��oÌÇ®ž�ÖüV�“¶QÇ›Evî¹²É8ÙªS"æÀç‡x± àþ‡�>—Iãg
|
||||
ïÝ>Y‰çN80æ§ ±¾GLLìÕµ…(1Þ¼!8}þ¬“*…ª‰Ùì:e»´œ
|
||||
ª¿ên_6ÂÃSÀ`eG;Ö„CƒCcˆ¿‡4¸yeî¯Í)oøByRm½0?íLîÅ`QÿjÓÙ/ºôÓN|Ý
|
||||
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏ�Iw1ßþZÈN¥Ex£&\(¤á[ɤ€v2€WW-->
|
||||
|
||||
þÙAÜŒÁ¸D5©D a�ævx ?жx°DM@•!h‰àÈ€Ž§®
|
||||
• �á×B`ð¤ªE?›“”Þdƒ"8$Ý`Ki0…OðƒnΓ±µvtžè€I([,¹Ndɨh\'6X
|
||||
�Pã—Š‰Éøt ¢‘¥�˜¬è €ˆ†Ky™FˆŒë`š”yƒ„¨š €š‰ƒM©‡øFQhY„
|
||||
9¶X¯×–í4š¤™Y\)"¹AN]‰xéz÷Gq07�)�©ñ™•Y€r°ŒŽi‹ �z ™ÇäFÍÉT�–ù›
|
||||
ËŽC œwI›üX]‹¹\ëY]þf lïYbj8ŸÈuœbŸÍÅtú©fÞןfBI—“*øé:ÛØUj Ò
|
||||
ˆõ¹ Õp $(~ ¡Ú ¡gù{îp�ZI?¡ƒîÀv:“a¦˜6¢§Ô]Ý‘(ªê)!ŸÚ¢:
|
||||
jwµ¡4ÚvíHÛǘ9ºXhó•üù£¥Á¢VÉ{Dº2š‰(°¤3š¤a÷ +У¥“p¢þò4Vº—
|
||||
E´¥è¤k°7ºhT*€¿èw`ÚžiÄ …S¦Æ¦mê Nêƒ#ú¢f€ xê†ý
|
||||
8z©7�uÚp{Ú=~]7`«h‡ÚsÚg:…zd˜ó§ÎA-vþAñr¦'–AÚ)9–š¢âSi;£…š 1�ªo"ª
|
||||
¦J;“º rº8Ui|é>¡Úœú
|
||||
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì‹s«ÁÖÚàé¨Ûº=¤zŽŸú6áUä
|
||||
Øš¨¿újá
|
||||
¦0®éJ«
|
||||
¯NÕ井öÐVeζ¯õbm¶7ù´Ž-->
|
||||
“ë¥Dfný2»ƒ–0j«�®»ºK;zë¢Íö»—!µ—S»³r>K+6ˆ‹¨XÒ»; CÈ
|
||||
8Ê;¢»ÃÛ/Œ‹¥ž!¬s½VR½óõÏ‹Oâ[/çK¨þ˜Ñ:Í‹\Ý+ Sc:ïËž’º¶ë9Æ»
|
||||
<!--ëSç�½¤tj ½YUÀœãÀ©%
|
||||
Ìró)Á0¨§—³½Ç…Á¬Ì¤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
|
||||
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
|
||||
ô 8ly$
|
||||
8©ÙÅmX2Ùh>—?¯!šHüÁ^LsP,Ÿ«Y‹âá¿ÿtšì‚£Y
|
||||
r¦Éš¥9ÇjžÄ8-ÆÇŒ¶iêPÂbA˜ù‰Ã¸š»³7RœCWRoìŠå MŒŠ�”åt™ Œ›�réÉq
|
||||
<!--Zva&‹Z¤jzÊŠ¬‡7èV)“‹|›ká�!¦*€Á¶öÄ84’Wž¶L�Êñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
|
||||
%|‹Û¬Å$-->
|
||||
|
||||
å�>}�Lê}ÎǨ 5:àŒ|�"þÇwÐsøæ�Nΰ¹#R>~-N‰®èƒ ßcðÞÚÎÑ¥®åGÎâ툉Ýè*‚¸
|
||||
=‚ž ºëâ…­ëÀ>Û·žën^žmèÊëð¼ã>å×Λ«}êØ÷
|
||||
“�Œ¬ËI�Á·AÔNÍëv>]t.âÚLЫþíï¾ñnäÖÜæs¹¿±â°+†
|
||||
¬UØïî•.ç¬ÎìÍ.è´ÞŠG=ðù��‚§ž¯”ë^äÛ®êh-‹ê�ê!i!�ÕvMíiªîþ¾òîá/þÑ-OÖGð,oñº!å’gOâ P�OìOôBþÈàhâ+?ï>ßÊVHÀsaõ™€õ$óSîõ—»�ó8.žß¹
|
||||
~áßÈ©ö»]ò3ëÆt_÷[ïôb¯ç‚Ü÷Õ«@u™ð;zܘ‘Ü@óŽ2’?ùƒ¸ÙlùF ¶™¯ù›N ž0œú£¶¤ÿ0#9:�ß§½ž©Ÿ\#ÃÙæó2é+û‚ÀÓ¸�_äM/ÓtaÚý3”]Ù«¿¸iîaF>ª�}ŒØvÍïMÍ÷Ðëä©îrÜŒöqñ_ÀüªrâF®ò
|
||||
ýþ¸—hT_ã�4sx”ýÝî)ç.Qgû�àŸÏ%ì‹}i´ASû|þð@QÜ
|
||||
$J9€»-̱÷Üô�MØ‘hZ˜¦:°œ*ÏlßxÒ|ϼ¡ÅLÀ� ¬Áfù9BÑdìÁ|«VV„¢�“énKv
|
||||
<!--u贮̮iiçͦt›šV/.²ê}mywu#|Yc‚X|jŽ�x‹dE“)0U
|
||||
�’ T–<W€o zbQ`F�¥2›�³:�°Ctª·‰!™²*¨…º»¢~аz¬†Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
|
||||
-->
|
||||
|
||||
kB�_ƒg 3ʳ8#Þ¬L=0;J¤äÈ@¤F|'i~±© žaÊŠÆg;d*3²”©bPÏ¢TäHô¦?�[†
|
||||
ÄäƒhN6ZM¢D:c*BR!$±ckƒ’V­-uÛ@[øp„Ÿ]¼8ö-1{TήWÏ2ñ� Šp=¸q«Ñ½es.‰„4+#Ëe¦¥W5µekxr䛓/XÍš5Iǃ=kÝúµì˰û�N–2q�Å[r¦yZ£QŽ›ÇÞ�txŠäcK—Ííɹ
|
||||
iþ¡9¼m1oñ¢©/²8îìSté4l’Wm¾9óéÖÛÐãã{{üzÞ¿çøêöÞzà}œàL¨ "˜
|
||||
ÄÐsà¶PGLUúå`MÞ ¡†9¬§Û{pX¸¡wÚw߇¡¨ ‰í "M�UXNx
|
||||
<!--É……¡×ƒ��à¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜�:@Ùw¸ YÝ‹tIã’Ö”˜$…a(å‹X¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
|
||||
+l´á¦
|
||||
j²F:Á.êÆÛj¤³Búî ¼Ê«/£Ö’[н#í+ð¥ænJÞ¸«æ;ð©õ‹¨ _ËðÄŠÒ»*º?
|
||||
ƒÂwœ�Ãyzh±°Øzl2,#oZ2È›r|òË‚°¼$Ç)ë
|
||||
óÍÙÔ,éfs€1Î@/øîÏPõÌiÐH·�ðÃBkLtÒP¯bôS;NÝWÔXÏ
|
||||
ó’dlÍtÖ`�°tžOc óÅa§}AÄ›²1vËjÇmþu+`ÍÍÁ·qwü6˜‚ì½sÞXŸ�¨Ë$xM6àP³-iÉSÚ½AÙˆïë84–ø=xä8^!ä*L>Þ˜ƒk¹Œ({Iè�^!ḘN$ê
|
||||
«®ç!ºû‚ÿÝ ë¯ßoî—Oü¨¾ÿî9í]ñÞ{ñÙÊ®ãlhŽ(èÌÃê¼~ÔS¢|öÕŸzýw¬Ë§|øÝ—*½ŒÈ×­|úåwzþæ“)Nrû¾Ê?*ô¥
|
||||
¿*÷ô7ú½~Múúú÷ª÷Ɉ•S3x*ûí�P”ùH£�°°àó(è¾í-Jƒú™
|
||||
åAF�{#\”g…Áœ)�!),Ô #ÓÂǼ�jþ1œŒþh©²K„9$ƒYè)Ž ˆA È
|
||||
—‡)#1‰Óp"˜ð'Ã%n‰P´‡Ù¨-‹1³¢^\%ƈÔp„CLÖ5Ã
|
||||
<!--a‘�^œßâx¯
|
||||
€±peŒ-->
|
||||
<HR>
|
||||
<H1><A NAME="1">1 Scope</A></H1>
|
||||
<H2><A NAME="1_1">1.1 Identification</A></H2>
|
||||
This software security report provides an analysis of possible
|
||||
security concerns for the Common UNIX Printing System ("CUPS") Version
|
||||
1.0.
|
||||
<H2><A NAME=1_2>1.2 System Overview</A></H2>
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX vendors
|
||||
@@ -62,7 +164,7 @@ applications under UNIX. </P>
|
||||
<P>CUPS also includes a customized version of GNU GhostScript
|
||||
(currently based off GNU GhostScript 4.03) and an image file RIP that
|
||||
can be used to support non-PostScript printers. </P>
|
||||
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
<P>This software security report is organized into the following
|
||||
sections:</P>
|
||||
<UL>
|
||||
@@ -72,8 +174,8 @@ sections:</P>
|
||||
<LI>4 - Remote Access Risks</LI>
|
||||
<LI>A - Glossary</LI>
|
||||
</UL>
|
||||
<H1><A NAME=2>2 References</A></H1>
|
||||
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
|
||||
<H1><A NAME="2">2 References</A></H1>
|
||||
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
|
||||
The following CUPS documentation is referenced by this document:
|
||||
<UL>
|
||||
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
|
||||
@@ -86,7 +188,7 @@ sections:</P>
|
||||
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
|
||||
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
|
||||
</UL>
|
||||
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
|
||||
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
|
||||
The following non-CUPS documents are referenced by this document:
|
||||
<UL>
|
||||
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
|
||||
@@ -96,12 +198,12 @@ sections:</P>
|
||||
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
|
||||
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
|
||||
</UL>
|
||||
<H1><A NAME=3>3 Local Access Risks</A></H1>
|
||||
<H1><A NAME="3">3 Local Access Risks</A></H1>
|
||||
<P>Local access risks are those that can be exploited only with a local
|
||||
user account. This section does not address issues related to
|
||||
dissemination of the root password or other security issues associated
|
||||
with the UNIX operating system. </P>
|
||||
<H2><A NAME=3_1>3.1 Security Breaches</A></H2>
|
||||
<H2><A NAME="3_1">3.1 Security Breaches</A></H2>
|
||||
<P>There are two known security vulnerabilities with local access: </P>
|
||||
<OL>
|
||||
<LI>Since the default installation creates a world-readable request
|
||||
@@ -122,11 +224,11 @@ can be minimized. </P>
|
||||
exploit this vulnerability. </P>
|
||||
</LI>
|
||||
</OL>
|
||||
<H1><A NAME=4>4 Remote Access Risks</A></H1>
|
||||
<H1><A NAME="4">4 Remote Access Risks</A></H1>
|
||||
<P>Remote access risks are those that can be exploited without a local
|
||||
user account and/or from a remote system. This section does not address
|
||||
issues related to network or firewall security. </P>
|
||||
<H2><A NAME=4_1>4.1 Denial of Service Attacks</A></H2>
|
||||
<H2><A NAME="4_1">4.1 Denial of Service Attacks</A></H2>
|
||||
<P>Like all Internet services, the CUPS server is vulnerable to denial
|
||||
of service attacks, including: </P>
|
||||
<OL>
|
||||
@@ -168,7 +270,7 @@ large attribute values. </P>
|
||||
user-level access control as needed for expensive printers. </P>
|
||||
</LI>
|
||||
</OL>
|
||||
<H2><A NAME=4_2>4.2 Security Breaches</A></H2>
|
||||
<H2><A NAME="4_2">4.2 Security Breaches</A></H2>
|
||||
<P>The current CUPS server only supports Basic authentication with
|
||||
usernames and passwords. This essentially places the clear text of the
|
||||
username and password on the network. Since CUPS uses the UNIX username
|
||||
@@ -183,8 +285,8 @@ restricted accordingly. </P>
|
||||
the entire message body using separate MD5-based username and password
|
||||
files. This will protect password information and prevent unauthorized
|
||||
access due to compromised account passwords. </P>
|
||||
<H1 TYPE=A VALUE=1><A NAME=5>A Glossary</A></H1>
|
||||
<H2><A NAME=5_1>A.1 Terms</A></H2>
|
||||
<H1 TYPE="A" VALUE="1"><A NAME="5">A Glossary</A></H1>
|
||||
<H2><A NAME="5_1">A.1 Terms</A></H2>
|
||||
<DL>
|
||||
<DT>C </DT>
|
||||
<DD>A computer language. </DD>
|
||||
@@ -197,7 +299,7 @@ access due to compromised account passwords. </P>
|
||||
<DT>socket </DT>
|
||||
<DD>A two-way network communications channel. </DD>
|
||||
</DL>
|
||||
<H2><A NAME=5_2>A.2 Acronyms</A></H2>
|
||||
<H2><A NAME="5_2">A.2 Acronyms</A></H2>
|
||||
<DL>
|
||||
<DT>ASCII </DT>
|
||||
<DD>American Standard Code for Information Interchange </DD>
|
||||
|
||||
+315
-327
@@ -1,7 +1,7 @@
|
||||
%PDF-1.2
|
||||
%âãÏÓ
|
||||
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990922200511Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
|
||||
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
|
||||
1 0 obj<</Producer(htmldoc 1.8.3 Copyright 1997-1999 Easy Software Products, All Rights Reserved.)/CreationDate(D:19991214182636Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
|
||||
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
|
||||
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
|
||||
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
|
||||
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
|
||||
@@ -9,49 +9,49 @@
|
||||
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
|
||||
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
|
||||
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
|
||||
10 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
|
||||
11 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
|
||||
12 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
|
||||
13 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
|
||||
14 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
|
||||
15 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
|
||||
16 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
|
||||
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
|
||||
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
|
||||
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
|
||||
20 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
|
||||
21 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
|
||||
22 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
|
||||
23 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
|
||||
24 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
|
||||
25 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
|
||||
26 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
|
||||
27 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
|
||||
28 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
|
||||
29 0 obj<</Subtype/Link/Rect[80.2 554.4 109.3 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
|
||||
30 0 obj<</Subtype/Link/Rect[109.3 554.4 143.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
|
||||
31 0 obj<</Subtype/Link/Rect[143.2 554.4 168.9 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
|
||||
32 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
|
||||
33 0 obj<</Subtype/Link/Rect[124.5 541.2 163.9 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
|
||||
34 0 obj<</Subtype/Link/Rect[163.9 541.2 204.2 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
|
||||
35 0 obj<</Subtype/Link/Rect[72.0 514.8 80.2 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
|
||||
36 0 obj<</Subtype/Link/Rect[80.2 514.8 119.0 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
|
||||
37 0 obj<</Subtype/Link/Rect[119.0 514.8 152.9 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
|
||||
38 0 obj<</Subtype/Link/Rect[152.9 514.8 178.6 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
|
||||
39 0 obj<</Subtype/Link/Rect[108.0 501.6 124.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
|
||||
40 0 obj<</Subtype/Link/Rect[124.5 501.6 156.6 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
|
||||
41 0 obj<</Subtype/Link/Rect[156.6 501.6 168.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
|
||||
42 0 obj<</Subtype/Link/Rect[168.5 501.6 204.2 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
|
||||
43 0 obj<</Subtype/Link/Rect[204.2 501.6 237.8 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
|
||||
44 0 obj<</Subtype/Link/Rect[108.0 488.4 124.5 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
|
||||
45 0 obj<</Subtype/Link/Rect[124.5 488.4 163.9 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
|
||||
46 0 obj<</Subtype/Link/Rect[163.9 488.4 204.2 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
|
||||
47 0 obj<</Subtype/Link/Rect[72.0 462.0 82.7 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
|
||||
48 0 obj<</Subtype/Link/Rect[82.7 462.0 124.2 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
|
||||
49 0 obj<</Subtype/Link/Rect[108.0 448.8 126.9 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
|
||||
50 0 obj<</Subtype/Link/Rect[126.9 448.8 155.0 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
|
||||
51 0 obj<</Subtype/Link/Rect[108.0 435.6 126.9 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
|
||||
52 0 obj<</Subtype/Link/Rect[126.9 435.6 172.8 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
|
||||
10 0 obj<</Subtype/Link/Rect[72.0 670.8 80.2 683.8]/Border[0 0 0]/Dest[81 0 R/XYZ null 818 0]>>endobj
|
||||
11 0 obj<</Subtype/Link/Rect[80.2 670.8 107.8 683.8]/Border[0 0 0]/Dest[81 0 R/XYZ null 818 0]>>endobj
|
||||
12 0 obj<</Subtype/Link/Rect[108.0 657.6 124.5 670.6]/Border[0 0 0]/Dest[81 0 R/XYZ null 735 0]>>endobj
|
||||
13 0 obj<</Subtype/Link/Rect[124.5 657.6 183.8 670.6]/Border[0 0 0]/Dest[81 0 R/XYZ null 735 0]>>endobj
|
||||
14 0 obj<</Subtype/Link/Rect[108.0 644.4 124.5 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
|
||||
15 0 obj<</Subtype/Link/Rect[124.5 644.4 159.6 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
|
||||
16 0 obj<</Subtype/Link/Rect[159.6 644.4 203.0 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
|
||||
17 0 obj<</Subtype/Link/Rect[108.0 631.2 124.5 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
|
||||
18 0 obj<</Subtype/Link/Rect[124.5 631.2 173.1 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
|
||||
19 0 obj<</Subtype/Link/Rect[173.1 631.2 216.4 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
|
||||
20 0 obj<</Subtype/Link/Rect[72.0 604.8 80.2 617.8]/Border[0 0 0]/Dest[87 0 R/XYZ null 818 0]>>endobj
|
||||
21 0 obj<</Subtype/Link/Rect[80.2 604.8 131.6 617.8]/Border[0 0 0]/Dest[87 0 R/XYZ null 818 0]>>endobj
|
||||
22 0 obj<</Subtype/Link/Rect[108.0 591.6 124.5 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
|
||||
23 0 obj<</Subtype/Link/Rect[124.5 591.6 154.8 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
|
||||
24 0 obj<</Subtype/Link/Rect[154.8 591.6 222.6 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
|
||||
25 0 obj<</Subtype/Link/Rect[108.0 578.4 124.5 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
|
||||
26 0 obj<</Subtype/Link/Rect[124.5 578.4 152.3 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
|
||||
27 0 obj<</Subtype/Link/Rect[152.3 578.4 202.4 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
|
||||
28 0 obj<</Subtype/Link/Rect[72.0 552.0 80.2 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
|
||||
29 0 obj<</Subtype/Link/Rect[80.2 552.0 109.3 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
|
||||
30 0 obj<</Subtype/Link/Rect[109.3 552.0 143.2 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
|
||||
31 0 obj<</Subtype/Link/Rect[143.2 552.0 168.9 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
|
||||
32 0 obj<</Subtype/Link/Rect[108.0 538.8 124.5 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
|
||||
33 0 obj<</Subtype/Link/Rect[124.5 538.8 163.9 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
|
||||
34 0 obj<</Subtype/Link/Rect[163.9 538.8 204.2 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
|
||||
35 0 obj<</Subtype/Link/Rect[72.0 512.4 80.2 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
|
||||
36 0 obj<</Subtype/Link/Rect[80.2 512.4 119.0 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
|
||||
37 0 obj<</Subtype/Link/Rect[119.0 512.4 152.9 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
|
||||
38 0 obj<</Subtype/Link/Rect[152.9 512.4 178.6 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
|
||||
39 0 obj<</Subtype/Link/Rect[108.0 499.2 124.5 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
|
||||
40 0 obj<</Subtype/Link/Rect[124.5 499.2 156.6 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
|
||||
41 0 obj<</Subtype/Link/Rect[156.6 499.2 168.5 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
|
||||
42 0 obj<</Subtype/Link/Rect[168.5 499.2 204.2 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
|
||||
43 0 obj<</Subtype/Link/Rect[204.2 499.2 237.8 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
|
||||
44 0 obj<</Subtype/Link/Rect[108.0 486.0 124.5 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
|
||||
45 0 obj<</Subtype/Link/Rect[124.5 486.0 163.9 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
|
||||
46 0 obj<</Subtype/Link/Rect[163.9 486.0 204.2 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
|
||||
47 0 obj<</Subtype/Link/Rect[72.0 459.6 82.7 472.6]/Border[0 0 0]/Dest[105 0 R/XYZ null 818 0]>>endobj
|
||||
48 0 obj<</Subtype/Link/Rect[82.7 459.6 124.2 472.6]/Border[0 0 0]/Dest[105 0 R/XYZ null 818 0]>>endobj
|
||||
49 0 obj<</Subtype/Link/Rect[108.0 446.4 126.9 459.4]/Border[0 0 0]/Dest[105 0 R/XYZ null 735 0]>>endobj
|
||||
50 0 obj<</Subtype/Link/Rect[126.9 446.4 155.0 459.4]/Border[0 0 0]/Dest[105 0 R/XYZ null 735 0]>>endobj
|
||||
51 0 obj<</Subtype/Link/Rect[108.0 433.2 126.9 446.2]/Border[0 0 0]/Dest[105 0 R/XYZ null 430 0]>>endobj
|
||||
52 0 obj<</Subtype/Link/Rect[126.9 433.2 172.8 446.2]/Border[0 0 0]/Dest[105 0 R/XYZ null 430 0]>>endobj
|
||||
53 0 obj[10 0 R
|
||||
11 0 R
|
||||
12 0 R
|
||||
@@ -98,341 +98,329 @@
|
||||
]endobj
|
||||
54 0 obj<</Dests 55 0 R>>endobj
|
||||
55 0 obj<</Kids[56 0 R]>>endobj
|
||||
56 0 obj<</Limits[(1)(5_2)]/Names[(1)57 0 R(1_1)58 0 R(1_2)59 0 R(1_3)60 0 R(2)61 0 R(2_1)62 0 R(2_2)63 0 R(3)64 0 R(3_1)65 0 R(4)66 0 R(4_1)67 0 R(4_2)68 0 R(5)69 0 R(5_1)70 0 R(5_2)71 0 R]>>endobj
|
||||
57 0 obj<</D[79 0 R/XYZ null 818 null]>>endobj
|
||||
58 0 obj<</D[79 0 R/XYZ null 737 null]>>endobj
|
||||
59 0 obj<</D[79 0 R/XYZ null 658 null]>>endobj
|
||||
60 0 obj<</D[79 0 R/XYZ null 434 null]>>endobj
|
||||
61 0 obj<</D[85 0 R/XYZ null 818 null]>>endobj
|
||||
62 0 obj<</D[85 0 R/XYZ null 737 null]>>endobj
|
||||
63 0 obj<</D[85 0 R/XYZ null 540 null]>>endobj
|
||||
64 0 obj<</D[91 0 R/XYZ null 818 null]>>endobj
|
||||
65 0 obj<</D[91 0 R/XYZ null 690 null]>>endobj
|
||||
66 0 obj<</D[97 0 R/XYZ null 818 null]>>endobj
|
||||
67 0 obj<</D[97 0 R/XYZ null 704 null]>>endobj
|
||||
68 0 obj<</D[97 0 R/XYZ null 255 null]>>endobj
|
||||
69 0 obj<</D[103 0 R/XYZ null 818 null]>>endobj
|
||||
70 0 obj<</D[103 0 R/XYZ null 737 null]>>endobj
|
||||
71 0 obj<</D[103 0 R/XYZ null 434 null]>>endobj
|
||||
72 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[73 0 R
|
||||
76 0 R
|
||||
109 0 R
|
||||
112 0 R
|
||||
79 0 R
|
||||
82 0 R
|
||||
85 0 R
|
||||
88 0 R
|
||||
91 0 R
|
||||
94 0 R
|
||||
97 0 R
|
||||
100 0 R
|
||||
103 0 R
|
||||
106 0 R
|
||||
56 0 obj<</Limits[(1)(ssr.shtml)]/Names[(1)57 0 R(1_1)58 0 R(1_2)59 0 R(1_3)60 0 R(2)61 0 R(2_1)62 0 R(2_2)63 0 R(3)64 0 R(3_1)65 0 R(4)66 0 R(4_1)67 0 R(4_2)68 0 R(5)69 0 R(5_1)70 0 R(5_2)71 0 R(cups-large.gif)72 0 R(ssr.shtml)73 0 R]>>endobj
|
||||
57 0 obj<</D[81 0 R/XYZ null 818 null]>>endobj
|
||||
58 0 obj<</D[81 0 R/XYZ null 735 null]>>endobj
|
||||
59 0 obj<</D[81 0 R/XYZ null 654 null]>>endobj
|
||||
60 0 obj<</D[81 0 R/XYZ null 429 null]>>endobj
|
||||
61 0 obj<</D[87 0 R/XYZ null 818 null]>>endobj
|
||||
62 0 obj<</D[87 0 R/XYZ null 735 null]>>endobj
|
||||
63 0 obj<</D[87 0 R/XYZ null 535 null]>>endobj
|
||||
64 0 obj<</D[93 0 R/XYZ null 818 null]>>endobj
|
||||
65 0 obj<</D[93 0 R/XYZ null 702 null]>>endobj
|
||||
66 0 obj<</D[99 0 R/XYZ null 818 null]>>endobj
|
||||
67 0 obj<</D[99 0 R/XYZ null 715 null]>>endobj
|
||||
68 0 obj<</D[99 0 R/XYZ null 279 null]>>endobj
|
||||
69 0 obj<</D[105 0 R/XYZ null 818 null]>>endobj
|
||||
70 0 obj<</D[105 0 R/XYZ null 735 null]>>endobj
|
||||
71 0 obj<</D[105 0 R/XYZ null 430 null]>>endobj
|
||||
72 0 obj<</D[81 0 R/XYZ null 698 null]>>endobj
|
||||
73 0 obj<</D[81 0 R/XYZ null 698 null]>>endobj
|
||||
74 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[75 0 R
|
||||
78 0 R
|
||||
111 0 R
|
||||
114 0 R
|
||||
81 0 R
|
||||
84 0 R
|
||||
87 0 R
|
||||
90 0 R
|
||||
93 0 R
|
||||
96 0 R
|
||||
99 0 R
|
||||
102 0 R
|
||||
105 0 R
|
||||
108 0 R
|
||||
]>>endobj
|
||||
73 0 obj<</Type/Page/Parent 72 0 R/Contents 74 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
|
||||
74 0 obj<</Length 75 0 R/Filter/FlateDecode>>stream
|
||||
xÚí�ß�Ü8rÇ%µúÅOšÙíwN�H€ØîO{Ï@p�gF›ì[I¢�‡ ‡]_r‡öÎë½`ÿûô¯éÖRª*R57<à°¶Én~Äâ·ŠdQý·W7b½ýß�øîV¼ÿ ~üßW÷òU"_ýM¼_ÿîíwû|ÿáÃÛµøÝÇ··âööæíݾÖïòÿ|÷ûìßîÅæ_×ûò~_>ìËÇ}yØ—ï÷å÷ÿõîñõ˯Ÿßý‡¸{óîßÅæææÝ=<ˆ;ñÃã«âyxá2+òñv¹\^]ìÊö?–w�Sç’Ë‹ÈS•‹ËëÇirÉÛ+5R ny71.yÛÅôT.¯“©pᡎhwSàz¸òÈÅ_&ŽsÝG¯\næºåRÙ4Gpf¬ìŽ™e®á™—oǸò+ÏJñ¯�âºõ¬•`ã—žÍrí—±^Ø2K\òʳ^ü×£så‘×Gùfd®{¯§$crÝx½3—e´ncmËëQ¸däy.‚�“BX-ßÎ5&€Åƒ)`1ÀÀiÉà‹LËóVqõî·Ì4›k`¬-X2×Ú¼p}òF(³Þ¹2o”òmÏ\y4AÁ}…giLA
|
||||
ÚÑê£såÞ¨eÓW4.rŠÁ2Ç‹Á4<Yì‰\r|,Ïï�K8Àå…Ö¹2ω²±Ì%#7¸Ë\kÏ‘²°Ê•yΔÄ"—+Vˆrb®Øs¨l¬qå.auJLO4PQLP40QL*ÒÀk=–+u
|
||||
«cÀ`z�0˜ Æcœ3ŽKºˆÕ×Ã51Ã`z.5Ã`¸áº¸\._?îÊýîâC¿ƒ—ùº9Éw÷ z0è¸ü–¤ùpÕÏ€AßÃuÙ¹Tº7@[pûªò¨-‡õÐãpÒ�%77xÃæb‡´tq&ÙŒËÅ
|
||||
5èé¹9kÉ�0¹˜ÃÅJ§æYÈäbòÜlHÆ�ù<®´m·8d+W4”
|
||||
ž¼YdEêÁþ®†IÚ;'Ù`ÃàƒM-~æUHçÊGÀ"ƒùt.²Èûv®H
|
||||
cåhç ‹6£r¥#!Ç"—‹¶ qåV<$,2ra`oáõmaµdF†Ö"yËX¤ÛW
|
||||
Wj!œ1*kƒ/Kªá'ö¹=Hð\Ò<H3-9ßõ\0êä:”OlC++” è©®!‚
|
||||
™íerÑ&ÃË�å�y¢`¹f8+z,‚gˆ`n†ýY!EW8®µVHèIˆãr@iÒ᣸²‘=2CÁ6.¼†Eï'asWä†hP´>@peüÀl¼Kº¹bWDƒ2`«n®È�'õ'ìäÊÜ.ä€�\±cÃ…ôaIWäØp!Ÿô¢ƒ+wÆ%Óºvp¥Î
|
||||
.J:¸„c³-eI+—tp¸ps~ÕÊ•98\¸m¤°•©òþ X(+
|
||||
Z¹"‡"C¢r´qaU~`,ÔôØ´p!U>š« ÙpU~38Âg-\ì±
|
||||
1Ðse.Š<ZÐ-¸(òh´Òr GUgJs—tU5pS¦ãÊh¡aÕ“�ÿT3ö§¿‡ã3M+ªœaýüß1`Q×BË%+7nKh%ºÖDÃ%h±F+×LËuüš²Îa‡ÄOàL¯Çåé¹ ¤^9>ÜhKÎôZ!¹VZ®¼ô| | ||||