Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| c2acbbf488 |
+1165
-1
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -0,0 +1,138 @@
|
||||
ENCRYPTION - CUPS v1.1.7 - 02/21/2001
|
||||
-------------------------------------
|
||||
|
||||
This file describes the encryption support provided by CUPS.
|
||||
|
||||
WARNING: CLIENTS CURRENTLY TRUST ALL CERTIFICATES FROM SERVERS.
|
||||
This makes the CUPS client applications vulnerable to "man in
|
||||
the middle" attacks, so we don't recommend using this to do
|
||||
remote administration over WANs at this time.
|
||||
|
||||
Future versions of CUPS will keep track of server certificates
|
||||
and provide a callback/confirmation interface for accepting new
|
||||
certificates and warning when a certificate has changed.
|
||||
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
BEFORE USING THE ENCRYPTION SUPPORT, PLEASE VERIFY THAT IT IS
|
||||
LEGAL TO DO SO IN YOUR COUNTRY. CUPS by itself doesn't include
|
||||
any encryption code, but it can link against the OpenSSL library
|
||||
which does.
|
||||
|
||||
|
||||
OVERVIEW OF ENCRYPTION SUPPORT IN CUPS
|
||||
|
||||
CUPS supports SSL/2.0, SSL/3.0, and TLS/1.0 encryption using
|
||||
keys as large as 128-bits. Encryption support is provided via
|
||||
the OpenSSL library and some new hooks in the CUPS code.
|
||||
|
||||
CUPS provides support for dedicated (https) and "upgrade" (TLS)
|
||||
encryption of sessions. The "HTTP Upgrade" method is described
|
||||
in RFC 2817; basically, the client can be secure or unsecure,
|
||||
and the client or server initiates an upgrade to a secure
|
||||
connection via some new HTTP fields and status codes. The HTTP
|
||||
Upgrade method is new and no browsers we know of support it yet.
|
||||
Stick with "https" for web browsers.
|
||||
|
||||
The current implementation is very basic. The CUPS client
|
||||
software (lp, lpr, etc.) uses encryption as requested by the
|
||||
user or server.
|
||||
|
||||
The user can specify the "-E" option with the printing commands
|
||||
to force encryption of the connection. Encryption can also be
|
||||
specified using the Encryption directive in the client.conf file
|
||||
or in the CUPS_ENCRYPTION environment variable:
|
||||
|
||||
Never
|
||||
|
||||
Never do encryption.
|
||||
|
||||
Always
|
||||
|
||||
Always do SSL/TLS encryption using the https scheme.
|
||||
|
||||
IfRequested
|
||||
|
||||
Upgrade to TLS encryption if the server asks for it.
|
||||
This is the default setting.
|
||||
|
||||
Required
|
||||
|
||||
Always upgrade to TLS encryption as soon as the
|
||||
connection is made. This is different than the "Always"
|
||||
mode above since the connection is initially unsecure
|
||||
and the client initiates the upgrade to TLS encryption.
|
||||
(same as using the "-E" option)
|
||||
|
||||
These keywords are also used in the cupsd.conf file to secure
|
||||
particular locations. To secure all traffic on the server, listen
|
||||
on port 443 (https port) instead of port 631 and change the "ipp"
|
||||
service listing (or add it if you don't have one) in /etc/services
|
||||
to 443. To provide both secure and normal methods, add a line
|
||||
reading:
|
||||
|
||||
SSLPort 443
|
||||
|
||||
to /etc/cups/cupsd.conf.
|
||||
|
||||
|
||||
BEFORE YOU BEGIN
|
||||
|
||||
You'll need the OpenSSL library from:
|
||||
|
||||
http://www.openssl.org
|
||||
|
||||
|
||||
CONFIGURING WITH ENCRYPTION SUPPORT
|
||||
|
||||
Once you have the OpenSSL library installed, you'll need to
|
||||
configure CUPS to use it with the "--enable-ssl" option:
|
||||
|
||||
./configure --enable-ssl
|
||||
|
||||
If the OpenSSL stuff is not in a standard location, make sure to
|
||||
define the CFLAGS, CXXFLAGS, and LDFLAGS environment variables
|
||||
with the appropriate compiler and linker options first.
|
||||
|
||||
|
||||
GENERATING A SERVER CERTIFICATE AND KEY
|
||||
|
||||
The following OpenSSL command will generate a server certificate
|
||||
and key that you can play with. Since the certificate is not
|
||||
properly signed it will generate all kinds of warnings in
|
||||
Netscape and MSIE:
|
||||
|
||||
openssl req -new -x509 -keyout /etc/cups/ssl/server.key \
|
||||
-out /etc/cups/ssl/server.crt -days 365 -nodes
|
||||
|
||||
chmod 600 /etc/cups/ssl/server.*
|
||||
|
||||
The "-nodes" option prevents the certificate and key from being
|
||||
encrypted. The cupsd process runs in the background, detached
|
||||
from any input source; if you encrypt these files then cupsd
|
||||
will not be able to load them!
|
||||
|
||||
Send all rants about non-encrypted certificate and key files to
|
||||
/dev/null. It makes sense to encrypt user files, but not for
|
||||
files used by system processes/daemons...
|
||||
|
||||
|
||||
REPORTING PROBLEMS
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! If the
|
||||
documentation does not solve your 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. The "/var/log/cups/error_log" file should also be sent,
|
||||
as it often helps to determine the cause of your problem.
|
||||
|
||||
If you are running a version of Linux, be sure to provide the
|
||||
Linux distribution you have, too.
|
||||
|
||||
Please note that the "cups-support@cups.org" email address goes
|
||||
to the CUPS developers; they are busy people, so your email may
|
||||
go unanswered for days or weeks. In general, only general build
|
||||
or distribution problems will actually get answered - for
|
||||
end-user support see the "README.txt" for a summary of the
|
||||
resources available.
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
INSTALL - CUPS v1.1.10 - 08/06/2001
|
||||
-----------------------------------
|
||||
|
||||
This file describes how to compile and install CUPS from source
|
||||
code. For more information on CUPS see the file called
|
||||
"README.txt". A complete change log can be found in
|
||||
"CHANGES.txt".
|
||||
|
||||
|
||||
BEFORE YOU BEGIN
|
||||
|
||||
You'll need ANSI-compliant C and C++ compilers, plus a make
|
||||
program and Bourne shell. The GNU compiler tools work well -
|
||||
we've tested the current CUPS code against GCC 2.95.x with
|
||||
excellent results.
|
||||
|
||||
The makefiles used by the project should work with all versions
|
||||
of make. We've tested them with GNU make as well as the make
|
||||
programs shipped by Compaq, HP, SGI, and Sun. FreeBSD users
|
||||
should use GNU make (gmake).
|
||||
|
||||
Besides these tools you'll want the following libraries:
|
||||
|
||||
- JPEG 6b or higher
|
||||
- PNG 1.0.6 or higher
|
||||
- TIFF 3.4 or higher
|
||||
- ZLIB 1.1.3 or higher
|
||||
|
||||
CUPS will compile and run without these, however you'll miss out on
|
||||
many of the features provided by CUPS.
|
||||
|
||||
|
||||
CONFIGURATION
|
||||
|
||||
CUPS uses GNU autoconf, so you should find the usual "configure"
|
||||
script in the main CUPS source directory. To configure CUPS for
|
||||
your system, type:
|
||||
|
||||
./configure ENTER
|
||||
|
||||
The default installation will put the CUPS software in the
|
||||
"/etc", "/usr", and "/var" directories on your system, which
|
||||
will overwrite any existing printing commands on your system.
|
||||
Use the "--prefix" option to install the CUPS software in
|
||||
another location:
|
||||
|
||||
./configure --prefix=/some/directory ENTER
|
||||
|
||||
If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in
|
||||
a system default location (typically "/usr/include" and
|
||||
"/usr/lib") you'll need to set the CFLAGS, CXXFLAGS, DSOFLAGS,
|
||||
and LDFLAGS environment variables prior to running configure:
|
||||
|
||||
setenv CFLAGS "-I/some/directory" ENTER
|
||||
setenv CXXFLAGS "-I/some/directory" ENTER
|
||||
setenv DSOFLAGS "-L/some/directory" ENTER
|
||||
setenv LDFLAGS "-L/some/directory" ENTER
|
||||
./configure ... ENTER
|
||||
|
||||
or:
|
||||
|
||||
CFLAGS="-I/some/directory"; export CFLAGS ENTER
|
||||
CXXFLAGS="-I/some/directory"; export CXXFLAGS ENTER
|
||||
DSOFLAGS="-L/some/directory"; export DSOFLAGS ENTER
|
||||
LDFLAGS="-L/some/directory"; export LDFLAGS ENTER
|
||||
./configure ... ENTER
|
||||
|
||||
To enable support for encryption, you'll also want to add the
|
||||
"--enable-ssl" option:
|
||||
|
||||
./configure --enable-ssl
|
||||
|
||||
SSL and TLS support require the OpenSSL library, available at:
|
||||
|
||||
http://www.openssl.org
|
||||
|
||||
If the OpenSSL header files and libraries are not in a standard
|
||||
location, specify the locations of these files using the
|
||||
--with-openssl-includes and --with-openssl-libs directives:
|
||||
|
||||
./configure --enable-ssl \
|
||||
--with-openssl-includes=/foo/bar/include \
|
||||
--with-openssl-libs=/foo/bar/lib
|
||||
|
||||
See the file "ENCRYPTION.txt" for information on using the
|
||||
encryption support in CUPS.
|
||||
|
||||
Once you have configured things, just type:
|
||||
|
||||
make ENTER
|
||||
|
||||
or if you have FreeBSD, NetBSD, or OpenBSD type:
|
||||
|
||||
gmake ENTER
|
||||
|
||||
to build the software.
|
||||
|
||||
|
||||
INSTALLING THE SOFTWARE
|
||||
|
||||
Once you have built the software you need to install it. The
|
||||
"install" target provides a quick way to install the software on
|
||||
your local system:
|
||||
|
||||
make install ENTER
|
||||
|
||||
or for FreeBSD, NetBSD, or OpenBSD:
|
||||
|
||||
gmake install ENTER
|
||||
|
||||
You can also build binary packages that can be installed on other
|
||||
machines using the RPM spec file ("cups.spec") or EPM list file
|
||||
("cups.list"). The latter also supports building of binary RPMs,
|
||||
so it may be more convenient to use - we use EPM to build all of
|
||||
our binary distributions.
|
||||
|
||||
You can find the RPM software at:
|
||||
|
||||
http://www.rpm.org
|
||||
|
||||
The RPM software is at:
|
||||
|
||||
http://www.easysw.com/epm
|
||||
|
||||
|
||||
CREATING BINARY DISTRIBUTIONS WITH EPM
|
||||
|
||||
The top level makefile supports generation of many types of binary
|
||||
distributions using EPM. To build a binary distribution type:
|
||||
|
||||
make <format> ENTER
|
||||
|
||||
or
|
||||
|
||||
gmake <format> ENTER
|
||||
|
||||
for FreeBSD, NetBSD, and OpenBSD. The <format> target is one of
|
||||
the following:
|
||||
|
||||
epm - Builds a portable shell script and tar file based
|
||||
distribution. This format will also backup your
|
||||
existing printing system if you decide to remove
|
||||
CUPS at some future time.
|
||||
aix - Builds an AIX binary distribution.
|
||||
bsd - Builds a *BSD binary distribution.
|
||||
deb - Builds a Debian binary distribution.
|
||||
depot - Builds a HP-UX binary distribution.
|
||||
pkg - Builds a Solaris binary distribution.
|
||||
rpm - Builds a RPM binary distribution.
|
||||
tardist - Builds an IRIX binary distribution.
|
||||
|
||||
|
||||
REPORTING PROBLEMS
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! If the
|
||||
documentation does not solve your 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. The "/var/log/cups/error_log" file should also be sent,
|
||||
as it often helps to determine the cause of your problem.
|
||||
|
||||
If you are running a version of Linux, be sure to provide the
|
||||
Linux distribution you have, too.
|
||||
|
||||
Please note that the "cups-support@cups.org" email address goes
|
||||
to the CUPS developers; they are busy people, so your email may
|
||||
go unanswered for days or weeks. In general, only general build
|
||||
or distribution problems will actually get answered - for
|
||||
end-user support see the "README.txt" for a summary of the
|
||||
resources available.
|
||||
+4
-4
@@ -7,11 +7,11 @@
|
||||
|
||||
<H2 ALIGN="CENTER">Common UNIX Printing System License Agreement</H2>
|
||||
|
||||
<P ALIGN="CENTER">Copyright 1997-2000 by Easy Software Products<BR>
|
||||
<P ALIGN="CENTER">Copyright 1997-2001 by Easy Software Products<BR>
|
||||
44141 AIRPORT VIEW DR STE 204<BR>
|
||||
HOLLYWOOD, MARYLAND 20636-3111 USA<BR>
|
||||
<BR>
|
||||
Voice: +1.301.373.9603<BR>
|
||||
Voice: +1.301.373.9600<BR>
|
||||
Email: <A HREF="mailto:cups-info@cups.org">cups-info@cups.org</A><BR>
|
||||
WWW: <A HREF="http://www.cups.org">http://www.cups.org</A>
|
||||
|
||||
@@ -29,7 +29,7 @@ subdirectory of the CUPS source distribution and in the
|
||||
|
||||
<P>The GNU GPL applies to the remainder of the CUPS distribution,
|
||||
including the "pstoraster" filter which is based upon GNU Ghostscript
|
||||
5.50 and the "pdftops" filter which is based upon Xpdf 0.90.
|
||||
5.50 and the "pdftops" filter which is based upon Xpdf 0.92.
|
||||
|
||||
<P>For those not familiar with the GNU GPL, the license basically
|
||||
allows you to:
|
||||
@@ -93,7 +93,7 @@ Fax: +1.415.492.9862<BR>
|
||||
EMail: <A HREF="mailto:info@arsoft.com">info@arsoft.com</A>
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P>The "pdftops" filter is based on the Xpdf 0.90 software. For binary
|
||||
<P>The "pdftops" filter is based on the Xpdf 0.92 software. For binary
|
||||
distribution licensing of this software, please contact:
|
||||
|
||||
<BLOCKQUOTE>
|
||||
|
||||
+31
-17
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Common makefile definitions for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -29,14 +29,12 @@
|
||||
AR = @AR@
|
||||
AWK = @AWK@
|
||||
CC = @LIBTOOL@ @CC@
|
||||
CHMOD = @CHMOD@
|
||||
CP = @CP@
|
||||
CXX = @LIBTOOL@ @CXX@
|
||||
DSO = @DSO@
|
||||
HTMLDOC = @HTMLDOC@
|
||||
INSTALL = @INSTALL@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN = /bin/ln -sf
|
||||
MKDIR = @MKDIR@ -p
|
||||
MV = @MV@
|
||||
NROFF = @NROFF@
|
||||
RANLIB = @RANLIB@
|
||||
@@ -48,12 +46,19 @@ SHELL = /bin/sh
|
||||
# Installation programs...
|
||||
#
|
||||
|
||||
INSTALL_BIN = $(LIBTOOL) $(CP)
|
||||
INSTALL_DATA = $(CP)
|
||||
INSTALL_LIB = $(LIBTOOL) $(CP)
|
||||
INSTALL_MAN = $(CP)
|
||||
INSTALL_SCRIPT = $(CP)
|
||||
INSTALL_SYSV = @INSTALL_SYSV@
|
||||
INSTALL_BIN = $(LIBTOOL) $(INSTALL) -m 755 -s
|
||||
INSTALL_DATA = $(INSTALL) -m 644
|
||||
INSTALL_DIR = $(INSTALL) -d
|
||||
INSTALL_LIB = $(LIBTOOL) $(INSTALL) -m 755
|
||||
INSTALL_MAN = $(INSTALL) -m 644
|
||||
INSTALL_SCRIPT = $(INSTALL) -m 755
|
||||
|
||||
#
|
||||
# Default user and group for the scheduler...
|
||||
#
|
||||
|
||||
CUPS_USER = @CUPS_USER@
|
||||
CUPS_GROUP = @CUPS_GROUP@
|
||||
|
||||
#
|
||||
# Libraries...
|
||||
@@ -62,7 +67,9 @@ INSTALL_SYSV = @INSTALL_SYSV@
|
||||
LIBCUPS = @LIBCUPS@
|
||||
LIBCUPSIMAGE = @LIBCUPSIMAGE@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBMALLOC = @LIBMALLOC@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBSLP = @LIBSLP@
|
||||
LIBTIFF = @LIBTIFF@
|
||||
LIBZ = @LIBZ@
|
||||
|
||||
@@ -75,8 +82,9 @@ LIBZ = @LIBZ@
|
||||
#
|
||||
|
||||
ARFLAGS = crvs
|
||||
CFLAGS = @CFLAGS@ $(OPTIM) -I.. $(OPTIONS)
|
||||
CXXFLAGS = @CXXFLAGS@ $(OPTIM) -I.. $(OPTIONS)
|
||||
CFLAGS = @CFLAGS@ -I.. $(OPTIONS)
|
||||
CXXFLAGS = @CXXFLAGS@ -I.. $(OPTIONS)
|
||||
DSOFLAGS = @DSOFLAGS@
|
||||
DSOLIBS = @DSOLIBS@
|
||||
IMGLIBS = @IMGLIBS@ -lm
|
||||
LDFLAGS = @LDFLAGS@ $(OPTIM)
|
||||
@@ -86,6 +94,8 @@ LIBS = $(LINKCUPS) $(NETLIBS) @LIBS@
|
||||
NETLIBS = @NETLIBS@
|
||||
OPTIM = @OPTIM@
|
||||
OPTIONS =
|
||||
PAMLIBS = @PAMLIBS@
|
||||
SSLLIBS = @SSLLIBS@
|
||||
|
||||
#
|
||||
# Directories...
|
||||
@@ -116,11 +126,13 @@ srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
AMANDIR = @AMANDIR@
|
||||
BINDIR = @bindir@
|
||||
DATADIR = @CUPS_DATADIR@
|
||||
DOCDIR = @CUPS_DOCROOT@
|
||||
ESP_ROOT = @ESP_ROOT@
|
||||
INCLUDEDIR = $(includedir)
|
||||
INITDIR = @INITDIR@
|
||||
INITDDIR = @INITDDIR@
|
||||
LIBDIR = $(libdir)
|
||||
LOCALEDIR = @CUPS_LOCALEDIR@
|
||||
LOGDIR = @CUPS_LOGDIR@
|
||||
@@ -134,20 +146,22 @@ SERVERROOT = @CUPS_SERVERROOT@
|
||||
CAT1EXT = @CAT1EXT@
|
||||
CAT5EXT = @CAT5EXT@
|
||||
CAT8EXT = @CAT8EXT@
|
||||
MAN8EXT = @MAN8EXT@
|
||||
MAN8DIR = @MAN8DIR@
|
||||
|
||||
#
|
||||
# Rules...
|
||||
#
|
||||
|
||||
.SILENT:
|
||||
.SUFFIXES: .a .c .cxx .h .man .o .0 .1 .5 .8 .z
|
||||
.SUFFIXES: .a .c .cxx .h .man .o .0 .1 .1m .5 .8 .z
|
||||
.c.o:
|
||||
echo Compiling $<...
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
$(CC) $(OPTIM) $(CFLAGS) -c $<
|
||||
.cxx.o:
|
||||
echo Compiling $<...
|
||||
$(CXX) $(CXXFLAGS) -c $<
|
||||
.man.0 .man.1 .man.5 .man.8:
|
||||
$(CXX) $(OPTIM) $(CXXFLAGS) -c $<
|
||||
.man.0 .man.1 .man.1m .man.5 .man.8:
|
||||
echo Formatting $<...
|
||||
$(RM) $@
|
||||
$(NROFF) -man $< >$@
|
||||
|
||||
+36
-27
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Top-level Makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -28,7 +28,7 @@ include Makedefs
|
||||
# Directories to make...
|
||||
#
|
||||
|
||||
DIRS = cups backend berkeley cgi-bin doc filter man pdftops pstoraster \
|
||||
DIRS = cups backend berkeley cgi-bin filter man pdftops pstoraster \
|
||||
scheduler systemv
|
||||
|
||||
#
|
||||
@@ -64,46 +64,55 @@ install:
|
||||
(cd conf; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in data...
|
||||
(cd data; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in doc...
|
||||
(cd doc; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in fonts...
|
||||
(cd fonts; $(MAKE) $(MFLAGS) install)
|
||||
(cd fonts; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in locale...
|
||||
(cd locale; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in ppd...
|
||||
(cd ppd; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in templates...
|
||||
(cd templates; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing startup script...
|
||||
if test -d $(prefix)/sbin/init.d; then \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/sbin/init.d/cups; \
|
||||
$(CHMOD) ugo+rx $(prefix)/sbin/init.d/cups; \
|
||||
ln -s ../init.d/cups $(prefix)/sbin/rc0.d/K000cups; \
|
||||
ln -s ../init.d/cups $(prefix)/sbin/rc2.d/S999cups; \
|
||||
if test "x$(INITDIR)" != "x"; then \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDIR)/init.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/init.d/cups; \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDIR)/rc0.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/rc0.d/K00cups; \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDIR)/rc2.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/rc2.d/S99cups; \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDIR)/rc3.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/rc3.d/S99cups; \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDIR)/rc5.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/rc5.d/S99cups; \
|
||||
fi
|
||||
if test -d $(prefix)/etc/rc.d/init.d; then \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/etc/rc.d/init.d/cups; \
|
||||
$(CHMOD) ugo+rx $(prefix)/etc/rc.d/cups; \
|
||||
ln -s ../init.d/cups $(prefix)/etc/rc.d/rc0.d/K00cups; \
|
||||
ln -s ../init.d/cups $(prefix)/etc/rc.d/rc2.d/S99cups; \
|
||||
fi
|
||||
if test -d $(prefix)/etc/init.d; then \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/etc/init.d/cups; \
|
||||
$(CHMOD) ugo+rx $(prefix)/etc/init.d/cups; \
|
||||
ln -s ../init.d/cups $(prefix)/etc/rc0.d/K00cups; \
|
||||
ln -s ../init.d/cups $(prefix)/etc/rc2.d/S99cups; \
|
||||
if test "x$(INITDIR)" = "x" -a "x$(INITDDIR)" != "x"; then \
|
||||
$(INSTALL_DIR) $(prefix)/$(INITDDIR); \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDDIR)/cups; \
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Run the test suite...
|
||||
#
|
||||
|
||||
test: all
|
||||
echo Running CUPS test suite...
|
||||
cd test; ./run-stp-tests.sh
|
||||
|
||||
|
||||
#
|
||||
# Make software distributions using EPM (http://www.easysw.com/epm)...
|
||||
#
|
||||
|
||||
EPMFLAGS = -v \
|
||||
BINDIR=$(BINDIR) DATADIR=$(DATADIR) \
|
||||
DOCDIR=$(DOCDIR) ESP_ROOT=$(ESP_ROOT) \
|
||||
INCLUDEDIR=$(INCLUDEDIR) LIBDIR=$(LIBDIR) \
|
||||
LOCALEDIR=$(LOCALEDIR) LOGDIR=$(LOGDIR) \
|
||||
MANDIR=$(MANDIR) PAMDIR=$(PAMDIR) \
|
||||
REQUESTS=$(REQUESTS) SBINDIR=$(SBINDIR) \
|
||||
SERVERBIN=$(SERVERBIN) SERVERROOT=$(SERVERROOT)
|
||||
EPMFLAGS = -v
|
||||
|
||||
aix:
|
||||
epm $(EPMFLAGS) -f aix cups
|
||||
|
||||
bsd:
|
||||
epm $(EPMFLAGS) -f bsd cups
|
||||
|
||||
epm:
|
||||
epm $(EPMFLAGS) cups
|
||||
|
||||
+155
-138
@@ -1,54 +1,62 @@
|
||||
README - CUPS v1.1 - 07/10/2000
|
||||
-------------------------------
|
||||
README - CUPS v1.1.10 - 08/08/2001
|
||||
----------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt"
|
||||
instead...
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
CUPS provides a portable printing layer for UNIX(r)-based operating
|
||||
systems. It has been developed by Easy Software Products to promote a
|
||||
standard printing solution for all UNIX vendors and users. CUPS
|
||||
provides the System V and Berkeley command-line interfaces.
|
||||
CUPS provides a portable printing layer for UNIX(r)-based
|
||||
operating systems. It has been developed by Easy Software
|
||||
Products to promote a standard printing solution for all UNIX
|
||||
vendors and users. CUPS provides the System V and Berkeley
|
||||
command-line interfaces.
|
||||
|
||||
CUPS uses the Internet Printing Protocol ("IPP") as the basis for
|
||||
managing print jobs and queues. The Line Printer Daemon ("LPD") Server
|
||||
Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
|
||||
also supported with reduced functionality. CUPS adds network printer
|
||||
browsing and PostScript Printer Description ("PPD") based printing
|
||||
options to support real-world printing under UNIX.
|
||||
CUPS uses the Internet Printing Protocol ("IPP") as the basis
|
||||
for managing print jobs and queues. The Line Printer Daemon
|
||||
("LPD") Server Message Block ("SMB"), and AppSocket (a.k.a.
|
||||
JetDirect) protocols are also supported with reduced
|
||||
functionality. CUPS adds network printer browsing and
|
||||
PostScript Printer Description ("PPD") based printing options to
|
||||
support real-world printing under UNIX.
|
||||
|
||||
CUPS also includes a customized version of GNU Ghostscript (currently
|
||||
based off GNU Ghostscript 5.50) and an image file RIP that are used to
|
||||
support non-PostScript printers. Sample drivers for HP and EPSON
|
||||
printers are included that use these filters.
|
||||
CUPS also includes a customized version of GNU Ghostscript
|
||||
(currently based off GNU Ghostscript 5.50) and an image file RIP
|
||||
that are used to support non-PostScript printers. Sample
|
||||
drivers for HP and EPSON printers are included that use these
|
||||
filters.
|
||||
|
||||
Drivers for over 2300 printers are provided with our ESP Print Pro
|
||||
software, available at:
|
||||
Drivers for thousands of printers are provided with our ESP
|
||||
Print Pro software, available at:
|
||||
|
||||
http://www.easysw.com/printpro
|
||||
|
||||
CUPS is licensed under the GNU General Public License and GNU Library
|
||||
General Public License. Please contact Easy Software Products for
|
||||
commercial support and "binary distribution" rights.
|
||||
CUPS is licensed under the GNU General Public License and GNU
|
||||
Library General Public License. Please contact Easy Software
|
||||
Products for commercial support and "binary distribution"
|
||||
rights.
|
||||
|
||||
|
||||
SYSTEM REQUIREMENTS
|
||||
|
||||
Binary distributions require a minimum of 10MB of free disk space. We
|
||||
do not recommend using CUPS on a workstation with less than 32MB of RAM
|
||||
or a PC with less than 16MB of RAM.
|
||||
Binary distributions require a minimum of 10MB of free disk
|
||||
space. We do not recommend using CUPS on a workstation with less
|
||||
than 32MB of RAM or a PC with less than 16MB of RAM.
|
||||
|
||||
If you are installing from source you'll need ANSI-compliant C and C++
|
||||
compilers and optionally one or more image file support libraries.
|
||||
Complete source installation instructions can be found in the CUPS
|
||||
System Administrator's Manual in the files "doc/sam.html" or
|
||||
"doc/sam.pdf".
|
||||
If you are installing from source you'll need ANSI-compliant C
|
||||
and C++ compilers and optionally one or more image file support
|
||||
libraries. Complete source installation instructions can be
|
||||
found in the file "INSTALL.txt".
|
||||
|
||||
|
||||
SOFTWARE REQUIREMENTS
|
||||
|
||||
The following operating system software is required to install one of
|
||||
the binary distributions from Easy Software Products:
|
||||
The following operating system software is required to install
|
||||
one of the binary distributions from Easy Software Products:
|
||||
|
||||
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
|
||||
- AIX 4.3 or higher
|
||||
- Compaq Tru64 UNIX (aka OSF1 aka Digital UNIX) 4.0 or higher
|
||||
- HP-UX 10.20 or higher
|
||||
- IRIX 5.3 or higher
|
||||
- Linux 2.0 with glibc2 or higher
|
||||
@@ -57,77 +65,104 @@ the binary distributions from Easy Software Products:
|
||||
|
||||
INSTALLING "PORTABLE" CUPS DISTRIBUTIONS
|
||||
|
||||
We are currently distributing "portable" CUPS binary distributions in
|
||||
TAR format with installation and removal scripts generated by our ESP
|
||||
Package Manager (EPM) software, which is available from:
|
||||
We are currently distributing "portable" CUPS binary
|
||||
distributions in TAR format with installation and removal
|
||||
scripts generated by our ESP Package 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
|
||||
removal script, so if you experience problems you should be able to
|
||||
remove the CUPS software to restore your previous configuration.
|
||||
However, Easy Software Products makes no warranty for this and will not
|
||||
be liable for any lost revenues, etc.
|
||||
WARNING: Installing CUPS will overwrite your existing printing
|
||||
system. Backup files are made by the installation script and
|
||||
restored by the removal script, so if you experience problems
|
||||
you should be able to remove the CUPS software to restore your
|
||||
previous configuration. However, Easy Software Products makes
|
||||
no warranty for this and will not be liable for any lost
|
||||
revenues, etc.
|
||||
|
||||
To install the CUPS software you will need to be logged in as root
|
||||
(doing an "su" is good enough). Once you are the root user, run the
|
||||
installation script with:
|
||||
To install the CUPS software you will need to be logged in as
|
||||
root (doing an "su" is good enough). Once you are the root
|
||||
user, run the installation script with:
|
||||
|
||||
./cups.install ENTER
|
||||
|
||||
After asking you a few yes/no questions the CUPS software will be
|
||||
installed and the scheduler will be started automatically.
|
||||
After asking you a few yes/no questions the CUPS software will
|
||||
be installed and the scheduler will be started automatically.
|
||||
|
||||
|
||||
INSTALLING HOST-SPECIFIC (RPM, DEBIAN, ETC.) DISTRIBUTIONS
|
||||
|
||||
The host-specific distributions use the operating system software
|
||||
installation tools. To install a host-specific distribution please
|
||||
consult the CUPS Software Administrators Manual or your operating
|
||||
system documentation.
|
||||
The host-specific distributions use the operating system
|
||||
software installation tools. To install a host-specific
|
||||
distribution please consult the CUPS Software Administrators
|
||||
Manual or your operating system documentation.
|
||||
|
||||
|
||||
READING THE DOCUMENTATION
|
||||
|
||||
Once you have installed the software you can access the documentation
|
||||
(and a bunch of other stuff) on-line at:
|
||||
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/doc/cups" directory in the binary distributions, and
|
||||
under the "doc" directory in the source archives.
|
||||
If you're having trouble getting that far, the documentation is
|
||||
located in the "/usr/share/doc/cups" directory in the binary
|
||||
distributions, and under the "doc" directory in the source
|
||||
archives.
|
||||
|
||||
Please read the documentation before asking questions.
|
||||
|
||||
|
||||
GETTING SUPPORT AND OTHER RESOURCES
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST!
|
||||
|
||||
You can subscribe to the CUPS mailing list by sending a message
|
||||
containing "subscribe cups" to majordomo@cups.org. This list is
|
||||
provided to discuss problems, questions, and improvements to the
|
||||
CUPS software. New releases of CUPS are announced to this list
|
||||
as well.
|
||||
|
||||
Commercial support (with a guaranteed response time) is
|
||||
available from Easy Software Products. For more information
|
||||
see:
|
||||
|
||||
http://www.easysw.com/cups
|
||||
|
||||
See the CUPS web site at "http://www.cups.org" for other site
|
||||
links.
|
||||
|
||||
|
||||
SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER
|
||||
|
||||
CUPS 1.1 includes a new web-based administration tool that allows you
|
||||
to manage printers, classes, and jobs on your server. To access the
|
||||
printer administration tools open the following URL in your browser:
|
||||
CUPS 1.1 includes a new web-based administration tool that
|
||||
allows you to manage printers, classes, and jobs on your
|
||||
server. To access the printer administration tools open the
|
||||
following URL in your browser:
|
||||
|
||||
http://localhost:631/admin
|
||||
|
||||
You will be asked for the administration password (root or any other
|
||||
user in the sys/system/root group on your system) and then shown a
|
||||
menu of available functions.
|
||||
You will be asked for the administration password (root or any
|
||||
other user in the sys/system/root group on your system) and then
|
||||
shown a menu of available functions.
|
||||
|
||||
DO NOT use the hostname for your machine - it will not work with the
|
||||
default CUPS configuration. To enable administration access on other
|
||||
addresses, consult the CUPS Software Administrators Manual.
|
||||
DO NOT use the hostname for your machine - it will not work with
|
||||
the default CUPS configuration. To enable administration access
|
||||
on other addresses, consult the CUPS Software Administrators
|
||||
Manual.
|
||||
|
||||
|
||||
SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
|
||||
|
||||
CUPS works best with PPD (PostScript Printer Description) files. In a
|
||||
pinch you can also use System V style printer interface scripts.
|
||||
CUPS works best with PPD (PostScript Printer Description)
|
||||
files. In a pinch you can also use System V style printer
|
||||
interface scripts.
|
||||
|
||||
Six sample PPD files are provided with this distribution that utilize
|
||||
the PostScript and image file RIPs and the sample EPSON and HP printer
|
||||
drivers. To add the sample DeskJet driver to the system for a printer
|
||||
connected to the parallel port, use one of the following commands:
|
||||
Six sample PPD files are provided with this distribution that
|
||||
utilize the PostScript and image file RIPs and the sample EPSON
|
||||
and HP printer drivers. To add the sample DeskJet driver to the
|
||||
system for a printer connected to the parallel port, use one of
|
||||
the following commands:
|
||||
|
||||
Digital UNIX:
|
||||
|
||||
@@ -154,100 +189,82 @@ connected to the parallel port, use one of the following commands:
|
||||
|
||||
Similarly, for the other sample drivers you can use:
|
||||
|
||||
Driver PPD File
|
||||
-------------------------- ------------
|
||||
HP DeskJet Series deskjet.ppd
|
||||
HP LaserJet Series laserjet.ppd
|
||||
EPSON Stylus Color Series stcolor.ppd
|
||||
EPSON Stylus Photo Series stphoto.ppd
|
||||
EPSON 9-pin Series epson9.ppd
|
||||
EPSON 24-pin Series epson24.ppd
|
||||
Driver PPD File
|
||||
----------------------------- ------------
|
||||
Dymo Label Printers dymo.ppd
|
||||
EPSON Stylus Color Series stcolor.ppd
|
||||
EPSON Stylus Photo Series stphoto.ppd
|
||||
EPSON Stylus New Color Series stcolor2.ppd
|
||||
EPSON Stylus New Photo Series stphoto2.ppd
|
||||
EPSON 9-pin Series epson9.ppd
|
||||
EPSON 24-pin Series epson24.ppd
|
||||
HP DeskJet Series deskjet.ppd
|
||||
HP New DeskJet Series deskjet2.ppd
|
||||
HP LaserJet Series laserjet.ppd
|
||||
OKIDATA 9-Pin Series okidata9.ppd
|
||||
OKIDATA 24-Pin Series okidat24.ppd
|
||||
|
||||
These sample drivers provide basic printing capabilities, but generally
|
||||
do not exercise the full potential of the printers or CUPS. For
|
||||
commercial printer drivers check out our ESP Print Pro software at:
|
||||
These sample drivers provide basic printing capabilities, but
|
||||
generally do not exercise the full potential of the printers or
|
||||
CUPS. For commercial printer drivers check out our ESP Print
|
||||
Pro software at:
|
||||
|
||||
http://www.easysw.com/printpro
|
||||
|
||||
|
||||
PRINTING FILES
|
||||
|
||||
CUPS provides both the System V "lp" and Berkeley "lpr" commands for
|
||||
printing:
|
||||
CUPS provides both the System V "lp" and Berkeley "lpr" commands
|
||||
for printing:
|
||||
|
||||
lp filename
|
||||
lpr filename
|
||||
|
||||
Both the "lp" and "lpr" commands support printing options for the
|
||||
driver:
|
||||
Both the "lp" and "lpr" commands support printing options for
|
||||
the driver:
|
||||
|
||||
lp -omedia=A4 -oresolution=600dpi filename
|
||||
lpr -omedia=A4 -oresolution=600dpi filename
|
||||
|
||||
CUPS recognizes many types of images files as well as PDF, PostScript,
|
||||
HP-GL/2, and text files, so you can print those files directly rather
|
||||
than through an application.
|
||||
CUPS recognizes many types of images files as well as PDF,
|
||||
PostScript, HP-GL/2, and text files, so you can print those
|
||||
files directly rather than through an application.
|
||||
|
||||
If you have an application that generates output specifically for your
|
||||
printer then you need to use the "-oraw" or "-l" options:
|
||||
If you have an application that generates output specifically
|
||||
for your printer then you need to use the "-oraw" or "-l"
|
||||
options:
|
||||
|
||||
lp -oraw filename
|
||||
lpr -l filename
|
||||
|
||||
This will prevent the filters from misinterpreting your print file.
|
||||
|
||||
|
||||
REPORTING PROBLEMS
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! If the
|
||||
documentation does not solve your 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. The
|
||||
/var/log/error_log file should also be sent, as it often helps to
|
||||
determine the cause of your problem.
|
||||
|
||||
If you are running a version of Linux, be sure to provide the Linux
|
||||
distribution you have, too.
|
||||
|
||||
Please note that the "cups-support@cups.org" email address goes to the
|
||||
CUPS developers; they are busy people, so your email may go unanswered
|
||||
for days or weeks. Commercial support (with a guaranteed response
|
||||
time) is available from Easy Software Products.
|
||||
|
||||
|
||||
OTHER RESOURCES
|
||||
|
||||
See the CUPS web site at "http://www.cups.org" for other site links.
|
||||
|
||||
You can subscribe to the CUPS mailing list by sending a message
|
||||
containing "subscribe cups" to majordomo@cups.org. This list is
|
||||
provided to discuss problems, questions, and improvements to the CUPS
|
||||
software. New releases of CUPS are announced to this list as well.
|
||||
This will prevent the filters from misinterpreting your print
|
||||
file.
|
||||
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 1993-2000 by Easy Software Products. CUPS, the CUPS
|
||||
logo, and the Common UNIX Printing System are the trademark property of
|
||||
Easy Software Products.
|
||||
CUPS is Copyright 1993-2001 by Easy Software Products. CUPS,
|
||||
the CUPS logo, and the Common UNIX Printing System are the
|
||||
trademark property of Easy Software Products.
|
||||
|
||||
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
|
||||
|
||||
The PostScript RIP software (pstoraster) is based on the GNU
|
||||
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin Enterprises.
|
||||
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin
|
||||
Enterprises.
|
||||
|
||||
The PDF filter (pdftops) is based on the Xpdf 0.90 software, Copyright
|
||||
1996-1999 by Derek B. Noonburg.
|
||||
The PDF filter (pdftops) is based on the Xpdf 0.92 software,
|
||||
Copyright 1996-2001 by Derek B. Noonburg.
|
||||
|
||||
This software is based in part on the work of the Independent JPEG
|
||||
Group.
|
||||
This software is based in part on the work of the Independent
|
||||
JPEG Group.
|
||||
|
||||
CUPS is provided under the terms of the GNU General Public License and
|
||||
GNU Library General Public License. This program is distributed in the
|
||||
hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
|
||||
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the "LICENSE.html", "LICENSE.txt", or "cups.license" files
|
||||
for more information.
|
||||
CUPS is provided under the terms of the GNU General Public
|
||||
License and GNU Library General Public License. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the "LICENSE.html",
|
||||
"LICENSE.txt", or "cups.license" files for more information.
|
||||
|
||||
For commercial licensing information, please contact:
|
||||
|
||||
@@ -256,11 +273,11 @@ For commercial licensing information, please contact:
|
||||
44141 Airport View Drive, Suite 204
|
||||
Hollywood, Maryland 20636-3111 USA
|
||||
|
||||
Voice: +1.301.373.9603
|
||||
Voice: +1.301.373.9600
|
||||
Email: cups-info@cups.org
|
||||
WWW: http://www.cups.org
|
||||
|
||||
Note that commercial licensors may also require a license from Artifex
|
||||
Software Inc. which handles commercial licensing of the Ghostscript
|
||||
software, and from Derek B. Noonburg who developed the Xpdf software
|
||||
used to print PDF files.
|
||||
Note that commercial licensors may also require a license from
|
||||
Artifex Software Inc. which handles commercial licensing of the
|
||||
Ghostscript software, and from Derek B. Noonburg who developed
|
||||
the Xpdf software used to print PDF files.
|
||||
|
||||
+6
-6
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Backend makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -41,7 +41,7 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
$(RM) $(OBJS) $(TARGETS) http
|
||||
|
||||
|
||||
#
|
||||
@@ -49,10 +49,10 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERBIN)/backend
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)/backend
|
||||
$(INSTALL_BIN) $(BACKENDS) $(SERVERBIN)/backend
|
||||
$(INSTALL_DIR) $(SERVERBIN)/backend
|
||||
for file in $(BACKENDS); do \
|
||||
$(INSTALL_BIN) $$file $(SERVERBIN)/backend; \
|
||||
done
|
||||
$(RM) $(SERVERBIN)/backend/http
|
||||
$(LN) ipp $(SERVERBIN)/backend/http
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Backend test program for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
|
||||
+322
-392
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -23,7 +23,8 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the printer or server.
|
||||
* main() - Send a file to the printer or server.
|
||||
* password_cb() - Disable the password prompt for cupsDoFileRequest().
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -41,6 +42,20 @@
|
||||
#include <signal.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
const char *password_cb(const char *);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
char *password = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Send a file to the printer or server.
|
||||
*
|
||||
@@ -54,10 +69,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int n, n2; /* Attribute values */
|
||||
char *option, /* Name of option */
|
||||
*s; /* Pointer into option value */
|
||||
const char *val; /* Pointer to option value */
|
||||
int num_options; /* Number of printer options */
|
||||
cups_option_t *options; /* Printer options */
|
||||
char method[255], /* Method in URI */
|
||||
@@ -66,21 +77,20 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
resource[1024], /* Resource info (printer name) */
|
||||
filename[1024]; /* File to print */
|
||||
int port; /* Port number (not used) */
|
||||
char password[255], /* Password info */
|
||||
uri[HTTP_MAX_URI];/* Updated URI without user/pass */
|
||||
http_status_t status; /* Status of HTTP job */
|
||||
char uri[HTTP_MAX_URI];/* Updated URI without user/pass */
|
||||
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 */
|
||||
*response, /* IPP response */
|
||||
*supported; /* get-printer-attributes response */
|
||||
ipp_attribute_t *job_id_attr; /* job-id attribute */
|
||||
int job_id; /* job-id value */
|
||||
ipp_attribute_t *job_state; /* job-state attribute */
|
||||
ipp_attribute_t *copies_sup; /* copies-supported attribute */
|
||||
ipp_attribute_t *charset_sup; /* charset-supported attribute */
|
||||
ipp_attribute_t *format_sup; /* document-format-supported attribute */
|
||||
const char *charset; /* Character set to use */
|
||||
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 */
|
||||
const char *content_type; /* CONTENT_TYPE environment variable */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
@@ -89,8 +99,20 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
int version; /* IPP version */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
char *s;
|
||||
|
||||
if ((s = strrchr(argv[0], '/')) != NULL)
|
||||
s ++;
|
||||
else
|
||||
@@ -118,27 +140,27 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Copy stdin to a temporary file...
|
||||
*/
|
||||
|
||||
FILE *fp; /* Temporary file */
|
||||
int fd; /* Temporary file */
|
||||
char buffer[8192]; /* Buffer for copying */
|
||||
int bytes; /* Number of bytes read */
|
||||
|
||||
|
||||
if ((fp = fopen(cupsTempFile(filename, sizeof(filename)), "w")) == NULL)
|
||||
if ((fd = cupsTempFd(filename, sizeof(filename))) < 0)
|
||||
{
|
||||
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)
|
||||
if (write(fd, buffer, bytes) < bytes)
|
||||
{
|
||||
perror("ERROR: unable to write to temporary file");
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
unlink(filename);
|
||||
return (1);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -146,24 +168,26 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
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(filename, &fileinfo);
|
||||
|
||||
/*
|
||||
* Extract the hostname and printer name from the URI...
|
||||
*/
|
||||
|
||||
httpSeparate(argv[0], method, username, hostname, &port, resource);
|
||||
|
||||
/*
|
||||
* Set the authentication info, if any...
|
||||
*/
|
||||
|
||||
cupsSetPasswordCB(password_cb);
|
||||
|
||||
if (username[0])
|
||||
{
|
||||
if ((password = strchr(username, ':')) != NULL)
|
||||
*password++ = '\0';
|
||||
|
||||
cupsSetUser(username);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try connecting to the remote server...
|
||||
*/
|
||||
@@ -203,9 +227,12 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* don't support the copies attribute...
|
||||
*/
|
||||
|
||||
language = cupsLangDefault();
|
||||
copies_sup = NULL;
|
||||
version = 1;
|
||||
language = cupsLangDefault();
|
||||
charset_sup = NULL;
|
||||
copies_sup = NULL;
|
||||
format_sup = NULL;
|
||||
version = 1;
|
||||
supported = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
@@ -228,173 +255,136 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
/*
|
||||
* 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));
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
for (;;)
|
||||
if ((supported = cupsDoRequest(http, request, resource)) == NULL)
|
||||
ipp_status = cupsLastError();
|
||||
else
|
||||
ipp_status = supported->request.status.status_code;
|
||||
|
||||
if (ipp_status > IPP_OK_CONFLICT)
|
||||
{
|
||||
/*
|
||||
* POST the request, retrying as needed...
|
||||
*/
|
||||
if (supported)
|
||||
ippDelete(supported);
|
||||
|
||||
if (httpPost(http, resource))
|
||||
if (ipp_status == IPP_PRINTER_BUSY ||
|
||||
ipp_status == IPP_SERVICE_UNAVAILABLE)
|
||||
{
|
||||
fputs("INFO: Unable to POST get-printer-attributes request; retrying...\n", stderr);
|
||||
fputs("INFO: Printer busy; will retry in 10 seconds...\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)
|
||||
else if ((ipp_status == IPP_BAD_REQUEST ||
|
||||
ipp_status == IPP_VERSION_NOT_SUPPORTED) && version == 1)
|
||||
{
|
||||
fputs("ERROR: Unable to send IPP request!\n", stderr);
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* Switch to IPP/1.0...
|
||||
*/
|
||||
|
||||
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 if (ipp_status == IPP_BAD_REQUEST && version == 1)
|
||||
{
|
||||
/*
|
||||
* Switch to IPP/1.0...
|
||||
*/
|
||||
|
||||
fputs("INFO: Printer does not support IPP/1.1, trying IPP/1.0...\n", stderr);
|
||||
version = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "ERROR: Printer will not accept print file (%x)!\n",
|
||||
ipp_status);
|
||||
fprintf(stderr, "ERROR: %s\n", ippErrorString(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);
|
||||
fputs("INFO: Printer does not support IPP/1.1, trying IPP/1.0...\n", stderr);
|
||||
version = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
response = NULL;
|
||||
|
||||
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);
|
||||
ipp_status = IPP_FORBIDDEN;
|
||||
}
|
||||
}
|
||||
|
||||
httpFlush(http);
|
||||
|
||||
break;
|
||||
fprintf(stderr, "ERROR: Printer will not accept print file (%s)!\n",
|
||||
ippErrorString(ipp_status));
|
||||
}
|
||||
|
||||
if (status != HTTP_OK)
|
||||
else if ((copies_sup = ippFindAttribute(supported, "copies-supported",
|
||||
IPP_TAG_RANGE)) != NULL)
|
||||
{
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
/*
|
||||
* Has the "copies-supported" attribute - does it have an upper
|
||||
* bound > 1?
|
||||
*/
|
||||
|
||||
httpClose(http);
|
||||
|
||||
return (1);
|
||||
if (copies_sup->values[0].range.upper <= 1)
|
||||
copies_sup = NULL; /* No */
|
||||
}
|
||||
|
||||
charset_sup = ippFindAttribute(supported, "charset-supported",
|
||||
IPP_TAG_CHARSET);
|
||||
format_sup = ippFindAttribute(supported, "document-format-supported",
|
||||
IPP_TAG_MIMETYPE);
|
||||
|
||||
if (format_sup)
|
||||
{
|
||||
fprintf(stderr, "DEBUG: document-format-supported (%d values)\n",
|
||||
format_sup->num_values);
|
||||
for (i = 0; i < format_sup->num_values; i ++)
|
||||
fprintf(stderr, "DEBUG: [%d] = \"%s\"\n", i,
|
||||
format_sup->values[i].string.text);
|
||||
}
|
||||
else if (ipp_status > IPP_OK_CONFLICT)
|
||||
httpReconnect(http);
|
||||
}
|
||||
while (ipp_status > IPP_OK_CONFLICT);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (argc < 7)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* See if the printer supports multiple copies...
|
||||
*/
|
||||
|
||||
if (copies_sup)
|
||||
if (copies_sup || argc < 7)
|
||||
copies = 1;
|
||||
else
|
||||
copies = atoi(argv[4]);
|
||||
|
||||
/*
|
||||
* Figure out the character set to use...
|
||||
*/
|
||||
|
||||
charset = language ? cupsLangEncoding(language) : "us-ascii";
|
||||
|
||||
if (charset_sup)
|
||||
{
|
||||
/*
|
||||
* See if IPP server supports the requested character set...
|
||||
*/
|
||||
|
||||
for (i = 0; i < charset_sup->num_values; i ++)
|
||||
if (strcasecmp(charset, charset_sup->values[i].string.text) == 0)
|
||||
break;
|
||||
|
||||
/*
|
||||
* If not, choose us-ascii or utf-8...
|
||||
*/
|
||||
|
||||
if (i >= charset_sup->num_values)
|
||||
{
|
||||
/*
|
||||
* See if us-ascii is supported...
|
||||
*/
|
||||
|
||||
for (i = 0; i < charset_sup->num_values; i ++)
|
||||
if (strcasecmp("us-ascii", charset_sup->values[i].string.text) == 0)
|
||||
break;
|
||||
|
||||
if (i < charset_sup->num_values)
|
||||
charset = "us-ascii";
|
||||
else
|
||||
charset = "utf-8";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Then issue the print-job request...
|
||||
*/
|
||||
@@ -411,7 +401,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, "utf-8");
|
||||
"attributes-charset", NULL, charset);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL,
|
||||
@@ -422,13 +412,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
fprintf(stderr, "DEBUG: printer-uri = \"%s\"\n", uri);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, argv[2]);
|
||||
if (argv[2][0])
|
||||
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]);
|
||||
if (argv[3][0])
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
|
||||
argv[3]);
|
||||
|
||||
fprintf(stderr, "DEBUG: job-name = \"%s\"\n", argv[3]);
|
||||
|
||||
@@ -439,248 +431,75 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
options = NULL;
|
||||
num_options = cupsParseOptions(argv[5], 0, &options);
|
||||
|
||||
if (cupsGetOption("raw", num_options, options) ||
|
||||
((content_type = getenv("CONTENT_TYPE")) != NULL &&
|
||||
strcasecmp(content_type, "application/vnd.cups-raw") == 0))
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/vnd.cups-raw");
|
||||
else if ((val = cupsGetOption("document-format", num_options, options)) != NULL)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, val);
|
||||
if (argc > 6)
|
||||
content_type = getenv("CONTENT_TYPE");
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/octet-stream");
|
||||
content_type = "application/vnd.cups-raw";
|
||||
|
||||
if (content_type != NULL && format_sup != NULL)
|
||||
{
|
||||
for (i = 0; i < format_sup->num_values; i ++)
|
||||
if (strcasecmp(content_type, format_sup->values[i].string.text) == 0)
|
||||
break;
|
||||
|
||||
if (i < format_sup->num_values)
|
||||
num_options = cupsAddOption("document-format", content_type,
|
||||
num_options, &options);
|
||||
}
|
||||
|
||||
if (copies_sup)
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
{
|
||||
/*
|
||||
* Skip the "raw" option - handled above...
|
||||
* Only send options if the destination printer supports the copies
|
||||
* attribute. This is a hack for the HP JetDirect implementation of
|
||||
* IPP, which does not accept extension attributes and incorrectly
|
||||
* reports a client-error-bad-request error instead of the
|
||||
* successful-ok-unsupported-attributes status. In short, at least
|
||||
* some HP implementations of IPP are non-compliant.
|
||||
*/
|
||||
|
||||
if (strcasecmp(options[i].name, "raw") == 0 ||
|
||||
strcasecmp(options[i].name, "document-format") == 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);
|
||||
cupsEncodeOptions(request, num_options, options);
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies",
|
||||
atoi(argv[4]));
|
||||
}
|
||||
|
||||
/*
|
||||
* Now fill in the HTTP request stuff...
|
||||
*/
|
||||
cupsFreeOptions(num_options, options);
|
||||
|
||||
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 (;;)
|
||||
if ((response = cupsDoFileRequest(http, request, resource, filename)) == NULL)
|
||||
ipp_status = cupsLastError();
|
||||
else
|
||||
ipp_status = response->request.status.status_code;
|
||||
|
||||
if (ipp_status > IPP_OK_CONFLICT)
|
||||
{
|
||||
/*
|
||||
* POST the request, retrying as needed...
|
||||
*/
|
||||
|
||||
httpReconnect(http);
|
||||
|
||||
if (httpPost(http, resource))
|
||||
if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
|
||||
ipp_status == IPP_PRINTER_BUSY)
|
||||
{
|
||||
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
|
||||
fputs("INFO: Printer is busy; retrying print job...\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);
|
||||
fprintf(stderr, "ERROR: %s\n", ippErrorString(ipp_status));
|
||||
}
|
||||
}
|
||||
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);
|
||||
|
||||
break;
|
||||
fprintf(stderr, "ERROR: Print file was not accepted (%s)!\n",
|
||||
ippErrorString(ipp_status));
|
||||
}
|
||||
else if ((job_id_attr = ippFindAttribute(response, "job-id",
|
||||
IPP_TAG_INTEGER)) == NULL)
|
||||
{
|
||||
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
|
||||
job_id = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
job_id = job_id_attr->values[0].integer;
|
||||
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n", job_id);
|
||||
}
|
||||
|
||||
if (request != NULL)
|
||||
ippDelete(request);
|
||||
if (response != NULL)
|
||||
if (response)
|
||||
ippDelete(response);
|
||||
|
||||
if (ipp_status <= IPP_OK_CONFLICT)
|
||||
@@ -691,6 +510,100 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
else if (ipp_status != IPP_SERVICE_UNAVAILABLE &&
|
||||
ipp_status != IPP_PRINTER_BUSY)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Wait for the job to complete...
|
||||
*/
|
||||
|
||||
if (!job_id)
|
||||
continue;
|
||||
|
||||
fputs("INFO: Waiting for job to complete...\n", stderr);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* Build an IPP_GET_JOB_ATTRIBUTES request...
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
request->request.op.version[1] = version;
|
||||
request->request.op.operation_id = IPP_GET_JOB_ATTRIBUTES;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, charset);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL,
|
||||
language != NULL ? language->language : "en");
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
|
||||
job_id);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", NULL, "job-state");
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, resource)) == NULL)
|
||||
ipp_status = cupsLastError();
|
||||
else
|
||||
ipp_status = response->request.status.status_code;
|
||||
|
||||
if (ipp_status == IPP_NOT_FOUND)
|
||||
{
|
||||
/*
|
||||
* Job has gone away and/or the server has no job history...
|
||||
*/
|
||||
|
||||
ippDelete(response);
|
||||
|
||||
ipp_status = IPP_OK;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ipp_status > IPP_OK_CONFLICT)
|
||||
{
|
||||
if (ipp_status != IPP_SERVICE_UNAVAILABLE &&
|
||||
ipp_status != IPP_PRINTER_BUSY)
|
||||
{
|
||||
if (response)
|
||||
ippDelete(response);
|
||||
|
||||
fprintf(stderr, "ERROR: Unable to get job %d attributes (%s)!\n",
|
||||
job_id, ippErrorString(ipp_status));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((job_state = ippFindAttribute(response, "job-state", IPP_TAG_ENUM)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Stop polling if the job is finished or pending-held...
|
||||
*/
|
||||
|
||||
if (job_state->values[0].integer > IPP_JOB_PROCESSING ||
|
||||
job_state->values[0].integer == IPP_JOB_HELD)
|
||||
{
|
||||
ippDelete(response);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait 10 seconds before polling again...
|
||||
*/
|
||||
|
||||
if (response)
|
||||
ippDelete(response);
|
||||
|
||||
sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -699,12 +612,13 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
httpClose(http);
|
||||
|
||||
if (supported)
|
||||
ippDelete(supported);
|
||||
|
||||
/*
|
||||
* Close and remove the temporary file if necessary...
|
||||
*/
|
||||
|
||||
fclose(fp);
|
||||
|
||||
if (argc < 7)
|
||||
unlink(filename);
|
||||
|
||||
@@ -712,7 +626,23 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Return the queue status...
|
||||
*/
|
||||
|
||||
return (status != HTTP_OK);
|
||||
if (ipp_status <= IPP_OK_CONFLICT)
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (ipp_status > IPP_OK_CONFLICT);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'password_cb()' - Disable the password prompt for cupsDoFileRequest().
|
||||
*/
|
||||
|
||||
const char * /* O - Password */
|
||||
password_cb(const char *prompt) /* I - Prompt (not used) */
|
||||
{
|
||||
(void)prompt;
|
||||
|
||||
return (password);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+285
-49
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Line Printer Daemon backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -26,6 +26,7 @@
|
||||
* main() - Send a file to the printer or server.
|
||||
* lpd_command() - Send an LPR command sequence and wait for a reply.
|
||||
* lpd_queue() - Queue a file using the Line Printer Daemon protocol.
|
||||
* lpd_write() - Write a buffer of data to an LPD server.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -36,6 +37,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#include <cups/string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
@@ -51,7 +53,20 @@
|
||||
# include <netdb.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
extern int rresvport(int *port); /* Hello? No prototype for this... */
|
||||
|
||||
/*
|
||||
* The order for control and data files in LPD requests...
|
||||
*/
|
||||
|
||||
#define ORDER_CONTROL_DATA 0
|
||||
#define ORDER_DATA_CONTROL 1
|
||||
|
||||
|
||||
/*
|
||||
* It appears that rresvport() is never declared on most systems...
|
||||
*/
|
||||
|
||||
extern int rresvport(int *port);
|
||||
|
||||
|
||||
/*
|
||||
@@ -60,7 +75,9 @@ extern int rresvport(int *port); /* Hello? No prototype for this... */
|
||||
|
||||
static int lpd_command(int lpd_fd, char *format, ...);
|
||||
static int lpd_queue(char *hostname, char *printer, char *filename,
|
||||
char *user, int copies);
|
||||
int fromstdin, char *user, char *title, int copies,
|
||||
int banner, int format, int order);
|
||||
static int lpd_write(int lpd_fd, char *buffer, int length);
|
||||
|
||||
|
||||
/*
|
||||
@@ -79,11 +96,29 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024], /* Resource info (printer name) */
|
||||
filename[1024]; /* File to print */
|
||||
*options, /* Pointer to options */
|
||||
name[255], /* Name of option */
|
||||
value[255], /* Value of option */
|
||||
*ptr, /* Pointer into name or value */
|
||||
filename[1024], /* File to print */
|
||||
title[256]; /* Title string */
|
||||
int port; /* Port number (not used) */
|
||||
int status; /* Status of LPD job */
|
||||
int banner; /* Print banner page? */
|
||||
int format; /* Print format */
|
||||
int order; /* Order of control/data files */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
puts("network lpd \"Unknown\" \"LPD/LPR Host or Printer\"");
|
||||
@@ -108,27 +143,27 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Copy stdin to a temporary file...
|
||||
*/
|
||||
|
||||
FILE *fp; /* Temporary file */
|
||||
int fd; /* Temporary file */
|
||||
char buffer[8192]; /* Buffer for copying */
|
||||
int bytes; /* Number of bytes read */
|
||||
|
||||
|
||||
if ((fp = fopen(cupsTempFile(filename, sizeof(filename)), "w")) == NULL)
|
||||
if ((fd = cupsTempFd(filename, sizeof(filename))) < 0)
|
||||
{
|
||||
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)
|
||||
if (write(fd, buffer, bytes) < bytes)
|
||||
{
|
||||
perror("ERROR: unable to write to temporary file");
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
unlink(filename);
|
||||
return (1);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -142,21 +177,124 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
httpSeparate(argv[0], method, username, hostname, &port, resource);
|
||||
|
||||
/*
|
||||
* See if there are any options...
|
||||
*/
|
||||
|
||||
banner = 0;
|
||||
format = 'l';
|
||||
order = ORDER_CONTROL_DATA;
|
||||
|
||||
if ((options = strchr(resource, '?')) != NULL)
|
||||
{
|
||||
/*
|
||||
* Yup, terminate the device name string and move to the first
|
||||
* character of the options...
|
||||
*/
|
||||
|
||||
*options++ = '\0';
|
||||
|
||||
/*
|
||||
* Parse options...
|
||||
*/
|
||||
|
||||
while (*options)
|
||||
{
|
||||
/*
|
||||
* Get the name...
|
||||
*/
|
||||
|
||||
for (ptr = name; *options && *options != '=';)
|
||||
*ptr++ = *options++;
|
||||
*ptr = '\0';
|
||||
|
||||
if (*options == '=')
|
||||
{
|
||||
/*
|
||||
* Get the value...
|
||||
*/
|
||||
|
||||
options ++;
|
||||
|
||||
for (ptr = value; *options && *options != '+';)
|
||||
*ptr++ = *options++;
|
||||
*ptr = '\0';
|
||||
|
||||
if (*options == '+')
|
||||
options ++;
|
||||
}
|
||||
else
|
||||
value[0] = '\0';
|
||||
|
||||
/*
|
||||
* Process the option...
|
||||
*/
|
||||
|
||||
if (strcasecmp(name, "banner") == 0)
|
||||
{
|
||||
/*
|
||||
* Set the banner...
|
||||
*/
|
||||
|
||||
banner = !value[0] ||
|
||||
strcasecmp(value, "on") == 0 ||
|
||||
strcasecmp(value, "yes") == 0 ||
|
||||
strcasecmp(value, "true") == 0;
|
||||
}
|
||||
else if (strcasecmp(name, "format") == 0 && value[0])
|
||||
{
|
||||
/*
|
||||
* Set output format...
|
||||
*/
|
||||
|
||||
if (strchr("cdfglnoprtv", value[0]) != NULL)
|
||||
format = value[0];
|
||||
else
|
||||
fprintf(stderr, "ERROR: Unknown format character \"%c\"\n", value[0]);
|
||||
}
|
||||
else if (strcasecmp(name, "order") == 0 && value[0])
|
||||
{
|
||||
/*
|
||||
* Set control/data order...
|
||||
*/
|
||||
|
||||
if (strcasecmp(value, "control,data") == 0)
|
||||
order = ORDER_CONTROL_DATA;
|
||||
else if (strcasecmp(value, "data,control") == 0)
|
||||
order = ORDER_DATA_CONTROL;
|
||||
else
|
||||
fprintf(stderr, "ERROR: Unknown file order \"%s\"\n", value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sanitize the document title...
|
||||
*/
|
||||
|
||||
strncpy(title, argv[3], sizeof(title) - 1);
|
||||
title[sizeof(title) - 1] = '\0';
|
||||
|
||||
for (ptr = title; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && !isspace(*ptr))
|
||||
*ptr = '_';
|
||||
|
||||
/*
|
||||
* Queue the job...
|
||||
*/
|
||||
|
||||
if (argc > 6)
|
||||
{
|
||||
status = lpd_queue(hostname, resource + 1, filename,
|
||||
argv[2] /* user */, atoi(argv[4]) /* copies */);
|
||||
status = lpd_queue(hostname, resource + 1, filename, 0,
|
||||
argv[2] /* user */, title, atoi(argv[4]) /* copies */,
|
||||
banner, format, order);
|
||||
|
||||
if (!status)
|
||||
fprintf(stderr, "PAGE: 1 %d\n", atoi(argv[4]));
|
||||
}
|
||||
else
|
||||
status = lpd_queue(hostname, resource + 1, filename,
|
||||
argv[2] /* user */, 1);
|
||||
status = lpd_queue(hostname, resource + 1, filename, 1,
|
||||
argv[2] /* user */, title, 1, banner, format, order);
|
||||
|
||||
/*
|
||||
* Remove the temporary file if necessary...
|
||||
@@ -204,7 +342,7 @@ lpd_command(int fd, /* I - Socket connection to LPD host */
|
||||
|
||||
fprintf(stderr, "DEBUG: Sending command string (%d bytes)...\n", bytes);
|
||||
|
||||
if (send(fd, buf, bytes, 0) < bytes)
|
||||
if (lpd_write(fd, buf, bytes) < bytes)
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
@@ -230,8 +368,13 @@ static int /* O - Zero on success, non-zero on failure */
|
||||
lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
char *printer, /* I - Printer/queue name */
|
||||
char *filename, /* I - File to print */
|
||||
int fromstdin, /* I - Printing from stdin? */
|
||||
char *user, /* I - Requesting user */
|
||||
int copies) /* I - Number of copies */
|
||||
char *title, /* I - Job title */
|
||||
int copies, /* I - Number of copies */
|
||||
int banner, /* I - Print LPD banner? */
|
||||
int format, /* I - Format specifier */
|
||||
int order) /* I - Order of data/control files */
|
||||
{
|
||||
FILE *fp; /* Job file */
|
||||
char localhost[255]; /* Local host name */
|
||||
@@ -273,11 +416,31 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
|
||||
for (port = 732;;)
|
||||
{
|
||||
if ((fd = rresvport(&port)) < 0)
|
||||
if (getuid())
|
||||
{
|
||||
perror("ERROR: Unable to reserve port");
|
||||
sleep(30);
|
||||
continue;
|
||||
/*
|
||||
* We're running as a normal user, so just create a regular socket...
|
||||
*/
|
||||
|
||||
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
perror("ERROR: Unable to create socket");
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* We're running as root, so comply with RFC 1179 and reserve a
|
||||
* priviledged port between 721 and 732...
|
||||
*/
|
||||
|
||||
if ((fd = rresvport(&port)) < 0)
|
||||
{
|
||||
perror("ERROR: Unable to reserve port");
|
||||
sleep(30);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
@@ -308,25 +471,29 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf(stderr, "INFO: Connected on port %d...\n", port);
|
||||
fprintf(stderr, "INFO: Connected from port %d...\n", port);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (fromstdin)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Next, open the print file and figure out its size...
|
||||
@@ -354,13 +521,18 @@ 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 */
|
||||
|
||||
snprintf(control, sizeof(control), "H%s\nP%s\n", localhost, user);
|
||||
snprintf(control, sizeof(control), "H%s\nP%s\nJ%s\n", localhost, user, title);
|
||||
cptr = control + strlen(control);
|
||||
|
||||
if (banner)
|
||||
{
|
||||
snprintf(cptr, sizeof(control) - (cptr - control), "L%s\n", user);
|
||||
cptr += strlen(cptr);
|
||||
}
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
|
||||
snprintf(cptr, sizeof(control) - (cptr - control), "ldfA%03d%s\n",
|
||||
snprintf(cptr, sizeof(control) - (cptr - control), "%cdfA%03d%s\n", format,
|
||||
getpid() % 1000, localhost);
|
||||
cptr += strlen(cptr);
|
||||
copies --;
|
||||
@@ -373,27 +545,36 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
|
||||
fprintf(stderr, "DEBUG: Control file is:\n%s", control);
|
||||
|
||||
lpd_command(fd, "\002%d cfA%03.3d%s\n", strlen(control), getpid() % 1000,
|
||||
localhost);
|
||||
|
||||
fprintf(stderr, "INFO: Sending control file (%d bytes)\n", strlen(control));
|
||||
|
||||
if (send(fd, control, strlen(control) + 1, 0) < (strlen(control) + 1))
|
||||
if (order == ORDER_CONTROL_DATA)
|
||||
{
|
||||
perror("ERROR: Unable to write control file");
|
||||
status = 1;
|
||||
lpd_command(fd, "\002%d cfA%03.3d%s\n", strlen(control), getpid() % 1000,
|
||||
localhost);
|
||||
|
||||
fprintf(stderr, "INFO: Sending control file (%d bytes)\n", strlen(control));
|
||||
|
||||
if (lpd_write(fd, control, strlen(control) + 1) < (strlen(control) + 1))
|
||||
{
|
||||
status = errno;
|
||||
perror("ERROR: Unable to write control file");
|
||||
}
|
||||
else if (read(fd, &status, 1) < 1)
|
||||
status = errno;
|
||||
|
||||
if (status != 0)
|
||||
fprintf(stderr, "ERROR: Remote host did not accept control file (%d)\n",
|
||||
status);
|
||||
else
|
||||
fputs("INFO: Control file sent successfully\n", stderr);
|
||||
}
|
||||
else if (read(fd, &status, 1) < 1 || status != 0)
|
||||
fprintf(stderr, "ERROR: Remote host did not accept control file (%d)\n",
|
||||
status);
|
||||
else
|
||||
status = 0;
|
||||
|
||||
if (status == 0)
|
||||
{
|
||||
/*
|
||||
* Send the print file...
|
||||
*/
|
||||
|
||||
fputs("INFO: Control file sent successfully\n", stderr);
|
||||
|
||||
lpd_command(fd, "\003%u dfA%03.3d%s\n", (unsigned)filestats.st_size,
|
||||
getpid() % 1000, localhost);
|
||||
|
||||
@@ -404,9 +585,9 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
{
|
||||
fprintf(stderr, "INFO: Spooling LPR job, %u%% complete...\n",
|
||||
(unsigned)(100 * tbytes / filestats.st_size));
|
||||
(unsigned)(100.0f * tbytes / filestats.st_size));
|
||||
|
||||
if (send(fd, buffer, nbytes, 0) < nbytes)
|
||||
if (lpd_write(fd, buffer, nbytes) < nbytes)
|
||||
{
|
||||
perror("ERROR: Unable to send print file to printer");
|
||||
break;
|
||||
@@ -415,17 +596,42 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
tbytes += nbytes;
|
||||
}
|
||||
|
||||
send(fd, "", 1, 0);
|
||||
|
||||
if (tbytes < filestats.st_size)
|
||||
status = 1;
|
||||
else if (recv(fd, &status, 1, 0) < 1 || status != 0)
|
||||
status = errno;
|
||||
else if (lpd_write(fd, "", 1) < 1)
|
||||
status = errno;
|
||||
else if (recv(fd, &status, 1, 0) < 1)
|
||||
status = errno;
|
||||
|
||||
if (status != 0)
|
||||
fprintf(stderr, "ERROR: Remote host did not accept data file (%d)\n",
|
||||
status);
|
||||
else
|
||||
fputs("INFO: Data file sent successfully\n", stderr);
|
||||
}
|
||||
|
||||
if (status == 0 && order == ORDER_DATA_CONTROL)
|
||||
{
|
||||
lpd_command(fd, "\002%d cfA%03.3d%s\n", strlen(control), getpid() % 1000,
|
||||
localhost);
|
||||
|
||||
fprintf(stderr, "INFO: Sending control file (%d bytes)\n", strlen(control));
|
||||
|
||||
if (lpd_write(fd, control, strlen(control) + 1) < (strlen(control) + 1))
|
||||
{
|
||||
status = errno;
|
||||
perror("ERROR: Unable to write control file");
|
||||
}
|
||||
else if (read(fd, &status, 1) < 1)
|
||||
status = errno;
|
||||
|
||||
if (status != 0)
|
||||
fprintf(stderr, "ERROR: Remote host did not accept control file (%d)\n",
|
||||
status);
|
||||
else
|
||||
fputs("INFO: Control file sent successfully\n", stderr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the socket connection and input file and return...
|
||||
*/
|
||||
@@ -437,6 +643,36 @@ lpd_queue(char *hostname, /* I - Host to connect to */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'lpd_write()' - Write a buffer of data to an LPD server.
|
||||
*/
|
||||
|
||||
static int /* O - Number of bytes written or -1 on error */
|
||||
lpd_write(int lpd_fd, /* I - LPD socket */
|
||||
char *buffer, /* I - Buffer to write */
|
||||
int length) /* I - Number of bytes to write */
|
||||
{
|
||||
int bytes, /* Number of bytes written */
|
||||
total; /* Total number of bytes written */
|
||||
|
||||
|
||||
total = 0;
|
||||
while ((bytes = send(lpd_fd, buffer, length - total, 0)) >= 0)
|
||||
{
|
||||
total += bytes;
|
||||
buffer += bytes;
|
||||
|
||||
if (total == length)
|
||||
break;
|
||||
}
|
||||
|
||||
if (bytes < 0)
|
||||
return (-1);
|
||||
else
|
||||
return (length);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+112
-33
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Parallel port backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -97,6 +97,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -190,20 +200,24 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (argc < 7)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
@@ -269,13 +283,17 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
void
|
||||
list_devices(void)
|
||||
{
|
||||
#if defined(__hpux) || defined(__sgi) || defined(__sun)
|
||||
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
/* Funky hex numbering used for some devices */
|
||||
#endif /* __hpux || __sgi || __sun */
|
||||
|
||||
#ifdef __linux
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
char device[255], /* Device filename */
|
||||
probefile[255], /* Probe filename */
|
||||
basedevice[255]; /* Base device filename for ports */
|
||||
FILE *probe; /* /proc/parport/n/autoprobe file */
|
||||
char line[1024], /* Line from file */
|
||||
*delim, /* Delimiter in file */
|
||||
@@ -285,9 +303,57 @@ list_devices(void)
|
||||
|
||||
for (i = 0; i < 4; i ++)
|
||||
{
|
||||
sprintf(device, "/proc/parport/%d/autoprobe", i);
|
||||
if ((probe = fopen(device, "r")) != NULL)
|
||||
/*
|
||||
* First open the device to make sure the driver module is loaded...
|
||||
*/
|
||||
|
||||
if ((fd = open("/dev/parallel/0", O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
strcpy(basedevice, "/dev/parallel/");
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(device, "/dev/lp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
strcpy(basedevice, "/dev/lp");
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(device, "/dev/par%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
strcpy(basedevice, "/dev/par");
|
||||
}
|
||||
else
|
||||
strcpy(basedevice, "/dev/unknown-parallel");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Then try looking at the probe file...
|
||||
*/
|
||||
|
||||
sprintf(probefile, "/proc/parport/%d/autoprobe", i);
|
||||
if ((probe = fopen(probefile, "r")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Linux 2.4 kernel has different path...
|
||||
*/
|
||||
|
||||
sprintf(probefile, "/proc/sys/dev/parport/parport%d/autoprobe", i);
|
||||
probe = fopen(probefile, "r");
|
||||
}
|
||||
|
||||
if (probe != NULL)
|
||||
{
|
||||
/*
|
||||
* Found a probe file!
|
||||
*/
|
||||
|
||||
memset(make, 0, sizeof(make));
|
||||
memset(model, 0, sizeof(model));
|
||||
strcpy(model, "Unknown");
|
||||
@@ -318,29 +384,19 @@ list_devices(void)
|
||||
fclose(probe);
|
||||
|
||||
if (make[0])
|
||||
printf("direct parallel:/dev/lp%d \"%s %s\" \"Parallel Port #%d\"\n",
|
||||
i, make, model, i + 1);
|
||||
printf("direct parallel:%s%d \"%s %s\" \"Parallel Port #%d\"\n",
|
||||
basedevice, i, make, model, i + 1);
|
||||
else
|
||||
printf("direct parallel:/dev/lp%d \"%s\" \"Parallel Port #%d\"\n",
|
||||
i, model, i + 1);
|
||||
printf("direct parallel:%s%d \"%s\" \"Parallel Port #%d\"\n",
|
||||
basedevice, i, model, i + 1);
|
||||
}
|
||||
else
|
||||
else if (fd >= 0)
|
||||
{
|
||||
sprintf(device, "/dev/lp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(device, "/dev/par%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* No probe file, but we know the port is there...
|
||||
*/
|
||||
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(__sgi)
|
||||
@@ -497,7 +553,8 @@ list_devices(void)
|
||||
{
|
||||
sprintf(device, "/dev/c%dt%dd0_lp", i, j);
|
||||
if (access(device, 0) == 0)
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d,%d\"\n", i, j);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d,%d\"\n",
|
||||
device, i, j);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -539,7 +596,7 @@ list_devices(void)
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
|
||||
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
@@ -553,6 +610,28 @@ list_devices(void)
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
|
||||
sprintf(device, "/dev/lpa%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(_AIX)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/lp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
+172
-16
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Serial port backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -38,12 +38,19 @@
|
||||
#include <cups/string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#ifdef __hpux
|
||||
# include <sys/modem.h>
|
||||
#endif /* __hpux */
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <termios.h>
|
||||
# ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
# endif /* HAVE_SYS_IOCTL_H */
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
#ifdef __sgi
|
||||
@@ -57,6 +64,14 @@
|
||||
# endif /* !INV_EPP_ECP_PLP */
|
||||
#endif /* __sgi */
|
||||
|
||||
#ifndef CRTSCTS
|
||||
# ifdef CNEW_RTSCTS
|
||||
# define CRTSCTS CNEW_RTSCTS
|
||||
# else
|
||||
# define CRTSCTS 0
|
||||
# endif /* CNEW_RTSCTS */
|
||||
#endif /* !CRTSCTS */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
@@ -92,6 +107,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
int wbytes; /* Number of bytes written */
|
||||
size_t nbytes, /* Number of bytes read */
|
||||
tbytes; /* Total number of bytes written */
|
||||
int dtrdsr; /* Do dtr/dsr flow control? */
|
||||
int bufsize; /* Size of output buffer for writes */
|
||||
char buffer[8192], /* Output buffer */
|
||||
*bufptr; /* Pointer into buffer */
|
||||
struct termios opts; /* Parallel port options */
|
||||
@@ -100,6 +117,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -162,7 +189,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
do
|
||||
{
|
||||
if ((fd = open(resource, O_WRONLY | O_NOCTTY | O_EXCL)) == -1)
|
||||
if ((fd = open(resource, O_WRONLY | O_NOCTTY | O_EXCL | O_NDELAY)) == -1)
|
||||
{
|
||||
if (errno == EBUSY)
|
||||
{
|
||||
@@ -186,6 +213,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
|
||||
|
||||
bufsize = 96; /* 9600 baud / 10 bits/char / 10Hz */
|
||||
dtrdsr = 0; /* No dtr/dsr flow control */
|
||||
|
||||
if (options != NULL)
|
||||
while (*options)
|
||||
{
|
||||
@@ -225,6 +255,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Set the baud rate...
|
||||
*/
|
||||
|
||||
bufsize = atoi(value) / 100;
|
||||
|
||||
#if B19200 == 19200
|
||||
cfsetispeed(&opts, atoi(value));
|
||||
cfsetospeed(&opts, atoi(value));
|
||||
@@ -255,6 +287,18 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
cfsetispeed(&opts, B38400);
|
||||
cfsetospeed(&opts, B38400);
|
||||
break;
|
||||
#ifdef B57600
|
||||
case 57600 :
|
||||
cfsetispeed(&opts, B57600);
|
||||
cfsetospeed(&opts, B57600);
|
||||
break;
|
||||
#endif /* B57600 */
|
||||
#ifdef B115200
|
||||
case 115200 :
|
||||
cfsetispeed(&opts, B115200);
|
||||
cfsetospeed(&opts, B115200);
|
||||
break;
|
||||
#endif /* B115200 */
|
||||
default :
|
||||
fprintf(stderr, "WARNING: Unsupported baud rate %s!\n", value);
|
||||
break;
|
||||
@@ -301,32 +345,70 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
else if (strcasecmp(value, "none") == 0)
|
||||
opts.c_cflag &= ~PARENB;
|
||||
}
|
||||
else if (strcasecmp(name, "flow") == 0)
|
||||
{
|
||||
/*
|
||||
* Set flow control...
|
||||
*/
|
||||
|
||||
if (strcasecmp(value, "none") == 0)
|
||||
{
|
||||
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||
opts.c_cflag &= ~CRTSCTS;
|
||||
}
|
||||
else if (strcasecmp(value, "soft") == 0)
|
||||
{
|
||||
opts.c_iflag |= IXON | IXOFF | IXANY;
|
||||
opts.c_cflag &= ~CRTSCTS;
|
||||
}
|
||||
else if (strcasecmp(value, "hard") == 0 ||
|
||||
strcasecmp(value, "rtscts") == 0)
|
||||
{
|
||||
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||
opts.c_cflag |= CRTSCTS;
|
||||
}
|
||||
else if (strcasecmp(value, "dtrdsr") == 0)
|
||||
{
|
||||
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||
opts.c_cflag &= ~CRTSCTS;
|
||||
|
||||
dtrdsr = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tcsetattr(fd, TCSANOW, &opts);
|
||||
fcntl(fd, F_SETFL, 0);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (argc < 7)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
if (bufsize > sizeof(buffer))
|
||||
bufsize = sizeof(buffer);
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
copies --;
|
||||
@@ -337,8 +419,38 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
rewind(fp);
|
||||
}
|
||||
|
||||
if (dtrdsr)
|
||||
{
|
||||
/*
|
||||
* Check the port and sleep until DSR is set...
|
||||
*/
|
||||
|
||||
int status;
|
||||
|
||||
|
||||
if (!ioctl(fd, TIOCMGET, &status))
|
||||
if (!(status & TIOCM_DSR))
|
||||
{
|
||||
/*
|
||||
* Wait for DSR to go high...
|
||||
*/
|
||||
|
||||
fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
|
||||
|
||||
do
|
||||
{
|
||||
sleep(1);
|
||||
if (ioctl(fd, TIOCMGET, &status))
|
||||
break;
|
||||
}
|
||||
while (!(status & TIOCM_DSR));
|
||||
|
||||
fputs("DEBUG: DSR is high; writing to device...\n", stderr);
|
||||
}
|
||||
}
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while ((nbytes = fread(buffer, 1, bufsize, fp)) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
@@ -369,7 +481,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the socket connection and input file and return...
|
||||
* Close the serial port and input file and return...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
@@ -387,8 +499,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
void
|
||||
list_devices(void)
|
||||
{
|
||||
#if defined(__hpux) || defined(__sgi) || defined(__sun) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
/* Funky hex numbering used for some devices */
|
||||
#endif /* __hpux || __sgi || __sun || __FreeBSD__ || __OpenBSD__ */
|
||||
|
||||
#ifdef __linux
|
||||
int i; /* Looping var */
|
||||
@@ -396,7 +510,7 @@ list_devices(void)
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
|
||||
for (i = 0; i < 4; i ++)
|
||||
for (i = 0; i < 100; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/ttyS%d", i);
|
||||
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
|
||||
@@ -433,7 +547,7 @@ list_devices(void)
|
||||
*/
|
||||
|
||||
for (n = 0; n < 6; n ++)
|
||||
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"CDSIO Board %d Serial Port #%d\"\n",
|
||||
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"CDSIO Board %d Serial Port #%d\"\n",
|
||||
n + 5 + 8 * inv->inv_controller, inv->inv_controller, n + 1);
|
||||
}
|
||||
else if (inv->inv_type == INV_EPC_SERIAL)
|
||||
@@ -448,7 +562,7 @@ list_devices(void)
|
||||
i = 41 + 4 * (int)inv->inv_controller;
|
||||
|
||||
for (n = 0; n < (int)inv->inv_state; n ++)
|
||||
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"EPC Serial Port %d, Ebus slot %d\"\n",
|
||||
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"EPC Serial Port %d, Ebus slot %d\"\n",
|
||||
n + i, n + 1, (int)inv->inv_controller);
|
||||
}
|
||||
else if (inv->inv_state > 1)
|
||||
@@ -458,7 +572,7 @@ list_devices(void)
|
||||
*/
|
||||
|
||||
for (n = 0; n < (int)inv->inv_state; n ++)
|
||||
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"Onboard Serial Port %d\"\n",
|
||||
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"Onboard Serial Port %d\"\n",
|
||||
n + (int)inv->inv_unit + 1, n + (int)inv->inv_unit + 1);
|
||||
}
|
||||
else
|
||||
@@ -517,8 +631,13 @@ list_devices(void)
|
||||
{
|
||||
sprintf(device, "/dev/cua/%c", 'a' + i);
|
||||
if (access(device, 0) == 0)
|
||||
#ifdef B115200
|
||||
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
#else
|
||||
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
#endif /* B115200 */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -614,7 +733,7 @@ list_devices(void)
|
||||
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
}
|
||||
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
|
||||
#elif defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
int i, j; /* Looping vars */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
@@ -696,6 +815,43 @@ list_devices(void)
|
||||
device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(__NetBSD__)
|
||||
int i, j; /* Looping vars */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
|
||||
/*
|
||||
* Standard serial ports...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 4; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/tty%02d", i);
|
||||
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Cyclades-Z ports...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 16; i ++) /* Should be up to 65536 boards... */
|
||||
for (j = 0; j < 64; j ++)
|
||||
{
|
||||
sprintf(device, "/dev/ttyCZ%02d%02d", i, j);
|
||||
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("serial serial:%s?baud=115200 \"Unknown\" \"Cyclades #%d Serial Prt #%d\"\n",
|
||||
device, i, j + 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+81
-15
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* AppSocket backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -69,6 +69,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
FILE *fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int port; /* Port number */
|
||||
int delay; /* Delay for retries... */
|
||||
int fd; /* AppSocket */
|
||||
int error; /* Error code (if any) */
|
||||
struct sockaddr_in addr; /* Socket address */
|
||||
@@ -85,6 +86,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
puts("network socket \"Unknown\" \"AppSocket/HP JetDirect\"");
|
||||
@@ -137,7 +148,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if ((hostaddr = gethostbyname(hostname)) == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
|
||||
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s\n",
|
||||
hostname, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
@@ -152,7 +163,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
for (;;)
|
||||
for (delay = 5;;)
|
||||
{
|
||||
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
@@ -168,13 +179,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if (error == ECONNREFUSED)
|
||||
{
|
||||
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
|
||||
hostname);
|
||||
sleep(30);
|
||||
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
|
||||
hostname, delay);
|
||||
sleep(delay);
|
||||
|
||||
if (delay < 30)
|
||||
delay += 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to connect to printer");
|
||||
perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
@@ -185,20 +199,24 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (argc < 7)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
@@ -240,11 +258,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Check for possible data coming back from the printer...
|
||||
*/
|
||||
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
FD_ZERO(&input);
|
||||
FD_SET(fd, &input);
|
||||
#ifdef __hpux
|
||||
if (select(fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
|
||||
#else
|
||||
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
#endif /* __hpux */
|
||||
{
|
||||
/*
|
||||
* Grab the data coming back and spit it out to stderr...
|
||||
@@ -258,6 +281,47 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Shutdown the socket and wait for the other end to finish...
|
||||
*/
|
||||
|
||||
fputs("INFO: Print file sent, waiting for printer to finish...\n", stderr);
|
||||
|
||||
shutdown(fd, 1);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* Wait a maximum of 90 seconds for backchannel data or a closed
|
||||
* connection...
|
||||
*/
|
||||
|
||||
timeout.tv_sec = 90;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
FD_ZERO(&input);
|
||||
FD_SET(fd, &input);
|
||||
|
||||
#ifdef __hpux
|
||||
if (select(fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
|
||||
#else
|
||||
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
#endif /* __hpux */
|
||||
{
|
||||
/*
|
||||
* 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
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the socket connection...
|
||||
*/
|
||||
@@ -272,6 +336,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
+84
-13
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* USB port backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -86,6 +86,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -179,20 +189,24 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page...
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (argc < 7)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
@@ -262,15 +276,35 @@ list_devices(void)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
FILE *probe; /* /proc/parport/n/autoprobe file */
|
||||
FILE *probe; /* /proc/bus/usb/devices file */
|
||||
char line[1024], /* Line from file */
|
||||
*delim, /* Delimiter in file */
|
||||
make[IPP_MAX_NAME], /* Make from file */
|
||||
model[IPP_MAX_NAME]; /* Model from file */
|
||||
|
||||
|
||||
/*
|
||||
* First try opening one of the USB devices to load the driver
|
||||
* module as needed...
|
||||
*/
|
||||
|
||||
if ((fd = open("/dev/usb/lp0", O_WRONLY)) >= 0)
|
||||
close(fd); /* 2.3.x and 2.4.x */
|
||||
else if ((fd = open("/dev/usb/usblp0", O_WRONLY)) >= 0)
|
||||
close(fd); /* Mandrake 7.x */
|
||||
else if ((fd = open("/dev/usblp0", O_WRONLY)) >= 0)
|
||||
close(fd); /* 2.2.x */
|
||||
|
||||
/*
|
||||
* Then look at the device list for the USB bus...
|
||||
*/
|
||||
|
||||
if ((probe = fopen("/proc/bus/usb/devices", "r")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Scan the device list...
|
||||
*/
|
||||
|
||||
i = 0;
|
||||
|
||||
memset(make, 0, sizeof(make));
|
||||
@@ -305,15 +339,25 @@ list_devices(void)
|
||||
strncpy(model, line + 12, sizeof(model) - 1);
|
||||
}
|
||||
else if (strncmp(line, "I:", 2) == 0 &&
|
||||
strstr(line, "Driver=printer") != NULL &&
|
||||
(strstr(line, "Driver=printer") != NULL ||
|
||||
strstr(line, "Driver=usblp") != NULL) &&
|
||||
make[0] && model[0])
|
||||
{
|
||||
/*
|
||||
* We were processing a printer device; send the info out...
|
||||
*/
|
||||
|
||||
printf("direct usb:/dev/usb/lp%d \"%s %s\" \"USB Printer #%d\"\n",
|
||||
i, make, model, i + 1);
|
||||
sprintf(device, "/dev/usb/lp%d", i);
|
||||
if (access(device, 0))
|
||||
{
|
||||
sprintf(device, "/dev/usb/usblp%d", i);
|
||||
|
||||
if (access(device, 0))
|
||||
sprintf(device, "/dev/usblp%d", i);
|
||||
}
|
||||
|
||||
printf("direct usb:%s \"%s %s\" \"USB Printer #%d\"\n",
|
||||
device, make, model, i + 1);
|
||||
|
||||
i ++;
|
||||
|
||||
@@ -326,6 +370,10 @@ list_devices(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Just probe manually for USB devices...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/usb/lp%d", i);
|
||||
@@ -335,6 +383,13 @@ list_devices(void)
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
}
|
||||
|
||||
sprintf(device, "/dev/usb/usblp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
}
|
||||
|
||||
sprintf(device, "/dev/usblp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
@@ -347,11 +402,27 @@ list_devices(void)
|
||||
#elif defined(__sun)
|
||||
#elif defined(__hpux)
|
||||
#elif defined(__osf)
|
||||
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
|
||||
#elif defined(__FreeBSD__)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
|
||||
for (i = 0; i < 3; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/unlpt%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct usb:%s \"Unknown\" \"USB Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
|
||||
for (i = 0; i < 3; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/ulpt%d", i);
|
||||
|
||||
+6
-6
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Berkeley commands makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -48,11 +48,11 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(BINDIR)
|
||||
$(CHMOD) ugo+rx $(BINDIR)
|
||||
$(INSTALL_BIN) lpq lpr lprm $(BINDIR)
|
||||
-$(MKDIR) $(SBINDIR)
|
||||
$(CHMOD) ugo+rx $(SBINDIR)
|
||||
$(INSTALL_DIR) $(BINDIR)
|
||||
$(INSTALL_BIN) lpq $(BINDIR)
|
||||
$(INSTALL_BIN) lpr $(BINDIR)
|
||||
$(INSTALL_BIN) lprm $(BINDIR)
|
||||
$(INSTALL_DIR) $(SBINDIR)
|
||||
$(INSTALL_BIN) lpc $(SBINDIR)
|
||||
|
||||
|
||||
|
||||
+27
-12
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpc" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -69,7 +69,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Connect to the scheduler...
|
||||
*/
|
||||
|
||||
http = httpConnect(cupsServer(), ippPort());
|
||||
http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
@@ -178,7 +178,7 @@ do_command(http_t *http, /* I - HTTP connection to server */
|
||||
strcmp(command, "?") == 0)
|
||||
show_help(params);
|
||||
else
|
||||
puts("?Invalid command");
|
||||
printf("%s is not implemented by the CUPS version of lpc.\n", command);
|
||||
}
|
||||
|
||||
|
||||
@@ -216,7 +216,8 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response, /* IPP Response */
|
||||
*jobs; /* IPP Get Jobs response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
ipp_attribute_t *attr, /* Current attribute */
|
||||
*jattr; /* Current job attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
char *printer, /* Printer name */
|
||||
*device; /* Device URI */
|
||||
@@ -228,6 +229,13 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
int match; /* Non-zero if this job matches */
|
||||
char printer_uri[HTTP_MAX_URI];
|
||||
/* Printer URI */
|
||||
static const char *requested[] =
|
||||
{ /* Requested attributes */
|
||||
"printer-name",
|
||||
"device-uri",
|
||||
"printer-state",
|
||||
"printer-is-accepting-jobs"
|
||||
};
|
||||
|
||||
|
||||
DEBUG_printf(("show_status(%08x, %08x)\n", http, dests));
|
||||
@@ -250,11 +258,15 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", sizeof(requested) / sizeof(requested[0]),
|
||||
NULL, requested);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
@@ -412,13 +424,16 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
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);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||
"printer-uri", NULL, printer_uri);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", NULL, "job-id");
|
||||
|
||||
if ((jobs = cupsDoRequest(http, request, "/jobs/")) != NULL)
|
||||
{
|
||||
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
|
||||
if (strcmp(attr->name, "job-id") == 0)
|
||||
for (jattr = jobs->attrs; jattr != NULL; jattr = jattr->next)
|
||||
if (jattr->name && strcmp(jattr->name, "job-id") == 0)
|
||||
jobcount ++;
|
||||
|
||||
ippDelete(jobs);
|
||||
|
||||
+48
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpq" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <config.h>
|
||||
#include <cups/cups.h>
|
||||
#include <cups/language.h>
|
||||
#include <cups/debug.h>
|
||||
@@ -65,26 +66,42 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
http_t *http; /* Connection to server */
|
||||
const char *dest, /* Desired printer */
|
||||
*user; /* Desired user */
|
||||
char *instance; /* Printer instance */
|
||||
int id, /* Desired job ID */
|
||||
interval, /* Reporting interval */
|
||||
longstatus; /* Show file details */
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
http_encryption_t encryption; /* Encryption? */
|
||||
|
||||
|
||||
/*
|
||||
* Connect to the scheduler...
|
||||
*/
|
||||
|
||||
http = httpConnect(cupsServer(), ippPort());
|
||||
if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
|
||||
cupsEncryption())) == NULL)
|
||||
{
|
||||
fputs("lpq: Unable to contact server!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for command-line options...
|
||||
*/
|
||||
|
||||
dest = cupsGetDefault();
|
||||
dest = NULL;
|
||||
user = NULL;
|
||||
id = 0;
|
||||
interval = 0;
|
||||
longstatus = 0;
|
||||
|
||||
num_dests = cupsGetDests(&dests);
|
||||
|
||||
for (i = 0; i < num_dests; i ++)
|
||||
if (dests[i].is_default)
|
||||
dest = dests[i].name;
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
if (argv[i][0] == '+')
|
||||
interval = atoi(argv[i] + 1);
|
||||
@@ -92,6 +109,18 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
switch (argv[i][1])
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_LIBSSL
|
||||
encryption = HTTP_ENCRYPT_REQUIRED;
|
||||
|
||||
if (http)
|
||||
httpEncryption(http, encryption);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
break;
|
||||
|
||||
case 'P' : /* Printer */
|
||||
if (argv[i][2])
|
||||
dest = argv[i] + 2;
|
||||
@@ -100,6 +129,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
i ++;
|
||||
dest = argv[i];
|
||||
}
|
||||
|
||||
if ((instance = strchr(dest, '/')) != NULL)
|
||||
*instance = '\0';
|
||||
break;
|
||||
|
||||
case 'a' : /* All printers */
|
||||
dest = NULL;
|
||||
break;
|
||||
|
||||
case 'l' : /* Long status */
|
||||
@@ -108,6 +144,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
default :
|
||||
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
|
||||
httpClose(http);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -140,6 +178,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Close the connection to the server and return...
|
||||
*/
|
||||
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
|
||||
return (0);
|
||||
@@ -349,7 +388,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
#ifdef __osf__
|
||||
puts("Rank Owner Pri Job Files Total Size");
|
||||
#else
|
||||
puts("Rank Owner Job Files Total Size");
|
||||
puts("Rank Owner Job File(s) Total Size");
|
||||
#endif /* __osf__ */
|
||||
|
||||
jobcount ++;
|
||||
@@ -362,7 +401,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
strcpy(rankstr, "active");
|
||||
else
|
||||
{
|
||||
sprintf(rankstr, "%d%s", rank, ranks[rank % 10]);
|
||||
snprintf(rankstr, sizeof(rankstr), "%d%s", rank, ranks[rank % 10]);
|
||||
rank ++;
|
||||
}
|
||||
|
||||
@@ -379,15 +418,15 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
namestr[sizeof(namestr) - 1] = '\0';
|
||||
}
|
||||
|
||||
printf("%s: %-31s [job %d localhost]\n", jobuser, rankstr, jobid);
|
||||
printf(" %-31.31s %d bytes\n", namestr, jobsize);
|
||||
printf("%s: %-34.34s[job %d localhost]\n", jobuser, rankstr, jobid);
|
||||
printf(" %-40.40s%d bytes\n", namestr, jobsize);
|
||||
}
|
||||
else
|
||||
#ifdef __osf__
|
||||
printf("%-6s %-10.10s %-4d %-10d %-27.27s %d bytes\n", rankstr, jobuser,
|
||||
jobpriority, jobid, jobname, jobsize);
|
||||
#else
|
||||
printf("%-6s %-10.10s %-15d %-27.27s %d bytes\n", rankstr, jobuser,
|
||||
printf("%-7s %-8.8s%-8d%-32.32s%d bytes\n", rankstr, jobuser,
|
||||
jobid, jobname, jobsize);
|
||||
#endif /* __osf */
|
||||
|
||||
@@ -452,7 +491,7 @@ show_printer(http_t *http, /* I - HTTP connection to server */
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
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);
|
||||
|
||||
|
||||
+94
-21
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpr" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <config.h>
|
||||
#include <cups/cups.h>
|
||||
|
||||
|
||||
@@ -65,6 +67,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
int i, j; /* Looping var */
|
||||
int job_id; /* Job ID */
|
||||
char ch; /* Option character */
|
||||
char *printer, /* Destination printer or class */
|
||||
*instance; /* Instance */
|
||||
const char *title; /* Job title */
|
||||
@@ -78,10 +81,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
cups_option_t *options; /* Options */
|
||||
int deletefile; /* Delete file after print? */
|
||||
char buffer[8192]; /* Copy buffer */
|
||||
FILE *temp; /* Temporary file pointer */
|
||||
#ifdef HAVE_SIGACTION
|
||||
int temp; /* Temporary file descriptor */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Signal action */
|
||||
#endif /* HAVE_SIGACTION */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
deletefile = 0;
|
||||
@@ -95,12 +98,34 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
if (argv[i][0] == '-')
|
||||
switch (argv[i][1])
|
||||
switch (ch = argv[i][1])
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_LIBSSL
|
||||
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
break;
|
||||
|
||||
case '1' : /* TROFF font set 1 */
|
||||
case '2' : /* TROFF font set 2 */
|
||||
case '3' : /* TROFF font set 3 */
|
||||
case '4' : /* TROFF font set 4 */
|
||||
case 'i' : /* indent */
|
||||
case 'w' : /* width */
|
||||
if (argv[i][2] == '\0')
|
||||
{
|
||||
i ++;
|
||||
|
||||
if (i >= argc)
|
||||
{
|
||||
fprintf(stderr, "lpr: Expected value after -%c option!\n", ch);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
case 'c' : /* CIFPLOT */
|
||||
case 'd' : /* DVI */
|
||||
case 'f' : /* FORTRAN */
|
||||
@@ -109,7 +134,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
case 't' : /* Troff */
|
||||
case 'v' : /* Raster image */
|
||||
fprintf(stderr, "Warning: \'%c\' format modifier not supported - output may not be correct!\n",
|
||||
argv[i][1]);
|
||||
ch);
|
||||
break;
|
||||
|
||||
case 'o' : /* Option */
|
||||
@@ -118,19 +143,28 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
{
|
||||
fputs("lpr: Expected option=value after -o option!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
num_options = cupsParseOptions(argv[i], num_options, &options);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'l' : /* Literal/raw */
|
||||
num_options = cupsParseOptions("raw", num_options, &options);
|
||||
num_options = cupsAddOption("raw", "", num_options, &options);
|
||||
break;
|
||||
|
||||
case 'p' : /* Prettyprint */
|
||||
num_options = cupsParseOptions("prettyprint", num_options, &options);
|
||||
num_options = cupsAddOption("prettyprint", "", num_options, &options);
|
||||
break;
|
||||
|
||||
case 'h' : /* Suppress burst page */
|
||||
num_options = cupsAddOption("job-sheets", "none", num_options, &options);
|
||||
break;
|
||||
|
||||
case 's' : /* Don't use symlinks */
|
||||
break;
|
||||
|
||||
@@ -138,6 +172,11 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
fputs("Warning: email notification is not supported!\n", stderr);
|
||||
break;
|
||||
|
||||
case 'q' : /* Queue file but don't print */
|
||||
num_options = cupsAddOption("job-hold-until", "indefinite",
|
||||
num_options, &options);
|
||||
break;
|
||||
|
||||
case 'r' : /* Remove file after printing */
|
||||
deletefile = 1;
|
||||
break;
|
||||
@@ -148,6 +187,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
{
|
||||
fputs("lpr: Expected destination after -P option!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
printer = argv[i];
|
||||
}
|
||||
|
||||
@@ -160,9 +205,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if ((dest = cupsGetDest(printer, instance, num_dests, dests)) != NULL)
|
||||
{
|
||||
for (j = 0; j < dest->num_options; j ++)
|
||||
num_options = cupsAddOption(dest->options[j].name,
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
|
||||
num_options = cupsAddOption(dest->options[j].name,
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -172,6 +218,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
{
|
||||
fputs("lpr: Expected copy count after -# option!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
num_copies = atoi(argv[i]);
|
||||
}
|
||||
|
||||
@@ -193,10 +245,32 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
{
|
||||
fprintf(stderr, "lpr: Expected name after -%c option!\n", ch);
|
||||
return (1);
|
||||
}
|
||||
|
||||
title = argv[i];
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U' : /* User */
|
||||
if (argv[i][2] != '\0')
|
||||
cupsSetUser(argv[i] + 2);
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
if (i >= argc)
|
||||
{
|
||||
fputs("lpr: Expected username after -U option!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
cupsSetUser(argv[i]);
|
||||
}
|
||||
break;
|
||||
|
||||
default :
|
||||
fprintf(stderr, "lpr: Unknown option \'%c\'!\n", argv[i][1]);
|
||||
return (1);
|
||||
@@ -235,9 +309,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
printer = dests[j].name;
|
||||
|
||||
for (j = 0; j < dest->num_options; j ++)
|
||||
num_options = cupsAddOption(dest->options[j].name,
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
|
||||
num_options = cupsAddOption(dest->options[j].name,
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -285,19 +360,17 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
# endif
|
||||
#endif /* !WIN32 */
|
||||
|
||||
temp = fopen(cupsTempFile(tempfile, sizeof(tempfile)), "w");
|
||||
|
||||
if (temp == NULL)
|
||||
if ((temp = cupsTempFd(tempfile, sizeof(tempfile))) < 0)
|
||||
{
|
||||
fputs("lpr: unable to create temporary file.\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
while ((i = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
|
||||
fwrite(buffer, 1, i, temp);
|
||||
while ((i = read(0, buffer, sizeof(buffer))) > 0)
|
||||
write(temp, buffer, i);
|
||||
|
||||
i = ftell(temp);
|
||||
fclose(temp);
|
||||
i = lseek(temp, 0, SEEK_CUR);
|
||||
close(temp);
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
|
||||
+53
-7
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lprm" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -50,30 +50,42 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
int i; /* Looping var */
|
||||
int job_id; /* Job ID */
|
||||
const char *dest; /* Destination printer */
|
||||
char *instance; /* Pointer to instance name */
|
||||
char uri[1024]; /* Printer or job URI */
|
||||
ipp_t *request; /* IPP request */
|
||||
ipp_t *response; /* IPP response */
|
||||
ipp_op_t op; /* Operation */
|
||||
cups_lang_t *language; /* Language */
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
http_encryption_t encryption; /* Encryption? */
|
||||
|
||||
|
||||
/*
|
||||
* Setup to cancel individual print jobs...
|
||||
*/
|
||||
|
||||
op = IPP_CANCEL_JOB;
|
||||
job_id = 0;
|
||||
dest = cupsGetDefault();
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
op = IPP_CANCEL_JOB;
|
||||
job_id = 0;
|
||||
dest = NULL;
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
encryption = cupsEncryption();
|
||||
|
||||
num_dests = cupsGetDests(&dests);
|
||||
|
||||
for (i = 0; i < num_dests; i ++)
|
||||
if (dests[i].is_default)
|
||||
dest = dests[i].name;
|
||||
|
||||
/*
|
||||
* Open a connection to the server...
|
||||
*/
|
||||
|
||||
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
|
||||
if ((http = httpConnectEncrypt(cupsServer(), ippPort(), encryption)) == NULL)
|
||||
{
|
||||
fputs("lprm: Unable to contact server!\n", stderr);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -85,6 +97,17 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (argv[i][0] == '-' && argv[i][1] != '\0')
|
||||
switch (argv[i][1])
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_LIBSSL
|
||||
encryption = HTTP_ENCRYPT_REQUIRED;
|
||||
|
||||
httpEncryption(http, encryption);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
break;
|
||||
|
||||
case 'P' : /* Cancel jobs on a printer */
|
||||
if (argv[i][2])
|
||||
dest = argv[i] + 2;
|
||||
@@ -93,10 +116,15 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
i ++;
|
||||
dest = argv[i];
|
||||
}
|
||||
|
||||
if ((instance = strchr(dest, '/')) != NULL)
|
||||
*instance = '\0';
|
||||
break;
|
||||
|
||||
default :
|
||||
fprintf(stderr, "lprm: Unknown option \'%c\'!\n", argv[i][1]);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
@@ -120,7 +148,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
op = IPP_PURGE_JOBS;
|
||||
}
|
||||
else
|
||||
{
|
||||
dest = argv[i];
|
||||
job_id = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build an IPP request, which requires the following
|
||||
@@ -191,11 +222,21 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
break;
|
||||
}
|
||||
|
||||
if (response->request.status.status_code > IPP_OK_CONFLICT)
|
||||
{
|
||||
ippDelete(response);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs("lprm: Unable to cancel job(s)!\n", stderr);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -209,9 +250,14 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (!cupsCancelJob(dest, 0))
|
||||
{
|
||||
fputs("lprm: Unable to cancel job(s)!\n", stderr);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
+10
-8
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# CGI makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-1999 by Easy Software Products.
|
||||
# Copyright 1997-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -24,8 +24,9 @@
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
TARGETS = admin.cgi classes.cgi jobs.cgi printers.cgi
|
||||
LIBOBJS = abort.o email.o html.o ipp-var.o template.o var.o
|
||||
CGIS = admin.cgi classes.cgi jobs.cgi printers.cgi
|
||||
TARGETS = libcgi.a $(CGIS)
|
||||
LIBOBJS = html.o ipp-var.o template.o var.o
|
||||
OBJS = $(LIBOBJS) admin.o classes.o jobs.o printers.o
|
||||
|
||||
|
||||
@@ -41,7 +42,7 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) libcgi.a $(TARGETS)
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
|
||||
|
||||
#
|
||||
@@ -49,10 +50,10 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERBIN)/cgi-bin
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)/cgi-bin
|
||||
$(INSTALL_BIN) $(TARGETS) $(SERVERBIN)/cgi-bin
|
||||
$(INSTALL_DIR) $(SERVERBIN)/cgi-bin
|
||||
for file in $(CGIS); do \
|
||||
$(INSTALL_BIN) $$file $(SERVERBIN)/cgi-bin; \
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
@@ -114,6 +115,7 @@ printers.o: cgi.h ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/language.h
|
||||
|
||||
$(OBJS): ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
|
||||
+163
-55
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Administration CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
#include "ipp-var.h"
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -104,7 +105,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Connect to the HTTP server...
|
||||
*/
|
||||
|
||||
http = httpConnect("localhost", ippPort());
|
||||
http = httpConnectEncrypt("localhost", ippPort(), cupsEncryption());
|
||||
|
||||
/*
|
||||
* Do the operation...
|
||||
@@ -263,9 +264,12 @@ do_am_class(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
name = cgiGetVariable("PRINTER_NAME");
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
if (isdigit(*name))
|
||||
ptr = name;
|
||||
else
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
|
||||
if (*ptr || ptr == name)
|
||||
{
|
||||
@@ -483,13 +487,15 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
ipp_attribute_t *attr, /* Current attribute */
|
||||
*last; /* Last attribute */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
*response, /* IPP response */
|
||||
*oldinfo; /* Old printer information */
|
||||
ipp_status_t status; /* Request status */
|
||||
const char *var; /* CGI variable */
|
||||
char uri[HTTP_MAX_URI], /* Device or printer URI */
|
||||
*uriptr; /* Pointer into URI */
|
||||
int maxrate; /* Maximum baud rate */
|
||||
char baudrate[255]; /* Baud rate string */
|
||||
char make[255]; /* Make string */
|
||||
const char *name, /* Pointer to class name */
|
||||
*ptr; /* Pointer to CGI variable */
|
||||
static int baudrates[] = /* Baud rates */
|
||||
@@ -507,49 +513,54 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
};
|
||||
|
||||
|
||||
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
|
||||
if (modify)
|
||||
{
|
||||
/*
|
||||
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
|
||||
* following attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
*/
|
||||
|
||||
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->language);
|
||||
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
|
||||
cgiGetVariable("PRINTER_NAME"));
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
oldinfo = cupsDoRequest(http, request, "/");
|
||||
}
|
||||
else
|
||||
oldinfo = NULL;
|
||||
|
||||
if ((name = cgiGetVariable("PRINTER_NAME")) == NULL ||
|
||||
cgiGetVariable("PRINTER_LOCATION") == NULL)
|
||||
{
|
||||
if (modify)
|
||||
{
|
||||
/*
|
||||
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
|
||||
* following attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
*/
|
||||
|
||||
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->language);
|
||||
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
|
||||
cgiGetVariable("PRINTER_NAME"));
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
/*
|
||||
* Update the location and description of an existing printer...
|
||||
*/
|
||||
|
||||
if (oldinfo)
|
||||
ippSetCGIVars(oldinfo, NULL, NULL);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "modify-printer.tmpl", getenv("LANG"));
|
||||
}
|
||||
else
|
||||
@@ -561,13 +572,18 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "add-printer.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
if (oldinfo)
|
||||
ippDelete(oldinfo);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
name = cgiGetVariable("PRINTER_NAME");
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
if (isdigit(*name))
|
||||
ptr = name;
|
||||
else
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
|
||||
if (*ptr || ptr == name)
|
||||
{
|
||||
@@ -616,10 +632,32 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
* Let the user choose...
|
||||
*/
|
||||
|
||||
if (oldinfo &&
|
||||
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
strncpy(uri, attr->values[0].string.text, sizeof(uri) - 1);
|
||||
uri[sizeof(uri) - 1] = '\0';
|
||||
if ((uriptr = strchr(uri, ':')) != NULL && strncmp(uriptr, "://", 3) == 0)
|
||||
*uriptr = '\0';
|
||||
|
||||
cgiSetVariable("CURRENT_DEVICE_URI", uri);
|
||||
}
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "choose-device.tmpl", getenv("LANG"));
|
||||
}
|
||||
else if (strchr(var, '/') == NULL)
|
||||
{
|
||||
if (oldinfo &&
|
||||
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Set the current device URI for the form to the old one...
|
||||
*/
|
||||
|
||||
if (strncmp(attr->values[0].string.text, var, strlen(var)) == 0)
|
||||
cgiSetVariable("DEVICE_URI", attr->values[0].string.text);
|
||||
}
|
||||
|
||||
/*
|
||||
* User needs to set the full URI...
|
||||
*/
|
||||
@@ -651,6 +689,49 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
else if ((var = cgiGetVariable("PPD_NAME")) == NULL)
|
||||
{
|
||||
if (modify)
|
||||
{
|
||||
/*
|
||||
* Get the PPD file...
|
||||
*/
|
||||
|
||||
int fd; /* PPD file */
|
||||
char filename[1024]; /* PPD filename */
|
||||
ppd_file_t *ppd; /* PPD information */
|
||||
char buffer[1024]; /* Buffer */
|
||||
int bytes; /* Number of bytes */
|
||||
|
||||
|
||||
snprintf(uri, sizeof(uri), "/printers/%s.ppd", name);
|
||||
|
||||
if (httpGet(http, uri))
|
||||
httpGet(http, uri);
|
||||
|
||||
while (httpUpdate(http) == HTTP_CONTINUE);
|
||||
|
||||
if ((fd = cupsTempFd(filename, sizeof(filename))) >= 0)
|
||||
{
|
||||
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
|
||||
write(fd, buffer, bytes);
|
||||
|
||||
close(fd);
|
||||
|
||||
if ((ppd = ppdOpenFile(filename)) != NULL)
|
||||
{
|
||||
if (ppd->manufacturer)
|
||||
cgiSetVariable("CURRENT_MAKE", ppd->manufacturer);
|
||||
if (ppd->nickname)
|
||||
cgiSetVariable("CURRENT_MAKE_AND_MODEL", ppd->nickname);
|
||||
|
||||
ppdClose(ppd);
|
||||
}
|
||||
|
||||
unlink(filename);
|
||||
}
|
||||
else
|
||||
httpFlush(http);
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a CUPS_GET_PPDS request, which requires the following
|
||||
* attributes:
|
||||
@@ -708,14 +789,26 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
* Let the user choose a model...
|
||||
*/
|
||||
|
||||
ippSetCGIVars(response, "ppd-make", var);
|
||||
strncpy(make, var, sizeof(make) - 1);
|
||||
make[sizeof(make) - 1] = '\0';
|
||||
|
||||
ippSetCGIVars(response, "ppd-make", make);
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "choose-model.tmpl",
|
||||
getenv("LANG"));
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
char message[1024];
|
||||
|
||||
|
||||
snprintf(message, sizeof(message), "Unable to get list of printer drivers: %s",
|
||||
ippErrorString(cupsLastError()));
|
||||
cgiSetVariable("ERROR", message);
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -759,7 +852,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
|
||||
NULL, cgiGetVariable("PPD_NAME"));
|
||||
|
||||
strcpy(uri, cgiGetVariable("DEVICE_URI"));
|
||||
strncpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri) - 1);
|
||||
uri[sizeof(uri) - 1] = '\0';
|
||||
if (strncmp(uri, "serial:", 7) == 0)
|
||||
{
|
||||
/*
|
||||
@@ -769,9 +863,10 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
if ((uriptr = strchr(uri, '?')) == NULL)
|
||||
uriptr = uri + strlen(uri);
|
||||
|
||||
sprintf(uriptr, "?baud=%s+bits=%s+parity=%s+flow=%s",
|
||||
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
|
||||
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
|
||||
snprintf(uriptr, sizeof(uri) - (uriptr - uri),
|
||||
"?baud=%s+bits=%s+parity=%s+flow=%s",
|
||||
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
|
||||
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri",
|
||||
@@ -804,6 +899,9 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
else
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-added.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
if (oldinfo)
|
||||
ippDelete(oldinfo);
|
||||
}
|
||||
|
||||
|
||||
@@ -828,6 +926,7 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
char tempfile[1024]; /* Temporary filename */
|
||||
FILE *in, /* Input file */
|
||||
*out; /* Output file */
|
||||
int outfd; /* Output file descriptor */
|
||||
char line[1024]; /* Line from PPD file */
|
||||
char keyword[1024], /* Keyword from Default line */
|
||||
*keyptr; /* Pointer into keyword... */
|
||||
@@ -1020,10 +1119,17 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
* Set default options...
|
||||
*/
|
||||
|
||||
cupsTempFile(tempfile, sizeof(tempfile));
|
||||
outfd = cupsTempFd(tempfile, sizeof(tempfile));
|
||||
in = fopen(filename, "rb");
|
||||
out = fdopen(outfd, "wb");
|
||||
|
||||
in = fopen(filename, "rb");
|
||||
out = fopen(tempfile, "wb");
|
||||
if (outfd < 0 || in == NULL || out == NULL)
|
||||
{
|
||||
cgiSetVariable("ERROR", strerror(errno));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
unlink(filename);
|
||||
return;
|
||||
}
|
||||
|
||||
while (get_line(line, sizeof(line), in) != NULL)
|
||||
{
|
||||
@@ -1035,7 +1141,8 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
* Get default option name...
|
||||
*/
|
||||
|
||||
strcpy(keyword, line + 8);
|
||||
strncpy(keyword, line + 8, sizeof(keyword) - 1);
|
||||
keyword[sizeof(keyword) - 1] = '\0';
|
||||
|
||||
for (keyptr = keyword; *keyptr; keyptr ++)
|
||||
if (*keyptr == ':' || isspace(*keyptr))
|
||||
@@ -1057,6 +1164,7 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
|
||||
fclose(in);
|
||||
fclose(out);
|
||||
close(outfd);
|
||||
|
||||
/*
|
||||
* Build a CUPS_ADD_PRINTER request, which requires the following
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI support library definitions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
|
||||
+61
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Class status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -46,6 +46,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
http_t *http; /* Connection to the server */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
ipp_attribute_t *attr; /* IPP attribute */
|
||||
ipp_status_t status; /* Operation status... */
|
||||
char uri[HTTP_MAX_URI];
|
||||
/* Printer URI */
|
||||
@@ -70,7 +71,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Connect to the HTTP server...
|
||||
*/
|
||||
|
||||
http = httpConnect("localhost", ippPort());
|
||||
http = httpConnectEncrypt("localhost", ippPort(), cupsEncryption());
|
||||
|
||||
/*
|
||||
* Tell the client to expect HTML...
|
||||
@@ -98,6 +99,64 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
|
||||
{
|
||||
/*
|
||||
* Get the default destination...
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
request->request.op.operation_id = CUPS_GET_DEFAULT;
|
||||
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->language);
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
|
||||
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
char method[HTTP_MAX_URI],
|
||||
username[HTTP_MAX_URI],
|
||||
hostname[HTTP_MAX_URI],
|
||||
resource[HTTP_MAX_URI],
|
||||
uri[HTTP_MAX_URI];
|
||||
int port; /* URI data */
|
||||
const char *server; /* Name of server */
|
||||
|
||||
|
||||
/*
|
||||
* Map localhost access to localhost...
|
||||
*/
|
||||
|
||||
server = getenv("SERVER_NAME");
|
||||
|
||||
httpSeparate(attr->values[0].string.text, method, username,
|
||||
hostname, &port, resource);
|
||||
|
||||
if (strcasecmp(hostname, server) == 0 &&
|
||||
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), server) == 0))
|
||||
strcpy(hostname, "localhost");
|
||||
|
||||
/*
|
||||
* Rewrite URI with HTTP address...
|
||||
*/
|
||||
|
||||
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
|
||||
resource);
|
||||
|
||||
cgiSetVariable("DEFAULT_URI", uri);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the class info...
|
||||
*/
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI HTML functions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
|
||||
+84
-38
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP variable routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -23,6 +23,7 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ippGetTemplateDir() - Get the templates directory...
|
||||
* ippSetServerVersion() - Set the server name and CUPS version...
|
||||
* ippSetCGIVars() - Set CGI variables from an IPP response.
|
||||
*/
|
||||
@@ -96,12 +97,15 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
resource[HTTP_MAX_URI],
|
||||
uri[HTTP_MAX_URI];
|
||||
int port; /* URI data */
|
||||
char server[1024]; /* Name of server */
|
||||
int ishttps; /* Using encryption? */
|
||||
const char *server; /* Name of server */
|
||||
struct tm *date; /* Date information */
|
||||
|
||||
|
||||
ippSetServerVersion();
|
||||
|
||||
strcpy(server, cupsServer());
|
||||
server = getenv("SERVER_NAME");
|
||||
ishttps = getenv("HTTPS") != NULL;
|
||||
|
||||
for (attr = response->attrs;
|
||||
attr && attr->group_tag == IPP_TAG_OPERATION;
|
||||
@@ -119,6 +123,10 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
filter != NULL && filter->group_tag != IPP_TAG_ZERO;
|
||||
filter = filter->next)
|
||||
if (filter->name && strcmp(filter->name, filter_name) == 0 &&
|
||||
(filter->value_tag == IPP_TAG_STRING ||
|
||||
(filter->value_tag >= IPP_TAG_TEXTLANG &&
|
||||
filter->value_tag <= IPP_TAG_MIMETYPE)) &&
|
||||
filter->values[0].string.text != NULL &&
|
||||
strcasecmp(filter->values[0].string.text, filter_value) == 0)
|
||||
break;
|
||||
|
||||
@@ -150,17 +158,33 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
|
||||
name[i] = '\0';
|
||||
|
||||
/*
|
||||
* Add "job_printer_name" variable if we have a "job_printer_uri"
|
||||
* attribute...
|
||||
*/
|
||||
|
||||
if (strcmp(name, "job_printer_uri") == 0)
|
||||
{
|
||||
if ((valptr = strrchr(attr->values[0].string.text, '/')) == NULL)
|
||||
valptr = "unknown";
|
||||
else
|
||||
valptr ++;
|
||||
|
||||
cgiSetArray("job_printer_name", element, valptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy values...
|
||||
*/
|
||||
|
||||
value[0] = '\0';
|
||||
valptr = value;
|
||||
value[0] = '\0'; /* Initially an empty string */
|
||||
value[sizeof(value) - 1] = '\0'; /* In case string gets full */
|
||||
valptr = value; /* Start at the beginning */
|
||||
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if (i)
|
||||
strcat(valptr, ",");
|
||||
strncat(valptr, ",", sizeof(value) - (valptr - value) - 1);
|
||||
|
||||
valptr += strlen(valptr);
|
||||
|
||||
@@ -168,57 +192,78 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
sprintf(valptr, "%d", attr->values[i].integer);
|
||||
if (strncmp(name, "time_at_", 8) == 0)
|
||||
{
|
||||
date = localtime((time_t *)&(attr->values[i].integer));
|
||||
strftime(valptr, sizeof(value) - (valptr - value),
|
||||
CUPS_STRFTIME_FORMAT, date);
|
||||
}
|
||||
else
|
||||
snprintf(valptr, sizeof(value) - (valptr - value),
|
||||
"%d", attr->values[i].integer);
|
||||
break;
|
||||
|
||||
case IPP_TAG_BOOLEAN :
|
||||
sprintf(valptr, "%d", attr->values[i].boolean);
|
||||
snprintf(valptr, sizeof(value) - (valptr - value),
|
||||
"%d", attr->values[i].boolean);
|
||||
break;
|
||||
|
||||
case IPP_TAG_NOVALUE :
|
||||
strcat(valptr, "novalue");
|
||||
strncat(valptr, "novalue", sizeof(value) - (valptr - value) - 1);
|
||||
break;
|
||||
|
||||
case IPP_TAG_RANGE :
|
||||
sprintf(valptr, "%d-%d", attr->values[i].range.lower,
|
||||
attr->values[i].range.upper);
|
||||
snprintf(valptr, sizeof(value) - (valptr - value),
|
||||
"%d-%d", attr->values[i].range.lower,
|
||||
attr->values[i].range.upper);
|
||||
break;
|
||||
|
||||
case IPP_TAG_RESOLUTION :
|
||||
sprintf(valptr, "%dx%d%s", attr->values[i].resolution.xres,
|
||||
attr->values[i].resolution.yres,
|
||||
attr->values[i].resolution.units == IPP_RES_PER_INCH ?
|
||||
"dpi" : "dpc");
|
||||
snprintf(valptr, sizeof(value) - (valptr - value),
|
||||
"%dx%d%s", attr->values[i].resolution.xres,
|
||||
attr->values[i].resolution.yres,
|
||||
attr->values[i].resolution.units == IPP_RES_PER_INCH ?
|
||||
"dpi" : "dpc");
|
||||
break;
|
||||
|
||||
case IPP_TAG_URI :
|
||||
httpSeparate(attr->values[i].string.text, method, username,
|
||||
hostname, &port, resource);
|
||||
if (strchr(attr->values[i].string.text, ':') != NULL)
|
||||
{
|
||||
httpSeparate(attr->values[i].string.text, method, username,
|
||||
hostname, &port, resource);
|
||||
|
||||
if (strcmp(method, "ipp") == 0 ||
|
||||
strcmp(method, "http") == 0)
|
||||
{
|
||||
/*
|
||||
* Map localhost access to localhost...
|
||||
*/
|
||||
if (strcmp(method, "ipp") == 0 ||
|
||||
strcmp(method, "http") == 0)
|
||||
{
|
||||
/*
|
||||
* Map localhost access to localhost and local port...
|
||||
*/
|
||||
|
||||
if (strcasecmp(hostname, server) == 0 &&
|
||||
strcmp(getenv("REMOTE_ADDR"), "127.0.0.1") == 0)
|
||||
strcpy(hostname, "localhost");
|
||||
if (strcasecmp(hostname, server) == 0 &&
|
||||
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), server) == 0))
|
||||
{
|
||||
strcpy(hostname, "localhost");
|
||||
port = atoi(getenv("SERVER_PORT"));
|
||||
}
|
||||
|
||||
/*
|
||||
* Rewrite URI with HTTP address...
|
||||
*/
|
||||
/*
|
||||
* Rewrite URI with HTTP address...
|
||||
*/
|
||||
|
||||
if (username[0])
|
||||
snprintf(uri, sizeof(uri), "http://%s@%s:%d%s", username,
|
||||
hostname, port, resource);
|
||||
else
|
||||
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
|
||||
resource);
|
||||
if (username[0])
|
||||
snprintf(uri, sizeof(uri), "%s://%s@%s:%d%s",
|
||||
ishttps ? "https" : "http",
|
||||
username, hostname, port, resource);
|
||||
else
|
||||
snprintf(uri, sizeof(uri), "%s://%s:%d%s",
|
||||
ishttps ? "https" : "http",
|
||||
hostname, port, resource);
|
||||
|
||||
strcat(valptr, uri);
|
||||
break;
|
||||
strncat(valptr, uri, sizeof(value) - (valptr - value) - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case IPP_TAG_STRING :
|
||||
@@ -227,7 +272,8 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
case IPP_TAG_KEYWORD :
|
||||
case IPP_TAG_CHARSET :
|
||||
case IPP_TAG_LANGUAGE :
|
||||
strcat(valptr, attr->values[i].string.text);
|
||||
strncat(valptr, attr->values[i].string.text,
|
||||
sizeof(value) - (valptr - value) - 1);
|
||||
break;
|
||||
|
||||
default :
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP variable definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Job status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -64,7 +64,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Connect to the HTTP server...
|
||||
*/
|
||||
|
||||
http = httpConnect("localhost", ippPort());
|
||||
http = httpConnectEncrypt("localhost", ippPort(), cupsEncryption());
|
||||
|
||||
/*
|
||||
* Tell the client to expect HTML...
|
||||
|
||||
+61
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Printer status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -46,6 +46,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
http_t *http; /* Connection to the server */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
ipp_attribute_t *attr; /* IPP attribute */
|
||||
ipp_status_t status; /* Operation status... */
|
||||
char uri[HTTP_MAX_URI];
|
||||
/* Printer URI */
|
||||
@@ -70,7 +71,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Connect to the HTTP server...
|
||||
*/
|
||||
|
||||
http = httpConnect("localhost", ippPort());
|
||||
http = httpConnectEncrypt("localhost", ippPort(), cupsEncryption());
|
||||
|
||||
/*
|
||||
* Tell the client to expect HTML...
|
||||
@@ -98,6 +99,64 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
|
||||
{
|
||||
/*
|
||||
* Get the default destination...
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
request->request.op.operation_id = CUPS_GET_DEFAULT;
|
||||
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->language);
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
|
||||
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
char method[HTTP_MAX_URI],
|
||||
username[HTTP_MAX_URI],
|
||||
hostname[HTTP_MAX_URI],
|
||||
resource[HTTP_MAX_URI],
|
||||
uri[HTTP_MAX_URI];
|
||||
int port; /* URI data */
|
||||
const char *server; /* Name of server */
|
||||
|
||||
|
||||
/*
|
||||
* Map localhost access to localhost...
|
||||
*/
|
||||
|
||||
server = getenv("SERVER_NAME");
|
||||
|
||||
httpSeparate(attr->values[0].string.text, method, username,
|
||||
hostname, &port, resource);
|
||||
|
||||
if (strcasecmp(hostname, server) == 0 &&
|
||||
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
|
||||
strcmp(getenv("REMOTE_HOST"), server) == 0))
|
||||
strcpy(hostname, "localhost");
|
||||
|
||||
/*
|
||||
* Rewrite URI with HTTP address...
|
||||
*/
|
||||
|
||||
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
|
||||
resource);
|
||||
|
||||
cgiSetVariable("DEFAULT_URI", uri);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the printer info...
|
||||
*/
|
||||
|
||||
+65
-21
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI template function.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
@@ -110,14 +110,14 @@ cgiCopyTemplateLang(FILE *out, /* I - Output file */
|
||||
* See if we have a template file for this language...
|
||||
*/
|
||||
|
||||
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
|
||||
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
|
||||
if (access(filename, 0))
|
||||
{
|
||||
locale[2] = '\0';
|
||||
|
||||
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
|
||||
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
|
||||
if (access(filename, 0))
|
||||
sprintf(filename, "%s/%s", directory, tmpl);
|
||||
snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -160,7 +160,8 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
*s; /* String pointer */
|
||||
const char *value; /* Value of variable */
|
||||
const char *innerval; /* Inner value */
|
||||
char outval[1024], /* Output string */
|
||||
const char *outptr; /* Output string pointer */
|
||||
char outval[1024], /* Formatted output string */
|
||||
compare[1024]; /* Comparison string */
|
||||
int result; /* Result of comparison */
|
||||
|
||||
@@ -179,7 +180,7 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
*/
|
||||
|
||||
for (s = name; (ch = getc(in)) != EOF;)
|
||||
if (strchr("}]<>=!", ch))
|
||||
if (strchr("}]<>=! \t\n", ch))
|
||||
break;
|
||||
else if (s > name && ch == '?')
|
||||
break;
|
||||
@@ -188,6 +189,17 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
|
||||
*s = '\0';
|
||||
|
||||
if (s == name && isspace(ch))
|
||||
{
|
||||
if (out)
|
||||
{
|
||||
putc('{', out);
|
||||
putc(ch, out);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* See if it has a value...
|
||||
*/
|
||||
@@ -203,14 +215,20 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
*nameptr++ = '\0';
|
||||
|
||||
if ((value = cgiGetArray(name + 1, atoi(nameptr) - 1)) != NULL)
|
||||
strcpy(outval, value);
|
||||
outptr = value;
|
||||
else
|
||||
{
|
||||
outval[0] = '\0';
|
||||
outptr = outval;
|
||||
}
|
||||
}
|
||||
if ((value = cgiGetArray(name + 1, element)) != NULL)
|
||||
strcpy(outval, value);
|
||||
outptr = value;
|
||||
else
|
||||
{
|
||||
outval[0] = '\0';
|
||||
outptr = outval;
|
||||
}
|
||||
}
|
||||
else if (name[0] == '#')
|
||||
{
|
||||
@@ -222,6 +240,8 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
sprintf(outval, "%d", cgiGetSize(name + 1));
|
||||
else
|
||||
sprintf(outval, "%d", element + 1);
|
||||
|
||||
outptr = outval;
|
||||
}
|
||||
else if (name[0] == '[')
|
||||
{
|
||||
@@ -264,14 +284,20 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
{
|
||||
*nameptr++ = '\0';
|
||||
if ((value = cgiGetArray(name, atoi(nameptr) - 1)) == NULL)
|
||||
sprintf(outval, "{%s}", name);
|
||||
{
|
||||
snprintf(outval, sizeof(outval), "{%s}", name);
|
||||
outptr = outval;
|
||||
}
|
||||
else
|
||||
strcpy(outval, value);
|
||||
outptr = value;
|
||||
}
|
||||
else if ((value = cgiGetArray(name, element)) == NULL)
|
||||
sprintf(outval, "{%s}", name);
|
||||
{
|
||||
snprintf(outval, sizeof(outval), "{%s}", name);
|
||||
outptr = outval;
|
||||
}
|
||||
else
|
||||
strcpy(outval, value);
|
||||
outptr = value;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -285,7 +311,7 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
*/
|
||||
|
||||
if (out)
|
||||
cgi_puts(outval, out);
|
||||
cgi_puts(outptr, out);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -319,6 +345,8 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
for (s = compare; (ch = getc(in)) != EOF;)
|
||||
if (ch == '?')
|
||||
break;
|
||||
else if (s >= (compare + sizeof(compare) - 1))
|
||||
continue;
|
||||
else if (ch == '#')
|
||||
{
|
||||
sprintf(s, "%d", element + 1);
|
||||
@@ -345,19 +373,28 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
if ((innerval = cgiGetArray(innername, atoi(innerptr) - 1)) == NULL)
|
||||
*s = '\0';
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
{
|
||||
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
|
||||
compare[sizeof(compare) - 1] = '\0';
|
||||
}
|
||||
}
|
||||
else if (innername[0] == '?')
|
||||
{
|
||||
if ((innerval = cgiGetArray(innername + 1, element)) == NULL)
|
||||
*s = '\0';
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
{
|
||||
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
|
||||
compare[sizeof(compare) - 1] = '\0';
|
||||
}
|
||||
}
|
||||
else if ((innerval = cgiGetArray(innername, element)) == NULL)
|
||||
sprintf(s, "{%s}", innername);
|
||||
snprintf(s, sizeof(s), "{%s}", innername);
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
{
|
||||
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
|
||||
compare[sizeof(compare) - 1] = '\0';
|
||||
}
|
||||
|
||||
s += strlen(s);
|
||||
}
|
||||
@@ -378,16 +415,16 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
switch (op)
|
||||
{
|
||||
case '<' :
|
||||
result = strcasecmp(outval, compare) < 0;
|
||||
result = strcasecmp(outptr, compare) < 0;
|
||||
break;
|
||||
case '>' :
|
||||
result = strcasecmp(outval, compare) > 0;
|
||||
result = strcasecmp(outptr, compare) > 0;
|
||||
break;
|
||||
case '=' :
|
||||
result = strcasecmp(outval, compare) == 0;
|
||||
result = strcasecmp(outptr, compare) == 0;
|
||||
break;
|
||||
case '!' :
|
||||
result = strcasecmp(outval, compare) != 0;
|
||||
result = strcasecmp(outptr, compare) != 0;
|
||||
break;
|
||||
default :
|
||||
result = 1;
|
||||
@@ -423,6 +460,13 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
}
|
||||
else if (out)
|
||||
putc(ch, out);
|
||||
|
||||
/*
|
||||
* Flush any pending output...
|
||||
*/
|
||||
|
||||
if (out)
|
||||
fflush(out);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+44
-28
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI form variable and array functions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
/*#define DEBUG*/
|
||||
#include "cgi.h"
|
||||
#include <errno.h>
|
||||
#include <syslog.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -473,7 +475,7 @@ cgi_initialize_post(void)
|
||||
*/
|
||||
|
||||
content_length = getenv("CONTENT_LENGTH");
|
||||
if (content_length == NULL || atoi(content_length) == 0)
|
||||
if (content_length == NULL || atoi(content_length) <= 0)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -483,16 +485,20 @@ cgi_initialize_post(void)
|
||||
length = atoi(content_length);
|
||||
data = malloc(length + 1);
|
||||
|
||||
if (data == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Read the data into the buffer...
|
||||
*/
|
||||
|
||||
for (tbytes = 0; tbytes < length; tbytes += nbytes)
|
||||
if ((nbytes = read(0, data + tbytes, length - tbytes)) < 0)
|
||||
{
|
||||
free(data);
|
||||
return (0);
|
||||
}
|
||||
if (errno != EAGAIN)
|
||||
{
|
||||
free(data);
|
||||
return (0);
|
||||
}
|
||||
|
||||
data[length] = '\0';
|
||||
|
||||
@@ -543,11 +549,11 @@ cgi_initialize_string(const char *data) /* I - Form data string */
|
||||
* Get the variable name...
|
||||
*/
|
||||
|
||||
for (s = name; *data != '\0'; data ++, s ++)
|
||||
for (s = name; *data != '\0'; data ++)
|
||||
if (*data == '=')
|
||||
break;
|
||||
else
|
||||
*s = *data;
|
||||
else if (*data >= ' ' && s < (name + sizeof(name) - 1))
|
||||
*s++ = *data;
|
||||
|
||||
*s = '\0';
|
||||
if (*data == '=')
|
||||
@@ -559,38 +565,44 @@ cgi_initialize_string(const char *data) /* I - Form data string */
|
||||
* Read the variable value...
|
||||
*/
|
||||
|
||||
for (s = value, done = 0; !done && *data != '\0'; data ++, s ++)
|
||||
for (s = value, done = 0; !done && *data != '\0'; data ++)
|
||||
switch (*data)
|
||||
{
|
||||
case '&' : /* End of data... */
|
||||
done = 1;
|
||||
s --;
|
||||
break;
|
||||
|
||||
case '+' : /* Escaped space character */
|
||||
*s = ' ';
|
||||
if (s < (value + sizeof(value) - 1))
|
||||
*s++ = ' ';
|
||||
break;
|
||||
|
||||
case '%' : /* Escaped control character */
|
||||
/*
|
||||
* Read the hex code from stdin...
|
||||
* Read the hex code...
|
||||
*/
|
||||
|
||||
data ++;
|
||||
ch = *data - '0';
|
||||
if (ch > 9)
|
||||
ch -= 7;
|
||||
*s = ch << 4;
|
||||
if (s < (value + sizeof(value) - 1))
|
||||
{
|
||||
data ++;
|
||||
ch = *data - '0';
|
||||
if (ch > 9)
|
||||
ch -= 7;
|
||||
*s = ch << 4;
|
||||
|
||||
data ++;
|
||||
ch = *data - '0';
|
||||
if (ch > 9)
|
||||
ch -= 7;
|
||||
*s |= ch;
|
||||
data ++;
|
||||
ch = *data - '0';
|
||||
if (ch > 9)
|
||||
ch -= 7;
|
||||
*s++ |= ch;
|
||||
}
|
||||
else
|
||||
data += 2;
|
||||
break;
|
||||
|
||||
default : /* Other characters come straight through */
|
||||
*s = *data;
|
||||
if (*data >= ' ' && s < (value + sizeof(value) - 1))
|
||||
*s++ = *data;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -600,7 +612,9 @@ cgi_initialize_string(const char *data) /* I - Form data string */
|
||||
* Remove trailing whitespace...
|
||||
*/
|
||||
|
||||
s --;
|
||||
if (s > value)
|
||||
s --;
|
||||
|
||||
while (s >= value && *s == ' ')
|
||||
*s-- = '\0';
|
||||
|
||||
@@ -611,7 +625,8 @@ cgi_initialize_string(const char *data) /* I - Form data string */
|
||||
if ((s = strrchr(name, '-')) != NULL && isdigit(s[1]))
|
||||
{
|
||||
*s++ = '\0';
|
||||
cgiSetArray(name, atoi(s) - 1, value);
|
||||
if (value[0])
|
||||
cgiSetArray(name, atoi(s) - 1, value);
|
||||
}
|
||||
else if (cgiGetVariable(name) != NULL)
|
||||
cgiSetArray(name, cgiGetSize(name), value);
|
||||
@@ -644,9 +659,10 @@ cgi_sort_variables(void)
|
||||
(int (*)(const void *, const void *))cgi_compare_variables);
|
||||
|
||||
#ifdef DEBUG
|
||||
puts("New variable list is:");
|
||||
puts("Sorted variable list is:");
|
||||
for (i = 0; i < form_count; i ++)
|
||||
printf("%s = %s\n", form_vars[i].name, form_vars[i].value);
|
||||
printf("%d: %s (%d) = \"%s\" ...\n", i, form_vars[i].name,
|
||||
form_vars[i].nvalues, form_vars[i].values[0]);
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Configuration file makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1993-2000 by Easy Software Products.
|
||||
# Copyright 1993-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -51,8 +51,7 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERROOT)
|
||||
$(CHMOD) ugo+rx $(SERVERROOT)
|
||||
$(INSTALL_DIR) $(SERVERROOT)
|
||||
for file in $(KEEP); do \
|
||||
if test -r $(SERVERROOT)/$$file ; then \
|
||||
$(INSTALL_DATA) $$file $(SERVERROOT)/$$file.N ; \
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: classes.conf 1152 2000-06-22 18:25:29Z mike $"
|
||||
# "$Id: classes.conf 1605 2001-03-02 22:34:21Z andy $"
|
||||
#
|
||||
# Sample class configuration file for the Common UNIX Printing System
|
||||
# (CUPS) scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -85,5 +85,5 @@
|
||||
#</Class>
|
||||
|
||||
#
|
||||
# End of "$Id: classes.conf 1152 2000-06-22 18:25:29Z mike $".
|
||||
# End of "$Id: classes.conf 1605 2001-03-02 22:34:21Z andy $".
|
||||
#
|
||||
|
||||
+23
-8
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: client.conf 969 2000-03-10 16:56:46Z mike $"
|
||||
# "$Id: client.conf 1605 2001-03-02 22:34:21Z andy $"
|
||||
#
|
||||
# Sample client configuration file for the Common UNIX Printing System
|
||||
# (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -27,24 +27,39 @@
|
||||
# #
|
||||
# This is the CUPS client configuration file. This file is used to #
|
||||
# define client-specific parameters, such as the default server or #
|
||||
# default printer. #
|
||||
# default encryption settings. #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
#
|
||||
# ServerName: the hostname of your server. By default CUPS will use the
|
||||
# hostname of the system.
|
||||
# hostname of the system or the value of the CUPS_SERVER environment
|
||||
# variable.
|
||||
#
|
||||
|
||||
#ServerName myhost.domain.com
|
||||
|
||||
#
|
||||
# DefaultPrinter: the default printer (or class) that clients should use.
|
||||
# Encryption: whether or not to use encryption; this depends on having
|
||||
# the OpenSSL library linked into the CUPS library.
|
||||
#
|
||||
# Possible values:
|
||||
#
|
||||
# Always - Always use encryption (SSL)
|
||||
# Never - Never use encryption
|
||||
# Required - Use TLS encryption upgrade
|
||||
# IfRequested - Use encryption if the server requests it
|
||||
#
|
||||
# The default value is "IfRequested". This parameter can also be set
|
||||
# using the CUPS_ENCRYPTION environment variable.
|
||||
#
|
||||
|
||||
#DefaultPrinter myprinter
|
||||
#DefaultPrinter myprinter@host
|
||||
#Encryption Always
|
||||
#Encryption Never
|
||||
#Encryption Required
|
||||
#Encryption IfRequested
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: client.conf 969 2000-03-10 16:56:46Z mike $".
|
||||
# End of "$Id: client.conf 1605 2001-03-02 22:34:21Z andy $".
|
||||
#
|
||||
|
||||
+181
-23
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $"
|
||||
# "$Id: cupsd.conf 1871 2001-07-25 21:03:36Z mike $"
|
||||
#
|
||||
# Sample configuration file for the Common UNIX Printing System (CUPS)
|
||||
# scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -71,6 +71,29 @@
|
||||
|
||||
#AccessLog /var/log/cups/access_log
|
||||
|
||||
#
|
||||
# Classification: the classification level of the server. If set, this
|
||||
# classification is displayed on all pages, and raw printing is disabled.
|
||||
# The default is the empty string.
|
||||
#
|
||||
|
||||
#Classification classified
|
||||
#Classification confidential
|
||||
#Classification secret
|
||||
#Classification topsecret
|
||||
#Classification unclassified
|
||||
|
||||
#
|
||||
# ClassifyOverride: whether to allow users to override the classification
|
||||
# on printouts. If enabled, users can limit banner pages to before or
|
||||
# after the job, and can change the classification of a job, but cannot
|
||||
# completely eliminate the classification or banners.
|
||||
#
|
||||
# The default is off.
|
||||
#
|
||||
|
||||
#ClassifyOverride off
|
||||
|
||||
#
|
||||
# DataDir: the root directory for the CUPS data files.
|
||||
# By default /usr/share/cups.
|
||||
@@ -98,7 +121,7 @@
|
||||
# By default the compiled in directory.
|
||||
#
|
||||
|
||||
#DocumentRoot /usr/share/cups/doc
|
||||
#DocumentRoot /usr/share/doc/cups
|
||||
|
||||
#
|
||||
# ErrorLog: the error log file; if this does not start with a leading /
|
||||
@@ -111,11 +134,19 @@
|
||||
|
||||
#ErrorLog /var/log/cups/error_log
|
||||
|
||||
#
|
||||
# FontPath: the path to locate all font files (currently only for pstoraster)
|
||||
# By default /usr/share/cups/fonts.
|
||||
#
|
||||
|
||||
#FontPath /usr/share/cups/fonts
|
||||
|
||||
#
|
||||
# LogLevel: controls the number of messages logged to the ErrorLog
|
||||
# file and can be one of the following:
|
||||
#
|
||||
# debug Log everything.
|
||||
# debug2 Log everything.
|
||||
# debug Log almost everything.
|
||||
# info Log all requests and state changes.
|
||||
# warn Log errors and warnings.
|
||||
# error Log only errors.
|
||||
@@ -157,7 +188,21 @@ LogLevel info
|
||||
#PreserveJobFiles No
|
||||
|
||||
#
|
||||
# Printcap: the name of the printcap file. Default is no filename.
|
||||
# AutoPurgeJobs: automatically purge jobs when not needed for quotas.
|
||||
# Default is No.
|
||||
#
|
||||
|
||||
#AutoPurgeJobs No
|
||||
|
||||
#
|
||||
# MaxJobs: maximum number of jobs to keep in memory (active and completed.)
|
||||
# Default is 0 (no limit.)
|
||||
#
|
||||
|
||||
#MaxJobs 0
|
||||
|
||||
#
|
||||
# Printcap: the name of the printcap file. Default is /etc/printcap.
|
||||
# Leave blank to disable printcap file generation.
|
||||
#
|
||||
|
||||
@@ -170,6 +215,13 @@ LogLevel info
|
||||
|
||||
#RequestRoot /var/spool/cups
|
||||
|
||||
#
|
||||
# RemoteRoot: the name of the user assigned to unauthenticated accesses
|
||||
# from remote systems. By default "remroot".
|
||||
#
|
||||
|
||||
#RemoteRoot remroot
|
||||
|
||||
#
|
||||
# ServerBin: the root directory for the scheduler executables.
|
||||
# By default /usr/lib/cups or /usr/lib32/cups (IRIX 6.5).
|
||||
@@ -185,6 +237,25 @@ LogLevel info
|
||||
#ServerRoot /etc/cups
|
||||
|
||||
|
||||
########
|
||||
######## Encryption Support
|
||||
########
|
||||
|
||||
#
|
||||
# ServerCertificate: the file to read containing the server's certificate.
|
||||
# Defaults to "/etc/cups/ssl/server.crt".
|
||||
#
|
||||
|
||||
#ServerCertificate /etc/cups/ssl/server.crt
|
||||
|
||||
#
|
||||
# ServerKey: the file to read containing the server's key.
|
||||
# Defaults to "/etc/cups/ssl/server.key".
|
||||
#
|
||||
|
||||
#ServerKey /etc/cups/ssl/server.key
|
||||
|
||||
|
||||
########
|
||||
######## Filter Options
|
||||
########
|
||||
@@ -213,12 +284,22 @@ LogLevel info
|
||||
|
||||
#
|
||||
# TempDir: the directory to put temporary files in. This directory must be
|
||||
# writable by the user defined above! Defaults to "/var/tmp" or the value
|
||||
# of the TMPDIR environment variable.
|
||||
# writable by the user defined above! Defaults to "/var/spool/cups/tmp" or
|
||||
# the value of the TMPDIR environment variable.
|
||||
#
|
||||
|
||||
#TempDir /var/tmp
|
||||
#TempDir /var/spool/cups/tmp
|
||||
|
||||
#
|
||||
# FilterLimit: sets the maximum cost of all job filters that can be run
|
||||
# at the same time. A limit of 0 means no limit. A typical job may need
|
||||
# a filter limit of at least 200; limits less than the minimum required
|
||||
# by a job force a single job to be printed at any time.
|
||||
#
|
||||
# The default limit is 0 (unlimited).
|
||||
#
|
||||
|
||||
#FilterLimit 0
|
||||
|
||||
########
|
||||
######## Network Options
|
||||
@@ -239,8 +320,13 @@ LogLevel info
|
||||
# Listen 1.2.3.4
|
||||
# Listen 1.2.3.4:631
|
||||
#
|
||||
# NOTE: Unfortunately, most web browsers don't support TLS or HTTP Upgrades
|
||||
# for encryption. If you want to support web-based encryption you'll
|
||||
# probably need to listen on port 443 (the "https" port...)
|
||||
#
|
||||
|
||||
#Port 80
|
||||
#Port 443
|
||||
Port 631
|
||||
|
||||
#
|
||||
@@ -290,12 +376,49 @@ Port 631
|
||||
########
|
||||
|
||||
#
|
||||
# Browsing: whether or not to broadcast printer information to
|
||||
# other CUPS servers. Enabled by default.
|
||||
# Browsing: whether or not to broadcast and/or listen for CUPS printer
|
||||
# information on the network. Enabled by default.
|
||||
#
|
||||
|
||||
#Browsing On
|
||||
|
||||
#
|
||||
# BrowseProtocols: which protocols to use for browsing. Can be
|
||||
# any of the following separated by whitespace and/or commas:
|
||||
#
|
||||
# all - Use all supported protocols.
|
||||
# cups - Use the CUPS browse protocol.
|
||||
# slp - Use the SLPv2 protocol.
|
||||
#
|
||||
# The default is "cups".
|
||||
#
|
||||
# NOTE: If you choose to use SLPv2, it is *strongly* recommended that
|
||||
# you have at least one SLP Directory Agent (DA) on your
|
||||
# network. Otherwise, browse updates can take several seconds,
|
||||
# during which the scheduler will not response to client
|
||||
# requests.
|
||||
#
|
||||
|
||||
#BrowseProtocols cups
|
||||
|
||||
#
|
||||
# BrowseAddress: specifies a broadcast address to be used. By
|
||||
# default browsing information is not sent!
|
||||
#
|
||||
# Note: HP-UX does not properly handle broadcast unless you have a
|
||||
# Class A, B, C, or D netmask (i.e. no CIDR support).
|
||||
#
|
||||
# Note: Using the "global" broadcast address (255.255.255.255) will
|
||||
# activate a Linux demand-dial link with the default configuration.
|
||||
# If you have a LAN as well as the dial-up link, use the LAN's
|
||||
# broadcast address.
|
||||
#
|
||||
|
||||
#BrowseAddress x.y.z.255
|
||||
#BrowseAddress x.y.255.255
|
||||
#BrowseAddress x.255.255.255
|
||||
#BrowseAddress 255.255.255.255
|
||||
|
||||
#
|
||||
# BrowseShortNames: whether or not to use "short" names for remote printers
|
||||
# when possible (e.g. "printer" instead of "printer@host".) Enabled by
|
||||
@@ -304,18 +427,6 @@ Port 631
|
||||
|
||||
#BrowseShortNames Yes
|
||||
|
||||
#
|
||||
# BrowseAddress: specifies a broadcast address to be used. By
|
||||
# default browsing information is broadcast to all active interfaces.
|
||||
#
|
||||
# Note: HP-UX 10.20 and earlier do not properly handle broadcast unless
|
||||
# you have a Class A, B, C, or D netmask (i.e. no CIDR support).
|
||||
#
|
||||
|
||||
#BrowseAddress x.y.z.255
|
||||
#BrowseAddress x.y.255.255
|
||||
#BrowseAddress x.255.255.255
|
||||
|
||||
#
|
||||
# BrowseAllow: specifies an address mask to allow for incoming browser
|
||||
# packets. The default is to allow packets from all addresses.
|
||||
@@ -414,6 +525,36 @@ Port 631
|
||||
|
||||
#ImplicitClasses On
|
||||
|
||||
#
|
||||
# ImplicitAnyClasses: whether or not to create "AnyPrinter" implicit
|
||||
# classes.
|
||||
#
|
||||
# When ImplicitAnyClasses is On and a local queue of the same name
|
||||
# exists, e.g. "printer", "printer@server1", "printer@server1", then
|
||||
# an implicit class called "Anyprinter" is created instead.
|
||||
#
|
||||
# When ImplicitAnyClasses is Off, implicit classes are not created
|
||||
# when there is a local queue of the same name.
|
||||
#
|
||||
# Disabled by default.
|
||||
#
|
||||
|
||||
#ImplicitAnyCLasses Off
|
||||
|
||||
#
|
||||
# HideImplicitMembers: whether or not to show the members of an
|
||||
# implicit class.
|
||||
#
|
||||
# When HideImplicitMembers is On, any remote printers that are
|
||||
# part of an implicit class are hidden from the user, who will
|
||||
# then only see a single queue even though many queues will be
|
||||
# supporting the implicit class.
|
||||
#
|
||||
# Enabled by default.
|
||||
#
|
||||
|
||||
#HideImplicitMembers On
|
||||
|
||||
|
||||
########
|
||||
######## Security Options
|
||||
@@ -472,8 +613,23 @@ Port 631
|
||||
# The host and domain address require that you enable hostname lookups
|
||||
# with "HostNameLookups On" above.
|
||||
#
|
||||
# Encryption: whether or not to use encryption; this depends on having
|
||||
# the OpenSSL library linked into the CUPS library and scheduler.
|
||||
#
|
||||
# Possible values:
|
||||
#
|
||||
# Always - Always use encryption (SSL)
|
||||
# Never - Never use encryption
|
||||
# Required - Use TLS encryption upgrade
|
||||
# IfRequested - Use encryption if the server requests it
|
||||
#
|
||||
# The default value is "IfRequested".
|
||||
#
|
||||
|
||||
<Location />
|
||||
Order Deny,Allow
|
||||
Deny From All
|
||||
Allow From 127.0.0.1
|
||||
</Location>
|
||||
|
||||
#<Location /classes>
|
||||
@@ -535,8 +691,10 @@ AuthClass System
|
||||
Order Deny,Allow
|
||||
Deny From All
|
||||
Allow From 127.0.0.1
|
||||
|
||||
#Encryption Required
|
||||
</Location>
|
||||
|
||||
#
|
||||
# End of "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $".
|
||||
# End of "$Id: cupsd.conf 1871 2001-07-25 21:03:36Z mike $".
|
||||
#
|
||||
|
||||
+28
-14
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: mime.convs 1019 2000-04-18 19:41:12Z mike $"
|
||||
# "$Id: mime.convs 1605 2001-03-02 22:34:21Z andy $"
|
||||
#
|
||||
# MIME converts file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products.
|
||||
# Copyright 1997-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -41,24 +41,38 @@
|
||||
# PostScript filters
|
||||
#
|
||||
|
||||
#application/msword application/postscript 50 mswordtops
|
||||
application/pdf application/postscript 50 pdftops
|
||||
application/postscript application/vnd.cups-postscript 50 pstops
|
||||
application/vnd.hp-HPGL application/postscript 50 hpgltops
|
||||
image/* application/vnd.cups-postscript 50 imagetops
|
||||
#text/html application/postscript 50 htmltops
|
||||
text/html application/postscript 50 texttops
|
||||
text/plain application/postscript 50 texttops
|
||||
application/vnd.cups-form application/vnd.cups-postscript 50 formtops
|
||||
#application/msword application/postscript 33 mswordtops
|
||||
application/pdf application/postscript 33 pdftops
|
||||
application/postscript application/vnd.cups-postscript 66 pstops
|
||||
application/vnd.hp-HPGL application/postscript 66 hpgltops
|
||||
image/* application/vnd.cups-postscript 66 imagetops
|
||||
#text/html application/postscript 33 htmltops
|
||||
application/x-cshell application/postscript 33 texttops
|
||||
application/x-perl application/postscript 33 texttops
|
||||
application/x-shell application/postscript 33 texttops
|
||||
text/html application/postscript 33 texttops
|
||||
text/plain application/postscript 33 texttops
|
||||
application/vnd.cups-form application/vnd.cups-postscript 33 formtops
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Raster filters...
|
||||
#
|
||||
|
||||
image/* application/vnd.cups-raster 50 imagetoraster
|
||||
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
|
||||
image/* application/vnd.cups-raster 100 imagetoraster
|
||||
application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Raw filter...
|
||||
#
|
||||
# Uncomment the following filter and the application/octet-stream type
|
||||
# in mime.types to allow printing of arbitrary files without the -oraw
|
||||
# option.
|
||||
#
|
||||
|
||||
#*/* application/vnd.cups-raw 0 -
|
||||
|
||||
#
|
||||
# End of "$Id: mime.convs 1019 2000-04-18 19:41:12Z mike $".
|
||||
# End of "$Id: mime.convs 1605 2001-03-02 22:34:21Z andy $".
|
||||
#
|
||||
|
||||
+39
-10
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: mime.types 1152 2000-06-22 18:25:29Z mike $"
|
||||
# "$Id: mime.types 1806 2001-06-28 18:01:17Z mike $"
|
||||
#
|
||||
# MIME types file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products.
|
||||
# Copyright 1997-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -60,7 +60,7 @@
|
||||
# accepts 8-bit characters in the range 128-255.
|
||||
#
|
||||
# String constants must be surrounded by "" if they contain whitespace.
|
||||
# To instead binary data into a string, use the <hex> notation.
|
||||
# To insert binary data into a string, use the <hex> notation.
|
||||
#
|
||||
|
||||
########################################################################
|
||||
@@ -71,9 +71,13 @@
|
||||
application/msword doc string(0,<D0CF11E0A1B11AE1>)
|
||||
application/pdf pdf string(0,%PDF)
|
||||
application/postscript ai eps ps string(0,%!) string(0,<04>%!)
|
||||
application/vnd.hp-HPGL hpgl string(0,<1b>%) string(0,<1b>&)\
|
||||
string(0,<1b>E) string(0,<201b>)\
|
||||
string(0,BP;) string(0,IN;) string(0,DF;)
|
||||
application/vnd.hp-HPGL hpgl string(0,<1B>&)\
|
||||
string(0,<1B>E<1B>%0B) string(0,<201B>)\
|
||||
string(0,BP;) string(0,IN;) string(0,DF;) \
|
||||
string(0,BPINPS;) \
|
||||
(contains(0,128,<1B>%-12345X) + \
|
||||
(contains(9,512,"LANGUAGE=HPGL") \
|
||||
contains(9,512,"LANGUAGE = HPGL")))
|
||||
|
||||
########################################################################
|
||||
#
|
||||
@@ -97,7 +101,7 @@ image/x-sgi-rgb rgb sgi bw icon short(0,474)
|
||||
image/x-xbitmap xbm
|
||||
image/x-xpixmap xpm ascii(0,1024) + string(3,"XPM")
|
||||
image/x-xwindowdump xwd
|
||||
image/x-sun-raster ras
|
||||
image/x-sun-raster ras string(0,<59a66a95>)
|
||||
|
||||
#image/fpx fpx
|
||||
image/x-alias pix short(8,8) short(8,24)
|
||||
@@ -110,6 +114,13 @@ image/x-bitmap bmp string(0,BM) && !printable(2,14)
|
||||
|
||||
text/html html htm printable(0,1024) +\
|
||||
(string(0,"<HTML>") string(0,"<!DOCTYPE"))
|
||||
application/x-cshell csh printable(0,1024) + string(0,#!) +\
|
||||
(contains(2,80,/csh) contains(2,80,/tcsh))
|
||||
application/x-perl pl printable(0,1024) + string(0,#!) +\
|
||||
contains(2,80,/perl)
|
||||
application/x-shell sh printable(0,1024) + string(0,#!) +\
|
||||
(contains(2,80,/bash) contains(2,80,/ksh)\
|
||||
contains(2,80,/sh) contains(2,80,/zsh))
|
||||
text/plain txt printable(0,1024)
|
||||
|
||||
########################################################################
|
||||
@@ -118,10 +129,28 @@ text/plain txt printable(0,1024)
|
||||
#
|
||||
|
||||
application/vnd.cups-form string(0,"<CUPSFORM>")
|
||||
application/vnd.cups-postscript string(0,<1B>%-12345X)
|
||||
application/vnd.cups-postscript contains(0,128,<1B>%-12345X) + \
|
||||
(contains(9,512,"LANGUAGE=POSTSCRIPT") \
|
||||
contains(9,512,"LANGUAGE = Postscript") \
|
||||
contains(9,512,"LANGUAGE = POSTSCRIPT"))
|
||||
application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
|
||||
application/vnd.cups-raw
|
||||
application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \
|
||||
string(0,<1B>@) \
|
||||
(contains(0,128,<1B>%-12345X) + \
|
||||
(contains(9,512,"LANGUAGE=PCL") \
|
||||
contains(9,512,"LANGUAGE = PCL")))
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Raw print file support...
|
||||
#
|
||||
# Uncomment the following type and the application/octet-stream
|
||||
# filter line in mime.convs to allow raw file printing without the
|
||||
# -oraw option.
|
||||
#
|
||||
|
||||
#application/octet-stream
|
||||
|
||||
#
|
||||
# End of "$Id: mime.types 1152 2000-06-22 18:25:29Z mike $".
|
||||
# End of "$Id: mime.types 1806 2001-06-28 18:01:17Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: printers.conf 1152 2000-06-22 18:25:29Z mike $"
|
||||
# "$Id: printers.conf 1605 2001-03-02 22:34:21Z andy $"
|
||||
#
|
||||
# Sample printer configuration file for the Common UNIX Printing System
|
||||
# (CUPS) scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -92,5 +92,5 @@
|
||||
#</Printer>
|
||||
|
||||
#
|
||||
# End of "$Id: printers.conf 1152 2000-06-22 18:25:29Z mike $".
|
||||
# End of "$Id: printers.conf 1605 2001-03-02 22:34:21Z andy $".
|
||||
#
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 1842 2001-07-17 22:35:52Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Default compiler flags...
|
||||
CFLAGS="${CFLAGS:=}"
|
||||
CXXFLAGS="${CXXFLAGS:=}"
|
||||
LDFLAGS="${LDFLAGS:=}"
|
||||
|
||||
dnl Checks for programs...
|
||||
AC_PROG_AWK
|
||||
AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CPP
|
||||
AC_PROG_INSTALL
|
||||
if test "$INSTALL" = "$ac_install_sh"; then
|
||||
# Use full path to install-sh script...
|
||||
INSTALL="`pwd`/install-sh -c"
|
||||
fi
|
||||
AC_PROG_RANLIB
|
||||
AC_PATH_PROG(AR,ar)
|
||||
AC_PATH_PROG(HTMLDOC,htmldoc)
|
||||
AC_PATH_PROG(MV,mv)
|
||||
AC_PATH_PROG(NROFF,nroff)
|
||||
if test "$NROFF" = ""; then
|
||||
AC_PATH_PROG(GROFF,groff)
|
||||
if test "$GROFF" = ""; then
|
||||
NROFF="echo"
|
||||
else
|
||||
NROFF="$GROFF -T ascii"
|
||||
fi
|
||||
fi
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(SED,sed)
|
||||
|
||||
dnl Architecture checks...
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
dnl Check for libraries...
|
||||
AC_CHECK_LIB(c,crypt,LIBS="$LIBS")
|
||||
if test "$ac_cv_lib_c_crypt" = "no"; then
|
||||
AC_CHECK_LIB(crypt,crypt)
|
||||
fi
|
||||
AC_CHECK_LIB(sec,getspent)
|
||||
AC_CHECK_LIB(gen,getspent)
|
||||
|
||||
LIBMALLOC=""
|
||||
AC_CHECK_LIB(c,mallinfo,LIBS="$LIBS"; AC_DEFINE(HAVE_MALLINFO),LIBS="$LIBS")
|
||||
if test "$ac_cv_lib_c_mallinfo" = "no"; then
|
||||
AC_CHECK_LIB(malloc,mallinfo,
|
||||
LIBS="$LIBS"
|
||||
LIBMALLOC="-lmalloc"
|
||||
AC_DEFINE(HAVE_MALLINFO),
|
||||
LIBS="$LIBS")
|
||||
fi
|
||||
AC_SUBST(LIBMALLOC)
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_DIRENT
|
||||
AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H))
|
||||
AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H))
|
||||
AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
|
||||
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
|
||||
AC_CHECK_HEADER(string.h,AC_DEFINE(HAVE_STRING_H))
|
||||
AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H))
|
||||
AC_CHECK_HEADER(usersec.h,AC_DEFINE(HAVE_USERSEC_H))
|
||||
AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
|
||||
|
||||
dnl Checks for string functions.
|
||||
AC_CHECK_FUNCS(strdup strcasecmp strncasecmp)
|
||||
if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
|
||||
echo Forcing snprintf emulation for HP-UX.
|
||||
else
|
||||
AC_CHECK_FUNCS(snprintf vsnprintf)
|
||||
fi
|
||||
|
||||
dnl Check OS version and use appropriate format string for strftime...
|
||||
AC_MSG_CHECKING(for correct format string to use with strftime)
|
||||
|
||||
case "$uname" in
|
||||
IRIX* | SunOS*)
|
||||
# IRIX and SunOS
|
||||
AC_MSG_RESULT(NULL)
|
||||
AC_DEFINE(CUPS_STRFTIME_FORMAT, NULL)
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
AC_MSG_RESULT("%c")
|
||||
AC_DEFINE(CUPS_STRFTIME_FORMAT, "%c")
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl Checks for mkstemp function.
|
||||
AC_CHECK_FUNCS(mkstemp)
|
||||
|
||||
dnl Checks for vsyslog function.
|
||||
AC_CHECK_FUNCS(vsyslog)
|
||||
|
||||
dnl Checks for signal functions.
|
||||
if test "$uname" != "Linux"; then
|
||||
AC_CHECK_FUNCS(sigset)
|
||||
fi
|
||||
|
||||
AC_CHECK_FUNCS(sigaction)
|
||||
|
||||
dnl Checks for wait functions.
|
||||
AC_CHECK_FUNCS(waitpid)
|
||||
AC_CHECK_FUNCS(wait3)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-common.m4 1842 2001-07-17 22:35:52Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,118 @@
|
||||
dnl
|
||||
dnl "$Id: cups-compiler.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
dnl Clear the debugging and non-shared library options unless the user asks
|
||||
dnl for them...
|
||||
|
||||
OPTIM=""
|
||||
AC_SUBST(OPTIM)
|
||||
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],
|
||||
[if test x$enable_debug = xyes; then
|
||||
OPTIM="-g"
|
||||
fi])
|
||||
|
||||
dnl Update compiler options...
|
||||
if test -n "$GCC"; then
|
||||
CXX="$CC"
|
||||
|
||||
if test -z "$OPTIM"; then
|
||||
if test $uname = HP-UX; then
|
||||
# GCC under HP-UX has bugs with -O2
|
||||
OPTIM="-O1"
|
||||
else
|
||||
OPTIM="-O2"
|
||||
fi
|
||||
fi
|
||||
if test $PICFLAG = 1 -a $uname != AIX; then
|
||||
OPTIM="-fPIC $OPTIM"
|
||||
fi
|
||||
OPTIM="-Wall $OPTIM"
|
||||
else
|
||||
case $uname in
|
||||
AIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O2 -qmaxmem=6000"
|
||||
fi
|
||||
;;
|
||||
HP-UX*)
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="+O2"
|
||||
fi
|
||||
|
||||
CFLAGS="-Ae $CFLAGS"
|
||||
|
||||
OPTIM="+DAportable $OPTIM"
|
||||
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="+z $OPTIM"
|
||||
fi
|
||||
;;
|
||||
IRIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O2"
|
||||
fi
|
||||
|
||||
if test $uversion -ge 62; then
|
||||
OPTIM="$OPTIM -n32 -mips3"
|
||||
fi
|
||||
|
||||
OPTIM="-fullwarn $OPTIM"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-xO4"
|
||||
fi
|
||||
|
||||
OPTIM="$OPTIM -xarch=generic"
|
||||
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-KPIC $OPTIM"
|
||||
fi
|
||||
;;
|
||||
UNIX_SVR*)
|
||||
# UnixWare
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O"
|
||||
fi
|
||||
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-KPIC $OPTIM"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Running some other operating system; inform the user they
|
||||
# should contribute the necessary options to
|
||||
# cups-support@cups.org...
|
||||
echo "Building CUPS with default compiler optimizations; contact"
|
||||
echo "cups-bugs@cups.org with uname and compiler options needed"
|
||||
echo "for your platform, or set the CFLAGS and CXXFLAGS"
|
||||
echo "environment variable before running configure."
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-compiler.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,230 @@
|
||||
dnl
|
||||
dnl "$Id: cups-directories.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl Directory stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_PREFIX_DEFAULT(/)
|
||||
|
||||
AC_ARG_WITH(fontpath, [ --with-fontpath set font path for pstoraster],fontpath="$withval",fontpath="")
|
||||
AC_ARG_WITH(docdir, [ --with-docdir set path for documentation],docdir="$withval",docdir="")
|
||||
AC_ARG_WITH(logdir, [ --with-logdir set path for log files],logdir="$withval",logdir="")
|
||||
AC_ARG_WITH(rcdir, [ --with-rcdir set path for rc scripts],rcdir="$withval",rcdir="")
|
||||
|
||||
dnl Fix "prefix" variable if it hasn't been specified...
|
||||
if test "$prefix" = "NONE"; then
|
||||
prefix="/"
|
||||
fi
|
||||
|
||||
dnl Fix "exec_prefix" variable if it hasn't been specified...
|
||||
if test "$exec_prefix" = "NONE"; then
|
||||
if test "$prefix" = "/"; then
|
||||
exec_prefix="/usr"
|
||||
else
|
||||
exec_prefix="$prefix"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Fix "sharedstatedir" variable if it hasn't been specified...
|
||||
if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then
|
||||
sharedstatedir="/usr/com"
|
||||
fi
|
||||
|
||||
dnl Fix "datadir" variable if it hasn't been specified...
|
||||
if test "$datadir" = "\${prefix}/share"; then
|
||||
if test "$prefix" = "/"; then
|
||||
datadir="/usr/share"
|
||||
else
|
||||
datadir="$prefix/share"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Fix "includedir" variable if it hasn't been specified...
|
||||
if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then
|
||||
includedir="/usr/include"
|
||||
fi
|
||||
|
||||
dnl Fix "localstatedir" variable if it hasn't been specified...
|
||||
if test "$localstatedir" = "\${prefix}/var"; then
|
||||
if test "$prefix" = "/"; then
|
||||
localstatedir="/var"
|
||||
else
|
||||
localstatedir="$prefix/var"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Fix "sysconfdir" variable if it hasn't been specified...
|
||||
if test "$sysconfdir" = "\${prefix}/etc"; then
|
||||
if test "$prefix" = "/"; then
|
||||
sysconfdir="/etc"
|
||||
else
|
||||
sysconfdir="$prefix/etc"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Fix "libdir" variable for IRIX 6.x...
|
||||
if test "$uname" = "IRIX" -a $uversion -ge 62; then
|
||||
libdir="$exec_prefix/lib32"
|
||||
fi
|
||||
|
||||
dnl Fix "fontpath" variable...
|
||||
if test "x$fontpath" = "x"; then
|
||||
fontpath="$datadir/cups/fonts"
|
||||
fi
|
||||
|
||||
dnl Setup init.d locations...
|
||||
if test x$rcdir = x; then
|
||||
case "$uname" in
|
||||
FreeBSD* | OpenBSD*)
|
||||
# FreeBSD and OpenBSD
|
||||
INITDIR=""
|
||||
INITDDIR=""
|
||||
;;
|
||||
|
||||
NetBSD*)
|
||||
# NetBSD
|
||||
INITDIR=""
|
||||
INITDDIR="/etc/rc.d"
|
||||
;;
|
||||
|
||||
Linux*)
|
||||
# Linux seems to choose an init.d directory at random...
|
||||
if test -d /sbin/init.d; then
|
||||
# SuSE
|
||||
INITDIR="/sbin/init.d"
|
||||
INITDDIR=".."
|
||||
else
|
||||
if test -d /etc/rc.d; then
|
||||
# RedHat
|
||||
INITDIR="/etc/rc.d"
|
||||
INITDDIR="../init.d"
|
||||
else
|
||||
# Others
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
OSF1* | HP-UX*)
|
||||
INITDIR="/sbin"
|
||||
INITDDIR="../init.d"
|
||||
;;
|
||||
|
||||
AIX*)
|
||||
INITDIR="/etc/rc.d"
|
||||
INITDDIR=".."
|
||||
;;
|
||||
|
||||
*)
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
;;
|
||||
|
||||
esac
|
||||
else
|
||||
INITDIR=""
|
||||
INITDDIR="$rcdir"
|
||||
fi
|
||||
|
||||
AC_SUBST(INITDIR)
|
||||
AC_SUBST(INITDDIR)
|
||||
|
||||
dnl Setup default locations...
|
||||
CUPS_SERVERROOT='${sysconfdir}/cups'
|
||||
CUPS_REQUESTS='${localstatedir}/spool/cups'
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups")
|
||||
AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$localstatedir/spool/cups")
|
||||
|
||||
if test x$logdir = x; then
|
||||
CUPS_LOGDIR='${localstatedir}/log/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$localstatedir/log/cups")
|
||||
else
|
||||
CUPS_LOGDIR="$logdir"
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$logdir")
|
||||
fi
|
||||
|
||||
dnl See what directory to put server executables...
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
INSTALL_SYSV=""
|
||||
CUPS_SERVERBIN='${exec_prefix}/libexec/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$exec_prefix/libexec/cups")
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
INSTALL_SYSV="install-sysv"
|
||||
CUPS_SERVERBIN='${exec_prefix}/lib/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$exec_prefix/lib/cups")
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(INSTALL_SYSV)
|
||||
AC_SUBST(CUPS_SERVERROOT)
|
||||
AC_SUBST(CUPS_SERVERBIN)
|
||||
AC_SUBST(CUPS_LOGDIR)
|
||||
AC_SUBST(CUPS_REQUESTS)
|
||||
|
||||
dnl Set the CUPS_LOCALE directory...
|
||||
case "$uname" in
|
||||
Linux* | FreeBSD* | NetBSD* | OpenBSD*)
|
||||
CUPS_LOCALEDIR='${datadir}/locale'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$datadir/locale")
|
||||
;;
|
||||
|
||||
OSF1* | AIX*)
|
||||
CUPS_LOCALEDIR='${exec_prefix}/lib/nls/msg'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/lib/nls/msg")
|
||||
;;
|
||||
|
||||
*)
|
||||
# This is the standard System V location...
|
||||
CUPS_LOCALEDIR='${exec_prefix}/lib/locale'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/lib/locale")
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(CUPS_LOCALEDIR)
|
||||
|
||||
dnl Set the CUPS_DATADIR directory...
|
||||
CUPS_DATADIR='${datadir}/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$datadir/cups")
|
||||
AC_SUBST(CUPS_DATADIR)
|
||||
|
||||
dnl Set the CUPS_DOCROOT directory...
|
||||
if test x$docdir = x; then
|
||||
CUPS_DOCROOT='${datadir}/doc/cups'
|
||||
docdir="$datadir/doc/cups"
|
||||
else
|
||||
CUPS_DOCROOT="$docdir"
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$docdir")
|
||||
AC_SUBST(CUPS_DOCROOT)
|
||||
|
||||
dnl Set the CUPS_FONTPATH directory...
|
||||
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$fontpath")
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-directories.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,70 @@
|
||||
dnl
|
||||
dnl "$Id: cups-image.m4 1794 2001-06-27 19:06:46Z mike $"
|
||||
dnl
|
||||
dnl Image library stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
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=""
|
||||
LIBZ=""
|
||||
|
||||
AC_SUBST(LIBJPEG)
|
||||
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"
|
||||
LIBS="$LIBS -ljpeg"))
|
||||
|
||||
AC_CHECK_HEADER(zlib.h,
|
||||
AC_CHECK_LIB(z, gzgets,
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz"))
|
||||
|
||||
dnl PNG library uses math library functions...
|
||||
AC_CHECK_LIB(m, pow)
|
||||
|
||||
AC_CHECK_HEADER(png.h,
|
||||
AC_CHECK_LIB(png, png_set_tRNS_to_alpha,
|
||||
AC_DEFINE(HAVE_LIBPNG)
|
||||
LIBPNG="-lpng -lm"))
|
||||
|
||||
AC_CHECK_HEADER(tiff.h,
|
||||
AC_CHECK_LIB(tiff, TIFFReadScanline,
|
||||
AC_DEFINE(HAVE_LIBTIFF)
|
||||
LIBTIFF="-ltiff"))
|
||||
|
||||
dnl Restore original LIBS settings...
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-image.m4 1794 2001-06-27 19:06:46Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,49 @@
|
||||
dnl
|
||||
dnl "$Id: cups-libtool.m4 1880 2001-08-06 19:37:10Z mike $"
|
||||
dnl
|
||||
dnl Libtool stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_ARG_ENABLE(libtool_unsupported, [ --enable-libtool-unsupported=LIBTOOL_PATH
|
||||
turn on building with libtool (UNSUPPORTED!) [default=no]],
|
||||
[if test x$enable_libtool_unsupported != xno; then
|
||||
LIBTOOL="$enable_libtool_unsupported"
|
||||
enable_shared=no
|
||||
echo "WARNING: libtool is not supported or endorsed by Easy Software Products."
|
||||
echo " WE DO NOT PROVIDE TECHNICAL SUPPORT FOR LIBTOOL PROBLEMS."
|
||||
echo " (even if you have a support contract)"
|
||||
else
|
||||
LIBTOOL=""
|
||||
fi])
|
||||
|
||||
AC_SUBST(LIBTOOL)
|
||||
|
||||
if test x$LIBTOOL != x; then
|
||||
LIBCUPS="libcups.la"
|
||||
LIBCUPSIMAGE="libcupsimage.la"
|
||||
LINKCUPS="../cups/\$(LIBCUPS)"
|
||||
LINKCUPSIMAGE="../filter/\$(LIBCUPSIMAGE)"
|
||||
DSO="\$(CC)"
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-libtool.m4 1880 2001-08-06 19:37:10Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,94 @@
|
||||
dnl
|
||||
dnl "$Id: cups-manpages.m4 1813 2001-06-29 19:14:56Z mike $"
|
||||
dnl
|
||||
dnl Manpage stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Fix "mandir" variable...
|
||||
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD* | AIX*)
|
||||
# *BSD + AIX
|
||||
mandir="/usr/share/man"
|
||||
AMANDIR="/usr/share/man"
|
||||
;;
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
mandir="/usr/share/catman/u_man"
|
||||
AMANDIR="/usr/share/catman/a_man"
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
mandir="/usr/man"
|
||||
AMANDIR="/usr/man"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
AMANDIR="$mandir"
|
||||
fi
|
||||
|
||||
AC_SUBST(AMANDIR)
|
||||
|
||||
dnl Setup manpage extensions...
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
CAT1EXT=0
|
||||
CAT5EXT=0
|
||||
CAT8EXT=0
|
||||
MAN8EXT=8
|
||||
MAN8DIR=8
|
||||
;;
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
CAT1EXT=z
|
||||
CAT5EXT=z
|
||||
CAT8EXT=z
|
||||
MAN8EXT=1m
|
||||
MAN8DIR=1
|
||||
;;
|
||||
SunOS* | HP-UX*)
|
||||
# Solaris and HP-UX
|
||||
CAT1EXT=1
|
||||
CAT5EXT=5
|
||||
CAT8EXT=1m
|
||||
MAN8EXT=1m
|
||||
MAN8DIR=1m
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
CAT1EXT=1
|
||||
CAT5EXT=5
|
||||
CAT8EXT=8
|
||||
MAN8EXT=8
|
||||
MAN8DIR=8
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(CAT1EXT)
|
||||
AC_SUBST(CAT5EXT)
|
||||
AC_SUBST(CAT8EXT)
|
||||
AC_SUBST(MAN8EXT)
|
||||
AC_SUBST(MAN8DIR)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-manpages.m4 1813 2001-06-29 19:14:56Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,36 @@
|
||||
dnl
|
||||
dnl "$Id: cups-network.m4 1794 2001-06-27 19:06:46Z mike $"
|
||||
dnl
|
||||
dnl Networking stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
NETLIBS=""
|
||||
|
||||
if test "$uname" != "IRIX"; then
|
||||
AC_CHECK_LIB(socket,socket,NETLIBS="-lsocket")
|
||||
AC_CHECK_LIB(nsl,gethostbyaddr,NETLIBS="$NETLIBS -lnsl")
|
||||
fi
|
||||
|
||||
AC_SUBST(NETLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-network.m4 1794 2001-06-27 19:06:46Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,47 @@
|
||||
dnl
|
||||
dnl "$Id: cups-openslp.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl OpenSLP configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_ARG_ENABLE(slp, [ --enable-slp turn on SLP support [default=yes]])
|
||||
AC_ARG_WITH(openslp-libs, [ --with-openslp-libs set directory for OpenSLP library],
|
||||
LDFLAGS="-L$withval $LDFLAGS"
|
||||
DSOFLAGS="-L$withval $DSOFLAGS",)
|
||||
AC_ARG_WITH(openslp-includes, [ --with-openslp-includes set directory for OpenSLP includes],
|
||||
CFLAGS="-I$withval $CFLAGS"
|
||||
CXXFLAGS="-I$withval $CXXFLAGS",)
|
||||
|
||||
LIBSLP=""
|
||||
|
||||
if test x$enable_slp != xno; then
|
||||
AC_CHECK_HEADER(slp.h,
|
||||
AC_CHECK_LIB(slp, SLPOpen,
|
||||
AC_DEFINE(HAVE_LIBSLP)
|
||||
LIBSLP="-lslp"))
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBSLP)
|
||||
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-openslp.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,69 @@
|
||||
dnl
|
||||
dnl "$Id: cups-openssl.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl OpenSSL stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_ARG_ENABLE(ssl, [ --enable-ssl turn on SSL/TLS support [default=yes]])
|
||||
AC_ARG_WITH(openssl-libs, [ --with-openssl-libs set directory for OpenSSL library],
|
||||
LDFLAGS="-L$withval $LDFLAGS"
|
||||
DSOFLAGS="-L$withval $DSOFLAGS",)
|
||||
AC_ARG_WITH(openssl-includes, [ --with-openssl-includes set directory for OpenSSL includes],
|
||||
CFLAGS="-I$withval $CFLAGS"
|
||||
CXXFLAGS="-I$withval $CXXFLAGS",)
|
||||
|
||||
SSLLIBS=""
|
||||
|
||||
if test x$enable_ssl != xno; then
|
||||
AC_CHECK_HEADER(openssl/ssl.h,
|
||||
dnl Save the current libraries so the crypto stuff isn't always
|
||||
dnl included...
|
||||
SAVELIBS="$LIBS"
|
||||
|
||||
dnl Some ELF systems can't resolve all the symbols in libcrypto
|
||||
dnl if libcrypto was linked against RSAREF, and fail to link the
|
||||
dnl test program correctly, even though a correct installation
|
||||
dnl of OpenSSL exists. So we test the linking three times in
|
||||
dnl case the RSAREF libraries are needed.
|
||||
|
||||
for libcrypto in \
|
||||
"-lcrypto" \
|
||||
"-lcrypto -lrsaref" \
|
||||
"-lcrypto -lRSAglue -lrsaref"
|
||||
do
|
||||
AC_CHECK_LIB(ssl,SSL_new,
|
||||
[SSLLIBS="-lssl $libcrypto"
|
||||
AC_DEFINE(HAVE_LIBSSL)],,
|
||||
$libcrypto)
|
||||
|
||||
if test "x${SSLLIBS}" != "x"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
LIBS="$SAVELIBS")
|
||||
fi
|
||||
|
||||
AC_SUBST(SSLLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-openssl.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,85 @@
|
||||
dnl
|
||||
dnl "$Id: cups-opsys.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl Operating system stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Get the operating system and version number...
|
||||
uname=`uname`
|
||||
uversion=`uname -r | sed -e '1,$s/[[^0-9]]//g'`
|
||||
if test x$uname = xIRIX64; then
|
||||
uname="IRIX"
|
||||
fi
|
||||
|
||||
dnl Determine the correct username and group for this OS...
|
||||
AC_ARG_WITH(cups-user, [ --with-cups-user set default user for CUPS],
|
||||
CUPS_USER="$withval",
|
||||
AC_MSG_CHECKING(for default print user)
|
||||
if test -f /etc/passwd; then
|
||||
CUPS_USER=""
|
||||
for user in lp lpd guest daemon nobody; do
|
||||
if test "`grep \^${user}: /etc/passwd`" != ""; then
|
||||
CUPS_USER="$user"
|
||||
AC_MSG_RESULT($user)
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
if test x$CUPS_USER = x; then
|
||||
CUPS_USER="${USER:=nobody}"
|
||||
AC_MSG_RESULT(not found, using "$CUPS_USER")
|
||||
fi
|
||||
else
|
||||
CUPS_USER="${USER:=nobody}"
|
||||
AC_MSG_RESULT(no password file, using "$CUPS_USER")
|
||||
fi)
|
||||
|
||||
AC_ARG_WITH(cups-group, [ --with-cups-group set default group for CUPS],
|
||||
CUPS_GROUP="$withval",
|
||||
AC_MSG_CHECKING(for default print group)
|
||||
if test -f /etc/group; then
|
||||
CUPS_GROUP=""
|
||||
for group in sys system root; do
|
||||
if test "`grep \^${group}: /etc/group`" != ""; then
|
||||
CUPS_GROUP="$group"
|
||||
AC_MSG_RESULT($group)
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
if test x$CUPS_GROUP = x; then
|
||||
CUPS_GROUP="${GROUP:=nobody}"
|
||||
AC_MSG_RESULT(not found, using "$CUPS_GROUP")
|
||||
fi
|
||||
else
|
||||
CUPS_GROUP="${GROUP:=nobody}"
|
||||
AC_MSG_RESULT(no group file, using "$CUPS_GROUP")
|
||||
fi)
|
||||
|
||||
AC_SUBST(CUPS_USER)
|
||||
AC_SUBST(CUPS_GROUP)
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_USER, "$CUPS_USER")
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GROUP, "$CUPS_GROUP")
|
||||
|
||||
dnl
|
||||
dnl "$Id: cups-opsys.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
@@ -0,0 +1,59 @@
|
||||
dnl
|
||||
dnl "$Id: cups-pam.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl PAM stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
|
||||
|
||||
dnl Don't use PAM with AIX...
|
||||
if test $uname = AIX; then
|
||||
enable_pam=no
|
||||
fi
|
||||
|
||||
PAMDIR=""
|
||||
PAMLIBS=""
|
||||
|
||||
if test x$enable_pam != xno; then
|
||||
SAVELIBS="$LIBS"
|
||||
AC_CHECK_LIB(dl,dlopen)
|
||||
AC_CHECK_LIB(pam,pam_start)
|
||||
|
||||
if test x$ac_cv_lib_pam_pam_start != xno; then
|
||||
if test x$ac_cv_lib_dl_dlopen != xno; then
|
||||
PAMLIBS="-lpam -ldl"
|
||||
else
|
||||
PAMLIBS="-lpam"
|
||||
fi
|
||||
if test -d /etc/pam.d; then
|
||||
PAMDIR="/etc/pam.d"
|
||||
fi
|
||||
fi
|
||||
|
||||
LIBS="$SAVELIBS"
|
||||
fi
|
||||
|
||||
AC_SUBST(PAMDIR)
|
||||
AC_SUBST(PAMLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-pam.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,136 @@
|
||||
dnl
|
||||
dnl "$Id: cups-sharedlibs.m4 1870 2001-07-24 20:23:03Z mike $"
|
||||
dnl
|
||||
dnl Shared library support for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
dnl copyright law. Distribution and use rights are outlined in the file
|
||||
dnl "LICENSE.txt" which should have been included with this file. If this
|
||||
dnl file is missing or damaged please contact Easy Software Products
|
||||
dnl at:
|
||||
dnl
|
||||
dnl Attn: CUPS Licensing Information
|
||||
dnl Easy Software Products
|
||||
dnl 44141 Airport View Drive, Suite 204
|
||||
dnl Hollywood, Maryland 20636-3111 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9603
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
PICFLAG=1
|
||||
DSOFLAGS="${DSOFLAGS:=}"
|
||||
|
||||
AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [default=yes]])
|
||||
|
||||
if test x$enable_shared != xno; then
|
||||
case "$uname" in
|
||||
SunOS* | UNIX_S*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-h,\$@ -G \$(OPTIM)"
|
||||
;;
|
||||
HP-UX*)
|
||||
LIBCUPS="libcups.sl.2"
|
||||
LIBCUPSIMAGE="libcupsimage.sl.2"
|
||||
DSO="ld"
|
||||
DSOFLAGS="$DSOFLAGS -b -z +h \$@"
|
||||
;;
|
||||
OSF1* | Linux* | IRIX* | FreeBSD* | NetBSD* | OpenBSD*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-soname,\$@ -shared \$(OPTIM)"
|
||||
;;
|
||||
AIX*)
|
||||
LIBCUPS="libcups_s.a"
|
||||
LIBCUPSIMAGE="libcupsimage_s.a"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-bexpall,-bM:SRE,-bnoentry"
|
||||
;;
|
||||
*)
|
||||
echo "Warning: shared libraries may not be supported. Trying -shared"
|
||||
echo " option with compiler."
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-soname,\$@ -shared \$(OPTIM)"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
PICFLAG=0
|
||||
LIBCUPS="libcups.a"
|
||||
LIBCUPSIMAGE="libcupsimage.a"
|
||||
DSO=":"
|
||||
fi
|
||||
|
||||
AC_SUBST(DSO)
|
||||
AC_SUBST(DSOFLAGS)
|
||||
AC_SUBST(LIBCUPS)
|
||||
AC_SUBST(LIBCUPSIMAGE)
|
||||
|
||||
LDFLAGS="-L../cups -L../filter $LDFLAGS"
|
||||
|
||||
if test x$enable_shared = xno; then
|
||||
LINKCUPS="-lcups"
|
||||
LINKCUPSIMAGE="-lcupsimage"
|
||||
LINKCUPS="$LINKCUPS \$(SSLLIBS)"
|
||||
else
|
||||
if test $uname = AIX; then
|
||||
|
||||
LINKCUPS="-lcups_s"
|
||||
LINKCUPSIMAGE="-lcupsimage_s"
|
||||
else
|
||||
LINKCUPS="-lcups"
|
||||
LINKCUPSIMAGE="-lcupsimage"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(LINKCUPS)
|
||||
AC_SUBST(LINKCUPSIMAGE)
|
||||
|
||||
dnl Update libraries for DSOs...
|
||||
if test "$DSO" != ":"; then
|
||||
# When using DSOs the image libraries are linked to libcupsimage.so
|
||||
# rather than to the executables. This makes things smaller if you
|
||||
# are using any static libraries, and it also allows us to distribute
|
||||
# a single DSO rather than a bunch...
|
||||
DSOLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
|
||||
IMGLIBS=""
|
||||
|
||||
# The *BSD, HP-UX, and Solaris run-time linkers need help when
|
||||
# deciding where to find a DSO. Add linker options to tell them
|
||||
# where to find the DSO (usually in /usr/lib... duh!)
|
||||
case $uname in
|
||||
HP-UX*)
|
||||
# HP-UX
|
||||
DSOFLAGS="+b $libdir +fb $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,+b,$libdir,+fb"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
DSOFLAGS="-R$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -R$libdir"
|
||||
;;
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,-R$libdir"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
DSOLIBS=""
|
||||
IMGLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
|
||||
fi
|
||||
|
||||
AC_SUBST(DSOLIBS)
|
||||
AC_SUBST(IMGLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-sharedlibs.m4 1870 2001-07-24 20:23:03Z mike $".
|
||||
dnl
|
||||
+75
-3
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* @configure_input@
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -19,7 +19,7 @@
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* Voice: (301) 373-9600
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*/
|
||||
@@ -28,7 +28,16 @@
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v1.1"
|
||||
#define CUPS_SVERSION "CUPS v1.1.10"
|
||||
|
||||
|
||||
/*
|
||||
* Default user and group...
|
||||
*/
|
||||
|
||||
#define CUPS_DEFAULT_USER "lp"
|
||||
#define CUPS_DEFAULT_GROUP "sys"
|
||||
|
||||
|
||||
/*
|
||||
* Where are files stored?
|
||||
@@ -41,6 +50,14 @@
|
||||
#define CUPS_REQUESTS "/var/spool/cups"
|
||||
#define CUPS_LOGDIR "/var/logs/cups"
|
||||
#define CUPS_DATADIR "/usr/share/cups"
|
||||
#define CUPS_FONTPATH "/usr/share/cups/fonts"
|
||||
|
||||
|
||||
/*
|
||||
* What is the format string for strftime?
|
||||
*/
|
||||
|
||||
#define CUPS_STRFTIME_FORMAT NULL
|
||||
|
||||
|
||||
/*
|
||||
@@ -52,12 +69,14 @@
|
||||
#undef HAVE_LIBJPEG
|
||||
#undef HAVE_LIBTIFF
|
||||
|
||||
|
||||
/*
|
||||
* Does this machine store words in big-endian (MSB-first) order?
|
||||
*/
|
||||
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
|
||||
/*
|
||||
* Which directory functions and headers do we use?
|
||||
*/
|
||||
@@ -67,6 +86,7 @@
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
#undef HAVE_NDIR_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have PAM stuff?
|
||||
*/
|
||||
@@ -75,18 +95,29 @@
|
||||
#define HAVE_LIBPAM 0
|
||||
#endif /* !HAVE_LIBPAM */
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <shadow.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SHADOW_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <crypt.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_CRYPT_H
|
||||
|
||||
|
||||
/*
|
||||
* Use <string.h>, <strings.h>, or both?
|
||||
*/
|
||||
|
||||
#undef HAVE_STRING_H
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the strXXX() functions?
|
||||
*/
|
||||
@@ -95,12 +126,14 @@
|
||||
#undef HAVE_STRCASECMP
|
||||
#undef HAVE_STRNCASECMP
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the vsyslog() function?
|
||||
*/
|
||||
|
||||
#undef HAVE_VSYSLOG
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the (v)snprintf() functions?
|
||||
*/
|
||||
@@ -108,6 +141,7 @@
|
||||
#undef HAVE_SNPRINTF
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
|
||||
/*
|
||||
* What signal functions to use?
|
||||
*/
|
||||
@@ -115,6 +149,7 @@
|
||||
#undef HAVE_SIGSET
|
||||
#undef HAVE_SIGACTION
|
||||
|
||||
|
||||
/*
|
||||
* What wait functions to use?
|
||||
*/
|
||||
@@ -122,6 +157,43 @@
|
||||
#undef HAVE_WAITPID
|
||||
#undef HAVE_WAIT3
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the mallinfo function and malloc.h?
|
||||
*/
|
||||
|
||||
#undef HAVE_MALLINFO
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the OpenSSL library?
|
||||
*/
|
||||
|
||||
#undef HAVE_LIBSSL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the OpenSLP library?
|
||||
*/
|
||||
|
||||
#undef HAVE_LIBSLP
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <sys/ioctl.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SYS_IOCTL_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have mkstemp()?
|
||||
*/
|
||||
|
||||
#undef HAVE_MKSTEMP
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+14
-439
@@ -3,7 +3,7 @@ dnl "$Id$"
|
||||
dnl
|
||||
dnl Configuration script for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Easy Software Products and are protected by Federal
|
||||
@@ -23,448 +23,23 @@ dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
AC_INIT(cups/cups.h)
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
AC_PREFIX_DEFAULT(/)
|
||||
|
||||
dnl Get the operating system and version number...
|
||||
sinclude(config-scripts/cups-opsys.m4)
|
||||
sinclude(config-scripts/cups-common.m4)
|
||||
sinclude(config-scripts/cups-directories.m4)
|
||||
sinclude(config-scripts/cups-manpages.m4)
|
||||
|
||||
uname=`uname`
|
||||
uversion=`uname -r | sed -e '1,$s/[[^0-9]]//g'`
|
||||
if test "$uname" = "IRIX64"; then
|
||||
uname="IRIX"
|
||||
fi
|
||||
sinclude(config-scripts/cups-sharedlibs.m4)
|
||||
sinclude(config-scripts/cups-libtool.m4)
|
||||
sinclude(config-scripts/cups-compiler.m4)
|
||||
|
||||
dnl Clear the debugging and non-shared library options unless the user asks
|
||||
dnl for them...
|
||||
sinclude(config-scripts/cups-image.m4)
|
||||
sinclude(config-scripts/cups-network.m4)
|
||||
sinclude(config-scripts/cups-openslp.m4)
|
||||
sinclude(config-scripts/cups-openssl.m4)
|
||||
sinclude(config-scripts/cups-pam.m4)
|
||||
|
||||
OPTIM=""
|
||||
AC_SUBST(OPTIM)
|
||||
PICFLAG=1
|
||||
CFLAGS="${CFLAGS:=}"
|
||||
CXXFLAGS="${CXXFLAGS:=}"
|
||||
|
||||
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, [ --enable-shared turn on shared libraries [default=yes]])
|
||||
AC_ARG_ENABLE(libtool_unsupported, [ --enable-libtool-unsupported=LIBTOOL_PATH
|
||||
turn on building with libtool (UNSUPPORTED!) [default=no]],[if eval "test x$enable_libtool_unsupported != xno"; then
|
||||
LIBTOOL="$enable_libtool_unsupported"
|
||||
enable_shared=no
|
||||
echo "WARNING: libtool is not supported or endorsed by Easy Software Products."
|
||||
echo " WE DO NOT PROVIDE TECHNICAL SUPPORT FOR LIBTOOL PROBLEMS."
|
||||
echo " (even if you have a support contract)"
|
||||
else
|
||||
LIBTOOL=""
|
||||
fi])
|
||||
|
||||
if test "$enable_shared" != "no"; then
|
||||
case "$uname" in
|
||||
SunOS* | UNIX_S*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC) -Wl,-h,\$@ -G \$(OPTIM) -o"
|
||||
;;
|
||||
HP-UX*)
|
||||
LIBCUPS="libcups.sl.2"
|
||||
LIBCUPSIMAGE="libcupsimage.sl.2"
|
||||
DSO="ld -b -z +h \$@ -o"
|
||||
;;
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
|
||||
;;
|
||||
OSF1* | Linux*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
|
||||
;;
|
||||
IRIX*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC) -soname \$@ -shared \$(OPTIM) -o"
|
||||
;;
|
||||
*)
|
||||
echo "Warning: shared libraries may not be supported. Trying -shared"
|
||||
echo " option with compiler."
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
PICFLAG=0
|
||||
LIBCUPS="libcups.a"
|
||||
LIBCUPSIMAGE="libcupsimage.a"
|
||||
DSO=":"
|
||||
fi
|
||||
|
||||
if test "$LIBTOOL" != ""; then
|
||||
LIBCUPS="libcups.la"
|
||||
LIBCUPSIMAGE="libcupsimage.la"
|
||||
LINKCUPS="../cups/\$(LIBCUPS)"
|
||||
LINKCUPSIMAGE="../filter/\$(LIBCUPSIMAGE)"
|
||||
DSO=":"
|
||||
else
|
||||
LINKCUPS="-L../cups -lcups"
|
||||
LINKCUPSIMAGE="-L../filter -lcupsimage"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
|
||||
|
||||
dnl Checks for programs...
|
||||
AC_PROG_AWK
|
||||
AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CPP
|
||||
AC_PROG_RANLIB
|
||||
AC_PATH_PROG(AR,ar)
|
||||
AC_PATH_PROG(CHMOD,chmod)
|
||||
AC_PATH_PROG(CP,cp)
|
||||
AC_PATH_PROG(MV,mv)
|
||||
AC_PATH_PROG(NROFF,nroff)
|
||||
if test "$NROFF" = ""; then
|
||||
AC_PATH_PROG(GROFF,groff)
|
||||
if test "$GROFF" = ""; then
|
||||
NROFF="echo"
|
||||
else
|
||||
NROFF="$GROFF -T ascii"
|
||||
fi
|
||||
fi
|
||||
AC_PATH_PROG(HTMLDOC,htmldoc)
|
||||
AC_PATH_PROG(MKDIR,mkdir)
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(SED,sed)
|
||||
|
||||
dnl Architecture checks...
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
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
|
||||
OLDLIBS="$LIBS"
|
||||
AC_CHECK_LIB(dl,dlopen)
|
||||
AC_CHECK_LIB(pam,pam_start)
|
||||
if test "$ac_cv_lib_pam_pam_start" != "no"; then
|
||||
PAMDIR="/etc/pam.d"
|
||||
else
|
||||
PAMDIR=""
|
||||
LIBS="$OLDLIBS"
|
||||
fi
|
||||
AC_SUBST(PAMDIR)
|
||||
fi
|
||||
|
||||
NETLIBS=""
|
||||
AC_SUBST(NETLIBS)
|
||||
AC_CHECK_LIB(socket,socket,
|
||||
if test "$uname" != "IRIX"; then
|
||||
NETLIBS="-lsocket"
|
||||
else
|
||||
echo "Not using -lsocket since you are running IRIX."
|
||||
fi)
|
||||
AC_CHECK_LIB(nsl,gethostbyaddr,
|
||||
if test "$uname" != "IRIX"; then
|
||||
NETLIBS="$NETLIBS -lnsl"
|
||||
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=""
|
||||
LIBZ=""
|
||||
|
||||
AC_SUBST(LIBJPEG)
|
||||
AC_SUBST(LIBPNG)
|
||||
AC_SUBST(LIBTIFF)
|
||||
AC_SUBST(LIBZ)
|
||||
|
||||
AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
|
||||
AC_DEFINE(HAVE_LIBJPEG)
|
||||
LIBJPEG="-ljpeg"
|
||||
LIBS="$LIBS -ljpeg")
|
||||
|
||||
AC_CHECK_LIB(z, gzgets,
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz")
|
||||
|
||||
dnl PNG library uses math library functions...
|
||||
AC_CHECK_LIB(m, pow)
|
||||
|
||||
AC_CHECK_LIB(png, png_set_tRNS_to_alpha,
|
||||
AC_DEFINE(HAVE_LIBPNG)
|
||||
LIBPNG="-lpng")
|
||||
|
||||
AC_CHECK_LIB(tiff, TIFFReadScanline,
|
||||
AC_DEFINE(HAVE_LIBTIFF)
|
||||
LIBTIFF="-ltiff")
|
||||
|
||||
dnl Restore original LIBS settings...
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_DIRENT
|
||||
AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
|
||||
|
||||
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 vsyslog function.
|
||||
AC_CHECK_FUNCS(vsyslog)
|
||||
|
||||
dnl Checks for signal functions.
|
||||
if test "$uname" != "Linux"; then
|
||||
AC_CHECK_FUNCS(sigset)
|
||||
fi
|
||||
|
||||
AC_CHECK_FUNCS(sigaction)
|
||||
|
||||
dnl Checks for wait functions.
|
||||
AC_CHECK_FUNCS(waitpid)
|
||||
AC_CHECK_FUNCS(wait3)
|
||||
|
||||
dnl Update compiler options...
|
||||
if test -n "$GCC"; then
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O2 -g3"
|
||||
fi
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-fPIC $OPTIM"
|
||||
fi
|
||||
OPTIM="-Wall $OPTIM"
|
||||
else
|
||||
case $uname in
|
||||
IRIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O2 -g3"
|
||||
fi
|
||||
if test $uversion -ge 62; then
|
||||
OPTIM="$OPTIM -n32 -mips3"
|
||||
fi
|
||||
OPTIM="-fullwarn $OPTIM"
|
||||
;;
|
||||
HP-UX*)
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="+O2 -g3"
|
||||
fi
|
||||
OPTIM="-Ae $OPTIM"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
if test -z "$OPTIM"; then
|
||||
OPTIM="-O -g3"
|
||||
fi
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-KPIC $OPTIM"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Running some other operating system; inform the user they
|
||||
# should contribute the necessary options to
|
||||
# cups-support@cups.org...
|
||||
echo "Building CUPS with default compiler optimizations; contact"
|
||||
echo "cups-support@cups.org with uname and compiler options needed"
|
||||
echo "for your platform, or set the CFLAGS environment variable"
|
||||
echo "before running configure."
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if test "$DSO" != ":"; then
|
||||
# When using DSOs the image libraries are linked to libcupsimage.so
|
||||
# rather than to the executables. This makes things smaller if you
|
||||
# are using any static libraries, and it also allows us to distribute
|
||||
# a single DSO rather than a bunch...
|
||||
DSOLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
|
||||
IMGLIBS=""
|
||||
|
||||
# The *BSD, HP-UX, and Solaris run-time linkers need help when
|
||||
# deciding where to find a DSO. Add linker options to tell them
|
||||
# where to find the DSO (usually in /usr/lib... duh!)
|
||||
case $uname in
|
||||
HP-UX*)
|
||||
LDFLAGS="$LDFLAGS -Wl,+b,$libdir,+fb"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
LDFLAGS="$LDFLAGS -R$libdir"
|
||||
;;
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
LDFLAGS="$LDFLAGS -Wl,-R$libdir"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
DSOLIBS=""
|
||||
IMGLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
|
||||
fi
|
||||
|
||||
AC_SUBST(DSO)
|
||||
AC_SUBST(DSOLIBS)
|
||||
AC_SUBST(IMGLIBS)
|
||||
AC_SUBST(LIBCUPS)
|
||||
AC_SUBST(LIBCUPSIMAGE)
|
||||
AC_SUBST(LIBTOOL)
|
||||
AC_SUBST(LINKCUPS)
|
||||
AC_SUBST(LINKCUPSIMAGE)
|
||||
|
||||
dnl Fix "prefix" variable if it hasn't been specified...
|
||||
if test "$prefix" = "NONE"; then
|
||||
prefix="/"
|
||||
fi
|
||||
|
||||
dnl Fix "exec_prefix" variable if it hasn't been specified...
|
||||
if test "$exec_prefix" = "NONE" -a "$prefix" = "/"; then
|
||||
exec_prefix="/usr"
|
||||
fi
|
||||
|
||||
dnl Fix "sharedstatedir" variable if it hasn't been specified...
|
||||
if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then
|
||||
sharedstatedir="/usr/com"
|
||||
fi
|
||||
|
||||
dnl Fix "infodir" variable if it hasn't been specified...
|
||||
if test "$infodir" = "\${prefix}/info" -a "$prefix" = "/"; then
|
||||
infodir="/usr/info"
|
||||
fi
|
||||
|
||||
dnl Fix "datadir" variable if it hasn't been specified...
|
||||
if test "$datadir" = "\${prefix}/share" -a "$prefix" = "/"; then
|
||||
datadir="/usr/share"
|
||||
fi
|
||||
|
||||
dnl Fix "includedir" variable if it hasn't been specified...
|
||||
if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then
|
||||
includedir="/usr/include"
|
||||
fi
|
||||
|
||||
dnl Fix "localstatedir" variable if it hasn't been specified...
|
||||
if test "$localstatedir" = "\${prefix}/var" -a "$prefix" = "/"; then
|
||||
localstatedir="/var"
|
||||
fi
|
||||
|
||||
dnl Fix "sysconfdir" variable if it hasn't been specified...
|
||||
if test "$sysconfdir" = "\${prefix}/etc" -a "$prefix" = "/"; then
|
||||
sysconfdir="/etc"
|
||||
fi
|
||||
|
||||
dnl Fix "libdir" variable for IRIX 6.x...
|
||||
if test "$uname" = "IRIX" -a $uversion -ge 62; then
|
||||
libdir="$exec_prefix/lib32"
|
||||
fi
|
||||
|
||||
dnl Fix "mandir" variable...
|
||||
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
|
||||
if test "$uname" = "IRIX"; then
|
||||
mandir="/usr/share/catman"
|
||||
else
|
||||
mandir="/usr/man"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Setup manpage extensions...
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
CAT1EXT=0
|
||||
CAT5EXT=0
|
||||
CAT8EXT=0
|
||||
;;
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
CAT1EXT=z
|
||||
CAT5EXT=z
|
||||
CAT8EXT=z
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
CAT1EXT=1
|
||||
CAT5EXT=5
|
||||
CAT8EXT=8
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(CAT1EXT)
|
||||
AC_SUBST(CAT5EXT)
|
||||
AC_SUBST(CAT8EXT)
|
||||
|
||||
dnl Setup default locations...
|
||||
CUPS_SERVERROOT='${prefix}/etc/cups'
|
||||
CUPS_LOGDIR='${prefix}/var/log/cups'
|
||||
CUPS_REQUESTS='${prefix}/var/spool/cups'
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$prefix/etc/cups")
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$prefix/var/log/cups")
|
||||
AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$prefix/var/spool/cups")
|
||||
|
||||
dnl See what directory to put server executables...
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
INSTALL_SYSV=""
|
||||
CUPS_SERVERBIN='${exec_prefix}/libexec/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$exec_prefix/libexec/cups")
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
INSTALL_SYSV="install-sysv"
|
||||
CUPS_SERVERBIN='${exec_prefix}/lib/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$exec_prefix/lib/cups")
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(INSTALL_SYSV)
|
||||
AC_SUBST(CUPS_SERVERROOT)
|
||||
AC_SUBST(CUPS_SERVERBIN)
|
||||
AC_SUBST(CUPS_LOGDIR)
|
||||
AC_SUBST(CUPS_REQUESTS)
|
||||
|
||||
dnl Set the CUPS_LOCALE directory...
|
||||
case "$uname" in
|
||||
Linux* | FreeBSD* | NetBSD* | OpenBSD*)
|
||||
CUPS_LOCALEDIR='${exec_prefix}/share/locale'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/share/locale")
|
||||
;;
|
||||
|
||||
OSF1*)
|
||||
CUPS_LOCALEDIR='${exec_prefix}/lib/nls/msg'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/lib/nls/msg")
|
||||
;;
|
||||
|
||||
*)
|
||||
# This is the standard System V location...
|
||||
CUPS_LOCALEDIR='${exec_prefix}/lib/locale'
|
||||
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/lib/locale")
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(CUPS_LOCALEDIR)
|
||||
|
||||
dnl Set the CUPS_DATADIR directory...
|
||||
CUPS_DATADIR='${exec_prefix}/share/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$exec_prefix/share/cups")
|
||||
AC_SUBST(CUPS_DATADIR)
|
||||
|
||||
dnl Set the CUPS_DOCROOT directory...
|
||||
CUPS_DOCROOT='${exec_prefix}/share/doc/cups'
|
||||
AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$exec_prefix/share/doc/cups")
|
||||
AC_SUBST(CUPS_DOCROOT)
|
||||
|
||||
AC_OUTPUT(Makedefs cups.sh)
|
||||
AC_OUTPUT(Makedefs cups.list cups.sh)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
|
||||
-99
@@ -15,105 +15,6 @@ Package=<4>
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "cupsd"=.\scheduler\cupsd.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name cups
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "hpgltops"=.\filter\hpgltops.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name cups
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "image"=.\filter\image.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "pstops"=.\filter\pstops.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "testmime"=.\cups\testmime.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name cups
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "testppd"=.\cups\testppd.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name cups
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "texttops"=.\filter\texttops.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name cups
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
|
||||
-506
@@ -1,506 +0,0 @@
|
||||
#
|
||||
# "$Id: cups.list 1202 2000-07-07 21:25:17Z mike $"
|
||||
#
|
||||
# ESP Package Manager (EPM) file list for the Common UNIX Printing
|
||||
# System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 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-2000 by Easy Software Products, All Rights Reserved.
|
||||
%vendor Easy Software Products
|
||||
%license LICENSE.txt
|
||||
%readme README.txt
|
||||
%version 1.1
|
||||
%incompat printpro
|
||||
|
||||
%system all
|
||||
# Server files
|
||||
f 0555 root sys $SBINDIR/cupsd scheduler/cupsd
|
||||
|
||||
d 0555 root sys $SERVERBIN -
|
||||
d 0555 root sys $SERVERBIN/backend -
|
||||
f 0555 root sys $SERVERBIN/backend/ipp backend/ipp
|
||||
l 0555 root sys $SERVERBIN/backend/http ipp
|
||||
f 0555 root sys $SERVERBIN/backend/lpd backend/lpd
|
||||
f 0555 root sys $SERVERBIN/backend/parallel backend/parallel
|
||||
f 0555 root sys $SERVERBIN/backend/serial backend/serial
|
||||
f 0555 root sys $SERVERBIN/backend/socket backend/socket
|
||||
f 0555 root sys $SERVERBIN/backend/usb backend/usb
|
||||
d 0555 root sys $SERVERBIN/cgi-bin -
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/admin.cgi cgi-bin/admin.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/classes.cgi cgi-bin/classes.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/jobs.cgi cgi-bin/jobs.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/printers.cgi cgi-bin/printers.cgi
|
||||
d 0555 root sys $SERVERBIN/daemon -
|
||||
f 0555 root sys $SERVERBIN/daemon/cups-lpd scheduler/cups-lpd
|
||||
f 0555 root sys $SERVERBIN/daemon/cups-polld scheduler/cups-polld
|
||||
d 0555 root sys $SERVERBIN/filter -
|
||||
f 0555 root sys $SERVERBIN/filter/pstoraster pstoraster/pstoraster
|
||||
f 0555 root sys $SERVERBIN/filter/pdftops pdftops/pdftops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetops filter/imagetops
|
||||
f 0555 root sys $SERVERBIN/filter/pstops filter/pstops
|
||||
f 0555 root sys $SERVERBIN/filter/texttops filter/texttops
|
||||
f 0555 root sys $SERVERBIN/filter/rastertoepson filter/rastertoepson
|
||||
f 0555 root sys $SERVERBIN/filter/rastertohp filter/rastertohp
|
||||
f 0555 root sys $SERVERBIN/filter/hpgltops filter/hpgltops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetoraster filter/imagetoraster
|
||||
|
||||
# Admin commands
|
||||
l 0555 root sys $BINDIR/disable $SBINDIR/accept
|
||||
l 0555 root sys $BINDIR/enable $SBINDIR/accept
|
||||
l 0555 root sys $LIBDIR/accept $SBINDIR/accept
|
||||
l 0555 root sys $LIBDIR/lpadmin $SBINDIR/lpadmin
|
||||
l 0555 root sys $LIBDIR/reject accept
|
||||
f 0555 root sys $SBINDIR/accept systemv/accept
|
||||
f 0555 root sys $SBINDIR/lpadmin systemv/lpadmin
|
||||
f 0555 root sys $SBINDIR/lpc berkeley/lpc
|
||||
f 0555 root sys $SBINDIR/lpinfo systemv/lpinfo
|
||||
f 0555 root sys $SBINDIR/lpmove systemv/lpmove
|
||||
l 0555 root sys $SBINDIR/reject accept
|
||||
|
||||
%system irix
|
||||
l 0555 root sys /usr/etc/lpc $SBINDIR/lpc
|
||||
%system all
|
||||
|
||||
# User commands
|
||||
f 0555 root sys $BINDIR/cancel systemv/cancel
|
||||
f 0555 root sys $BINDIR/lp systemv/lp
|
||||
f 0555 root sys $BINDIR/lpoptions systemv/lpoptions
|
||||
f 4555 root sys $BINDIR/lppasswd systemv/lppasswd
|
||||
f 0555 root sys $BINDIR/lpq berkeley/lpq
|
||||
f 0555 root sys $BINDIR/lpr berkeley/lpr
|
||||
f 0555 root sys $BINDIR/lprm berkeley/lprm
|
||||
f 0555 root sys $BINDIR/lpstat systemv/lpstat
|
||||
|
||||
%system irix
|
||||
l 0555 root sys /usr/bsd/lpq $BINDIR/lpq
|
||||
l 0555 root sys /usr/bsd/lpr $BINDIR/lpr
|
||||
l 0555 root sys /usr/bsd/lprm $BINDIR/lprm
|
||||
%system all
|
||||
|
||||
# DSOs
|
||||
%system hpux
|
||||
f 0555 root sys $LIBDIR/libcups.sl.2 cups/libcups.sl.2
|
||||
l 0555 root sys $LIBDIR/libcups.sl libcups.sl.2
|
||||
f 0555 root sys $LIBDIR/libcupsimage.sl.2 filter/libcupsimage.sl.2
|
||||
l 0555 root sys $LIBDIR/libcupsimage.sl libcupsimage.sl.2
|
||||
%system !hpux
|
||||
f 0555 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2
|
||||
l 0555 root sys $LIBDIR/libcups.so libcups.so.2
|
||||
f 0555 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2
|
||||
l 0555 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
|
||||
%system all
|
||||
|
||||
# Directories
|
||||
d 0755 root sys $LOGDIR -
|
||||
d 0755 root sys $REQUESTS -
|
||||
|
||||
# Data files
|
||||
f 0444 root sys $LOCALEDIR/C/cups_C locale/C/cups_C
|
||||
f 0444 root sys $LOCALEDIR/de/cups_de locale/de/cups_de
|
||||
f 0444 root sys $LOCALEDIR/en/cups_en locale/en/cups_en
|
||||
f 0444 root sys $LOCALEDIR/es/cups_es locale/es/cups_es
|
||||
f 0444 root sys $LOCALEDIR/fr/cups_fr locale/fr/cups_fr
|
||||
f 0444 root sys $LOCALEDIR/it/cups_it locale/it/cups_it
|
||||
|
||||
d 0555 root sys $DATADIR -
|
||||
|
||||
d 0555 root sys $DATADIR/banners -
|
||||
f 0444 root sys $DATADIR/banners/classified data/classified
|
||||
f 0444 root sys $DATADIR/banners/confidential data/confidential
|
||||
f 0444 root sys $DATADIR/banners/secret data/secret
|
||||
f 0444 root sys $DATADIR/banners/standard data/standard
|
||||
f 0444 root sys $DATADIR/banners/topsecret data/topsecret
|
||||
f 0444 root sys $DATADIR/banners/unclassified data/unclassified
|
||||
|
||||
d 0555 root sys $DATADIR/charsets -
|
||||
f 0444 root sys $DATADIR/charsets/windows-874 data/windows-874
|
||||
f 0444 root sys $DATADIR/charsets/windows-1250 data/windows-1250
|
||||
f 0444 root sys $DATADIR/charsets/windows-1251 data/windows-1251
|
||||
f 0444 root sys $DATADIR/charsets/windows-1252 data/windows-1252
|
||||
f 0444 root sys $DATADIR/charsets/windows-1253 data/windows-1253
|
||||
f 0444 root sys $DATADIR/charsets/windows-1254 data/windows-1254
|
||||
f 0444 root sys $DATADIR/charsets/windows-1255 data/windows-1255
|
||||
f 0444 root sys $DATADIR/charsets/windows-1256 data/windows-1256
|
||||
f 0444 root sys $DATADIR/charsets/windows-1257 data/windows-1257
|
||||
f 0444 root sys $DATADIR/charsets/windows-1258 data/windows-1258
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-1 data/iso-8859-1
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-14 data/iso-8859-14
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-15 data/iso-8859-15
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-2 data/iso-8859-2
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-3 data/iso-8859-3
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-4 data/iso-8859-4
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-5 data/iso-8859-5
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-6 data/iso-8859-6
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-7 data/iso-8859-7
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-8 data/iso-8859-8
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-9 data/iso-8859-9
|
||||
f 0444 root sys $DATADIR/charsets/utf-8 data/utf-8
|
||||
|
||||
d 0555 root sys $DATADIR/data -
|
||||
f 0444 root sys $DATADIR/data/HPGLprolog data/HPGLprolog
|
||||
f 0444 root sys $DATADIR/data/psglyphs data/psglyphs
|
||||
f 0444 root sys $DATADIR/data/testprint.ps data/testprint.ps
|
||||
|
||||
d 0555 root sys $DATADIR/fonts -
|
||||
f 0444 root sys $DATADIR/fonts/AvantGarde-Book fonts/AvantGarde-Book
|
||||
f 0444 root sys $DATADIR/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
|
||||
f 0444 root sys $DATADIR/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
|
||||
f 0444 root sys $DATADIR/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
|
||||
f 0444 root sys $DATADIR/fonts/Bookman-Demi fonts/Bookman-Demi
|
||||
f 0444 root sys $DATADIR/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
|
||||
f 0444 root sys $DATADIR/fonts/Bookman-Light fonts/Bookman-Light
|
||||
f 0444 root sys $DATADIR/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
|
||||
f 0444 root sys $DATADIR/fonts/Charter-Bold fonts/Charter-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Charter-BoldItalic fonts/Charter-BoldItalic
|
||||
f 0444 root sys $DATADIR/fonts/Charter-Italic fonts/Charter-Italic
|
||||
f 0444 root sys $DATADIR/fonts/Charter-Roman fonts/Charter-Roman
|
||||
f 0444 root sys $DATADIR/fonts/Courier fonts/Courier
|
||||
f 0444 root sys $DATADIR/fonts/Courier-Bold fonts/Courier-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
|
||||
f 0444 root sys $DATADIR/fonts/Courier-Oblique fonts/Courier-Oblique
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica fonts/Helvetica
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Bold fonts/Helvetica-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
|
||||
f 0444 root sys $DATADIR/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
|
||||
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
|
||||
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
|
||||
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
|
||||
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
|
||||
f 0444 root sys $DATADIR/fonts/Palatino-Bold fonts/Palatino-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
|
||||
f 0444 root sys $DATADIR/fonts/Palatino-Italic fonts/Palatino-Italic
|
||||
f 0444 root sys $DATADIR/fonts/Palatino-Roman fonts/Palatino-Roman
|
||||
f 0444 root sys $DATADIR/fonts/Symbol fonts/Symbol
|
||||
f 0444 root sys $DATADIR/fonts/Times-Bold fonts/Times-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Times-BoldItalic fonts/Times-BoldItalic
|
||||
f 0444 root sys $DATADIR/fonts/Times-Italic fonts/Times-Italic
|
||||
f 0444 root sys $DATADIR/fonts/Times-Roman fonts/Times-Roman
|
||||
f 0444 root sys $DATADIR/fonts/Utopia-Bold fonts/Utopia-Bold
|
||||
f 0444 root sys $DATADIR/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
|
||||
f 0444 root sys $DATADIR/fonts/Utopia-Italic fonts/Utopia-Italic
|
||||
f 0444 root sys $DATADIR/fonts/Utopia-Regular fonts/Utopia-Regular
|
||||
f 0444 root sys $DATADIR/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
|
||||
f 0444 root sys $DATADIR/fonts/ZapfDingbats fonts/ZapfDingbats
|
||||
|
||||
d 0555 root sys $DATADIR/pstoraster -
|
||||
f 0444 root sys $DATADIR/pstoraster/Fontmap pstoraster/Fontmap
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_cff.ps pstoraster/gs_cff.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_dpnxt.ps pstoraster/gs_dpnxt.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_dps.ps pstoraster/gs_dps.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_dps2.ps pstoraster/gs_dps2.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_epsf.ps pstoraster/gs_epsf.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_init.ps pstoraster/gs_init.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_ll3.ps pstoraster/gs_ll3.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_res.ps pstoraster/gs_res.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_typ32.ps pstoraster/gs_typ32.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
|
||||
f 0444 root sys $DATADIR/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
|
||||
|
||||
d 0555 root sys $DATADIR/model -
|
||||
f 0444 root sys $DATADIR/model/deskjet.ppd ppd/deskjet.ppd
|
||||
f 0444 root sys $DATADIR/model/laserjet.ppd ppd/laserjet.ppd
|
||||
f 0444 root sys $DATADIR/model/epson9.ppd ppd/epson9.ppd
|
||||
f 0444 root sys $DATADIR/model/epson24.ppd ppd/epson24.ppd
|
||||
f 0444 root sys $DATADIR/model/stcolor.ppd ppd/stcolor.ppd
|
||||
f 0444 root sys $DATADIR/model/stphoto.ppd ppd/stphoto.ppd
|
||||
|
||||
d 0555 root sys $DATADIR/templates -
|
||||
f 0444 root sys $DATADIR/templates/add-class.tmpl templates/add-class.tmpl
|
||||
f 0444 root sys $DATADIR/templates/add-printer.tmpl templates/add-printer.tmpl
|
||||
f 0444 root sys $DATADIR/templates/admin-op.tmpl templates/admin-op.tmpl
|
||||
f 0444 root sys $DATADIR/templates/admin.tmpl templates/admin.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-device.tmpl templates/choose-device.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-make.tmpl templates/choose-make.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-members.tmpl templates/choose-members.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-model.tmpl templates/choose-model.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-serial.tmpl templates/choose-serial.tmpl
|
||||
f 0444 root sys $DATADIR/templates/choose-uri.tmpl templates/choose-uri.tmpl
|
||||
f 0444 root sys $DATADIR/templates/class-added.tmpl templates/class-added.tmpl
|
||||
f 0444 root sys $DATADIR/templates/class-confirm.tmpl templates/class-confirm.tmpl
|
||||
f 0444 root sys $DATADIR/templates/class-deleted.tmpl templates/class-deleted.tmpl
|
||||
f 0444 root sys $DATADIR/templates/class-modified.tmpl templates/class-modified.tmpl
|
||||
f 0444 root sys $DATADIR/templates/classes.tmpl templates/classes.tmpl
|
||||
f 0444 root sys $DATADIR/templates/config-printer.tmpl templates/config-printer.tmpl
|
||||
f 0444 root sys $DATADIR/templates/config-printer2.tmpl templates/config-printer2.tmpl
|
||||
f 0444 root sys $DATADIR/templates/error.tmpl templates/error.tmpl
|
||||
f 0444 root sys $DATADIR/templates/header.tmpl templates/header.tmpl
|
||||
f 0444 root sys $DATADIR/templates/job-cancel.tmpl templates/job-cancel.tmpl
|
||||
f 0444 root sys $DATADIR/templates/job-hold.tmpl templates/job-hold.tmpl
|
||||
f 0444 root sys $DATADIR/templates/job-release.tmpl templates/job-release.tmpl
|
||||
f 0444 root sys $DATADIR/templates/job-restart.tmpl templates/job-restart.tmpl
|
||||
f 0444 root sys $DATADIR/templates/jobs.tmpl templates/jobs.tmpl
|
||||
f 0444 root sys $DATADIR/templates/modify-class.tmpl templates/modify-class.tmpl
|
||||
f 0444 root sys $DATADIR/templates/modify-printer.tmpl templates/modify-printer.tmpl
|
||||
f 0444 root sys $DATADIR/templates/option-boolean.tmpl templates/option-boolean.tmpl
|
||||
f 0444 root sys $DATADIR/templates/option-header.tmpl templates/option-header.tmpl
|
||||
f 0444 root sys $DATADIR/templates/option-pickmany.tmpl templates/option-pickmany.tmpl
|
||||
f 0444 root sys $DATADIR/templates/option-pickone.tmpl templates/option-pickone.tmpl
|
||||
f 0444 root sys $DATADIR/templates/option-trailer.tmpl templates/option-trailer.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-accept.tmpl templates/printer-accept.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-added.tmpl templates/printer-added.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-configured.tmpl templates/printer-configured.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-confirm.tmpl templates/printer-confirm.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-deleted.tmpl templates/printer-deleted.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-modified.tmpl templates/printer-modified.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-reject.tmpl templates/printer-reject.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-start.tmpl templates/printer-start.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printer-stop.tmpl templates/printer-stop.tmpl
|
||||
f 0444 root sys $DATADIR/templates/printers.tmpl templates/printers.tmpl
|
||||
f 0444 root sys $DATADIR/templates/test-page.tmpl templates/test-page.tmpl
|
||||
f 0444 root sys $DATADIR/templates/trailer.tmpl templates/trailer.tmpl
|
||||
|
||||
# Config files
|
||||
d 0555 root sys $SERVERROOT -
|
||||
d 0711 root sys $SERVERROOT/certs -
|
||||
d 0755 root sys $SERVERROOT/interfaces -
|
||||
d 0755 root sys $SERVERROOT/ppd -
|
||||
c 0644 root sys $SERVERROOT/classes.conf conf/classes.conf
|
||||
c 0644 root sys $SERVERROOT/cupsd.conf conf/cupsd.conf
|
||||
f 0644 root sys $SERVERROOT/mime.convs conf/mime.convs
|
||||
f 0644 root sys $SERVERROOT/mime.types conf/mime.types
|
||||
c 0644 root sys $SERVERROOT/printers.conf conf/printers.conf
|
||||
|
||||
%system linux
|
||||
# Linux version needs PAM...
|
||||
%requires /lib/libpam.so.0
|
||||
d 0555 root sys $PAMDIR -
|
||||
c 0644 root sys $PAMDIR/cups data/cups.pam
|
||||
%system all
|
||||
|
||||
# Developer files
|
||||
d 0555 root sys $INCLUDEDIR/cups -
|
||||
f 0444 root sys $INCLUDEDIR/cups/cups.h cups/cups.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/http.h cups/http.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/image.h filter/image.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/ipp.h cups/ipp.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/language.h cups/language.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/md5.h cups/md5.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/ppd.h cups/ppd.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/raster.h filter/raster.h
|
||||
|
||||
f 0444 root sys $LIBDIR/libcups.a cups/libcups.a
|
||||
|
||||
# Documentation files
|
||||
d 0555 root sys $DOCDIR -
|
||||
f 0444 root sys $DOCDIR/cups.css doc/cups.css
|
||||
f 0444 root sys $DOCDIR/documentation.html doc/documentation.html
|
||||
f 0444 root sys $DOCDIR/index.html doc/index.html
|
||||
|
||||
d 0555 root sys $DOCDIR/images -
|
||||
|
||||
f 0444 root sys $DOCDIR/images/classes.gif doc/images/classes.gif
|
||||
f 0444 root sys $DOCDIR/images/printer-idle.gif doc/images/printer-idle.gif
|
||||
f 0444 root sys $DOCDIR/images/printer-processing.gif doc/images/printer-processing.gif
|
||||
f 0444 root sys $DOCDIR/images/printer-stopped.gif doc/images/printer-stopped.gif
|
||||
|
||||
f 0444 root sys $DOCDIR/images/accept-jobs.gif doc/images/accept-jobs.gif
|
||||
f 0444 root sys $DOCDIR/images/add-class.gif doc/images/add-class.gif
|
||||
f 0444 root sys $DOCDIR/images/add-printer.gif doc/images/add-printer.gif
|
||||
f 0444 root sys $DOCDIR/images/cancel-job.gif doc/images/cancel-job.gif
|
||||
f 0444 root sys $DOCDIR/images/cancel-jobs.gif doc/images/cancel-jobs.gif
|
||||
f 0444 root sys $DOCDIR/images/cancel.gif doc/images/cancel.gif
|
||||
f 0444 root sys $DOCDIR/images/continue.gif doc/images/continue.gif
|
||||
f 0444 root sys $DOCDIR/images/config-printer.gif doc/images/config-printer.gif
|
||||
f 0444 root sys $DOCDIR/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
|
||||
f 0444 root sys $DOCDIR/images/delete-class.gif doc/images/delete-class.gif
|
||||
f 0444 root sys $DOCDIR/images/delete-printer.gif doc/images/delete-printer.gif
|
||||
f 0444 root sys $DOCDIR/images/hold-job.gif doc/images/hold-job.gif
|
||||
f 0444 root sys $DOCDIR/images/left.gif doc/images/left.gif
|
||||
f 0444 root sys $DOCDIR/images/logo.gif doc/images/logo.gif
|
||||
f 0444 root sys $DOCDIR/images/manage-classes.gif doc/images/manage-classes.gif
|
||||
f 0444 root sys $DOCDIR/images/manage-jobs.gif doc/images/manage-jobs.gif
|
||||
f 0444 root sys $DOCDIR/images/manage-printers.gif doc/images/manage-printers.gif
|
||||
f 0444 root sys $DOCDIR/images/modify-class.gif doc/images/modify-class.gif
|
||||
f 0444 root sys $DOCDIR/images/modify-printer.gif doc/images/modify-printer.gif
|
||||
f 0444 root sys $DOCDIR/images/navbar.gif doc/images/navbar.gif
|
||||
f 0444 root sys $DOCDIR/images/print-test-page.gif doc/images/print-test-page.gif
|
||||
f 0444 root sys $DOCDIR/images/reject-jobs.gif doc/images/reject-jobs.gif
|
||||
f 0444 root sys $DOCDIR/images/release-job.gif doc/images/release-job.gif
|
||||
f 0444 root sys $DOCDIR/images/restart-job.gif doc/images/restart-job.gif
|
||||
f 0444 root sys $DOCDIR/images/right.gif doc/images/right.gif
|
||||
f 0444 root sys $DOCDIR/images/show-active.gif doc/images/show-active.gif
|
||||
f 0444 root sys $DOCDIR/images/show-completed.gif doc/images/show-completed.gif
|
||||
f 0444 root sys $DOCDIR/images/start-class.gif doc/images/start-class.gif
|
||||
f 0444 root sys $DOCDIR/images/start-printer.gif doc/images/start-printer.gif
|
||||
f 0444 root sys $DOCDIR/images/stop-class.gif doc/images/stop-class.gif
|
||||
f 0444 root sys $DOCDIR/images/stop-printer.gif doc/images/stop-printer.gif
|
||||
|
||||
f 0444 root sys $DOCDIR/cmp.html doc/cmp.html
|
||||
f 0444 root sys $DOCDIR/cmp.pdf doc/cmp.pdf
|
||||
f 0444 root sys $DOCDIR/cupsdoc.css doc/cupsdoc.css
|
||||
f 0444 root sys $DOCDIR/idd.html doc/idd.html
|
||||
f 0444 root sys $DOCDIR/idd.pdf doc/idd.pdf
|
||||
f 0444 root sys $DOCDIR/ipp.html doc/ipp.html
|
||||
f 0444 root sys $DOCDIR/ipp.pdf doc/ipp.pdf
|
||||
f 0444 root sys $DOCDIR/overview.html doc/overview.html
|
||||
f 0444 root sys $DOCDIR/overview.pdf doc/overview.pdf
|
||||
f 0444 root sys $DOCDIR/sam.html doc/sam.html
|
||||
f 0444 root sys $DOCDIR/sam.pdf doc/sam.pdf
|
||||
f 0444 root sys $DOCDIR/sdd.html doc/sdd.html
|
||||
f 0444 root sys $DOCDIR/sdd.pdf doc/sdd.pdf
|
||||
f 0444 root sys $DOCDIR/spm.html doc/spm.html
|
||||
f 0444 root sys $DOCDIR/spm.pdf doc/spm.pdf
|
||||
f 0444 root sys $DOCDIR/ssr.html doc/ssr.html
|
||||
f 0444 root sys $DOCDIR/ssr.pdf doc/ssr.pdf
|
||||
f 0444 root sys $DOCDIR/sum.html doc/sum.html
|
||||
f 0444 root sys $DOCDIR/sum.pdf doc/sum.pdf
|
||||
f 0444 root sys $DOCDIR/svd.html doc/svd.html
|
||||
f 0444 root sys $DOCDIR/svd.pdf doc/svd.pdf
|
||||
f 0444 root sys $DOCDIR/images/cups-bar.gif doc/images/cups-bar.gif
|
||||
f 0444 root sys $DOCDIR/images/cups-large.gif doc/images/cups-large.gif
|
||||
f 0444 root sys $DOCDIR/images/cups-medium.gif doc/images/cups-medium.gif
|
||||
f 0444 root sys $DOCDIR/images/cups-small.gif doc/images/cups-small.gif
|
||||
|
||||
|
||||
# Man pages
|
||||
%system irix
|
||||
d 0555 root sys $MANDIR/a_man -
|
||||
d 0555 root sys $MANDIR/a_man/cat1 -
|
||||
d 0555 root sys $MANDIR/u_man -
|
||||
d 0555 root sys $MANDIR/u_man/cat1 -
|
||||
d 0555 root sys $MANDIR/u_man/cat5 -
|
||||
|
||||
f 0444 root sys $MANDIR/a_man/cat1/accept.z man/accept.z
|
||||
l 0444 root sys $MANDIR/a_man/cat1/reject.z accept.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/backend.z man/backend.z
|
||||
f 0444 root sys $MANDIR/u_man/cat5/classes.conf.z man/classes.conf.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/cups-lpd.z man/cups-lpd.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/cups-polld.z man/cups-polld.z
|
||||
f 0444 root sys $MANDIR/u_man/cat5/cupsd.conf.z man/cupsd.conf.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/cupsd.z man/cupsd.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/enable.z man/enable.z
|
||||
l 0444 root sys $MANDIR/a_man/cat1/disable.z enable.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/filter.z man/filter.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/lpadmin.z man/lpadmin.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/lpc.z man/lpc.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/lpinfo.z man/lpinfo.z
|
||||
f 0444 root sys $MANDIR/a_man/cat1/lpmove.z man/lpmove.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lpoptions.z man/lpoptions.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lpq.z man/lpq.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lprm.z man/lprm.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lpr.z man/lpr.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lpstat.z man/lpstat.z
|
||||
f 0444 root sys $MANDIR/u_man/cat1/lp.z man/lp.z
|
||||
l 0444 root sys $MANDIR/u_man/cat1/cancel.z lp.z
|
||||
f 0444 root sys $MANDIR/u_man/cat5/mime.convs.z man/mime.convs.z
|
||||
f 0444 root sys $MANDIR/u_man/cat5/mime.types.z man/mime.types.z
|
||||
f 0444 root sys $MANDIR/u_man/cat5/printers.conf.z man/printers.conf.z
|
||||
|
||||
%system solaris hpux
|
||||
d 0555 root sys $MANDIR/man1 -
|
||||
d 0555 root sys $MANDIR/man5 -
|
||||
d 0555 root sys $MANDIR/man1m -
|
||||
|
||||
f 0444 root sys $MANDIR/man1m/accept.1m man/accept.man
|
||||
l 0444 root sys $MANDIR/man1m/reject.1m accept.man
|
||||
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
|
||||
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
|
||||
f 0444 root sys $MANDIR/man1m/cups-lpd.1m man/cups-lpd.man
|
||||
f 0444 root sys $MANDIR/man1m/cups-polld.1m man/cups-polld.man
|
||||
f 0444 root sys $MANDIR/man1m/cupsd.1m man/cupsd.man
|
||||
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
|
||||
f 0444 root sys $MANDIR/man1m/enable.1m man/enable.man
|
||||
l 0444 root sys $MANDIR/man1m/disable.1m enable.man
|
||||
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
|
||||
f 0444 root sys $MANDIR/man1m/lpadmin.1m man/lpadmin.man
|
||||
f 0444 root sys $MANDIR/man1m/lpc.1m man/lpc.man
|
||||
f 0444 root sys $MANDIR/man1m/lpinfo.1m man/lpinfo.man
|
||||
f 0444 root sys $MANDIR/man1m/lpmove.1m man/lpmove.man
|
||||
f 0444 root sys $MANDIR/man1/lpoptions.1 man/lpoptions.man
|
||||
f 0444 root sys $MANDIR/man1/lpq.1 man/lpq.man
|
||||
f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
|
||||
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
|
||||
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
|
||||
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
|
||||
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
|
||||
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
|
||||
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
|
||||
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
|
||||
|
||||
%system !irix !solaris !hpux
|
||||
d 0555 root sys $MANDIR/man1 -
|
||||
d 0555 root sys $MANDIR/man5 -
|
||||
d 0555 root sys $MANDIR/man8 -
|
||||
|
||||
f 0444 root sys $MANDIR/man8/accept.8 man/accept.man
|
||||
l 0444 root sys $MANDIR/man8/reject.8 accept.man
|
||||
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
|
||||
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
|
||||
f 0444 root sys $MANDIR/man8/cups-lpd.8 man/cups-lpd.man
|
||||
f 0444 root sys $MANDIR/man8/cups-polld.8 man/cups-polld.man
|
||||
f 0444 root sys $MANDIR/man8/cupsd.8 man/cupsd.man
|
||||
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
|
||||
f 0444 root sys $MANDIR/man8/enable.8 man/enable.man
|
||||
l 0444 root sys $MANDIR/man8/disable.8 enable.man
|
||||
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
|
||||
f 0444 root sys $MANDIR/man8/lpadmin.8 man/lpadmin.man
|
||||
f 0444 root sys $MANDIR/man8/lpc.8 man/lpc.man
|
||||
f 0444 root sys $MANDIR/man8/lpinfo.8 man/lpinfo.man
|
||||
f 0444 root sys $MANDIR/man8/lpmove.8 man/lpmove.man
|
||||
f 0444 root sys $MANDIR/man1/lpoptions.1 man/lpoptions.man
|
||||
f 0444 root sys $MANDIR/man1/lpq.1 man/lpq.man
|
||||
f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
|
||||
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
|
||||
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
|
||||
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
|
||||
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
|
||||
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
|
||||
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
|
||||
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
|
||||
|
||||
# Startup script
|
||||
%system all
|
||||
i 0555 root sys cups cups.sh
|
||||
|
||||
#
|
||||
# End of "$Id: cups.list 1202 2000-07-07 21:25:17Z mike $".
|
||||
#
|
||||
+357
@@ -0,0 +1,357 @@
|
||||
#
|
||||
# "$Id$"
|
||||
#
|
||||
# ESP Package Manager (EPM) file list for the Common UNIX Printing
|
||||
# System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2001 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 information
|
||||
%product Common UNIX Printing System
|
||||
%copyright 1993-2001 by Easy Software Products, All Rights Reserved.
|
||||
%vendor Easy Software Products
|
||||
%license LICENSE.txt
|
||||
%readme README.txt
|
||||
%version 1.1.10-0
|
||||
%incompat printpro
|
||||
%provides cups
|
||||
%provides cupsys
|
||||
%provides cups-devel
|
||||
%provides cupsys-devel
|
||||
%provides cups-pstoraster
|
||||
%provides libcups1
|
||||
%provides libcups.so.2
|
||||
|
||||
#
|
||||
# GNU variables...
|
||||
#
|
||||
|
||||
$prefix=@prefix@
|
||||
$exec_prefix=@exec_prefix@
|
||||
$bindir=@bindir@
|
||||
$datadir=@datadir@
|
||||
$includedir=@includedir@
|
||||
$infodir=@infodir@
|
||||
$libdir=@libdir@
|
||||
$libexecdir=@libexecdir@
|
||||
$localstatedir=@localstatedir@
|
||||
$mandir=@mandir@
|
||||
$oldincludedir=@oldincludedir@
|
||||
$sbindir=@sbindir@
|
||||
$sharedstatedir=@sharedstatedir@
|
||||
$srcdir=@srcdir@
|
||||
$sysconfdir=@sysconfdir@
|
||||
$top_srcdir=@top_srcdir@
|
||||
|
||||
#
|
||||
# ESP variables...
|
||||
#
|
||||
|
||||
$AMANDIR=@AMANDIR@
|
||||
$BINDIR=@bindir@
|
||||
$DATADIR=@CUPS_DATADIR@
|
||||
$DOCDIR=@CUPS_DOCROOT@
|
||||
$INCLUDEDIR=${includedir}
|
||||
$INITDIR=@INITDIR@
|
||||
$INITDDIR=@INITDDIR@
|
||||
$LIBDIR=${libdir}
|
||||
$LOCALEDIR=@CUPS_LOCALEDIR@
|
||||
$LOGDIR=@CUPS_LOGDIR@
|
||||
$MANDIR=@mandir@
|
||||
$PAMDIR=@PAMDIR@
|
||||
$REQUESTS=@CUPS_REQUESTS@
|
||||
$SBINDIR=@sbindir@
|
||||
$SERVERBIN=@CUPS_SERVERBIN@
|
||||
$SERVERROOT=@CUPS_SERVERROOT@
|
||||
|
||||
$CUPS_USER=@CUPS_USER@
|
||||
|
||||
$CAT1EXT=@CAT1EXT@
|
||||
$CAT5EXT=@CAT5EXT@
|
||||
$CAT8EXT=@CAT8EXT@
|
||||
$MAN8EXT=@MAN8EXT@
|
||||
$MAN8DIR=@MAN8DIR@
|
||||
|
||||
# Make sure the MD5 password file is now owned by CUPS_USER...
|
||||
%postinstall if test -f $SERVERROOT/passwd.md5; then
|
||||
%postinstall chown $CUPS_USER $SERVERROOT/passwd.md5
|
||||
%postinstall fi
|
||||
|
||||
# Server programs
|
||||
%system all
|
||||
# Server files
|
||||
f 0555 root sys $SBINDIR/cupsd scheduler/cupsd
|
||||
|
||||
d 0555 root sys $SERVERBIN -
|
||||
d 0555 root sys $SERVERBIN/backend -
|
||||
f 0555 root sys $SERVERBIN/backend/ipp backend/ipp
|
||||
l 0555 root sys $SERVERBIN/backend/http ipp
|
||||
f 0555 root sys $SERVERBIN/backend/lpd backend/lpd
|
||||
f 0555 root sys $SERVERBIN/backend/parallel backend/parallel
|
||||
f 0555 root sys $SERVERBIN/backend/serial backend/serial
|
||||
f 0555 root sys $SERVERBIN/backend/socket backend/socket
|
||||
f 0555 root sys $SERVERBIN/backend/usb backend/usb
|
||||
d 0555 root sys $SERVERBIN/cgi-bin -
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/admin.cgi cgi-bin/admin.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/classes.cgi cgi-bin/classes.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/jobs.cgi cgi-bin/jobs.cgi
|
||||
f 0555 root sys $SERVERBIN/cgi-bin/printers.cgi cgi-bin/printers.cgi
|
||||
d 0555 root sys $SERVERBIN/daemon -
|
||||
f 0555 root sys $SERVERBIN/daemon/cups-lpd scheduler/cups-lpd
|
||||
f 0555 root sys $SERVERBIN/daemon/cups-polld scheduler/cups-polld
|
||||
d 0555 root sys $SERVERBIN/filter -
|
||||
f 0555 root sys $SERVERBIN/filter/pstoraster pstoraster/pstoraster
|
||||
f 0555 root sys $SERVERBIN/filter/pdftops pdftops/pdftops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetops filter/imagetops
|
||||
f 0555 root sys $SERVERBIN/filter/pstops filter/pstops
|
||||
f 0555 root sys $SERVERBIN/filter/texttops filter/texttops
|
||||
f 0555 root sys $SERVERBIN/filter/rastertoepson filter/rastertoepson
|
||||
f 0555 root sys $SERVERBIN/filter/rastertohp filter/rastertohp
|
||||
f 0555 root sys $SERVERBIN/filter/hpgltops filter/hpgltops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetoraster filter/imagetoraster
|
||||
|
||||
# Admin commands
|
||||
l 0555 root sys $BINDIR/disable $SBINDIR/accept
|
||||
l 0555 root sys $BINDIR/enable $SBINDIR/accept
|
||||
l 0555 root sys $LIBDIR/accept $SBINDIR/accept
|
||||
l 0555 root sys $LIBDIR/lpadmin $SBINDIR/lpadmin
|
||||
l 0555 root sys $LIBDIR/reject accept
|
||||
f 0555 root sys $SBINDIR/accept systemv/accept
|
||||
f 0555 root sys $SBINDIR/lpadmin systemv/lpadmin
|
||||
f 0555 root sys $SBINDIR/lpc berkeley/lpc
|
||||
f 0555 root sys $SBINDIR/lpinfo systemv/lpinfo
|
||||
f 0555 root sys $SBINDIR/lpmove systemv/lpmove
|
||||
l 0555 root sys $SBINDIR/reject accept
|
||||
|
||||
%system irix
|
||||
l 0555 root sys /usr/etc/lpc $SBINDIR/lpc
|
||||
%system all
|
||||
|
||||
# User commands
|
||||
f 0555 root sys $BINDIR/cancel systemv/cancel
|
||||
f 0555 root sys $BINDIR/lp systemv/lp
|
||||
f 0555 root sys $BINDIR/lpoptions systemv/lpoptions
|
||||
f 4555 $CUPS_USER sys $BINDIR/lppasswd systemv/lppasswd
|
||||
f 0555 root sys $BINDIR/lpq berkeley/lpq
|
||||
f 0555 root sys $BINDIR/lpr berkeley/lpr
|
||||
f 0555 root sys $BINDIR/lprm berkeley/lprm
|
||||
f 0555 root sys $BINDIR/lpstat systemv/lpstat
|
||||
|
||||
%system irix
|
||||
l 0555 root sys /usr/bsd/lpq $BINDIR/lpq
|
||||
l 0555 root sys /usr/bsd/lpr $BINDIR/lpr
|
||||
l 0555 root sys /usr/bsd/lprm $BINDIR/lprm
|
||||
%system all
|
||||
|
||||
# DSOs
|
||||
%system hpux
|
||||
f 0555 root sys $LIBDIR/libcups.sl.2 cups/libcups.sl.2
|
||||
l 0555 root sys $LIBDIR/libcups.sl libcups.sl.2
|
||||
f 0555 root sys $LIBDIR/libcupsimage.sl.2 filter/libcupsimage.sl.2
|
||||
l 0555 root sys $LIBDIR/libcupsimage.sl libcupsimage.sl.2
|
||||
%system aix
|
||||
f 0555 root sys $LIBDIR/libcups_s.a cups/libcups_s.a
|
||||
f 0555 root sys $LIBDIR/libcupsimage_s.a filter/libcupsimage_s.a
|
||||
%system !hpux !aix
|
||||
f 0555 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2
|
||||
l 0555 root sys $LIBDIR/libcups.so libcups.so.2
|
||||
f 0555 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2
|
||||
l 0555 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
|
||||
%system all
|
||||
|
||||
# Directories
|
||||
d 0755 root sys $LOGDIR -
|
||||
d 0700 $CUPS_USER sys $REQUESTS -
|
||||
d 1700 $CUPS_USER sys $REQUESTS/tmp -
|
||||
|
||||
# Data files
|
||||
f 0444 root sys $LOCALEDIR/C/cups_C locale/C/cups_C
|
||||
f 0444 root sys $LOCALEDIR/de/cups_de locale/de/cups_de
|
||||
f 0444 root sys $LOCALEDIR/en/cups_en locale/en/cups_en
|
||||
f 0444 root sys $LOCALEDIR/es/cups_es locale/es/cups_es
|
||||
f 0444 root sys $LOCALEDIR/fr/cups_fr locale/fr/cups_fr
|
||||
f 0444 root sys $LOCALEDIR/it/cups_it locale/it/cups_it
|
||||
|
||||
d 0555 root sys $DATADIR -
|
||||
|
||||
d 0555 root sys $DATADIR/banners -
|
||||
f 0444 root sys $DATADIR/banners/classified data/classified
|
||||
f 0444 root sys $DATADIR/banners/confidential data/confidential
|
||||
f 0444 root sys $DATADIR/banners/secret data/secret
|
||||
f 0444 root sys $DATADIR/banners/standard data/standard
|
||||
f 0444 root sys $DATADIR/banners/topsecret data/topsecret
|
||||
f 0444 root sys $DATADIR/banners/unclassified data/unclassified
|
||||
|
||||
d 0555 root sys $DATADIR/charsets -
|
||||
f 0444 root sys $DATADIR/charsets/windows-874 data/windows-874
|
||||
f 0444 root sys $DATADIR/charsets/windows-1250 data/windows-1250
|
||||
f 0444 root sys $DATADIR/charsets/windows-1251 data/windows-1251
|
||||
f 0444 root sys $DATADIR/charsets/windows-1252 data/windows-1252
|
||||
f 0444 root sys $DATADIR/charsets/windows-1253 data/windows-1253
|
||||
f 0444 root sys $DATADIR/charsets/windows-1254 data/windows-1254
|
||||
f 0444 root sys $DATADIR/charsets/windows-1255 data/windows-1255
|
||||
f 0444 root sys $DATADIR/charsets/windows-1256 data/windows-1256
|
||||
f 0444 root sys $DATADIR/charsets/windows-1257 data/windows-1257
|
||||
f 0444 root sys $DATADIR/charsets/windows-1258 data/windows-1258
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-1 data/iso-8859-1
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-14 data/iso-8859-14
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-15 data/iso-8859-15
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-2 data/iso-8859-2
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-3 data/iso-8859-3
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-4 data/iso-8859-4
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-5 data/iso-8859-5
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-6 data/iso-8859-6
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-7 data/iso-8859-7
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-8 data/iso-8859-8
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-9 data/iso-8859-9
|
||||
f 0444 root sys $DATADIR/charsets/utf-8 data/utf-8
|
||||
|
||||
d 0555 root sys $DATADIR/data -
|
||||
f 0444 root sys $DATADIR/data/HPGLprolog data/HPGLprolog
|
||||
f 0444 root sys $DATADIR/data/psglyphs data/psglyphs
|
||||
f 0444 root sys $DATADIR/data/testprint.ps data/testprint.ps
|
||||
|
||||
d 0555 root sys $DATADIR/fonts -
|
||||
f 0444 root sys $DATADIR/fonts fonts/*
|
||||
|
||||
d 0555 root sys $DATADIR/pstoraster -
|
||||
f 0444 root sys $DATADIR/pstoraster/Fontmap pstoraster/Fontmap
|
||||
f 0444 root sys $DATADIR/pstoraster pstoraster/gs*.ps
|
||||
|
||||
d 0555 root sys $DATADIR/model -
|
||||
f 0444 root sys $DATADIR/model ppd/*.ppd
|
||||
|
||||
d 0555 root sys $DATADIR/templates -
|
||||
f 0444 root sys $DATADIR/templates templates/*.tmpl
|
||||
|
||||
# Config files
|
||||
d 0555 root sys $SERVERROOT -
|
||||
d 0711 root sys $SERVERROOT/certs -
|
||||
d 0755 root sys $SERVERROOT/interfaces -
|
||||
d 0755 root sys $SERVERROOT/ppd -
|
||||
c 0644 root sys $SERVERROOT conf/*.conf
|
||||
f 0644 root sys $SERVERROOT/mime.convs conf/mime.convs
|
||||
f 0644 root sys $SERVERROOT/mime.types conf/mime.types
|
||||
|
||||
%system linux
|
||||
d 0555 root sys $PAMDIR -
|
||||
c 0644 root sys $PAMDIR/cups data/cups.pam
|
||||
c 0644 root sys $PAMDIR/cups.suse data/cups.suse
|
||||
%install if test -f /lib/security/pam_unix.so; then
|
||||
%install mv $PAMDIR/cups.suse $PAMDIR/cups
|
||||
%install fi
|
||||
%system all
|
||||
|
||||
# Developer files
|
||||
d 0555 root sys $INCLUDEDIR/cups -
|
||||
f 0444 root sys $INCLUDEDIR/cups/cups.h cups/cups.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/http.h cups/http.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/image.h filter/image.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/ipp.h cups/ipp.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/language.h cups/language.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/md5.h cups/md5.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/ppd.h cups/ppd.h
|
||||
f 0444 root sys $INCLUDEDIR/cups/raster.h filter/raster.h
|
||||
|
||||
f 0444 root sys $LIBDIR/libcups.a cups/libcups.a
|
||||
|
||||
# Documentation files
|
||||
d 0555 root sys $DOCDIR -
|
||||
f 0444 root sys $DOCDIR/cups.css doc/cups.css
|
||||
f 0444 root sys $DOCDIR doc/*.html
|
||||
f 0444 root sys $DOCDIR doc/*.pdf
|
||||
d 0555 root sys $DOCDIR/images -
|
||||
f 0444 root sys $DOCDIR/images doc/images/*.gif
|
||||
|
||||
# Man pages
|
||||
d 0555 root sys $AMANDIR -
|
||||
d 0555 root sys $AMANDIR/cat$MAN8DIR -
|
||||
d 0555 root sys $AMANDIR/man$MAN8DIR -
|
||||
d 0555 root sys $MANDIR -
|
||||
d 0555 root sys $MANDIR/cat1 -
|
||||
d 0555 root sys $MANDIR/cat5 -
|
||||
d 0555 root sys $MANDIR/man1 -
|
||||
d 0555 root sys $MANDIR/man5 -
|
||||
|
||||
f 0444 root sys $MANDIR/cat1/backend.$CAT1EXT man/backend.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/filter.$CAT1EXT man/filter.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lpoptions.$CAT1EXT man/lpoptions.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lppasswd.$CAT1EXT man/lppasswd.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lpq.$CAT1EXT man/lpq.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lprm.$CAT1EXT man/lprm.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lpr.$CAT1EXT man/lpr.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lpstat.$CAT1EXT man/lpstat.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/lp.$CAT1EXT man/lp.$CAT1EXT
|
||||
l 0444 root sys $MANDIR/cat1/cancel.$CAT1EXT lp.$CAT1EXT
|
||||
|
||||
f 0444 root sys $MANDIR/cat5/classes.conf.$CAT5EXT man/classes.conf.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/cat5/cupsd.conf.$CAT5EXT man/cupsd.conf.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/cat5/mime.convs.$CAT5EXT man/mime.convs.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/cat5/mime.types.$CAT5EXT man/mime.types.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/cat5/printers.conf.$CAT5EXT man/printers.conf.$CAT5EXT
|
||||
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/accept.$CAT8EXT man/accept.$CAT8EXT
|
||||
l 0444 root sys $AMANDIR/cat$MAN8DIR/reject.$CAT8EXT accept.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/cups-lpd.$CAT8EXT man/cups-lpd.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/cups-polld.$CAT8EXT man/cups-polld.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/cupsd.$CAT8EXT man/cupsd.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/enable.$CAT8EXT man/enable.$CAT8EXT
|
||||
l 0444 root sys $AMANDIR/cat$MAN8DIR/disable.$CAT8EXT enable.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/lpadmin.$CAT8EXT man/lpadmin.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/lpc.$CAT8EXT man/lpc.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/lpinfo.$CAT8EXT man/lpinfo.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/cat$MAN8DIR/lpmove.$CAT8EXT man/lpmove.$CAT8EXT
|
||||
|
||||
f 0444 root sys $MANDIR/man1/backend.$MAN1EXT man/backend.man
|
||||
f 0444 root sys $MANDIR/man1/filter.$MAN1EXT man/filter.man
|
||||
f 0444 root sys $MANDIR/man1/lpoptions.$MAN1EXT man/lpoptions.man
|
||||
f 0444 root sys $MANDIR/man1/lppasswd.$MAN1EXT man/lppasswd.man
|
||||
f 0444 root sys $MANDIR/man1/lpq.$MAN1EXT man/lpq.man
|
||||
f 0444 root sys $MANDIR/man1/lprm.$MAN1EXT man/lprm.man
|
||||
f 0444 root sys $MANDIR/man1/lpr.$MAN1EXT man/lpr.man
|
||||
f 0444 root sys $MANDIR/man1/lpstat.$MAN1EXT man/lpstat.man
|
||||
f 0444 root sys $MANDIR/man1/lp.$MAN1EXT man/lp.man
|
||||
l 0444 root sys $MANDIR/man1/cancel.$MAN1EXT lp.man
|
||||
|
||||
f 0444 root sys $MANDIR/man5/classes.conf.$MAN5EXT man/classes.conf.man
|
||||
f 0444 root sys $MANDIR/man5/cupsd.conf.$MAN5EXT man/cupsd.conf.man
|
||||
f 0444 root sys $MANDIR/man5/mime.convs.$MAN5EXT man/mime.convs.man
|
||||
f 0444 root sys $MANDIR/man5/mime.types.$MAN5EXT man/mime.types.man
|
||||
f 0444 root sys $MANDIR/man5/printers.conf.$MAN5EXT man/printers.conf.man
|
||||
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/accept.$MAN8EXT man/accept.man
|
||||
l 0444 root sys $AMANDIR/man$MAN8DIR/reject.$MAN8EXT accept.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/cups-polld.$MAN8EXT man/cups-polld.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/cupsd.$MAN8EXT man/cupsd.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/enable.$MAN8EXT man/enable.man
|
||||
l 0444 root sys $AMANDIR/man$MAN8DIR/disable.$MAN8EXT enable.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/lpadmin.$MAN8EXT man/lpadmin.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/lpc.$MAN8EXT man/lpc.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/lpinfo.$MAN8EXT man/lpinfo.man
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/lpmove.$MAN8EXT man/lpmove.man
|
||||
|
||||
# Startup script
|
||||
%system all
|
||||
i 0555 root sys cups cups.sh
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
+55
-22
@@ -4,13 +4,7 @@
|
||||
#
|
||||
# Startup/shutdown script for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Linux chkconfig stuff:
|
||||
#
|
||||
# chkconfig: 02 99 00
|
||||
# description: Startup/shutdown script for the Common UNIX \
|
||||
# Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -29,34 +23,70 @@
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
|
||||
# See what program to use for configuration stuff...
|
||||
#### OS-Dependent Information
|
||||
|
||||
#
|
||||
# Linux chkconfig stuff:
|
||||
#
|
||||
# chkconfig: 235 99 00
|
||||
# description: Startup/shutdown script for the Common UNIX \
|
||||
# Printing System (CUPS).
|
||||
#
|
||||
|
||||
#
|
||||
# NetBSD 1.5+ rcorder script lines. The format of the following two
|
||||
# lines is very strict -- please don't add additional spaces!
|
||||
#
|
||||
# PROVIDE: cups
|
||||
# REQUIRE: DAEMON
|
||||
#
|
||||
|
||||
|
||||
#### OS-Dependent Configuration
|
||||
case "`uname`" in
|
||||
IRIX*)
|
||||
IS_ON=/sbin/chkconfig
|
||||
;;
|
||||
|
||||
NetBSD*)
|
||||
IS_ON=:
|
||||
;;
|
||||
|
||||
*)
|
||||
IS_ON=/bin/true
|
||||
;;
|
||||
esac
|
||||
|
||||
#### OS-Independent Stuff
|
||||
|
||||
#
|
||||
# The verbose flag controls the printing of the names of
|
||||
# daemons as they are started.
|
||||
# daemons as they are started. Currently always echos for
|
||||
# all but IRIX, which can configure verbose bootup messages.
|
||||
#
|
||||
|
||||
if $IS_ON verbose; then
|
||||
ECHO=echo
|
||||
else
|
||||
ECHO=:
|
||||
fi
|
||||
|
||||
# See if the CUPS server is running...
|
||||
#
|
||||
# See if the CUPS server (cupsd) is running...
|
||||
#
|
||||
|
||||
case "`uname`" in
|
||||
IRIX* | HP-UX | SunOS)
|
||||
IRIX* | HP-UX* | SunOS* | AIX* | SINIX*)
|
||||
pid=`ps -e | awk '{print $1,$4}' | grep cupsd | awk '{print $1}'`
|
||||
;;
|
||||
OSF1)
|
||||
UnixWare*)
|
||||
pid=`ps -e | awk '{print $1,$6}' | grep cupsd | awk '{print $1}'`
|
||||
. /etc/TIMEZONE
|
||||
;;
|
||||
OSF1*)
|
||||
pid=`ps -e | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
|
||||
;;
|
||||
Linux)
|
||||
Linux* | NetBSD*)
|
||||
pid=`ps ax | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
|
||||
;;
|
||||
*)
|
||||
@@ -64,24 +94,23 @@ case "`uname`" in
|
||||
;;
|
||||
esac
|
||||
|
||||
#
|
||||
# Start or stop the CUPS server based upon the first argument to the script.
|
||||
#
|
||||
|
||||
case $1 in
|
||||
start | restart | reload)
|
||||
if test "$pid" != ""; then
|
||||
if $IS_ON cups; then
|
||||
if $IS_ON cups; then
|
||||
if test "$pid" != ""; then
|
||||
kill -HUP $pid
|
||||
$ECHO "cups: scheduler restarted."
|
||||
else
|
||||
kill $pid
|
||||
$ECHO "cups: scheduler stopped."
|
||||
fi
|
||||
else
|
||||
if $IS_ON cups; then
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
@sbindir@/cupsd
|
||||
$ECHO "cups: scheduler started."
|
||||
fi
|
||||
$ECHO "cups: scheduler ${1}ed."
|
||||
else
|
||||
$ECHO "cups: scheduler stopped."
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -106,6 +135,10 @@ case $1 in
|
||||
;;
|
||||
esac
|
||||
|
||||
#
|
||||
# Exit with no errors.
|
||||
#
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
|
||||
+137
-30
@@ -1,11 +1,11 @@
|
||||
#
|
||||
# "$Id: cups.spec 1214 2000-07-10 20:58:19Z mike $"
|
||||
# "$Id: cups.spec 1887 2001-08-17 14:22:55Z mike $"
|
||||
#
|
||||
# RPM "spec" file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Original version by Jason McMullan <jmcc@ontv.com>.
|
||||
#
|
||||
# Copyright 1999-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1999-2001 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
|
||||
@@ -26,21 +26,30 @@
|
||||
|
||||
Summary: Common Unix Printing System
|
||||
Name: cups
|
||||
Version: 1.1
|
||||
Release: 0
|
||||
Version: 1.1.10
|
||||
Release: 1
|
||||
Copyright: GPL
|
||||
Group: System Environment/Daemons
|
||||
Source: ftp://ftp.easysw.com/pub/cups/1.1/cups-1.1-source.tar.gz
|
||||
Source: ftp://ftp.easysw.com/pub/cups/%{version}/cups-%{version}-source.tar.gz
|
||||
Url: http://www.cups.org
|
||||
Packager: Michael Sweet <mike@easysw.com>
|
||||
Vendor: Easy Software Products
|
||||
# use buildroot so as not to disturb the version already installed
|
||||
BuildRoot: /tmp/rpmbuild
|
||||
Conflicts: lpr
|
||||
BuildRoot: /var/tmp/%{name}-root
|
||||
Conflicts: lpr, LPRng
|
||||
Provides: libcups.so.2
|
||||
Provides: libcupsimage.so.2
|
||||
Provides: cups
|
||||
|
||||
%package devel
|
||||
Summary: Common Unix Printing System - development environment
|
||||
Group: Development/Libraries
|
||||
Provides: libcups1
|
||||
|
||||
%package pstoraster
|
||||
Summary: Common Unix Printing System - PostScript RIP
|
||||
Group: System Environment/Daemons
|
||||
Provides: pstoraster
|
||||
|
||||
%description
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
@@ -53,6 +62,11 @@ The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. This is the development package for creating
|
||||
additional printer drivers, and other CUPS services.
|
||||
|
||||
%description pstoraster
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. This is the PostScript RIP package for
|
||||
supporting non-PostScript printer drivers.
|
||||
|
||||
%prep
|
||||
%setup
|
||||
|
||||
@@ -63,51 +77,144 @@ additional printer drivers, and other CUPS services.
|
||||
make
|
||||
|
||||
%install
|
||||
# these lines just make sure the directory structure in the
|
||||
# RPM_BUILD_ROOT exists
|
||||
# Make sure the RPM_BUILD_ROOT directory exists.
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
|
||||
|
||||
make datadir=$RPM_BUILD_ROOT/usr/share \
|
||||
make prefix=$RPM_BUILD_ROOT \
|
||||
exec_prefix=$RPM_BUILD_ROOT/usr \
|
||||
includedir=$RPM_BUILD_ROOT/usr/include \
|
||||
infodir=$RPM_BUILD_ROOT/usr/info \
|
||||
libdir=$RPM_BUILD_ROOT/usr/lib \
|
||||
localestatedir=$RPM_BUILD_ROOT/var \
|
||||
prefix=$RPM_BUILD_ROOT \
|
||||
sharedstatedir=$RPM_BUILD_ROOT/usr/com \
|
||||
sysconfdir=$RPM_BUILD_ROOT/etc \
|
||||
AMANDIR=$RPM_BUILD_ROOT/usr/man \
|
||||
BINDIR=$RPM_BUILD_ROOT/usr/bin \
|
||||
DATADIR=$RPM_BUILD_ROOT/usr/share/cups \
|
||||
DOCDIR=$RPM_BUILD_ROOT/usr/share/doc/cups \
|
||||
INCLUDEDIR=$RPM_BUILD_ROOT/usr/include \
|
||||
LIBDIR=$RPM_BUILD_ROOT/usr/lib \
|
||||
LOGDIR=$RPM_BUILD_ROOT/var/log/cups \
|
||||
LOCALEDIR=$RPM_BUILD_ROOT/usr/share/locale \
|
||||
MANDIR=$RPM_BUILD_ROOT/usr/man \
|
||||
PAMDIR=$RPM_BUILD_ROOT/etc/pam.d \
|
||||
REQUESTS=$RPM_BUILD_ROOT/var/spool/cups \
|
||||
SBINDIR=$RPM_BUILD_ROOT/usr/sbin \
|
||||
SERVERBIN=$RPM_BUILD_ROOT/usr/lib/cups \
|
||||
SERVERROOT=$RPM_BUILD_ROOT/etc/cups \
|
||||
install
|
||||
|
||||
install -m 755 -o root -g root cups.sh $RPM_BUILD_ROOT/etc/rc.d/init.d/cups
|
||||
|
||||
%post
|
||||
/sbin/chkconfig --add cups
|
||||
/sbin/chkconfig cups on
|
||||
/etc/rc.d/init.d/cups start
|
||||
if test -x /sbin/chkconfig; then
|
||||
/sbin/chkconfig --add cups
|
||||
/sbin/chkconfig cups on
|
||||
fi
|
||||
|
||||
# these lines automatically start cupsd after installation; commented out
|
||||
# by request...
|
||||
#if test -f /sbin/init.d/cups; then
|
||||
# /sbin/init.d/cups start
|
||||
#fi
|
||||
#if test -f /etc/rc.d/init.d/cups; then
|
||||
# /etc/rc.d/init.d/cups start
|
||||
#fi
|
||||
#if test -f /etc/init.d/cups; then
|
||||
# /etc/init.d/cups start
|
||||
#fi
|
||||
|
||||
%preun
|
||||
/etc/rc.d/init.d/cups stop
|
||||
/sbin/chkconfig --del cups
|
||||
if test -f /sbin/init.d/cups; then
|
||||
/sbin/init.d/cups stop
|
||||
fi
|
||||
if test -f /etc/rc.d/init.d/cups; then
|
||||
/etc/rc.d/init.d/cups stop
|
||||
fi
|
||||
if test -f /etc/init.d/cups; then
|
||||
/etc/init.d/cups stop
|
||||
fi
|
||||
|
||||
if test -x /sbin/chkconfig; then
|
||||
/sbin/chkconfig --del cups
|
||||
fi
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
/etc/*
|
||||
%dir /etc/cups
|
||||
%config(noreplace) /etc/cups/*.conf
|
||||
%dir /etc/cups/certs
|
||||
%dir /etc/cups/interfaces
|
||||
/etc/cups/mime.types
|
||||
/etc/cups/mime.convs
|
||||
%dir /etc/cups/ppd
|
||||
%dir /etc/pam.d
|
||||
/etc/pam.d/*
|
||||
|
||||
# RC dirs are a pain under Linux... Uncomment the appropriate ones if you
|
||||
# don't use Red Hat or Mandrake...
|
||||
|
||||
/etc/rc.d/init.d/*
|
||||
/etc/rc.d/rc0.d/*
|
||||
/etc/rc.d/rc3.d/*
|
||||
/etc/rc.d/rc5.d/*
|
||||
|
||||
#/etc/init.d/*
|
||||
#/etc/rc0.d/*
|
||||
#/etc/rc3.d/*
|
||||
#/etc/rc5.d/*
|
||||
|
||||
#/sbin/rc.d/*
|
||||
#/sbin/rc.d/rc0.d/*
|
||||
#/sbin/rc.d/rc3.d/*
|
||||
#/sbin/rc.d/rc5.d/*
|
||||
|
||||
/usr/bin/*
|
||||
/usr/lib/*.so*
|
||||
%dir /usr/lib/cups
|
||||
%dir /usr/lib/cups/backend
|
||||
/usr/lib/cups/backend/*
|
||||
%dir /usr/lib/cups/cgi-bin
|
||||
/usr/lib/cups/cgi-bin/*
|
||||
%dir /usr/lib/cups/daemon
|
||||
/usr/lib/cups/daemon/*
|
||||
%dir /usr/lib/cups/filter
|
||||
/usr/lib/cups/filter/hpgltops
|
||||
/usr/lib/cups/filter/imagetops
|
||||
/usr/lib/cups/filter/imagetoraster
|
||||
/usr/lib/cups/filter/pdftops
|
||||
/usr/lib/cups/filter/pstops
|
||||
/usr/lib/cups/filter/rastertoepson
|
||||
/usr/lib/cups/filter/rastertohp
|
||||
/usr/lib/cups/filter/texttops
|
||||
/usr/man/*
|
||||
/usr/sbin/*
|
||||
/usr/share/*
|
||||
/usr/lib/cups/*
|
||||
/var/*
|
||||
%dir /usr/share/cups
|
||||
%dir /usr/share/cups/banners
|
||||
/usr/share/cups/banners/*
|
||||
%dir /usr/share/cups/charsets
|
||||
/usr/share/cups/charsets/*
|
||||
%dir /usr/share/cups/data
|
||||
/usr/share/cups/data/*
|
||||
%dir /usr/share/cups/model
|
||||
/usr/share/cups/model/*
|
||||
%dir /usr/share/cups/templates
|
||||
/usr/share/cups/templates/*
|
||||
%dir /usr/share/doc/cups
|
||||
/usr/share/doc/cups/*
|
||||
%dir /usr/share/locale
|
||||
/usr/share/locale/*
|
||||
%attr(0700,lp,root) %dir /var/spool/cups
|
||||
%attr(1700,lp,root) %dir /var/spool/cups/tmp
|
||||
|
||||
%files devel
|
||||
%dir /usr/include/cups
|
||||
/usr/include/cups/*
|
||||
/usr/lib/*.a
|
||||
|
||||
%files pstoraster
|
||||
%dir /usr/lib/cups/filter
|
||||
/usr/lib/cups/filter/pstoraster
|
||||
%dir /usr/share/cups/fonts
|
||||
/usr/share/cups/fonts/*
|
||||
%dir /usr/share/cups/pstoraster
|
||||
/usr/share/cups/pstoraster/*
|
||||
|
||||
#
|
||||
# End of "$Id: cups.spec 1214 2000-07-10 20:58:19Z mike $".
|
||||
# End of "$Id: cups.spec 1887 2001-08-17 14:22:55Z mike $".
|
||||
#
|
||||
|
||||
+43
-21
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Support library Makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2001 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
|
||||
@@ -28,9 +28,10 @@ include ../Makedefs
|
||||
# Object files...
|
||||
#
|
||||
|
||||
LIBOBJS = dest.o emit.o http.o ipp.o language.o mark.o md5.o md5passwd.o \
|
||||
options.o page.o ppd.o snprintf.o string.o usersys.o util.o
|
||||
OBJS = $(LIBOBJS) testhttp.o testppd.o
|
||||
LIBOBJS = dest.o emit.o encode.o http.o ipp.o language.o mark.o md5.o \
|
||||
md5passwd.o options.o page.o ppd.o snprintf.o string.o \
|
||||
tempfile.o usersys.o util.o
|
||||
OBJS = $(LIBOBJS) testhttp.o testppd.o ppd-debug.o
|
||||
|
||||
|
||||
#
|
||||
@@ -59,7 +60,7 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
$(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2`
|
||||
|
||||
|
||||
#
|
||||
@@ -67,38 +68,54 @@ clean:
|
||||
#
|
||||
|
||||
install: all
|
||||
-$(MKDIR) $(INCLUDEDIR)/cups
|
||||
$(CHMOD) ugo+rx $(INCLUDEDIR)
|
||||
$(CHMOD) ugo+rx $(INCLUDEDIR)/cups
|
||||
$(INSTALL_DATA) $(HEADERS) $(INCLUDEDIR)/cups
|
||||
-$(MKDIR) $(LIBDIR)
|
||||
$(CHMOD) ugo+rx $(LIBDIR)
|
||||
$(INSTALL_DIR) $(INCLUDEDIR)/cups
|
||||
for file in $(HEADERS); do \
|
||||
$(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
|
||||
done
|
||||
$(INSTALL_DIR) $(LIBDIR)
|
||||
$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
|
||||
if test $(LIBCUPS) != "libcups.a" -a $(LIBCUPS) != "libcups.la"; then \
|
||||
if test $(LIBCUPS) = "libcups.so.2" -o $(LIBCUPS) = "libcups.sl.2"; then \
|
||||
$(INSTALL_LIB) libcups.a $(LIBDIR); \
|
||||
$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
|
||||
$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
|
||||
fi
|
||||
if test $(LIBCUPS) = "libcups_s.a"; then \
|
||||
$(INSTALL_LIB) libcups.a $(LIBDIR); \
|
||||
$(RM) `basename $(LIBCUPS) .2`; \
|
||||
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .2`; \
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# libcups.so.2, libcups.sl.1
|
||||
# libcups.so.2, libcups.sl.2
|
||||
#
|
||||
|
||||
libcups.so.2 libcups.sl.2: $(LIBOBJS) ../Makedefs
|
||||
echo Linking $@...
|
||||
$(DSO) $@ $(LIBOBJS)
|
||||
$(DSO) $(DSOFLAGS) -o $@ $(LIBOBJS) $(SSLLIBS)
|
||||
$(RM) `basename $@ .2`
|
||||
$(LN) $@ `basename $@ .2`
|
||||
|
||||
|
||||
#
|
||||
# libcups_s.a
|
||||
#
|
||||
|
||||
libcups_s.a: $(LIBOBJS) ../Makedefs
|
||||
echo Creating $@...
|
||||
$(RM) libcups_s.exp
|
||||
(echo _ipp_add_attr; echo _ipp_free_attr) >libcups_s.exp
|
||||
$(DSO) $(DSOFLAGS) -Wl,-bexport:libcups_s.exp -o libcups_s.o $(LIBOBJS) $(SSLLIBS) -lm
|
||||
$(RM) $@
|
||||
$(AR) $(ARFLAGS) $@ libcups_s.o
|
||||
|
||||
|
||||
#
|
||||
# libcups.la
|
||||
#
|
||||
|
||||
libcups.la: $(LIBOBJS) ../Makedefs
|
||||
echo Linking $@...
|
||||
$(CC) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) -version-info 2:0
|
||||
$(DSO) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
|
||||
-version-info 2:3 $(SSLLIBS)
|
||||
|
||||
|
||||
#
|
||||
@@ -123,6 +140,7 @@ cups_C.h: ../locale/C/cups_C
|
||||
|
||||
dest.o: cups.h http.h ipp.h language.h string.h
|
||||
emit.o: ppd.h
|
||||
encode.o: cups.h ipp.h string.h
|
||||
http.o: http.h ipp.h md5.h string.h
|
||||
ipp.o: http.h ipp.h string.h language.h
|
||||
language.o: cups_C.h language.h string.h
|
||||
@@ -133,6 +151,7 @@ page.o: ppd.h
|
||||
ppd.o: language.h ppd.h
|
||||
snprintf.o: string.h
|
||||
string.o: string.h
|
||||
tempfile.o: cups.h string.h
|
||||
usersys.o: cups.h
|
||||
util.o: cups.h http.h ipp.h
|
||||
|
||||
@@ -143,20 +162,23 @@ util.o: cups.h http.h ipp.h
|
||||
|
||||
testhttp: testhttp.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS)
|
||||
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS) $(SSLLIBS)
|
||||
|
||||
testhttp.o: http.h
|
||||
|
||||
|
||||
#
|
||||
# testppd (dependency on static CUPS library is intentional)
|
||||
# testppd
|
||||
#
|
||||
|
||||
testppd: testppd.o libcups.a
|
||||
testppd: testppd.o ppd-debug.o language.o mark.o page.o
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testppd.o libcups.a $(NETLIBS)
|
||||
$(CC) $(LDFLAGS) -o $@ testppd.o ppd-debug.o language.o mark.o page.o
|
||||
|
||||
testppd.o: ppd.h
|
||||
ppd-debug.o: ppd.c language.h ppd.h
|
||||
echo Compiling $< with debugging...
|
||||
$(CC) $(OPTIM) $(CFLAGS) -DDEBUG -c -o $@ $<
|
||||
|
||||
$(OBJS): ../Makedefs ../config.h
|
||||
|
||||
|
||||
+18
-10
@@ -85,11 +85,11 @@ LIB32=link.exe -lib
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\emit.c
|
||||
SOURCE=.\dest.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\filter.c
|
||||
SOURCE=.\emit.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -109,7 +109,11 @@ SOURCE=.\mark.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mime.c
|
||||
SOURCE=.\md5.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\md5passwd.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -125,10 +129,6 @@ SOURCE=.\ppd.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\raster.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\snprintf.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -137,7 +137,7 @@ SOURCE=.\string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\type.c
|
||||
SOURCE=.\usersys.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -153,6 +153,14 @@ SOURCE=.\cups.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\cups_C.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\debug.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\http.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -165,7 +173,7 @@ SOURCE=.\language.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mime.h
|
||||
SOURCE=.\md5.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -173,7 +181,7 @@ SOURCE=.\ppd.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\raster.h
|
||||
SOURCE=.\string.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
|
||||
+32
-5
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* API definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -29,8 +29,8 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/ipp.h>
|
||||
# include <cups/ppd.h>
|
||||
# include "ipp.h"
|
||||
# include "ppd.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -46,7 +46,7 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0100
|
||||
# define CUPS_VERSION 1.0110
|
||||
# define CUPS_DATE_ANY -1
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ enum /* Not a typedef'd enum so we can OR */
|
||||
CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
|
||||
CUPS_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */
|
||||
CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class */
|
||||
CUPS_PRINTER_DEFAULT = 0x20000, /* Default printer on network */
|
||||
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
|
||||
};
|
||||
|
||||
@@ -93,7 +94,22 @@ typedef struct /**** Destination ****/
|
||||
cups_option_t *options; /* Options */
|
||||
} cups_dest_t;
|
||||
|
||||
|
||||
typedef struct /**** Job ****/
|
||||
{
|
||||
int id; /* The job ID */
|
||||
char *dest, /* Printer or class name */
|
||||
*title, /* Title/job name */
|
||||
*user, /* User the submitted the job */
|
||||
*format; /* Document format */
|
||||
ipp_jstate_t state; /* Job state */
|
||||
int size, /* Size in kilobytes */
|
||||
priority; /* Priority (1-100) */
|
||||
time_t completed_time, /* Time the job was completed */
|
||||
creation_time, /* Time the job was created */
|
||||
processing_time; /* Time the job was processed */
|
||||
} cups_job_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
@@ -102,8 +118,12 @@ extern int cupsCancelJob(const char *printer, int job);
|
||||
#define cupsDoRequest(http,request,resource) cupsDoFileRequest((http),(request),(resource),NULL)
|
||||
extern ipp_t *cupsDoFileRequest(http_t *http, ipp_t *request,
|
||||
const char *resource, const char *filename);
|
||||
extern http_encryption_t cupsEncryption(void);
|
||||
extern void cupsFreeJobs(int num_jobs, cups_job_t *jobs);
|
||||
extern int cupsGetClasses(char ***classes);
|
||||
extern const char *cupsGetDefault(void);
|
||||
extern int cupsGetJobs(cups_job_t **jobs, const char *dest,
|
||||
int myjobs, int completed);
|
||||
extern const char *cupsGetPPD(const char *printer);
|
||||
extern int cupsGetPrinters(char ***printers);
|
||||
extern ipp_status_t cupsLastError(void);
|
||||
@@ -114,6 +134,7 @@ extern int cupsPrintFiles(const char *printer, int num_files,
|
||||
const char **files, const char *title,
|
||||
int num_options, cups_option_t *options);
|
||||
extern char *cupsTempFile(char *filename, int len);
|
||||
extern int cupsTempFd(char *filename, int len);
|
||||
|
||||
extern int cupsAddDest(const char *name, const char *instance,
|
||||
int num_dests, cups_dest_t **dests);
|
||||
@@ -125,6 +146,8 @@ extern void cupsSetDests(int num_dests, cups_dest_t *dests);
|
||||
|
||||
extern int cupsAddOption(const char *name, const char *value,
|
||||
int num_options, cups_option_t **options);
|
||||
extern void cupsEncodeOptions(ipp_t *ipp, int num_options,
|
||||
cups_option_t *options);
|
||||
extern void cupsFreeOptions(int num_options, cups_option_t *options);
|
||||
extern const char *cupsGetOption(const char *name, int num_options,
|
||||
cups_option_t *options);
|
||||
@@ -135,6 +158,10 @@ extern int cupsMarkOptions(ppd_file_t *ppd, int num_options,
|
||||
|
||||
extern const char *cupsGetPassword(const char *prompt);
|
||||
extern const char *cupsServer(void);
|
||||
extern void cupsSetEncryption(http_encryption_t e);
|
||||
extern void cupsSetPasswordCB(const char *(*cb)(const char *));
|
||||
extern void cupsSetServer(const char *server);
|
||||
extern void cupsSetUser(const char *user);
|
||||
extern const char *cupsUser(void);
|
||||
|
||||
# ifdef __cplusplus
|
||||
|
||||
+2
-1
@@ -18,7 +18,7 @@
|
||||
"Cyan",
|
||||
"Magenta",
|
||||
"Yellow",
|
||||
"Copyright 1993-2000 by Easy Software Products, All Rights Reserved.",
|
||||
"Copyright 1993-2001 by Easy Software Products, All Rights Reserved.",
|
||||
"General",
|
||||
"Printer",
|
||||
"Image",
|
||||
@@ -124,6 +124,7 @@
|
||||
"The request is too large for this server to process.",
|
||||
"The request URI is too large for this server to process.",
|
||||
"The request format is not understood by this server.",
|
||||
"426 An upgrade to a secure connection is required. If you are seeing this message in a web browser then it does not support HTTP encryption upgrades.",
|
||||
"500 The server has detected an unrecoverable error and cannot process your request.",
|
||||
"The requested method is not implemented by this server.",
|
||||
"The proxy server received an invalid response from an upstream server.",
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Debugging macros for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+279
-58
@@ -4,7 +4,7 @@
|
||||
* User-defined destination (and option) support for the Common UNIX
|
||||
* Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -24,12 +24,13 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsAddDest() - Add a destination to the list of destinations.
|
||||
* cupsFreeDests() - Free the memory used by the list of destinations.
|
||||
* cupsGetDest() - Get the named destination from the list.
|
||||
* cupsGetDests() - Get the list of destinations.
|
||||
* cupsSetDests() - Set the list of destinations.
|
||||
* cups_get_dests() - Get destinations from a file.
|
||||
* cupsAddDest() - Add a destination to the list of destinations.
|
||||
* cupsFreeDests() - Free the memory used by the list of destinations.
|
||||
* cupsGetDest() - Get the named destination from the list.
|
||||
* cupsGetDests() - Get the list of destinations.
|
||||
* cupsSetDests() - Set the list of destinations.
|
||||
* cups_get_dests() - Get destinations from a file.
|
||||
* cups_get_sdests() - Get destinations from a server.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -37,6 +38,7 @@
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include "language.h"
|
||||
#include "string.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
@@ -48,6 +50,8 @@
|
||||
|
||||
static int cups_get_dests(const char *filename, int num_dests,
|
||||
cups_dest_t **dests);
|
||||
static int cups_get_sdests(ipp_op_t op, int num_dests,
|
||||
cups_dest_t **dests);
|
||||
|
||||
|
||||
/*
|
||||
@@ -87,9 +91,8 @@ cupsAddDest(const char *name, /* I - Name of destination */
|
||||
for (i = num_dests; i > 0; i --, dest ++)
|
||||
if (strcasecmp(name, dest->name) < 0)
|
||||
break;
|
||||
else if (instance == NULL && dest->instance != NULL)
|
||||
break;
|
||||
else if (instance != NULL && dest->instance != NULL &&
|
||||
else if (strcasecmp(name, dest->name) == 0 &&
|
||||
instance != NULL && dest->instance != NULL &&
|
||||
strcasecmp(instance, dest->instance) < 0)
|
||||
break;
|
||||
|
||||
@@ -204,13 +207,13 @@ cupsGetDest(const char *name, /* I - Name of destination */
|
||||
int /* O - Number of destinations */
|
||||
cupsGetDests(cups_dest_t **dests) /* O - Destinations */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int num_dests; /* Number of destinations */
|
||||
int count; /* Number of printers/classes */
|
||||
char **names; /* Printer/class names */
|
||||
cups_dest_t *dest; /* Destination pointer */
|
||||
const char *home; /* HOME environment variable */
|
||||
char filename[1024]; /* Local ~/.lpoptions file */
|
||||
const char *defprinter; /* Default printer */
|
||||
char name[1024], /* Copy of printer name */
|
||||
*instance; /* Pointer to instance name */
|
||||
|
||||
|
||||
/*
|
||||
@@ -221,41 +224,35 @@ cupsGetDests(cups_dest_t **dests) /* O - Destinations */
|
||||
*dests = (cups_dest_t *)0;
|
||||
|
||||
/*
|
||||
* Grab all available printers...
|
||||
* Grab the printers and classes...
|
||||
*/
|
||||
|
||||
if ((count = cupsGetPrinters(&names)) > 0)
|
||||
{
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
num_dests = cupsAddDest(names[i], NULL, num_dests, dests);
|
||||
free(names[i]);
|
||||
}
|
||||
|
||||
free(names);
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab all available classes...
|
||||
*/
|
||||
|
||||
if ((count = cupsGetClasses(&names)) > 0)
|
||||
{
|
||||
for (i = 0; i < count; i ++)
|
||||
{
|
||||
num_dests = cupsAddDest(names[i], NULL, num_dests, dests);
|
||||
free(names[i]);
|
||||
}
|
||||
|
||||
free(names);
|
||||
}
|
||||
num_dests = cups_get_sdests(CUPS_GET_PRINTERS, num_dests, dests);
|
||||
num_dests = cups_get_sdests(CUPS_GET_CLASSES, num_dests, dests);
|
||||
|
||||
/*
|
||||
* Grab the default destination...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(cupsGetDefault(), NULL, num_dests, *dests)) != NULL)
|
||||
dest->is_default = 1;
|
||||
if ((defprinter = cupsGetDefault()) != NULL)
|
||||
{
|
||||
/*
|
||||
* Grab printer and instance name...
|
||||
*/
|
||||
|
||||
strncpy(name, defprinter, sizeof(name) - 1);
|
||||
name[sizeof(name) - 1] = '\0';
|
||||
|
||||
if ((instance = strchr(name, '/')) != NULL)
|
||||
*instance++ = '\0';
|
||||
|
||||
/*
|
||||
* Lookup the printer and instance and make it the default...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, num_dests, *dests)) != NULL)
|
||||
dest->is_default = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the /etc/cups/lpoptions and ~/.lpoptions files...
|
||||
@@ -292,35 +289,61 @@ cupsSetDests(int num_dests, /* I - Number of destinations */
|
||||
cups_dest_t *dests) /* I - Destinations */
|
||||
{
|
||||
int i, j; /* Looping vars */
|
||||
int wrote; /* Wrote definition? */
|
||||
cups_dest_t *dest; /* Current destination */
|
||||
cups_option_t *option; /* Current option */
|
||||
FILE *fp; /* File pointer */
|
||||
const char *home; /* HOME environment variable */
|
||||
char filename[1024]; /* lpoptions file */
|
||||
int num_temps; /* Number of temporary destinations */
|
||||
cups_dest_t *temps, /* Temporary destinations */
|
||||
*temp; /* Current temporary dest */
|
||||
const char *val; /* Value of temporary option */
|
||||
|
||||
|
||||
/*
|
||||
* Get the server destinations...
|
||||
*/
|
||||
|
||||
num_temps = cups_get_sdests(CUPS_GET_PRINTERS, 0, &temps);
|
||||
num_temps = cups_get_sdests(CUPS_GET_CLASSES, num_temps, &temps);
|
||||
|
||||
/*
|
||||
* Figure out which file to write to...
|
||||
*/
|
||||
|
||||
if (getuid() == 0)
|
||||
{
|
||||
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
|
||||
else
|
||||
strcpy(filename, CUPS_SERVERROOT "/lpoptions");
|
||||
}
|
||||
else if ((home = getenv("HOME")) != NULL)
|
||||
snprintf(filename, sizeof(filename), "%s/.lpoptions", home);
|
||||
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
|
||||
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
|
||||
else
|
||||
return;
|
||||
strcpy(filename, CUPS_SERVERROOT "/lpoptions");
|
||||
|
||||
#ifndef WIN32
|
||||
if (getuid())
|
||||
{
|
||||
/*
|
||||
* Merge in server defaults...
|
||||
*/
|
||||
|
||||
num_temps = cups_get_dests(filename, num_temps, &temps);
|
||||
|
||||
/*
|
||||
* Point to user defaults...
|
||||
*/
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
snprintf(filename, sizeof(filename), "%s/.lpoptions", home);
|
||||
}
|
||||
#endif /* !WIN32 */
|
||||
|
||||
/*
|
||||
* Try to open the file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(filename, "w")) == NULL)
|
||||
{
|
||||
cupsFreeDests(num_temps, temps);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write each printer; each line looks like:
|
||||
@@ -332,20 +355,67 @@ cupsSetDests(int num_dests, /* I - Number of destinations */
|
||||
for (i = num_dests, dest = dests; i > 0; i --, dest ++)
|
||||
if (dest->instance != NULL || dest->num_options != 0 || dest->is_default)
|
||||
{
|
||||
fprintf(fp, "%s %s", dest->is_default ? "Default" : "Dest",
|
||||
dest->name);
|
||||
if (dest->instance)
|
||||
fprintf(fp, "/%s", dest->instance);
|
||||
if (dest->is_default)
|
||||
{
|
||||
fprintf(fp, "Default %s", dest->name);
|
||||
if (dest->instance)
|
||||
fprintf(fp, "/%s", dest->instance);
|
||||
|
||||
wrote = 1;
|
||||
}
|
||||
else
|
||||
wrote = 0;
|
||||
|
||||
if ((temp = cupsGetDest(dest->name, dest->instance, num_temps, temps)) == NULL)
|
||||
temp = cupsGetDest(dest->name, NULL, num_temps, temps);
|
||||
|
||||
for (j = dest->num_options, option = dest->options; j > 0; j --, option ++)
|
||||
{
|
||||
/*
|
||||
* See if the server/global options match these; if so, don't
|
||||
* write 'em.
|
||||
*/
|
||||
|
||||
if (temp && (val = cupsGetOption(option->name, temp->num_options,
|
||||
temp->options)) != NULL)
|
||||
{
|
||||
if (strcasecmp(val, option->value) == 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Options don't match, write to the file...
|
||||
*/
|
||||
|
||||
if (!wrote)
|
||||
{
|
||||
fprintf(fp, "Dest %s", dest->name);
|
||||
if (dest->instance)
|
||||
fprintf(fp, "/%s", dest->instance);
|
||||
wrote = 1;
|
||||
}
|
||||
|
||||
if (option->value[0])
|
||||
fprintf(fp, " %s=%s", option->name, option->value);
|
||||
{
|
||||
if (strchr(option->value, ' ') != NULL)
|
||||
fprintf(fp, " %s=\"%s\"", option->name, option->value);
|
||||
else
|
||||
fprintf(fp, " %s=%s", option->name, option->value);
|
||||
}
|
||||
else
|
||||
fprintf(fp, " %s", option->name);
|
||||
}
|
||||
|
||||
fputs("\n", fp);
|
||||
if (wrote)
|
||||
fputs("\n", fp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free the temporary destinations...
|
||||
*/
|
||||
|
||||
cupsFreeDests(num_temps, temps);
|
||||
|
||||
/*
|
||||
* Close the file and return...
|
||||
*/
|
||||
@@ -370,8 +440,18 @@ cups_get_dests(const char *filename, /* I - File to read from */
|
||||
*lineptr, /* Pointer into line */
|
||||
*name, /* Name of destination/option */
|
||||
*instance; /* Instance of destination */
|
||||
const char *printer; /* PRINTER or LPDEST */
|
||||
|
||||
|
||||
/*
|
||||
* Check environment variables...
|
||||
*/
|
||||
|
||||
if ((printer = getenv("LPDEST")) == NULL)
|
||||
if ((printer = getenv("PRINTER")) != NULL)
|
||||
if (strcmp(printer, "lp") == 0)
|
||||
printer = NULL;
|
||||
|
||||
/*
|
||||
* Try to open the file...
|
||||
*/
|
||||
@@ -481,7 +561,7 @@ cups_get_dests(const char *filename, /* I - File to read from */
|
||||
* Set this as default if needed...
|
||||
*/
|
||||
|
||||
if (strncasecmp(line, "default", 7) == 0)
|
||||
if (strncasecmp(line, "default", 7) == 0 && printer == NULL)
|
||||
{
|
||||
for (i = 0; i < num_dests; i ++)
|
||||
(*dests)[i].is_default = 0;
|
||||
@@ -500,6 +580,147 @@ cups_get_dests(const char *filename, /* I - File to read from */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_get_sdests()' - Get destinations from a server.
|
||||
*/
|
||||
|
||||
static int /* O - Number of destinations */
|
||||
cups_get_sdests(ipp_op_t op, /* I - get-printers or get-classes */
|
||||
int num_dests, /* I - Number of destinations */
|
||||
cups_dest_t **dests) /* IO - Destinations */
|
||||
{
|
||||
cups_dest_t *dest; /* Current destination */
|
||||
http_t *http; /* HTTP connection */
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
const char *name; /* printer-name attribute */
|
||||
char job_sheets[1024]; /* job-sheets option */
|
||||
static const char *pattrs[] = /* Attributes we're interested in */
|
||||
{
|
||||
"printer-name",
|
||||
"job-sheets-default"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Connect to the CUPS server...
|
||||
*/
|
||||
|
||||
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
|
||||
return (num_dests);
|
||||
|
||||
/*
|
||||
* Build a CUPS_GET_PRINTERS or CUPS_GET_CLASSES request, which require
|
||||
* the following attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = op;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
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->language);
|
||||
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]),
|
||||
NULL, pattrs);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
{
|
||||
/*
|
||||
* Skip leading attributes until we hit a printer...
|
||||
*/
|
||||
|
||||
while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
|
||||
attr = attr->next;
|
||||
|
||||
if (attr == NULL)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Pull the needed attributes from this job...
|
||||
*/
|
||||
|
||||
name = NULL;
|
||||
|
||||
strcpy(job_sheets, "none,none");
|
||||
|
||||
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
|
||||
{
|
||||
if (strcmp(attr->name, "printer-name") == 0 &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
name = attr->values[0].string.text;
|
||||
|
||||
if (strcmp(attr->name, "job-sheets-default") == 0 &&
|
||||
(attr->value_tag == IPP_TAG_KEYWORD ||
|
||||
attr->value_tag == IPP_TAG_NAME))
|
||||
{
|
||||
if (attr->num_values == 2)
|
||||
snprintf(job_sheets, sizeof(job_sheets), "%s,%s",
|
||||
attr->values[0].string.text, attr->values[1].string.text);
|
||||
else
|
||||
strcpy(job_sheets, attr->values[0].string.text);
|
||||
}
|
||||
|
||||
attr = attr->next;
|
||||
}
|
||||
|
||||
/*
|
||||
* See if we have everything needed...
|
||||
*/
|
||||
|
||||
if (!name)
|
||||
{
|
||||
if (attr == NULL)
|
||||
break;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
num_dests = cupsAddDest(name, NULL, num_dests, dests);
|
||||
|
||||
if ((dest = cupsGetDest(name, NULL, num_dests, *dests)) != NULL)
|
||||
dest->num_options = cupsAddOption("job-sheets", job_sheets, 0,
|
||||
&(dest->options));
|
||||
|
||||
if (attr == NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the server connection...
|
||||
*/
|
||||
|
||||
httpClose(http);
|
||||
|
||||
/*
|
||||
* Return the count...
|
||||
*/
|
||||
|
||||
return (num_dests);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+296
-172
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD code emission routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -25,8 +25,11 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ppdEmit() - Emit code for marked options to a file.
|
||||
* ppdEmitFd() - Emit code for marked options to a file.
|
||||
* ppdCollect() - Collect all marked options that reside in the specified
|
||||
* ppdEmit() - Emit code for marked options to a file.
|
||||
* ppdEmitFd() - Emit code for marked options to a file.
|
||||
* ppdEmitJCL() - Emit code for JCL options to a file.
|
||||
* ppd_sort() - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -49,180 +52,17 @@
|
||||
*/
|
||||
|
||||
static int ppd_sort(ppd_choice_t **c1, ppd_choice_t **c2);
|
||||
static int ppd_collect(ppd_file_t *ppd, ppd_section_t section,
|
||||
ppd_choice_t ***choices);
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmit()' - Emit code for marked options to a file.
|
||||
* 'ppdCollect()' - Collect all marked options that reside in the specified
|
||||
* section.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
FILE *fp, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
ppd_size_t *size; /* Custom page size */
|
||||
|
||||
|
||||
if ((count = ppd_collect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
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
|
||||
* eventually be changed to use the parameter positions defined
|
||||
* in the PPD file...)
|
||||
*/
|
||||
|
||||
size = ppdPageSize(ppd, "Custom");
|
||||
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
|
||||
|
||||
if (choices[i]->code == NULL)
|
||||
{
|
||||
/*
|
||||
* This can happen with certain buggy PPD files that don't include
|
||||
* a CustomPageSize command sequence... We just use a generic
|
||||
* Level 2 command sequence...
|
||||
*/
|
||||
|
||||
fputs("pop pop pop\n", fp);
|
||||
fputs("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
|
||||
}
|
||||
}
|
||||
|
||||
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
|
||||
{
|
||||
if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
|
||||
putc('\n', fp);
|
||||
}
|
||||
|
||||
if (fputs("%%EndFeature\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmitFd()' - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
int fd, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
char buf[1024]; /* Output buffer for feature */
|
||||
|
||||
|
||||
if ((count = ppd_collect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
sprintf(buf, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
|
||||
|
||||
if (write(fd, buf, strlen(buf)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, "%%EndFeature\n", 13) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_sort()' - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
|
||||
ppd_sort(ppd_choice_t **c1, /* I - First choice */
|
||||
ppd_choice_t **c2) /* I - Second choice */
|
||||
{
|
||||
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (-1);
|
||||
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (1);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_collect()' - Collect all marked options that reside in the specified
|
||||
* section.
|
||||
*/
|
||||
|
||||
static int /* O - Number of options marked */
|
||||
ppd_collect(ppd_file_t *ppd, /* I - PPD file data */
|
||||
ppd_section_t section, /* I - Section to collect */
|
||||
ppd_choice_t ***choices) /* O - Pointers to choices */
|
||||
int /* O - Number of options marked */
|
||||
ppdCollect(ppd_file_t *ppd, /* I - PPD file data */
|
||||
ppd_section_t section, /* I - Section to collect */
|
||||
ppd_choice_t ***choices) /* O - Pointers to choices */
|
||||
{
|
||||
int i, j, k, m; /* Looping vars */
|
||||
ppd_group_t *g, /* Current group */
|
||||
@@ -296,6 +136,290 @@ ppd_collect(ppd_file_t *ppd, /* I - PPD file data */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmit()' - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
FILE *fp, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
ppd_size_t *size; /* Custom page size */
|
||||
|
||||
|
||||
if ((count = ppdCollect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send wrapper commands to prevent printer errors for unsupported
|
||||
* options...
|
||||
*/
|
||||
|
||||
if (fputs("[{\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
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
|
||||
* eventually be changed to use the parameter positions defined
|
||||
* in the PPD file...)
|
||||
*/
|
||||
|
||||
size = ppdPageSize(ppd, "Custom");
|
||||
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
|
||||
|
||||
if (choices[i]->code == NULL)
|
||||
{
|
||||
/*
|
||||
* This can happen with certain buggy PPD files that don't include
|
||||
* a CustomPageSize command sequence... We just use a generic
|
||||
* Level 2 command sequence...
|
||||
*/
|
||||
|
||||
fputs("pop pop pop\n", fp);
|
||||
fputs("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
|
||||
}
|
||||
}
|
||||
|
||||
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
|
||||
{
|
||||
if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
|
||||
putc('\n', fp);
|
||||
}
|
||||
|
||||
if (fputs("%%EndFeature\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (fputs("} stopped cleartomark\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmitFd()' - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
int fd, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
char buf[1024]; /* Output buffer for feature */
|
||||
|
||||
|
||||
if ((count = ppdCollect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send wrapper commands to prevent printer errors for unsupported
|
||||
* options...
|
||||
*/
|
||||
|
||||
if (write(fd, "[{\n", 3) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
snprintf(buf, sizeof(buf), "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice);
|
||||
|
||||
if (write(fd, buf, strlen(buf)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, "%%EndFeature\n", 13) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, "} stopped cleartomark\n", 22) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmitJCL()' - Emit code for JCL options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmitJCL(ppd_file_t *ppd, /* I - PPD file record */
|
||||
FILE *fp, /* I - File to write to */
|
||||
int job_id, /* I - Job ID */
|
||||
const char *user, /* I - Username */
|
||||
const char *title) /* I - Title */
|
||||
{
|
||||
const char *ptr; /* Pointer into JCL string */
|
||||
|
||||
|
||||
/*
|
||||
* Range check the input...
|
||||
*/
|
||||
|
||||
if (ppd == NULL || ppd->jcl_begin == NULL || ppd->jcl_ps == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* See if the printer supports HP PJL...
|
||||
*/
|
||||
|
||||
if (strncmp(ppd->jcl_begin, "\033%-12345X@", 10) == 0)
|
||||
{
|
||||
/*
|
||||
* This printer uses HP PJL commands for output; filter the output
|
||||
* so that we only have a single "@PJL JOB" command in the header...
|
||||
*/
|
||||
|
||||
fputs("\033%-12345X", fp);
|
||||
for (ptr = ppd->jcl_begin + 9; *ptr;)
|
||||
if (strncmp(ptr, "@PJL JOB", 8) == 0)
|
||||
{
|
||||
/*
|
||||
* Skip job command...
|
||||
*/
|
||||
|
||||
for (;*ptr; ptr ++)
|
||||
if (*ptr == '\n')
|
||||
break;
|
||||
|
||||
if (*ptr)
|
||||
ptr ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Copy line...
|
||||
*/
|
||||
|
||||
for (;*ptr; ptr ++)
|
||||
{
|
||||
putc(*ptr, fp);
|
||||
if (*ptr == '\n')
|
||||
break;
|
||||
}
|
||||
|
||||
if (*ptr)
|
||||
ptr ++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Eliminate any path info from the job title...
|
||||
*/
|
||||
|
||||
if ((ptr = strrchr(title, '/')) != NULL)
|
||||
title = ptr + 1;
|
||||
|
||||
/*
|
||||
* Send PJL JOB command before we enter PostScript mode...
|
||||
*/
|
||||
|
||||
fprintf(fp, "@PJL JOB NAME = \"%s\" DISPLAY = \"%d %s %s\"\n", title,
|
||||
job_id, user, title);
|
||||
}
|
||||
else
|
||||
fputs(ppd->jcl_begin, stdout);
|
||||
|
||||
ppdEmit(ppd, stdout, PPD_ORDER_JCL);
|
||||
fputs(ppd->jcl_ps, stdout);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_sort()' - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
|
||||
ppd_sort(ppd_choice_t **c1, /* I - First choice */
|
||||
ppd_choice_t **c2) /* I - Second choice */
|
||||
{
|
||||
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (-1);
|
||||
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (1);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+311
@@ -0,0 +1,311 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Option encoding routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2001 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:
|
||||
*
|
||||
* cupsEncodeOptions() - Encode printer options into IPP attributes.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsEncodeOptions()' - Encode printer options into IPP attributes.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t *options) /* I - Options */
|
||||
{
|
||||
int i, j; /* Looping vars */
|
||||
int count; /* Number of values */
|
||||
int n; /* Attribute value */
|
||||
char *s, /* Pointer into option value */
|
||||
*val, /* Pointer to option value */
|
||||
*copy, /* Copy of option value */
|
||||
*sep; /* Option separator */
|
||||
ipp_attribute_t *attr; /* IPP job-id attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)\n", ipp, num_options, options));
|
||||
|
||||
if (ipp == NULL || num_options < 1 || options == NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Handle the document format stuff first...
|
||||
*/
|
||||
|
||||
if ((val = (char *)cupsGetOption("document-format", num_options, options)) != NULL)
|
||||
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, val);
|
||||
else if (cupsGetOption("raw", num_options, options))
|
||||
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/vnd.cups-raw");
|
||||
else
|
||||
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/octet-stream");
|
||||
|
||||
/*
|
||||
* Then add all other options...
|
||||
*/
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
{
|
||||
/*
|
||||
* Skip document format options - handled above...
|
||||
*/
|
||||
|
||||
if (strcasecmp(options[i].name, "raw") == 0 ||
|
||||
strcasecmp(options[i].name, "document-format") == 0 ||
|
||||
!options[i].name[0])
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Count the number of values...
|
||||
*/
|
||||
|
||||
for (count = 1, sep = options[i].value;
|
||||
(sep = strchr(sep + 1, ',')) != NULL;
|
||||
count ++);
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: option = \'%s\', count = %d\n",
|
||||
options[i].name, count));
|
||||
|
||||
if ((attr = _ipp_add_attr(ipp, count)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for attributes!");
|
||||
return;
|
||||
}
|
||||
|
||||
attr->group_tag = IPP_TAG_JOB;
|
||||
|
||||
if ((attr->name = strdup(options[i].name)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for name!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
/*
|
||||
* Make a copy of the value we can fiddle with...
|
||||
*/
|
||||
|
||||
if ((copy = strdup(options[i].value)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for value copy!");
|
||||
return;
|
||||
}
|
||||
|
||||
val = copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Since we have a single value, use the value directly...
|
||||
*/
|
||||
|
||||
val = options[i].value;
|
||||
copy = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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, option=MxN, and option=val1,val2,...,valN.
|
||||
*/
|
||||
|
||||
if (*val == '\0')
|
||||
{
|
||||
/*
|
||||
* Old-style System V boolean value...
|
||||
*/
|
||||
|
||||
attr->value_tag = IPP_TAG_BOOLEAN;
|
||||
|
||||
if (strncasecmp(attr->name, "no", 2) == 0)
|
||||
{
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
|
||||
strcpy(attr->name, attr->name + 2);
|
||||
attr->values[0].boolean = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
|
||||
attr->values[0].boolean = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Scan the value string for values...
|
||||
*/
|
||||
|
||||
for (j = 0; *val != '\0'; val = sep, j ++)
|
||||
{
|
||||
/*
|
||||
* Find the end of this value and mark it if needed...
|
||||
*/
|
||||
|
||||
if ((sep = strchr(val, ',')) != NULL)
|
||||
*sep++ = '\0';
|
||||
else
|
||||
sep = val + strlen(val);
|
||||
|
||||
/*
|
||||
* See what kind of value it is...
|
||||
*/
|
||||
|
||||
if (strcasecmp(val, "true") == 0 ||
|
||||
strcasecmp(val, "on") == 0 ||
|
||||
strcasecmp(val, "yes") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - true...
|
||||
*/
|
||||
|
||||
attr->value_tag = IPP_TAG_BOOLEAN;
|
||||
attr->values[j].boolean = 1;
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
|
||||
}
|
||||
else if (strcasecmp(val, "false") == 0 ||
|
||||
strcasecmp(val, "off") == 0 ||
|
||||
strcasecmp(val, "no") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - false...
|
||||
*/
|
||||
|
||||
attr->value_tag = IPP_TAG_BOOLEAN;
|
||||
attr->values[j].boolean = 0;
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Number, range, resolution, or string...
|
||||
*/
|
||||
|
||||
n = strtol(val, &s, 0);
|
||||
|
||||
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
|
||||
{
|
||||
/*
|
||||
* String value(s)...
|
||||
*/
|
||||
|
||||
if ((attr->values[j].string.text = strdup(val)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
|
||||
return;
|
||||
}
|
||||
|
||||
attr->value_tag = IPP_TAG_NAME;
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
|
||||
}
|
||||
else if (*s == '-')
|
||||
{
|
||||
attr->value_tag = IPP_TAG_RANGE;
|
||||
attr->values[j].range.lower = n;
|
||||
attr->values[j].range.upper = strtol(s + 1, NULL, 0);
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Added range option value %d-%d...\n",
|
||||
n, attr->values[j].range.upper));
|
||||
}
|
||||
else if (*s == 'x')
|
||||
{
|
||||
attr->value_tag = IPP_TAG_RESOLUTION;
|
||||
attr->values[j].resolution.xres = n;
|
||||
attr->values[j].resolution.yres = strtol(s + 1, &s, 0);
|
||||
|
||||
if (strcasecmp(s, "dpc") == 0)
|
||||
attr->values[j].resolution.units = IPP_RES_PER_CM;
|
||||
else if (strcasecmp(s, "dpi") == 0)
|
||||
attr->values[j].resolution.units = IPP_RES_PER_INCH;
|
||||
else
|
||||
{
|
||||
if ((attr->values[j].string.text = strdup(val)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
|
||||
return;
|
||||
}
|
||||
|
||||
attr->value_tag = IPP_TAG_NAME;
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Adding resolution option value %s...\n",
|
||||
val));
|
||||
}
|
||||
else
|
||||
{
|
||||
attr->value_tag = IPP_TAG_INTEGER;
|
||||
attr->values[j].integer = n;
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Adding integer option value %d...\n", n));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+496
-83
@@ -3,9 +3,9 @@
|
||||
*
|
||||
* HTTP routines for the Common UNIX Printing System (CUPS) scheduler.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These statusd instructions, statements, and computer programs are the
|
||||
* 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
|
||||
@@ -23,39 +23,43 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* httpInitialize() - Initialize the HTTP interface library and set the
|
||||
* default HTTP proxy (if any).
|
||||
* httpCheck() - Check to see if there is a pending response from
|
||||
* the server.
|
||||
* httpClose() - Close an HTTP connection...
|
||||
* httpConnect() - Connect to a HTTP server.
|
||||
* httpReconnect() - Reconnect to a HTTP server...
|
||||
* httpSeparate() - Separate a Universal Resource Identifier into its
|
||||
* components.
|
||||
* httpSetField() - Set the value of an HTTP header.
|
||||
* httpDelete() - Send a DELETE request to the server.
|
||||
* httpGet() - Send a GET request to the server.
|
||||
* httpHead() - Send a HEAD request to the server.
|
||||
* httpOptions() - Send an OPTIONS request to the server.
|
||||
* httpPost() - Send a POST request to the server.
|
||||
* httpPut() - Send a PUT request to the server.
|
||||
* httpTrace() - Send an TRACE request to the server.
|
||||
* httpFlush() - Flush data from a HTTP connection.
|
||||
* httpRead() - Read data from a HTTP connection.
|
||||
* httpWrite() - Write data to a HTTP connection.
|
||||
* httpGets() - Get a line of text from a HTTP connection.
|
||||
* httpPrintf() - Print a formatted string to a HTTP connection.
|
||||
* httpStatus() - Return a short string describing a HTTP status code.
|
||||
* httpGetDateString() - Get a formatted date/time string from a time value.
|
||||
* httpGetDateTime() - Get a time value from a formatted date/time string.
|
||||
* httpUpdate() - Update the current HTTP state for incoming data.
|
||||
* httpDecode64() - Base64-decode a string.
|
||||
* httpEncode64() - Base64-encode a string.
|
||||
* httpGetLength() - Get the amount of data remaining from the
|
||||
* content-length or transfer-encoding fields.
|
||||
* http_field() - Return the field index for a field name.
|
||||
* http_send() - Send a request with all fields and the trailing
|
||||
* blank line.
|
||||
* httpInitialize() - Initialize the HTTP interface library and set the
|
||||
* default HTTP proxy (if any).
|
||||
* httpCheck() - Check to see if there is a pending response from
|
||||
* the server.
|
||||
* httpClose() - Close an HTTP connection...
|
||||
* httpConnect() - Connect to a HTTP server.
|
||||
* httpConnectEncrypt() - Connect to a HTTP server using encryption.
|
||||
* httpEncryption() - Set the required encryption on the link.
|
||||
* httpReconnect() - Reconnect to a HTTP server...
|
||||
* httpSeparate() - Separate a Universal Resource Identifier into its
|
||||
* components.
|
||||
* httpGetSubField() - Get a sub-field value.
|
||||
* httpSetField() - Set the value of an HTTP header.
|
||||
* httpDelete() - Send a DELETE request to the server.
|
||||
* httpGet() - Send a GET request to the server.
|
||||
* httpHead() - Send a HEAD request to the server.
|
||||
* httpOptions() - Send an OPTIONS request to the server.
|
||||
* httpPost() - Send a POST request to the server.
|
||||
* httpPut() - Send a PUT request to the server.
|
||||
* httpTrace() - Send an TRACE request to the server.
|
||||
* httpFlush() - Flush data from a HTTP connection.
|
||||
* httpRead() - Read data from a HTTP connection.
|
||||
* httpWrite() - Write data to a HTTP connection.
|
||||
* httpGets() - Get a line of text from a HTTP connection.
|
||||
* httpPrintf() - Print a formatted string to a HTTP connection.
|
||||
* httpStatus() - Return a short string describing a HTTP status code.
|
||||
* httpGetDateString() - Get a formatted date/time string from a time value.
|
||||
* httpGetDateTime() - Get a time value from a formatted date/time string.
|
||||
* httpUpdate() - Update the current HTTP state for incoming data.
|
||||
* httpDecode64() - Base64-decode a string.
|
||||
* httpEncode64() - Base64-encode a string.
|
||||
* httpGetLength() - Get the amount of data remaining from the
|
||||
* content-length or transfer-encoding fields.
|
||||
* http_field() - Return the field index for a field name.
|
||||
* http_send() - Send a request with all fields and the trailing
|
||||
* blank line.
|
||||
* http_upgrade() - Force upgrade to TLS encryption.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -78,6 +82,13 @@
|
||||
# include <signal.h>
|
||||
#endif /* !WIN32 && !__EMX__ */
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
# include <openssl/err.h>
|
||||
# include <openssl/rand.h>
|
||||
# include <openssl/ssl.h>
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
/*
|
||||
* Some operating systems have done away with the Fxxxx constants for
|
||||
* the fcntl() call; this works around that "feature"...
|
||||
@@ -95,6 +106,9 @@
|
||||
static http_field_t http_field(const char *name);
|
||||
static int http_send(http_t *http, http_state_t request,
|
||||
const char *uri);
|
||||
#ifdef HAVE_LIBSSL
|
||||
static int http_upgrade(http_t *http);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
/*
|
||||
@@ -166,6 +180,12 @@ static const char *months[12] =
|
||||
void
|
||||
httpInitialize(void)
|
||||
{
|
||||
#ifdef HAVE_LIBSSL
|
||||
struct timeval curtime; /* Current time in microseconds */
|
||||
int i; /* Looping var */
|
||||
unsigned char data[1024]; /* Seed data */
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
WSADATA winsockdata; /* WinSock data */
|
||||
static int initialized = 0;/* Has WinSock been initialized? */
|
||||
@@ -189,6 +209,24 @@ httpInitialize(void)
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
SSL_load_error_strings();
|
||||
SSL_library_init();
|
||||
|
||||
/*
|
||||
* Using the current time is a dubious random seed, but on some systems
|
||||
* it is the best we can do (on others, this seed isn't even used...)
|
||||
*/
|
||||
|
||||
gettimeofday(&curtime, NULL);
|
||||
srand(curtime.tv_sec + curtime.tv_usec);
|
||||
|
||||
for (i = 0; i < sizeof(data); i ++)
|
||||
data[i] = rand(); /* Yes, this is a poor source of random data... */
|
||||
|
||||
RAND_seed(&data, sizeof(data));
|
||||
#endif /* HAVE_LIBSSL */
|
||||
}
|
||||
|
||||
|
||||
@@ -234,9 +272,29 @@ httpCheck(http_t *http) /* I - HTTP connection */
|
||||
void
|
||||
httpClose(http_t *http) /* I - Connection to close */
|
||||
{
|
||||
if (http == NULL)
|
||||
#ifdef HAVE_LIBSSL
|
||||
SSL_CTX *context; /* Context for encryption */
|
||||
SSL *conn; /* Connection for encryption */
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
if (!http)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->tls)
|
||||
{
|
||||
conn = (SSL *)(http->tls);
|
||||
context = SSL_get_SSL_CTX(conn);
|
||||
|
||||
SSL_shutdown(conn);
|
||||
SSL_CTX_free(context);
|
||||
SSL_free(conn);
|
||||
|
||||
http->tls = NULL;
|
||||
}
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
#ifdef WIN32
|
||||
closesocket(http->fd);
|
||||
#else
|
||||
@@ -254,6 +312,32 @@ httpClose(http_t *http) /* I - Connection to close */
|
||||
http_t * /* O - New HTTP connection */
|
||||
httpConnect(const char *host, /* I - Host to connect to */
|
||||
int port) /* I - Port number */
|
||||
{
|
||||
http_encryption_t encrypt;/* Type of encryption to use */
|
||||
|
||||
|
||||
/*
|
||||
* Set the default encryption status...
|
||||
*/
|
||||
|
||||
if (port == 443)
|
||||
encrypt = HTTP_ENCRYPT_ALWAYS;
|
||||
else
|
||||
encrypt = HTTP_ENCRYPT_IF_REQUESTED;
|
||||
|
||||
return (httpConnectEncrypt(host, port, encrypt));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpConnectEncrypt()' - Connect to a HTTP server using encryption.
|
||||
*/
|
||||
|
||||
http_t * /* O - New HTTP connection */
|
||||
httpConnectEncrypt(const char *host, /* I - Host to connect to */
|
||||
int port, /* I - Port number */
|
||||
http_encryption_t encrypt)
|
||||
/* I - Type of encryption to use */
|
||||
{
|
||||
http_t *http; /* New HTTP connection */
|
||||
struct hostent *hostaddr; /* Host address data */
|
||||
@@ -269,6 +353,23 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
*/
|
||||
|
||||
if ((hostaddr = gethostbyname(host)) == NULL)
|
||||
{
|
||||
/*
|
||||
* This hack to make users that don't have a localhost entry in
|
||||
* their hosts file or DNS happy...
|
||||
*/
|
||||
|
||||
if (strcasecmp(host, "localhost") != 0)
|
||||
return (NULL);
|
||||
else if ((hostaddr = gethostbyname("127.0.0.1")) == NULL)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify that it is an IPv4 address (IPv6 support will come in CUPS 1.2...)
|
||||
*/
|
||||
|
||||
if (hostaddr->h_addrtype != AF_INET || hostaddr->h_length != 4)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
@@ -282,6 +383,7 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
http->version = HTTP_1_1;
|
||||
http->blocking = 1;
|
||||
http->activity = time(NULL);
|
||||
http->fd = -1;
|
||||
|
||||
/*
|
||||
* Copy the hostname and port and then "reconnect"...
|
||||
@@ -295,6 +397,17 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
#else
|
||||
http->hostaddr.sin_port = htons(port);
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
* Set the encryption status...
|
||||
*/
|
||||
|
||||
http->encryption = encrypt;
|
||||
|
||||
/*
|
||||
* Connect to the remote system...
|
||||
*/
|
||||
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
free(http);
|
||||
@@ -305,6 +418,36 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpEncryption()' - Set the required encryption on the link.
|
||||
*/
|
||||
|
||||
int /* O - -1 on error, 0 on success */
|
||||
httpEncryption(http_t *http, /* I - HTTP data */
|
||||
http_encryption_t e) /* I - New encryption preference */
|
||||
{
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (!http)
|
||||
return (0);
|
||||
|
||||
http->encryption = e;
|
||||
|
||||
if ((http->encryption == HTTP_ENCRYPT_ALWAYS && !http->tls) ||
|
||||
(http->encryption == HTTP_ENCRYPT_NEVER && http->tls))
|
||||
return (httpReconnect(http));
|
||||
else if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
|
||||
return (http_upgrade(http));
|
||||
else
|
||||
return (0);
|
||||
#else
|
||||
if (e == HTTP_ENCRYPT_ALWAYS || e == HTTP_ENCRYPT_REQUIRED)
|
||||
return (-1);
|
||||
else
|
||||
return (0);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpReconnect()' - Reconnect to a HTTP server...
|
||||
*/
|
||||
@@ -312,14 +455,30 @@ httpConnect(const char *host, /* I - Host to connect to */
|
||||
int /* O - 0 on success, non-zero on failure */
|
||||
httpReconnect(http_t *http) /* I - HTTP data */
|
||||
{
|
||||
int val; /* Socket option value */
|
||||
int val; /* Socket option value */
|
||||
#ifdef HAVE_LIBSSL
|
||||
SSL_CTX *context; /* Context for encryption */
|
||||
SSL *conn; /* Connection for encryption */
|
||||
|
||||
|
||||
if (http->tls)
|
||||
{
|
||||
conn = (SSL *)(http->tls);
|
||||
context = SSL_get_SSL_CTX(conn);
|
||||
|
||||
SSL_shutdown(conn);
|
||||
SSL_CTX_free(context);
|
||||
SSL_free(conn);
|
||||
|
||||
http->tls = NULL;
|
||||
}
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
/*
|
||||
* Close any previously open socket...
|
||||
*/
|
||||
|
||||
if (http->fd)
|
||||
if (http->fd >= 0)
|
||||
#ifdef WIN32
|
||||
closesocket(http->fd);
|
||||
#else
|
||||
@@ -374,12 +533,52 @@ httpReconnect(http_t *http) /* I - HTTP data */
|
||||
close(http->fd);
|
||||
#endif
|
||||
|
||||
http->fd = -1;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
http->error = 0;
|
||||
http->status = HTTP_CONTINUE;
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->encryption == HTTP_ENCRYPT_ALWAYS)
|
||||
{
|
||||
/*
|
||||
* Always do encryption via SSL.
|
||||
*/
|
||||
|
||||
context = SSL_CTX_new(SSLv23_method());
|
||||
conn = SSL_new(context);
|
||||
|
||||
SSL_set_fd(conn, http->fd);
|
||||
if (SSL_connect(conn) != 1)
|
||||
{
|
||||
SSL_CTX_free(context);
|
||||
SSL_free(conn);
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
http->error = WSAGetLastError();
|
||||
#else
|
||||
http->error = errno;
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
http->status = HTTP_ERROR;
|
||||
|
||||
#ifdef WIN32
|
||||
closesocket(http->fd);
|
||||
#else
|
||||
close(http->fd);
|
||||
#endif
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
http->tls = conn;
|
||||
}
|
||||
else if (http->encryption == HTTP_ENCRYPT_REQUIRED)
|
||||
return (http_upgrade(http));
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -397,13 +596,30 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
int *port, /* O - Port number to use */
|
||||
char *resource) /* O - Resource/filename [1024] */
|
||||
{
|
||||
char *ptr; /* Pointer into string... */
|
||||
char *ptr; /* Pointer into string... */
|
||||
const char *atsign, /* @ sign */
|
||||
*slash; /* Separator */
|
||||
char safeuri[HTTP_MAX_URI]; /* "Safe" local copy of URI */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (uri == NULL || method == NULL || username == NULL || host == NULL ||
|
||||
port == NULL || resource == NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Copy the URL to a local string to make sure we don't have a URL
|
||||
* longer than HTTP_MAX_URI characters long...
|
||||
*/
|
||||
|
||||
strncpy(safeuri, uri, sizeof(safeuri));
|
||||
safeuri[sizeof(safeuri) - 1] = '\0';
|
||||
|
||||
uri = safeuri;
|
||||
|
||||
/*
|
||||
* Grab the method portion of the URI...
|
||||
*/
|
||||
@@ -422,9 +638,9 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
* Standard URI with method...
|
||||
*/
|
||||
|
||||
ptr = host;
|
||||
while (*uri != ':' && *uri != '\0')
|
||||
*ptr++ = *uri++;
|
||||
for (ptr = host; *uri != ':' && *uri != '\0'; uri ++)
|
||||
if (ptr < (host + HTTP_MAX_URI - 1))
|
||||
*ptr++ = *uri;
|
||||
|
||||
*ptr = '\0';
|
||||
if (*uri == ':')
|
||||
@@ -439,7 +655,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
{
|
||||
if ((ptr = strchr(host, '/')) != NULL)
|
||||
{
|
||||
strncpy(resource, ptr, HTTP_MAX_URI - 1);
|
||||
strncpy(resource, ptr, HTTP_MAX_URI);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
*ptr = '\0';
|
||||
}
|
||||
@@ -456,7 +672,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
|
||||
if (*uri == '/')
|
||||
{
|
||||
strncpy(resource, uri, HTTP_MAX_URI - 1);
|
||||
strncpy(resource, uri, HTTP_MAX_URI);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
}
|
||||
@@ -490,44 +706,49 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab the hostname...
|
||||
* Grab the username, if any...
|
||||
*/
|
||||
|
||||
while (*uri == '/')
|
||||
uri ++;
|
||||
|
||||
ptr = host;
|
||||
while (!(*uri == ':' && isdigit(uri[1])) && *uri != '@' && *uri != '/' && *uri != '\0')
|
||||
*ptr ++ = *uri ++;
|
||||
if ((slash = strchr(uri, '/')) == NULL)
|
||||
slash = uri + strlen(uri);
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
if (*uri == '@')
|
||||
if ((atsign = strchr(uri, '@')) != NULL && atsign < slash)
|
||||
{
|
||||
/*
|
||||
* Got a username...
|
||||
* Got a username:password combo...
|
||||
*/
|
||||
|
||||
strncpy(username, host, 31);
|
||||
username[31] = '\0';
|
||||
|
||||
ptr = host;
|
||||
uri ++;
|
||||
while (*uri != ':' && *uri != '/' && *uri != '\0')
|
||||
*ptr ++ = *uri ++;
|
||||
for (ptr = username; uri < atsign; uri ++)
|
||||
if (ptr < (username + HTTP_MAX_URI - 1))
|
||||
*ptr++ = *uri;
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
uri = atsign + 1;
|
||||
}
|
||||
else
|
||||
username[0] = '\0';
|
||||
|
||||
/*
|
||||
* Grab the hostname...
|
||||
*/
|
||||
|
||||
for (ptr = host; *uri != ':' && *uri != '/' && *uri != '\0'; uri ++)
|
||||
if (ptr < (host + HTTP_MAX_URI - 1))
|
||||
*ptr++ = *uri;
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
if (*uri != ':')
|
||||
{
|
||||
if (strcasecmp(method, "http") == 0)
|
||||
*port = 80;
|
||||
else if (strcasecmp(method, "https") == 0)
|
||||
*port = 443;
|
||||
else if (strcasecmp(method, "ipp") == 0) /* Not registered yet... */
|
||||
else if (strcasecmp(method, "ipp") == 0)
|
||||
*port = ippPort();
|
||||
else if (strcasecmp(method, "socket") == 0) /* Not registered yet... */
|
||||
*port = 9100;
|
||||
@@ -564,7 +785,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
* The remaining portion is the resource string...
|
||||
*/
|
||||
|
||||
strncpy(resource, uri, HTTP_MAX_URI - 1);
|
||||
strncpy(resource, uri, HTTP_MAX_URI);
|
||||
resource[HTTP_MAX_URI - 1] = '\0';
|
||||
}
|
||||
|
||||
@@ -590,13 +811,16 @@ httpGetSubField(http_t *http, /* I - HTTP data */
|
||||
name == NULL || value == NULL)
|
||||
return (NULL);
|
||||
|
||||
DEBUG_printf(("httpGetSubField(%p, %d, \"%s\", %p)\n",
|
||||
http, field, name, value));
|
||||
|
||||
for (fptr = http->fields[field]; *fptr;)
|
||||
{
|
||||
/*
|
||||
* Skip leading whitespace...
|
||||
*/
|
||||
|
||||
while (isspace(*fptr));
|
||||
while (isspace(*fptr))
|
||||
fptr ++;
|
||||
|
||||
if (*fptr == ',')
|
||||
@@ -615,23 +839,28 @@ httpGetSubField(http_t *http, /* I - HTTP data */
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
DEBUG_printf(("name = \"%s\"\n", temp));
|
||||
|
||||
/*
|
||||
* Skip trailing chars up to the '='...
|
||||
*/
|
||||
|
||||
while (*fptr && *fptr != '=')
|
||||
while (isspace(*fptr))
|
||||
fptr ++;
|
||||
|
||||
if (!*fptr)
|
||||
break;
|
||||
|
||||
if (*fptr != '=')
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Skip = and leading whitespace...
|
||||
*/
|
||||
|
||||
fptr ++;
|
||||
|
||||
while (isspace(*fptr));
|
||||
while (isspace(*fptr))
|
||||
fptr ++;
|
||||
|
||||
if (*fptr == '\"')
|
||||
@@ -668,6 +897,8 @@ httpGetSubField(http_t *http, /* I - HTTP data */
|
||||
fptr ++;
|
||||
}
|
||||
|
||||
DEBUG_printf(("value = \"%s\"\n", value));
|
||||
|
||||
/*
|
||||
* See if this is the one...
|
||||
*/
|
||||
@@ -878,6 +1109,10 @@ httpRead(http_t *http, /* I - HTTP data */
|
||||
if (http->used > 0)
|
||||
memcpy(http->buffer, http->buffer + length, http->used);
|
||||
}
|
||||
#ifdef HAVE_LIBSSL
|
||||
else if (http->tls)
|
||||
bytes = SSL_read((SSL *)(http->tls), buffer, length);
|
||||
#endif /* HAVE_LIBSSL */
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("httpRead: reading %d bytes from socket...\n", length));
|
||||
@@ -946,6 +1181,8 @@ httpWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
if (http->state == HTTP_POST_RECV)
|
||||
http->state ++;
|
||||
else if (http->state == HTTP_PUT_RECV)
|
||||
http->state = HTTP_STATUS;
|
||||
else
|
||||
http->state = HTTP_WAITING;
|
||||
|
||||
@@ -960,7 +1197,13 @@ httpWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
while (length > 0)
|
||||
{
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->tls)
|
||||
bytes = SSL_write((SSL *)(http->tls), buffer, length);
|
||||
else
|
||||
#endif /* HAVE_LIBSSL */
|
||||
bytes = send(http->fd, buffer, length, 0);
|
||||
|
||||
if (bytes < 0)
|
||||
{
|
||||
DEBUG_puts("httpWrite: error writing data...\n");
|
||||
@@ -1040,13 +1283,21 @@ httpGets(char *line, /* I - Line to read into */
|
||||
else
|
||||
bufptr ++;
|
||||
|
||||
if (bufptr >= bufend)
|
||||
if (bufptr >= bufend && http->used < HTTP_MAX_BUFFER)
|
||||
{
|
||||
/*
|
||||
* No newline; see if there is more data to be read...
|
||||
*/
|
||||
|
||||
if ((bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0)) < 0)
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->tls)
|
||||
bytes = SSL_read((SSL *)(http->tls), bufend,
|
||||
HTTP_MAX_BUFFER - http->used);
|
||||
else
|
||||
#endif /* HAVE_LIBSSL */
|
||||
bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0);
|
||||
|
||||
if (bytes < 0)
|
||||
{
|
||||
/*
|
||||
* Nope, can't get a line this time...
|
||||
@@ -1088,7 +1339,7 @@ httpGets(char *line, /* I - Line to read into */
|
||||
bufend += bytes;
|
||||
}
|
||||
}
|
||||
while (bufptr >= bufend);
|
||||
while (bufptr >= bufend && http->used < HTTP_MAX_BUFFER);
|
||||
|
||||
http->activity = time(NULL);
|
||||
|
||||
@@ -1099,6 +1350,7 @@ httpGets(char *line, /* I - Line to read into */
|
||||
lineptr = line;
|
||||
bufptr = http->buffer;
|
||||
bytes = 0;
|
||||
length --;
|
||||
|
||||
while (bufptr < bufend && bytes < length)
|
||||
{
|
||||
@@ -1107,14 +1359,7 @@ httpGets(char *line, /* I - Line to read into */
|
||||
if (*bufptr == 0x0a)
|
||||
{
|
||||
bufptr ++;
|
||||
*lineptr = '\0';
|
||||
|
||||
http->used -= bytes;
|
||||
if (http->used > 0)
|
||||
memcpy(http->buffer, bufptr, http->used);
|
||||
|
||||
DEBUG_printf(("httpGets(): Returning \"%s\"\n", line));
|
||||
return (line);
|
||||
break;
|
||||
}
|
||||
else if (*bufptr == 0x0d)
|
||||
bufptr ++;
|
||||
@@ -1122,6 +1367,18 @@ httpGets(char *line, /* I - Line to read into */
|
||||
*lineptr++ = *bufptr++;
|
||||
}
|
||||
|
||||
if (bytes > 0)
|
||||
{
|
||||
*lineptr = '\0';
|
||||
|
||||
http->used -= bytes;
|
||||
if (http->used > 0)
|
||||
memcpy(http->buffer, bufptr, http->used);
|
||||
|
||||
DEBUG_printf(("httpGets(): Returning \"%s\"\n", line));
|
||||
return (line);
|
||||
}
|
||||
|
||||
DEBUG_puts("httpGets(): No new line available!");
|
||||
|
||||
return (NULL);
|
||||
@@ -1152,8 +1409,17 @@ httpPrintf(http_t *http, /* I - HTTP data */
|
||||
DEBUG_printf(("httpPrintf: %s", buf));
|
||||
|
||||
for (tbytes = 0, bufptr = buf; tbytes < bytes; tbytes += nbytes, bufptr += nbytes)
|
||||
if ((nbytes = send(http->fd, bufptr, bytes - tbytes, 0)) < 0)
|
||||
{
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->tls)
|
||||
nbytes = SSL_write((SSL *)(http->tls), bufptr, bytes - tbytes);
|
||||
else
|
||||
#endif /* HAVE_LIBSSL */
|
||||
nbytes = send(http->fd, bufptr, bytes - tbytes, 0);
|
||||
|
||||
if (nbytes < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
@@ -1168,6 +1434,10 @@ httpStatus(http_status_t status) /* I - HTTP status code */
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case HTTP_CONTINUE :
|
||||
return ("Continue");
|
||||
case HTTP_SWITCHING_PROTOCOLS :
|
||||
return ("Switching Protocols");
|
||||
case HTTP_OK :
|
||||
return ("OK");
|
||||
case HTTP_CREATED :
|
||||
@@ -1190,6 +1460,8 @@ httpStatus(http_status_t status) /* I - HTTP status code */
|
||||
return ("Request Entity Too Large");
|
||||
case HTTP_URI_TOO_LONG :
|
||||
return ("URI Too Long");
|
||||
case HTTP_UPGRADE_REQUIRED :
|
||||
return ("Upgrade Required");
|
||||
case HTTP_NOT_IMPLEMENTED :
|
||||
return ("Not Implemented");
|
||||
case HTTP_NOT_SUPPORTED :
|
||||
@@ -1212,9 +1484,9 @@ httpGetDateString(time_t t) /* I - UNIX time */
|
||||
|
||||
|
||||
tdate = gmtime(&t);
|
||||
sprintf(datetime, "%s, %02d %s %d %02d:%02d:%02d GMT",
|
||||
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
|
||||
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
|
||||
snprintf(datetime, sizeof(datetime), "%s, %02d %s %d %02d:%02d:%02d GMT",
|
||||
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
|
||||
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
|
||||
|
||||
return (datetime);
|
||||
}
|
||||
@@ -1268,6 +1540,10 @@ httpUpdate(http_t *http) /* I - HTTP data */
|
||||
http_field_t field; /* Field index */
|
||||
int major, minor; /* HTTP version numbers */
|
||||
http_status_t status; /* Authorization status */
|
||||
#ifdef HAVE_LIBSSL
|
||||
SSL_CTX *context; /* Context for encryption */
|
||||
SSL *conn; /* Connection for encryption */
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
DEBUG_printf(("httpUpdate(%08x)\n", http));
|
||||
@@ -1301,6 +1577,40 @@ httpUpdate(http_t *http) /* I - HTTP data */
|
||||
if (http->status == HTTP_CONTINUE)
|
||||
return (http->status);
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->status == HTTP_SWITCHING_PROTOCOLS && !http->tls)
|
||||
{
|
||||
context = SSL_CTX_new(SSLv23_method());
|
||||
conn = SSL_new(context);
|
||||
|
||||
SSL_set_fd(conn, http->fd);
|
||||
if (SSL_connect(conn) != 1)
|
||||
{
|
||||
SSL_CTX_free(context);
|
||||
SSL_free(conn);
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
http->error = WSAGetLastError();
|
||||
#else
|
||||
http->error = errno;
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
http->status = HTTP_ERROR;
|
||||
|
||||
#ifdef WIN32
|
||||
closesocket(http->fd);
|
||||
#else
|
||||
close(http->fd);
|
||||
#endif
|
||||
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
http->tls = conn;
|
||||
|
||||
return (HTTP_CONTINUE);
|
||||
}
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
httpGetLength(http);
|
||||
|
||||
switch (http->state)
|
||||
@@ -1601,12 +1911,15 @@ http_send(http_t *http, /* I - HTTP data */
|
||||
* Encode the URI as needed...
|
||||
*/
|
||||
|
||||
for (ptr = buf; *uri != '\0'; uri ++)
|
||||
for (ptr = buf; *uri != '\0' && ptr < (buf + sizeof(buf) - 1); uri ++)
|
||||
if (*uri <= ' ' || *uri >= 127)
|
||||
{
|
||||
*ptr ++ = '%';
|
||||
*ptr ++ = hex[(*uri >> 4) & 15];
|
||||
*ptr ++ = hex[*uri & 15];
|
||||
if (ptr < (buf + sizeof(buf) - 1))
|
||||
*ptr ++ = '%';
|
||||
if (ptr < (buf + sizeof(buf) - 1))
|
||||
*ptr ++ = hex[(*uri >> 4) & 15];
|
||||
if (ptr < (buf + sizeof(buf) - 1))
|
||||
*ptr ++ = hex[*uri & 15];
|
||||
}
|
||||
else
|
||||
*ptr ++ = *uri;
|
||||
@@ -1630,6 +1943,14 @@ http_send(http_t *http, /* I - HTTP data */
|
||||
|
||||
http->status = HTTP_CONTINUE;
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
|
||||
{
|
||||
httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade");
|
||||
httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0,SSL/2.0,SSL/3.0");
|
||||
}
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
if (httpPrintf(http, "%s %s HTTP/1.1\r\n", codes[request], buf) < 1)
|
||||
{
|
||||
http->status = HTTP_ERROR;
|
||||
@@ -1660,6 +1981,98 @@ http_send(http_t *http, /* I - HTTP data */
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
/*
|
||||
* 'http_upgrade()' - Force upgrade to TLS encryption.
|
||||
*/
|
||||
|
||||
static int /* O - Status of connection */
|
||||
http_upgrade(http_t *http) /* I - HTTP data */
|
||||
{
|
||||
int ret; /* Return value */
|
||||
http_t myhttp; /* Local copy of HTTP data */
|
||||
|
||||
|
||||
DEBUG_printf(("http_upgrade(%p)\n", http));
|
||||
|
||||
/*
|
||||
* Copy the HTTP data to a local variable so we can do the OPTIONS
|
||||
* request without interfering with the existing request data...
|
||||
*/
|
||||
|
||||
memcpy(&myhttp, http, sizeof(myhttp));
|
||||
|
||||
/*
|
||||
* Send an OPTIONS request to the server, requiring SSL or TLS
|
||||
* encryption on the link...
|
||||
*/
|
||||
|
||||
httpClearFields(&myhttp);
|
||||
httpSetField(&myhttp, HTTP_FIELD_CONNECTION, "upgrade");
|
||||
httpSetField(&myhttp, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0");
|
||||
|
||||
if ((ret = httpOptions(&myhttp, "*")) == 0)
|
||||
{
|
||||
/*
|
||||
* Wait for the secure connection...
|
||||
*/
|
||||
|
||||
while (httpUpdate(&myhttp) == HTTP_CONTINUE);
|
||||
}
|
||||
|
||||
httpFlush(&myhttp);
|
||||
|
||||
/*
|
||||
* Copy the HTTP data back over, if any...
|
||||
*/
|
||||
|
||||
http->fd = myhttp.fd;
|
||||
http->error = myhttp.error;
|
||||
http->activity = myhttp.activity;
|
||||
http->status = myhttp.status;
|
||||
http->version = myhttp.version;
|
||||
http->keep_alive = myhttp.keep_alive;
|
||||
http->used = myhttp.used;
|
||||
|
||||
if (http->used)
|
||||
memcpy(http->buffer, myhttp.buffer, http->used);
|
||||
|
||||
http->auth_type = myhttp.auth_type;
|
||||
http->nonce_count = myhttp.nonce_count;
|
||||
|
||||
memcpy(http->nonce, myhttp.nonce, sizeof(http->nonce));
|
||||
|
||||
http->tls = myhttp.tls;
|
||||
http->encryption = myhttp.encryption;
|
||||
|
||||
/*
|
||||
* See if we actually went secure...
|
||||
*/
|
||||
|
||||
if (!http->tls)
|
||||
{
|
||||
/*
|
||||
* Server does not support HTTP upgrade...
|
||||
*/
|
||||
|
||||
DEBUG_puts("Server does not support HTTP upgrade!");
|
||||
|
||||
#ifdef WIN32
|
||||
closesocket(http->fd);
|
||||
#else
|
||||
close(http->fd);
|
||||
#endif
|
||||
|
||||
http->fd = -1;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
else
|
||||
return (ret);
|
||||
}
|
||||
#endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+21
-2
@@ -4,7 +4,7 @@
|
||||
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -47,7 +47,7 @@
|
||||
# include <netinet/tcp.h>
|
||||
# endif /* WIN32 || __EMX__ */
|
||||
|
||||
# include <cups/md5.h>
|
||||
# include "md5.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -126,6 +126,19 @@ typedef enum
|
||||
} http_encoding_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP encryption values...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */
|
||||
HTTP_ENCRYPT_NEVER, /* Never encrypt */
|
||||
HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */
|
||||
HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */
|
||||
} http_encryption_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP authentication types...
|
||||
*/
|
||||
@@ -150,6 +163,7 @@ typedef enum
|
||||
HTTP_ERROR = -1, /* An error response from httpXxxx() */
|
||||
|
||||
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
|
||||
HTTP_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */
|
||||
|
||||
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
|
||||
HTTP_CREATED, /* PUT command was successful */
|
||||
@@ -182,6 +196,7 @@ typedef enum
|
||||
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
|
||||
HTTP_URI_TOO_LONG, /* URI too long */
|
||||
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
|
||||
HTTP_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */
|
||||
|
||||
HTTP_SERVER_ERROR = 500, /* Internal server error */
|
||||
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
|
||||
@@ -261,6 +276,7 @@ typedef struct
|
||||
/* Nonce value */
|
||||
int nonce_count; /* Nonce count */
|
||||
void *tls; /* TLS state information */
|
||||
http_encryption_t encryption; /* Encryption requirements */
|
||||
} http_t;
|
||||
|
||||
|
||||
@@ -274,7 +290,10 @@ extern int httpCheck(http_t *http);
|
||||
httpSetField((http), HTTP_FIELD_HOST, (http)->hostname)
|
||||
extern void httpClose(http_t *http);
|
||||
extern http_t *httpConnect(const char *host, int port);
|
||||
extern http_t *httpConnectEncrypt(const char *host, int port,
|
||||
http_encryption_t encrypt);
|
||||
extern int httpDelete(http_t *http, const char *uri);
|
||||
extern int httpEncryption(http_t *http, http_encryption_t e);
|
||||
# define httpError(http) ((http)->error)
|
||||
extern void httpFlush(http_t *http);
|
||||
extern int httpGet(http_t *http, const char *uri);
|
||||
|
||||
+345
-126
@@ -4,7 +4,7 @@
|
||||
* Internet Printing Protocol support functions for the Common UNIX
|
||||
* Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -24,31 +24,35 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ippAddBoolean() - Add a boolean attribute to an IPP request.
|
||||
* ippAddBooleans() - Add an array of boolean values.
|
||||
* ippAddDate() - Add a date attribute to an IPP request.
|
||||
* ippAddInteger() - Add a integer attribute to an IPP request.
|
||||
* ippAddIntegers() - Add an array of integer values.
|
||||
* ippAddString() - Add a language-encoded string to an IPP request.
|
||||
* ippAddStrings() - Add language-encoded strings to an IPP request.
|
||||
* ippAddRange() - Add a range of values to an IPP request.
|
||||
* ippAddRanges() - Add ranges of values to an IPP request.
|
||||
* ippAddResolution() - Add a resolution value to an IPP request.
|
||||
* ippAddResolutions() - Add resolution values to an IPP request.
|
||||
* ippAddSeparator() - Add a group separator to an IPP request.
|
||||
* ippDateToTime() - Convert from RFC 1903 Date/Time format to UNIX time
|
||||
* ippDelete() - Delete an IPP request.
|
||||
* ippErrorString() - Return a textual message for the given error message.
|
||||
* ippFindAttribute() - Find a named attribute in a request...
|
||||
* ippLength() - Compute the length of an IPP request.
|
||||
* ippNew() - Allocate a new IPP request.
|
||||
* ippPort() - Return the default IPP port number.
|
||||
* ippRead() - Read data for an IPP request.
|
||||
* ippTimeToDate() - Convert from UNIX time to RFC 1903 format.
|
||||
* ippWrite() - Write data for an IPP request.
|
||||
* _ipp_add_attr() - Add a new attribute to the request.
|
||||
* _ipp_free_attr() - Free an attribute.
|
||||
* ipp_read() - Semi-blocking read on a HTTP connection...
|
||||
* ippAddBoolean() - Add a boolean attribute to an IPP request.
|
||||
* ippAddBooleans() - Add an array of boolean values.
|
||||
* ippAddDate() - Add a date attribute to an IPP request.
|
||||
* ippAddInteger() - Add a integer attribute to an IPP request.
|
||||
* ippAddIntegers() - Add an array of integer values.
|
||||
* ippAddString() - Add a language-encoded string to an IPP request.
|
||||
* ippAddStrings() - Add language-encoded strings to an IPP request.
|
||||
* ippAddRange() - Add a range of values to an IPP request.
|
||||
* ippAddRanges() - Add ranges of values to an IPP request.
|
||||
* ippAddResolution() - Add a resolution value to an IPP request.
|
||||
* ippAddResolutions() - Add resolution values to an IPP request.
|
||||
* ippAddSeparator() - Add a group separator to an IPP request.
|
||||
* ippDateToTime() - Convert from RFC 1903 Date/Time format to UNIX
|
||||
* time in seconds.
|
||||
* ippDelete() - Delete an IPP request.
|
||||
* ippErrorString() - Return a textual message for the given error
|
||||
* message.
|
||||
* ippFindAttribute() - Find a named attribute in a request...
|
||||
* ippFindNextAttribute() - Find the next named attribute in a request...
|
||||
* ippLength() - Compute the length of an IPP request.
|
||||
* ippNew() - Allocate a new IPP request.
|
||||
* ippPort() - Return the default IPP port number.
|
||||
* ippRead() - Read data for an IPP request.
|
||||
* ippSetPort() - Set the default port number.
|
||||
* ippTimeToDate() - Convert from UNIX time to RFC 1903 format.
|
||||
* ippWrite() - Write data for an IPP request.
|
||||
* _ipp_add_attr() - Add a new attribute to the request.
|
||||
* _ipp_free_attr() - Free an attribute.
|
||||
* ipp_read() - Semi-blocking read on a HTTP connection...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -65,6 +69,13 @@
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int ipp_port = 0;
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
@@ -85,7 +96,7 @@ ippAddBoolean(ipp_t *ipp, /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippAddBoolean(%08x, %02x, \'%s\', %d)\n", ipp, group, name, value));
|
||||
DEBUG_printf(("ippAddBoolean(%p, %02x, \'%s\', %d)\n", ipp, group, name, value));
|
||||
|
||||
if (ipp == NULL || name == NULL)
|
||||
return (NULL);
|
||||
@@ -117,7 +128,7 @@ ippAddBooleans(ipp_t *ipp, /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippAddBooleans(%08x, %02x, \'%s\', %d, %08x)\n", ipp,
|
||||
DEBUG_printf(("ippAddBooleans(%p, %02x, \'%s\', %d, %p)\n", ipp,
|
||||
group, name, num_values, values));
|
||||
|
||||
if (ipp == NULL || name == NULL)
|
||||
@@ -151,7 +162,7 @@ ippAddDate(ipp_t *ipp, /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippAddDate(%08x, %02x, \'%s\', %08x)\n", ipp, group, name,
|
||||
DEBUG_printf(("ippAddDate(%p, %02x, \'%s\', %p)\n", ipp, group, name,
|
||||
value));
|
||||
|
||||
if (ipp == NULL || name == NULL || value == NULL)
|
||||
@@ -183,7 +194,7 @@ ippAddInteger(ipp_t *ipp, /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippAddInteger(%08x, %d, \'%s\', %d)\n", ipp, group, name,
|
||||
DEBUG_printf(("ippAddInteger(%p, %d, \'%s\', %d)\n", ipp, group, name,
|
||||
value));
|
||||
|
||||
if (ipp == NULL || name == NULL)
|
||||
@@ -259,10 +270,13 @@ ippAddString(ipp_t *ipp, /* I - IPP request */
|
||||
attr->name = strdup(name);
|
||||
attr->group_tag = group;
|
||||
attr->value_tag = type;
|
||||
attr->values[0].string.charset = charset ? strdup(charset) : NULL;
|
||||
attr->values[0].string.text = strdup(value);
|
||||
attr->values[0].string.charset = ((int)type & IPP_TAG_COPY) ? (char *)charset :
|
||||
charset ? strdup(charset) : NULL;
|
||||
attr->values[0].string.text = ((int)type & IPP_TAG_COPY) ? (char *)value :
|
||||
value ? strdup(value) : NULL;
|
||||
|
||||
if (type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET)
|
||||
if ((type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET) &&
|
||||
attr->values[0].string.text)
|
||||
{
|
||||
/*
|
||||
* Convert to lowercase and change _ to - as needed...
|
||||
@@ -309,16 +323,18 @@ ippAddStrings(ipp_t *ipp, /* I - IPP request */
|
||||
attr->group_tag = group;
|
||||
attr->value_tag = type;
|
||||
|
||||
if (values != NULL)
|
||||
for (i = 0; i < num_values; i ++)
|
||||
{
|
||||
if (i == 0)
|
||||
attr->values[0].string.charset = charset ? strdup(charset) : NULL;
|
||||
else
|
||||
attr->values[i].string.charset = attr->values[0].string.charset;
|
||||
for (i = 0; i < num_values; i ++)
|
||||
{
|
||||
if (i == 0)
|
||||
attr->values[0].string.charset = ((int)type & IPP_TAG_COPY) ? (char *)charset :
|
||||
charset ? strdup(charset) : NULL;
|
||||
else
|
||||
attr->values[i].string.charset = attr->values[0].string.charset;
|
||||
|
||||
attr->values[i].string.text = strdup(values[i]);
|
||||
}
|
||||
if (values != NULL)
|
||||
attr->values[i].string.text = ((int)type & IPP_TAG_COPY) ? (char *)values[i] :
|
||||
strdup(values[i]);
|
||||
}
|
||||
|
||||
return (attr);
|
||||
}
|
||||
@@ -472,7 +488,7 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippAddSeparator(%08x)\n", ipp));
|
||||
DEBUG_printf(("ippAddSeparator(%p)\n", ipp));
|
||||
|
||||
if (ipp == NULL)
|
||||
return (NULL);
|
||||
@@ -489,7 +505,7 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP request */
|
||||
|
||||
/*
|
||||
* 'ippDateToTime()' - Convert from RFC 1903 Date/Time format to UNIX time
|
||||
* in seconds.
|
||||
* in seconds.
|
||||
*/
|
||||
|
||||
time_t /* O - UNIX time value */
|
||||
@@ -547,6 +563,8 @@ ippDelete(ipp_t *ipp) /* I - IPP request */
|
||||
*next; /* Next attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippDelete(): %p\n", ipp));
|
||||
|
||||
if (ipp == NULL)
|
||||
return;
|
||||
|
||||
@@ -567,75 +585,80 @@ ippDelete(ipp_t *ipp) /* I - IPP request */
|
||||
const char * /* O - Text string */
|
||||
ippErrorString(ipp_status_t error) /* I - Error status */
|
||||
{
|
||||
static cups_lang_t *language = 0; /* Language info */
|
||||
static char unknown[255]; /* Unknown error statuses */
|
||||
static const char *status_oks[] = /* "OK" status codes */
|
||||
{
|
||||
"successful-ok",
|
||||
"successful-ok-ignored-or-substituted-attributes",
|
||||
"successful-ok-conflicting-attributes",
|
||||
"successful-ok-ignored-subscriptions",
|
||||
"successful-ok-ignored-notifications",
|
||||
"successful-ok-too-many-events",
|
||||
"successful-ok-but-cancel-subscription"
|
||||
},
|
||||
*status_400s[] = /* Client errors */
|
||||
{
|
||||
"client-error-bad-request",
|
||||
"client-error-forbidden",
|
||||
"client-error-not-authenticated",
|
||||
"client-error-not-authorized",
|
||||
"client-error-not-possible",
|
||||
"client-error-timeout",
|
||||
"client-error-not-found",
|
||||
"client-error-gone",
|
||||
"client-error-request-entity-too-large",
|
||||
"client-error-request-value-too-long",
|
||||
"client-error-document-format-not-supported",
|
||||
"client-error-attributes-or-values-not-supported",
|
||||
"client-error-uri-scheme-not-supported",
|
||||
"client-error-charset-not-supported",
|
||||
"client-error-conflicting-attributes",
|
||||
"client-error-compression-not-supported",
|
||||
"client-error-compression-error",
|
||||
"client-error-document-format-error",
|
||||
"client-error-document-access-error",
|
||||
"client-error-attributes-not-settable",
|
||||
"client-error-ignored-all-subscriptions",
|
||||
"client-error-too-many-subscriptions",
|
||||
"client-error-ignored-all-notifications",
|
||||
"client-error-print-support-file-not-found"
|
||||
},
|
||||
*status_500s[] = /* Server errors */
|
||||
{
|
||||
"server-error-internal-error",
|
||||
"server-error-operation-not-supported",
|
||||
"server-error-service-unavailable",
|
||||
"server-error-version-not-supported",
|
||||
"server-error-device-error",
|
||||
"server-error-temporary-error",
|
||||
"server-error-not-accepting-jobs",
|
||||
"server-error-busy",
|
||||
"server-error-job-canceled",
|
||||
"server-error-multiple-document-jobs-not-supported",
|
||||
"server-error-printer-is-deactivated"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Load the localized message file as needed...
|
||||
* See if the error code is a known value...
|
||||
*/
|
||||
|
||||
if (!language)
|
||||
language = cupsLangDefault();
|
||||
if (error >= IPP_OK && error <= IPP_OK_BUT_CANCEL_SUBSCRIPTION)
|
||||
return (status_oks[error]);
|
||||
else if (error == IPP_REDIRECTION_OTHER_SITE)
|
||||
return ("redirection-other-site");
|
||||
else if (error >= IPP_BAD_REQUEST && error <= IPP_PRINT_SUPPORT_FILE_NOT_FOUND)
|
||||
return (status_400s[error - IPP_BAD_REQUEST]);
|
||||
else if (error >= IPP_INTERNAL_ERROR && error <= IPP_PRINTER_IS_DEACTIVATED)
|
||||
return (status_500s[error - IPP_INTERNAL_ERROR]);
|
||||
|
||||
/*
|
||||
* Return the appropriate message...
|
||||
* No, build an "unknown-xxxx" error string...
|
||||
*/
|
||||
|
||||
switch (error)
|
||||
{
|
||||
case IPP_OK :
|
||||
case IPP_OK_SUBST :
|
||||
case IPP_OK_CONFLICT :
|
||||
return ("OK");
|
||||
|
||||
case IPP_BAD_REQUEST :
|
||||
return (cupsLangString(language, HTTP_BAD_REQUEST));
|
||||
|
||||
case IPP_FORBIDDEN :
|
||||
return (cupsLangString(language, HTTP_FORBIDDEN));
|
||||
|
||||
case IPP_NOT_AUTHENTICATED :
|
||||
case IPP_NOT_AUTHORIZED :
|
||||
return (cupsLangString(language, HTTP_UNAUTHORIZED));
|
||||
|
||||
case IPP_NOT_POSSIBLE :
|
||||
return (cupsLangString(language, HTTP_METHOD_NOT_ALLOWED));
|
||||
|
||||
case IPP_TIMEOUT :
|
||||
return (cupsLangString(language, HTTP_REQUEST_TIMEOUT));
|
||||
|
||||
case IPP_NOT_FOUND :
|
||||
return (cupsLangString(language, HTTP_NOT_FOUND));
|
||||
|
||||
case IPP_GONE :
|
||||
return (cupsLangString(language, HTTP_GONE));
|
||||
|
||||
case IPP_DOCUMENT_FORMAT :
|
||||
return (cupsLangString(language, HTTP_UNSUPPORTED_MEDIATYPE));
|
||||
|
||||
case IPP_CONFLICT :
|
||||
return (cupsLangString(language, HTTP_CONFLICT));
|
||||
|
||||
case IPP_INTERNAL_ERROR :
|
||||
return (cupsLangString(language, HTTP_SERVER_ERROR));
|
||||
|
||||
case IPP_OPERATION_NOT_SUPPORTED :
|
||||
case IPP_VERSION_NOT_SUPPORTED :
|
||||
return (cupsLangString(language, HTTP_NOT_SUPPORTED));
|
||||
|
||||
case IPP_SERVICE_UNAVAILABLE :
|
||||
case IPP_DEVICE_ERROR :
|
||||
case IPP_TEMPORARY_ERROR :
|
||||
case IPP_PRINTER_BUSY :
|
||||
return (cupsLangString(language, HTTP_SERVICE_UNAVAILABLE));
|
||||
|
||||
case IPP_NOT_ACCEPTING :
|
||||
return (cupsLangString(language, CUPS_MSG_NOT_ACCEPTING_JOBS));
|
||||
|
||||
default :
|
||||
return ("ERROR");
|
||||
}
|
||||
sprintf(unknown, "unknown-%04x", error);
|
||||
|
||||
return (unknown);
|
||||
}
|
||||
|
||||
|
||||
@@ -648,26 +671,68 @@ ippFindAttribute(ipp_t *ipp, /* I - IPP request */
|
||||
const char *name, /* I - Name of attribute */
|
||||
ipp_tag_t type) /* I - Type of attribute */
|
||||
{
|
||||
ipp_attribute_t *attr; /* Current atttribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ippFindAttribute(%08x, \'%s\')\n", ipp, name));
|
||||
DEBUG_printf(("ippFindAttribute(%p, \'%s\')\n", ipp, name));
|
||||
|
||||
if (ipp == NULL || name == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (attr = ipp->attrs; attr != NULL; attr = attr->next)
|
||||
/*
|
||||
* Reset the current pointer...
|
||||
*/
|
||||
|
||||
ipp->current = NULL;
|
||||
|
||||
/*
|
||||
* Search for the attribute...
|
||||
*/
|
||||
|
||||
return (ippFindNextAttribute(ipp, name, type));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ippFindNextAttribute()' - Find the next named attribute in a request...
|
||||
*/
|
||||
|
||||
ipp_attribute_t * /* O - Matching attribute */
|
||||
ippFindNextAttribute(ipp_t *ipp, /* I - IPP request */
|
||||
const char *name, /* I - Name of attribute */
|
||||
ipp_tag_t type) /* I - Type of attribute */
|
||||
{
|
||||
ipp_attribute_t *attr; /* Current atttribute */
|
||||
ipp_tag_t value_tag; /* Value tag */
|
||||
|
||||
|
||||
DEBUG_printf(("ippFindNextAttribute(%p, \'%s\')\n", ipp, name));
|
||||
|
||||
if (ipp == NULL || name == NULL)
|
||||
return (NULL);
|
||||
|
||||
if (ipp->current)
|
||||
attr = ipp->current->next;
|
||||
else
|
||||
attr = ipp->attrs;
|
||||
|
||||
for (; attr != NULL; attr = attr->next)
|
||||
{
|
||||
DEBUG_printf(("ippFindAttribute: attr = %08x, name = \'%s\'\n", attr,
|
||||
DEBUG_printf(("ippFindAttribute: attr = %p, name = \'%s\'\n", attr,
|
||||
attr->name));
|
||||
|
||||
value_tag = (ipp_tag_t)(attr->value_tag & IPP_TAG_MASK);
|
||||
|
||||
if (attr->name != NULL && strcasecmp(attr->name, name) == 0 &&
|
||||
(attr->value_tag == type || type == IPP_TAG_ZERO ||
|
||||
(attr->value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
|
||||
(attr->value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
|
||||
(value_tag == type || type == IPP_TAG_ZERO ||
|
||||
(value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
|
||||
(value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
|
||||
{
|
||||
ipp->current = attr;
|
||||
|
||||
return (attr);
|
||||
}
|
||||
}
|
||||
|
||||
ipp->current = NULL;
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -719,7 +784,7 @@ ippLength(ipp_t *ipp) /* I - IPP request */
|
||||
bytes += 2 * attr->num_values; /* Name lengths */
|
||||
bytes += 2 * attr->num_values; /* Value lengths */
|
||||
|
||||
switch (attr->value_tag)
|
||||
switch (attr->value_tag & ~IPP_TAG_COPY)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
@@ -790,7 +855,7 @@ ippNew(void)
|
||||
ipp_t *temp; /* New IPP request */
|
||||
|
||||
|
||||
if ((temp = (ipp_t *)calloc(sizeof(ipp_t), 1)) != NULL)
|
||||
if ((temp = (ipp_t *)calloc(1, sizeof(ipp_t))) != NULL)
|
||||
{
|
||||
/*
|
||||
* Default to IPP 1.1...
|
||||
@@ -800,6 +865,8 @@ ippNew(void)
|
||||
temp->request.any.version[1] = 1;
|
||||
}
|
||||
|
||||
DEBUG_printf(("ippNew(): %p\n", temp));
|
||||
|
||||
return (temp);
|
||||
}
|
||||
|
||||
@@ -819,7 +886,7 @@ ippRead(http_t *http, /* I - HTTP data */
|
||||
ipp_tag_t tag; /* Current tag */
|
||||
|
||||
|
||||
DEBUG_printf(("ippRead(%08x, %08x)\n", http, ipp));
|
||||
DEBUG_printf(("ippRead(%p, %p)\n", http, ipp));
|
||||
|
||||
if (http == NULL || ipp == NULL)
|
||||
return (IPP_ERROR);
|
||||
@@ -865,6 +932,10 @@ ippRead(http_t *http, /* I - HTTP data */
|
||||
ipp->current = NULL;
|
||||
ipp->curtag = IPP_TAG_ZERO;
|
||||
|
||||
DEBUG_printf(("ippRead: version=%d.%d\n", buffer[0], buffer[1]));
|
||||
DEBUG_printf(("ippRead: op_status=%04x\n", ipp->request.any.op_status));
|
||||
DEBUG_printf(("ippRead: request_id=%d\n", ipp->request.any.request_id));
|
||||
|
||||
/*
|
||||
* If blocking is disabled, stop here...
|
||||
*/
|
||||
@@ -934,6 +1005,32 @@ ippRead(http_t *http, /* I - HTTP data */
|
||||
|
||||
attr = ipp->current;
|
||||
|
||||
/*
|
||||
* Make sure we aren't adding a new value of a different
|
||||
* type...
|
||||
*/
|
||||
|
||||
if (attr->value_tag == IPP_TAG_STRING ||
|
||||
(attr->value_tag >= IPP_TAG_TEXTLANG &&
|
||||
attr->value_tag <= IPP_TAG_MIMETYPE))
|
||||
{
|
||||
/*
|
||||
* String values can sometimes come across in different
|
||||
* forms; accept sets of differing values...
|
||||
*/
|
||||
|
||||
if (tag != IPP_TAG_STRING &&
|
||||
(tag < IPP_TAG_TEXTLANG || tag > IPP_TAG_MIMETYPE))
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
else if (attr->value_tag != tag)
|
||||
return (IPP_ERROR);
|
||||
|
||||
/*
|
||||
* Finally, make sure we don't have too many elements in the
|
||||
* attribute array...
|
||||
*/
|
||||
|
||||
if (attr->num_values >= IPP_MAX_VALUES)
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
@@ -1199,6 +1296,10 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
ipp->current = ipp->attrs;
|
||||
ipp->curtag = IPP_TAG_ZERO;
|
||||
|
||||
DEBUG_printf(("ippWrite: version=%d.%d\n", buffer[0], buffer[1]));
|
||||
DEBUG_printf(("ippWrite: op_status=%04x\n", ipp->request.any.op_status));
|
||||
DEBUG_printf(("ippWrite: request_id=%d\n", ipp->request.any.request_id));
|
||||
|
||||
/*
|
||||
* If blocking is disabled, stop here...
|
||||
*/
|
||||
@@ -1233,7 +1334,8 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
*bufptr++ = attr->group_tag;
|
||||
}
|
||||
|
||||
n = strlen(attr->name);
|
||||
if ((n = strlen(attr->name)) > (sizeof(buffer) - 3))
|
||||
return (IPP_ERROR);
|
||||
|
||||
DEBUG_printf(("ippWrite: writing value tag = %x\n", attr->value_tag));
|
||||
DEBUG_printf(("ippWrite: writing name = %d, \'%s\'\n", n, attr->name));
|
||||
@@ -1244,12 +1346,23 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
memcpy(bufptr, attr->name, n);
|
||||
bufptr += n;
|
||||
|
||||
switch (attr->value_tag)
|
||||
switch (attr->value_tag & ~IPP_TAG_COPY)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 9)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
@@ -1274,6 +1387,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
case IPP_TAG_BOOLEAN :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 6)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
@@ -1314,6 +1438,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
attr->value_tag));
|
||||
DEBUG_printf(("ippWrite: writing name = 0, \'\'\n"));
|
||||
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 3)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
*bufptr++ = attr->value_tag;
|
||||
*bufptr++ = 0;
|
||||
*bufptr++ = 0;
|
||||
@@ -1321,6 +1456,9 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
n = strlen(attr->values[i].string.text);
|
||||
|
||||
if (n > sizeof(buffer))
|
||||
return (IPP_ERROR);
|
||||
|
||||
DEBUG_printf(("ippWrite: writing string = %d, \'%s\'\n", n,
|
||||
attr->values[i].string.text));
|
||||
|
||||
@@ -1345,6 +1483,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
case IPP_TAG_DATE :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 16)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
@@ -1367,6 +1516,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
case IPP_TAG_RESOLUTION :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 14)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
@@ -1396,6 +1556,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
case IPP_TAG_RANGE :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 13)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
@@ -1432,6 +1603,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
* values with a zero-length name...
|
||||
*/
|
||||
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 3)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
*bufptr++ = attr->value_tag;
|
||||
*bufptr++ = 0;
|
||||
*bufptr++ = 0;
|
||||
@@ -1439,7 +1621,10 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
n = strlen(attr->values[i].string.charset) +
|
||||
strlen(attr->values[i].string.text) +
|
||||
2;
|
||||
4;
|
||||
|
||||
if (n > sizeof(buffer))
|
||||
return (IPP_ERROR);
|
||||
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < (n + 2))
|
||||
{
|
||||
@@ -1486,6 +1671,17 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
* values with a zero-length name...
|
||||
*/
|
||||
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < 3)
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
{
|
||||
DEBUG_puts("ippWrite: Could not write IPP attribute...");
|
||||
return (IPP_ERROR);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
|
||||
*bufptr++ = attr->value_tag;
|
||||
*bufptr++ = 0;
|
||||
*bufptr++ = 0;
|
||||
@@ -1493,6 +1689,9 @@ ippWrite(http_t *http, /* I - HTTP data */
|
||||
|
||||
n = attr->values[i].unknown.length;
|
||||
|
||||
if (n > sizeof(buffer))
|
||||
return (IPP_ERROR);
|
||||
|
||||
if ((sizeof(buffer) - (bufptr - buffer)) < (n + 2))
|
||||
{
|
||||
if (httpWrite(http, (char *)buffer, bufptr - buffer) < 0)
|
||||
@@ -1577,12 +1776,25 @@ ippPort(void)
|
||||
struct servent *port; /* Port number info */
|
||||
|
||||
|
||||
if ((server_port = getenv("IPP_PORT")) != NULL)
|
||||
return (atoi(server_port));
|
||||
if (ipp_port)
|
||||
return (ipp_port);
|
||||
else if ((server_port = getenv("IPP_PORT")) != NULL)
|
||||
return (ipp_port = atoi(server_port));
|
||||
else if ((port = getservbyname("ipp", NULL)) == NULL)
|
||||
return (IPP_PORT);
|
||||
return (ipp_port = IPP_PORT);
|
||||
else
|
||||
return (ntohs(port->s_port));
|
||||
return (ipp_port = ntohs(port->s_port));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ippSetPort()' - Set the default port number.
|
||||
*/
|
||||
|
||||
void
|
||||
ippSetPort(int p) /* I - Port number to use */
|
||||
{
|
||||
ipp_port = p;
|
||||
}
|
||||
|
||||
|
||||
@@ -1597,7 +1809,7 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
|
||||
ipp_attribute_t *attr; /* New attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("_ipp_add_attr(%08x, %d)\n", ipp, num_values));
|
||||
DEBUG_printf(("_ipp_add_attr(%p, %d)\n", ipp, num_values));
|
||||
|
||||
if (ipp == NULL || num_values < 0)
|
||||
return (NULL);
|
||||
@@ -1617,6 +1829,8 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
|
||||
|
||||
ipp->last = attr;
|
||||
|
||||
DEBUG_printf(("_ipp_add_attr(): %p\n", attr));
|
||||
|
||||
return (attr);
|
||||
}
|
||||
|
||||
@@ -1631,6 +1845,8 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
DEBUG_printf(("_ipp_free_attr(): %p\n", attr));
|
||||
|
||||
switch (attr->value_tag)
|
||||
{
|
||||
case IPP_TAG_TEXT :
|
||||
@@ -1650,7 +1866,7 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
|
||||
case IPP_TAG_NAMELANG :
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if (attr->values[i].string.charset)
|
||||
if (attr->values[i].string.charset && i == 0)
|
||||
free(attr->values[i].string.charset);
|
||||
free(attr->values[i].string.text);
|
||||
}
|
||||
@@ -1684,7 +1900,7 @@ ipp_read(http_t *http, /* I - Client connection */
|
||||
* Loop until all bytes are read...
|
||||
*/
|
||||
|
||||
for (tbytes = 0; tbytes < length; tbytes += bytes, buffer += bytes)
|
||||
for (tbytes = 0, bytes = 0; tbytes < length; tbytes += bytes, buffer += bytes)
|
||||
if ((bytes = httpRead(http, (char *)buffer, length - tbytes)) <= 0)
|
||||
break;
|
||||
|
||||
@@ -1692,7 +1908,10 @@ ipp_read(http_t *http, /* I - Client connection */
|
||||
* Return the number of bytes read...
|
||||
*/
|
||||
|
||||
return (tbytes);
|
||||
if (tbytes == 0 && bytes < 0)
|
||||
return (-1);
|
||||
else
|
||||
return (tbytes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+85
-13
@@ -4,7 +4,7 @@
|
||||
* Internet Printing Protocol definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -30,7 +30,7 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/http.h>
|
||||
# include "http.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -76,13 +76,15 @@ typedef enum /**** Format tags for attribute formats... ****/
|
||||
IPP_TAG_END,
|
||||
IPP_TAG_PRINTER,
|
||||
IPP_TAG_UNSUPPORTED_GROUP,
|
||||
IPP_TAG_SUBSCRIPTION,
|
||||
IPP_TAG_EVENT_NOTIFICATION,
|
||||
IPP_TAG_UNSUPPORTED_VALUE = 0x10,
|
||||
IPP_TAG_DEFAULT,
|
||||
IPP_TAG_UNKNOWN,
|
||||
IPP_TAG_NOVALUE,
|
||||
IPP_TAG_NOTSETTABLE = 0x15,
|
||||
IPP_TAG_DELETEATTR,
|
||||
IPP_TAG_ANYVALUE,
|
||||
IPP_TAG_ADMINDEFINE,
|
||||
IPP_TAG_INTEGER = 0x21,
|
||||
IPP_TAG_BOOLEAN,
|
||||
IPP_TAG_ENUM,
|
||||
@@ -90,9 +92,10 @@ typedef enum /**** Format tags for attribute formats... ****/
|
||||
IPP_TAG_DATE,
|
||||
IPP_TAG_RESOLUTION,
|
||||
IPP_TAG_RANGE,
|
||||
IPP_TAG_COLLECTION,
|
||||
IPP_TAG_BEGIN_COLLECTION,
|
||||
IPP_TAG_TEXTLANG,
|
||||
IPP_TAG_NAMELANG,
|
||||
IPP_TAG_END_COLLECTION,
|
||||
IPP_TAG_TEXT = 0x41,
|
||||
IPP_TAG_NAME,
|
||||
IPP_TAG_KEYWORD = 0x44,
|
||||
@@ -100,7 +103,10 @@ typedef enum /**** Format tags for attribute formats... ****/
|
||||
IPP_TAG_URISCHEME,
|
||||
IPP_TAG_CHARSET,
|
||||
IPP_TAG_LANGUAGE,
|
||||
IPP_TAG_MIMETYPE
|
||||
IPP_TAG_MIMETYPE,
|
||||
IPP_TAG_MEMBERNAME,
|
||||
IPP_TAG_MASK = 0x7fffffff, /* Mask for copied attribute values */
|
||||
IPP_TAG_COPY = -0x7fffffff-1 /* Bitflag for copied attribute values */
|
||||
} ipp_tag_t;
|
||||
|
||||
typedef enum /**** Resolution units... ****/
|
||||
@@ -111,11 +117,34 @@ typedef enum /**** Resolution units... ****/
|
||||
|
||||
typedef enum /**** Finishings... ****/
|
||||
{
|
||||
IPP_FINISH_NONE = 3,
|
||||
IPP_FINISH_STAPLE,
|
||||
IPP_FINISH_PUNCH,
|
||||
IPP_FINISH_COVER,
|
||||
IPP_FINISH_BIND
|
||||
IPP_FINISHINGS_NONE = 3,
|
||||
IPP_FINISHINGS_STAPLE,
|
||||
IPP_FINISHINGS_PUNCH,
|
||||
IPP_FINISHINGS_COVER,
|
||||
IPP_FINISHINGS_BIND,
|
||||
IPP_FINISHINGS_SADDLE_STITCH,
|
||||
IPP_FINISHINGS_EDGE_STITCH,
|
||||
IPP_FINISHINGS_FOLD,
|
||||
IPP_FINISHINGS_TRIM,
|
||||
IPP_FINISHINGS_BALE,
|
||||
IPP_FINISHINGS_BOOKLET_MAKER,
|
||||
IPP_FINISHINGS_JOB_OFFSET,
|
||||
IPP_FINISHINGS_STAPLE_TOP_LEFT = 20,
|
||||
IPP_FINISHINGS_STAPLE_BOTTOM_LEFT,
|
||||
IPP_FINISHINGS_STAPLE_TOP_RIGHT,
|
||||
IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT,
|
||||
IPP_FINISHINGS_EDGE_STITCH_LEFT,
|
||||
IPP_FINISHINGS_EDGE_STITCH_TOP,
|
||||
IPP_FINISHINGS_EDGE_STITCH_RIGHT,
|
||||
IPP_FINISHINGS_EDGE_STITCH_BOTTOM,
|
||||
IPP_FINISHINGS_STAPLE_DUAL_LEFT,
|
||||
IPP_FINISHINGS_STAPLE_DUAL_TOP,
|
||||
IPP_FINISHINGS_STAPLE_DUAL_RIGHT,
|
||||
IPP_FINISHINGS_STAPLE_DUAL_BOTTOM,
|
||||
IPP_FINISHINGS_BIND_LEFT = 50,
|
||||
IPP_FINISHINGS_BIND_TOP,
|
||||
IPP_FINISHINGS_BIND_RIGHT,
|
||||
IPP_FINISHINGS_BIND_BOTTOM
|
||||
} ipp_finish_t;
|
||||
|
||||
typedef enum /**** Orientation... ****/
|
||||
@@ -181,6 +210,31 @@ typedef enum /**** IPP operations... ****/
|
||||
IPP_SET_PRINTER_ATTRIBUTES,
|
||||
IPP_SET_JOB_ATTRIBUTES,
|
||||
IPP_GET_PRINTER_SUPPORTED_VALUES,
|
||||
IPP_CREATE_PRINTER_SUBSCRIPTION,
|
||||
IPP_CREATE_JOB_SUBSCRIPTION,
|
||||
IPP_GET_SUBSCRIPTION_ATTRIBUTES,
|
||||
IPP_GET_SUBSCRIPTIONS,
|
||||
IPP_RENEW_SUBSCRIPTION,
|
||||
IPP_CANCEL_SUBSCRIPTION,
|
||||
IPP_GET_NOTIFICATIONS,
|
||||
IPP_SEND_NOTIFICATIONS,
|
||||
IPP_GET_PRINT_SUPPORT_FILES = 0x0021,
|
||||
IPP_ENABLE_PRINTER,
|
||||
IPP_DISABLE_PRINTER,
|
||||
IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
|
||||
IPP_HOLD_NEW_JOBS,
|
||||
IPP_RELEASE_HELD_NEW_JOBS,
|
||||
IPP_DEACTIVATE_PRINTER,
|
||||
IPP_ACTIVATE_PRINTER,
|
||||
IPP_RESTART_PRINTER,
|
||||
IPP_SHUTDOWN_PRINTER,
|
||||
IPP_STARTUP_PRINTER,
|
||||
IPP_REPROCESS_JOB,
|
||||
IPP_CANCEL_CURRENT_JOB,
|
||||
IPP_SUSPEND_CURRENT_JOB,
|
||||
IPP_RESUME_JOB,
|
||||
IPP_PROMOTE_JOB,
|
||||
IPP_SCHEDULE_JOB_AFTER,
|
||||
IPP_PRIVATE = 0x4000,
|
||||
CUPS_GET_DEFAULT,
|
||||
CUPS_GET_PRINTERS,
|
||||
@@ -194,7 +248,9 @@ typedef enum /**** IPP operations... ****/
|
||||
CUPS_SET_DEFAULT,
|
||||
CUPS_GET_DEVICES,
|
||||
CUPS_GET_PPDS,
|
||||
CUPS_MOVE_JOB
|
||||
CUPS_MOVE_JOB,
|
||||
CUPS_ADD_DEVICE,
|
||||
CUPS_DELETE_DEVICE
|
||||
} ipp_op_t;
|
||||
|
||||
typedef enum /**** IPP status codes... ****/
|
||||
@@ -202,6 +258,11 @@ typedef enum /**** IPP status codes... ****/
|
||||
IPP_OK = 0x0000,
|
||||
IPP_OK_SUBST,
|
||||
IPP_OK_CONFLICT,
|
||||
IPP_OK_IGNORED_SUBSCRIPTIONS,
|
||||
IPP_OK_IGNORED_NOTIFICATIONS,
|
||||
IPP_OK_TOO_MANY_EVENTS,
|
||||
IPP_OK_BUT_CANCEL_SUBSCRIPTION,
|
||||
IPP_REDIRECTION_OTHER_SITE = 0x300,
|
||||
IPP_BAD_REQUEST = 0x0400,
|
||||
IPP_FORBIDDEN,
|
||||
IPP_NOT_AUTHENTICATED,
|
||||
@@ -221,6 +282,12 @@ typedef enum /**** IPP status codes... ****/
|
||||
IPP_COMPRESSION_ERROR,
|
||||
IPP_DOCUMENT_FORMAT_ERROR,
|
||||
IPP_DOCUMENT_ACCESS_ERROR,
|
||||
IPP_ATTRIBUTES_NOT_SETTABLE,
|
||||
IPP_IGNORED_ALL_SUBSCRIPTIONS,
|
||||
IPP_TOO_MANY_SUBSCRIPTIONS,
|
||||
IPP_IGNORED_ALL_NOTIFICATIONS,
|
||||
IPP_PRINT_SUPPORT_FILE_NOT_FOUND,
|
||||
|
||||
IPP_INTERNAL_ERROR = 0x0500,
|
||||
IPP_OPERATION_NOT_SUPPORTED,
|
||||
IPP_SERVICE_UNAVAILABLE,
|
||||
@@ -230,7 +297,8 @@ typedef enum /**** IPP status codes... ****/
|
||||
IPP_NOT_ACCEPTING,
|
||||
IPP_PRINTER_BUSY,
|
||||
IPP_ERROR_JOB_CANCELLED,
|
||||
IPP_MULTIPLE_JOBS_NOT_SUPPORTED
|
||||
IPP_MULTIPLE_JOBS_NOT_SUPPORTED,
|
||||
IPP_PRINTER_IS_DEACTIVATED
|
||||
} ipp_status_t;
|
||||
|
||||
typedef unsigned char ipp_uchar_t;/**** Unsigned 8-bit integer/character ****/
|
||||
@@ -335,13 +403,17 @@ extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t typ
|
||||
extern time_t ippDateToTime(const ipp_uchar_t *date);
|
||||
extern void ippDelete(ipp_t *ipp);
|
||||
extern const char *ippErrorString(ipp_status_t error);
|
||||
extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);
|
||||
extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name,
|
||||
ipp_tag_t type);
|
||||
extern ipp_attribute_t *ippFindNextAttribute(ipp_t *ipp, const char *name,
|
||||
ipp_tag_t type);
|
||||
extern size_t ippLength(ipp_t *ipp);
|
||||
extern ipp_t *ippNew(void);
|
||||
extern ipp_state_t ippRead(http_t *http, ipp_t *ipp);
|
||||
extern const ipp_uchar_t *ippTimeToDate(time_t t);
|
||||
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
|
||||
extern int ippPort(void);
|
||||
extern void ippSetPort(int p);
|
||||
|
||||
extern ipp_attribute_t *_ipp_add_attr(ipp_t *, int);
|
||||
extern void _ipp_free_attr(ipp_attribute_t *);
|
||||
|
||||
+9
-4
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* I18N/language support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -263,7 +263,10 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
*/
|
||||
|
||||
if (fp == NULL)
|
||||
strcpy(line, lang_default[0]);
|
||||
{
|
||||
strncpy(line, lang_default[0], sizeof(line) - 1);
|
||||
line[sizeof(line) - 1] = '\0';
|
||||
}
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
{
|
||||
/*
|
||||
@@ -320,7 +323,8 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
*/
|
||||
|
||||
lang->used ++;
|
||||
strcpy(lang->language, langname);
|
||||
strncpy(lang->language, langname, sizeof(lang->language) - 1);
|
||||
lang->language[sizeof(lang->language) - 1] = '\0';
|
||||
|
||||
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
|
||||
if (strcmp(lang_encodings[i], line) == 0)
|
||||
@@ -347,7 +351,8 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
if (lang_default[count] == NULL)
|
||||
break;
|
||||
|
||||
strcpy(line, lang_default[count]);
|
||||
strncpy(line, lang_default[count], sizeof(line) - 1);
|
||||
/* Already set last byte to 0 above... */
|
||||
}
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
break;
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Multi-language support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+7
-3
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Option marking routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -118,7 +118,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c1->marked)
|
||||
break;
|
||||
|
||||
if (j == 0 || strcasecmp(c1->choice, "None") == 0 ||
|
||||
if (j == 0 ||
|
||||
strcasecmp(c1->choice, "None") == 0 ||
|
||||
strcasecmp(c1->choice, "Off") == 0 ||
|
||||
strcasecmp(c1->choice, "False") == 0)
|
||||
c1 = NULL;
|
||||
}
|
||||
@@ -149,7 +151,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c2->marked)
|
||||
break;
|
||||
|
||||
if (j == 0 || strcasecmp(c2->choice, "None") == 0 ||
|
||||
if (j == 0 ||
|
||||
strcasecmp(c2->choice, "None") == 0 ||
|
||||
strcasecmp(c2->choice, "Off") == 0 ||
|
||||
strcasecmp(c2->choice, "False") == 0)
|
||||
c2 = NULL;
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* MD5 password support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+43
-7
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Option routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -54,8 +55,9 @@ cupsAddOption(const char *name, /* I - Name of option */
|
||||
cups_option_t *temp; /* Pointer to new option */
|
||||
|
||||
|
||||
if (name == NULL || value == NULL || options == NULL)
|
||||
return (0);
|
||||
if (name == NULL || !name[0] || value == NULL ||
|
||||
options == NULL || num_options < 0)
|
||||
return (num_options);
|
||||
|
||||
/*
|
||||
* Look for an existing option with the same name...
|
||||
@@ -111,7 +113,7 @@ cupsFreeOptions(int num_options, /* I - Number of options */
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
if (num_options == 0 || options == NULL)
|
||||
if (num_options <= 0 || options == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
@@ -136,7 +138,7 @@ cupsGetOption(const char *name, /* I - Name of option */
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
if (name == NULL || num_options == 0 || options == NULL)
|
||||
if (name == NULL || num_options <= 0 || options == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
@@ -162,7 +164,7 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
|
||||
*value; /* Pointer to value */
|
||||
|
||||
|
||||
if (arg == NULL || options == NULL)
|
||||
if (arg == NULL || options == NULL || num_options < 0)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -172,6 +174,17 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
|
||||
copyarg = strdup(arg);
|
||||
ptr = copyarg;
|
||||
|
||||
/*
|
||||
* Skip leading spaces...
|
||||
*/
|
||||
|
||||
while (isspace(*ptr))
|
||||
ptr ++;
|
||||
|
||||
/*
|
||||
* Loop through the string...
|
||||
*/
|
||||
|
||||
while (*ptr != '\0')
|
||||
{
|
||||
/*
|
||||
@@ -182,6 +195,13 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
|
||||
while (!isspace(*ptr) && *ptr != '=' && *ptr != '\0')
|
||||
ptr ++;
|
||||
|
||||
/*
|
||||
* Avoid an empty name...
|
||||
*/
|
||||
|
||||
if (ptr == name)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Skip trailing spaces...
|
||||
*/
|
||||
@@ -195,7 +215,12 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
|
||||
* Start of another option...
|
||||
*/
|
||||
|
||||
num_options = cupsAddOption(name, "", num_options, options);
|
||||
if (strncasecmp(name, "no", 2) == 0)
|
||||
num_options = cupsAddOption(name + 2, "false", num_options,
|
||||
options);
|
||||
else
|
||||
num_options = cupsAddOption(name, "true", num_options, options);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -284,6 +309,17 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
s[255]; /* Temporary string */
|
||||
|
||||
|
||||
/*
|
||||
* Check arguments...
|
||||
*/
|
||||
|
||||
if (ppd == NULL || num_options <= 0 || options == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Mark options...
|
||||
*/
|
||||
|
||||
conflict = 0;
|
||||
|
||||
for (i = num_options; i > 0; i --, options ++)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Page size functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
|
||||
+221
-75
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD file routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -108,6 +108,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
ppd_emul_t *emul; /* Current emulation */
|
||||
ppd_group_t *group; /* Current group */
|
||||
char **font; /* Current font */
|
||||
char **filter; /* Current filter */
|
||||
|
||||
|
||||
/*
|
||||
@@ -121,6 +122,10 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
* Free all strings at the top level...
|
||||
*/
|
||||
|
||||
safe_free(ppd->patches);
|
||||
safe_free(ppd->jcl_begin);
|
||||
safe_free(ppd->jcl_ps);
|
||||
safe_free(ppd->jcl_end);
|
||||
safe_free(ppd->lang_encoding);
|
||||
safe_free(ppd->lang_version);
|
||||
safe_free(ppd->modelname);
|
||||
@@ -171,6 +176,18 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
|
||||
if (ppd->num_consts > 0)
|
||||
safe_free(ppd->consts);
|
||||
|
||||
/*
|
||||
* Free any filters...
|
||||
*/
|
||||
|
||||
if (ppd->num_filters > 0)
|
||||
{
|
||||
for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++)
|
||||
safe_free(*filter);
|
||||
|
||||
safe_free(ppd->filters);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free any fonts...
|
||||
*/
|
||||
@@ -267,12 +284,16 @@ ppd_get_group(ppd_file_t *ppd, /* I - PPD file */
|
||||
ppd_group_t *group; /* Group */
|
||||
|
||||
|
||||
DEBUG_printf(("ppd_get_group(%p, \"%s\")\n", ppd, name));
|
||||
|
||||
for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++)
|
||||
if (strcmp(group->text, name) == 0)
|
||||
break;
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
DEBUG_printf(("Adding group %s...\n", name));
|
||||
|
||||
if (ppd->num_groups == 0)
|
||||
group = malloc(sizeof(ppd_group_t));
|
||||
else
|
||||
@@ -411,12 +432,17 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
ppd_const_t *constraint; /* Current constraint */
|
||||
ppd_size_t *size; /* Current page size */
|
||||
int mask; /* Line data mask */
|
||||
char keyword[41], /* Keyword from file */
|
||||
name[41], /* Option from file */
|
||||
text[81], /* Human-readable text from file */
|
||||
char keyword[PPD_MAX_NAME],
|
||||
/* Keyword from file */
|
||||
name[PPD_MAX_NAME],
|
||||
/* Option from file */
|
||||
text[PPD_MAX_TEXT],
|
||||
/* Human-readable text from file */
|
||||
*string, /* Code/text from file */
|
||||
*sptr, /* Pointer into string */
|
||||
*nameptr; /* Pointer into name */
|
||||
*nameptr, /* Pointer into name */
|
||||
*temp, /* Temporary string pointer */
|
||||
**tempfonts; /* Temporary fonts pointer */
|
||||
float order; /* Order dependency number */
|
||||
ppd_section_t section; /* Order dependency section */
|
||||
ppd_profile_t *profile; /* Pointer to color profile */
|
||||
@@ -503,6 +529,21 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
puts("");
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (strcmp(keyword, "CloseUI") != 0 &&
|
||||
strcmp(keyword, "JCLCloseUI") != 0 &&
|
||||
strcmp(keyword, "CloseGroup") != 0 &&
|
||||
strcmp(keyword, "CloseSubGroup") != 0 &&
|
||||
strncmp(keyword, "Default", 7) != 0 &&
|
||||
string == NULL)
|
||||
{
|
||||
/*
|
||||
* Need a string value!
|
||||
*/
|
||||
|
||||
ppdClose(ppd);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (strcmp(keyword, "LanguageLevel") == 0)
|
||||
ppd->language_level = atoi(string);
|
||||
else if (strcmp(keyword, "LanguageEncoding") == 0)
|
||||
@@ -620,6 +661,13 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
else
|
||||
filter = realloc(ppd->filters, sizeof(char *) * (ppd->num_filters + 1));
|
||||
|
||||
if (filter == NULL)
|
||||
{
|
||||
safe_free(filter);
|
||||
ppdClose(ppd);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
ppd->filters = filter;
|
||||
filter += ppd->num_filters;
|
||||
ppd->num_filters ++;
|
||||
@@ -640,17 +688,19 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
*/
|
||||
|
||||
if (ppd->num_fonts == 0)
|
||||
ppd->fonts = (char **)malloc(sizeof(char *));
|
||||
tempfonts = (char **)malloc(sizeof(char *));
|
||||
else
|
||||
ppd->fonts = (char **)realloc(ppd->fonts,
|
||||
sizeof(char *) * (ppd->num_fonts + 1));
|
||||
tempfonts = (char **)realloc(ppd->fonts,
|
||||
sizeof(char *) * (ppd->num_fonts + 1));
|
||||
|
||||
if (ppd->fonts == NULL)
|
||||
if (tempfonts == NULL)
|
||||
{
|
||||
safe_free(string);
|
||||
ppdClose(ppd);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
ppd->fonts = tempfonts;
|
||||
ppd->fonts[ppd->num_fonts] = strdup(name);
|
||||
ppd->num_fonts ++;
|
||||
}
|
||||
@@ -816,8 +866,11 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
|
||||
for (i = 0, sptr = string; i < count; i ++)
|
||||
{
|
||||
for (nameptr = ppd->emulations[i].name; *sptr != '\0' && *sptr != ' ';)
|
||||
*nameptr ++ = *sptr ++;
|
||||
for (nameptr = ppd->emulations[i].name;
|
||||
*sptr != '\0' && *sptr != ' ';
|
||||
sptr ++)
|
||||
if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1))
|
||||
*nameptr++ = *sptr;
|
||||
|
||||
*nameptr = '\0';
|
||||
|
||||
@@ -856,8 +909,16 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
}
|
||||
else
|
||||
{
|
||||
ppd->patches = realloc(ppd->patches, strlen(ppd->patches) +
|
||||
strlen(string) + 1);
|
||||
temp = realloc(ppd->patches, strlen(ppd->patches) +
|
||||
strlen(string) + 1);
|
||||
if (temp == NULL)
|
||||
{
|
||||
safe_free(string);
|
||||
ppdClose(ppd);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
ppd->patches = temp;
|
||||
|
||||
strcpy(ppd->patches + strlen(ppd->patches), string);
|
||||
}
|
||||
@@ -869,13 +930,13 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
*/
|
||||
|
||||
if (name[0] == '*')
|
||||
strcpy(name, name + 1);
|
||||
strcpy(name, name + 1); /* Eliminate leading asterisk */
|
||||
|
||||
if (string == NULL)
|
||||
{
|
||||
ppdClose(ppd);
|
||||
return (NULL);
|
||||
}
|
||||
for (i = strlen(name) - 1; i > 0 && isspace(name[i]); i --)
|
||||
name[i] = '\0'; /* Eliminate trailing spaces */
|
||||
|
||||
DEBUG_printf(("OpenUI of %s in group %s...\n", name,
|
||||
group ? group->text : "(null)"));
|
||||
|
||||
if (subgroup != NULL)
|
||||
option = ppd_get_option(subgroup, name);
|
||||
@@ -904,6 +965,7 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
DEBUG_printf(("Adding to group %s...\n", group->text));
|
||||
option = ppd_get_option(group, name);
|
||||
group = NULL;
|
||||
}
|
||||
@@ -1028,45 +1090,6 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
}
|
||||
else if (strcmp(keyword, "CloseGroup") == 0)
|
||||
group = NULL;
|
||||
else if (strcmp(keyword, "OpenSubGroup") == 0)
|
||||
{
|
||||
/*
|
||||
* Open a new sub-group...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("group = %p, subgroup = %p\n", group, subgroup));
|
||||
|
||||
if (group == NULL || subgroup != NULL)
|
||||
{
|
||||
ppdClose(ppd);
|
||||
safe_free(string);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (group->num_subgroups == 0)
|
||||
subgroup = malloc(sizeof(ppd_group_t));
|
||||
else
|
||||
subgroup = realloc(group->subgroups,
|
||||
(group->num_subgroups + 1) * sizeof(ppd_group_t));
|
||||
|
||||
if (subgroup == NULL)
|
||||
{
|
||||
ppdClose(ppd);
|
||||
safe_free(string);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
group->subgroups = subgroup;
|
||||
subgroup += group->num_subgroups;
|
||||
group->num_subgroups ++;
|
||||
|
||||
memset(subgroup, 0, sizeof(ppd_group_t));
|
||||
ppd_decode(string);
|
||||
ppd_fix(string);
|
||||
strncpy(subgroup->text, string, sizeof(subgroup->text) - 1);
|
||||
}
|
||||
else if (strcmp(keyword, "CloseSubGroup") == 0)
|
||||
subgroup = NULL;
|
||||
else if (strcmp(keyword, "OrderDependency") == 0 ||
|
||||
strcmp(keyword, "NonUIOrderDependency") == 0)
|
||||
{
|
||||
@@ -1185,6 +1208,11 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
break;
|
||||
|
||||
case 2 : /* Two options... */
|
||||
/*
|
||||
* The following strcpy's are safe, as optionN and
|
||||
* choiceN are all the same size (size defined by PPD spec...)
|
||||
*/
|
||||
|
||||
if (constraint->option1[0] == '*')
|
||||
strcpy(constraint->option1, constraint->option1 + 1);
|
||||
|
||||
@@ -1198,6 +1226,11 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
break;
|
||||
|
||||
case 3 : /* Two options, one choice... */
|
||||
/*
|
||||
* The following strcpy's are safe, as optionN and
|
||||
* choiceN are all the same size (size defined by PPD spec...)
|
||||
*/
|
||||
|
||||
if (constraint->option1[0] == '*')
|
||||
strcpy(constraint->option1, constraint->option1 + 1);
|
||||
|
||||
@@ -1227,14 +1260,40 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
}
|
||||
else if (strcmp(keyword, "PaperDimension") == 0)
|
||||
{
|
||||
if ((size = ppdPageSize(ppd, name)) != NULL)
|
||||
sscanf(string, "%f%f", &(size->width), &(size->length));
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
size = ppd_add_size(ppd, name);
|
||||
|
||||
if (size == NULL)
|
||||
{
|
||||
/*
|
||||
* Unable to add or find size!
|
||||
*/
|
||||
|
||||
ppdClose(ppd);
|
||||
safe_free(string);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
sscanf(string, "%f%f", &(size->width), &(size->length));
|
||||
}
|
||||
else if (strcmp(keyword, "ImageableArea") == 0)
|
||||
{
|
||||
if ((size = ppdPageSize(ppd, name)) != NULL)
|
||||
sscanf(string, "%f%f%f%f", &(size->left), &(size->bottom),
|
||||
&(size->right), &(size->top));
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
size = ppd_add_size(ppd, name);
|
||||
|
||||
if (size == NULL)
|
||||
{
|
||||
/*
|
||||
* Unable to add or find size!
|
||||
*/
|
||||
|
||||
ppdClose(ppd);
|
||||
safe_free(string);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
sscanf(string, "%f%f%f%f", &(size->left), &(size->bottom),
|
||||
&(size->right), &(size->top));
|
||||
}
|
||||
else if (option != NULL &&
|
||||
(mask & (PPD_KEYWORD | PPD_OPTION | PPD_STRING)) ==
|
||||
@@ -1248,7 +1307,8 @@ ppdOpen(FILE *fp) /* I - File to read from */
|
||||
* Add a page size...
|
||||
*/
|
||||
|
||||
ppd_add_size(ppd, name);
|
||||
if (ppdPageSize(ppd, name) == NULL)
|
||||
ppd_add_size(ppd, name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1412,7 +1472,7 @@ ppdOpenFile(const char *filename) /* I - File to read from */
|
||||
* 'compare_strings()' - Compare two strings.
|
||||
*/
|
||||
|
||||
int /* O - Result of comparison */
|
||||
static int /* O - Result of comparison */
|
||||
compare_strings(char *s, /* I - First string */
|
||||
char *t) /* I - Second string */
|
||||
{
|
||||
@@ -1566,6 +1626,7 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
char **string) /* O - Code/string data */
|
||||
{
|
||||
int ch, /* Character from file */
|
||||
colon, /* Colon seen? */
|
||||
endquote, /* Waiting for an end quote */
|
||||
mask; /* Mask to be returned */
|
||||
char *keyptr, /* Keyword pointer */
|
||||
@@ -1573,7 +1634,7 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
*textptr, /* Text pointer */
|
||||
*strptr, /* Pointer into string */
|
||||
*lineptr, /* Current position in line buffer */
|
||||
line[262144]; /* Line buffer (256k) */
|
||||
line[65536]; /* Line buffer (64k) */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1588,6 +1649,8 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
* Now loop until we have a valid line...
|
||||
*/
|
||||
|
||||
*string = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
/*
|
||||
@@ -1596,6 +1659,7 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
|
||||
lineptr = line;
|
||||
endquote = 0;
|
||||
colon = 0;
|
||||
|
||||
while ((ch = getc(fp)) != EOF &&
|
||||
(lineptr - line) < (sizeof(line) - 1))
|
||||
@@ -1621,10 +1685,12 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
ungetc(ch, fp);
|
||||
}
|
||||
|
||||
*lineptr++ = '\n';
|
||||
ch = '\n';
|
||||
|
||||
if (!endquote) /* Continue for multi-line text */
|
||||
break;
|
||||
|
||||
*lineptr++ = '\n';
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1634,16 +1700,83 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
|
||||
*lineptr++ = ch;
|
||||
|
||||
if (ch == '\"')
|
||||
endquote = !endquote;
|
||||
if (ch == ':')
|
||||
colon = 1;
|
||||
|
||||
if (ch == '\"' && colon)
|
||||
{
|
||||
endquote = !endquote;
|
||||
|
||||
if (!endquote)
|
||||
{
|
||||
/*
|
||||
* End of quoted string; ignore trailing characters...
|
||||
*/
|
||||
|
||||
while ((ch = getc(fp)) != EOF)
|
||||
if (ch == '\n')
|
||||
break;
|
||||
else if (ch == '\r')
|
||||
{
|
||||
ch = getc(fp);
|
||||
if (ch != '\n')
|
||||
ungetc(ch, fp);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (endquote)
|
||||
{
|
||||
/*
|
||||
* Didn't finish this quoted string...
|
||||
*/
|
||||
|
||||
while ((ch = getc(fp)) != EOF)
|
||||
if (ch == '\"')
|
||||
break;
|
||||
}
|
||||
|
||||
if (ch != '\n')
|
||||
{
|
||||
/*
|
||||
* Didn't finish this line...
|
||||
*/
|
||||
|
||||
while ((ch = getc(fp)) != EOF)
|
||||
if (ch == '\r' || ch == '\n')
|
||||
{
|
||||
/*
|
||||
* Line feed or carriage return...
|
||||
*/
|
||||
|
||||
if (ch == '\r')
|
||||
{
|
||||
/*
|
||||
* Check for a trailing line feed...
|
||||
*/
|
||||
|
||||
if ((ch = getc(fp)) == EOF)
|
||||
break;
|
||||
if (ch != 0x0a)
|
||||
ungetc(ch, fp);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (lineptr > line && lineptr[-1] == '\n')
|
||||
lineptr --;
|
||||
|
||||
*lineptr = '\0';
|
||||
|
||||
/* DEBUG_printf(("LINE = \"%s\"\n", line));*/
|
||||
|
||||
if (ch == EOF && lineptr == line)
|
||||
return (0);
|
||||
|
||||
@@ -1662,7 +1795,8 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
if (line[0] != '*') /* All lines start with an asterisk */
|
||||
continue;
|
||||
|
||||
if (strncmp(line, "*%", 2) == 0 || /* Comment line */
|
||||
if (strcmp(line, "*") == 0 || /* (Bad) comment line */
|
||||
strncmp(line, "*%", 2) == 0 || /* Comment line */
|
||||
strncmp(line, "*?", 2) == 0 || /* Query line */
|
||||
strcmp(line, "*End") == 0) /* End of multi-line string */
|
||||
continue;
|
||||
@@ -1674,19 +1808,25 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
keyptr = keyword;
|
||||
|
||||
while (*lineptr != '\0' && *lineptr != ':' && !isspace(*lineptr) &&
|
||||
(keyptr - keyword) < 40)
|
||||
(keyptr - keyword) < (PPD_MAX_NAME - 1))
|
||||
*keyptr++ = *lineptr++;
|
||||
|
||||
*keyptr = '\0';
|
||||
|
||||
if (strcmp(keyword, "End") == 0)
|
||||
continue;
|
||||
|
||||
mask |= PPD_KEYWORD;
|
||||
|
||||
if (*lineptr == ' ' || *lineptr == '\t')
|
||||
/* DEBUG_printf(("keyword = \"%s\", lineptr = \"%s\"\n", keyword, lineptr));*/
|
||||
|
||||
if (isspace(*lineptr))
|
||||
{
|
||||
/*
|
||||
* Get an option name...
|
||||
*/
|
||||
|
||||
while (*lineptr == ' ' || *lineptr == '\t')
|
||||
while (isspace(*lineptr))
|
||||
lineptr ++;
|
||||
|
||||
optptr = option;
|
||||
@@ -1698,6 +1838,8 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
*optptr = '\0';
|
||||
mask |= PPD_OPTION;
|
||||
|
||||
/* DEBUG_printf(("option = \"%s\", lineptr = \"%s\"\n", option, lineptr));*/
|
||||
|
||||
if (*lineptr == '/')
|
||||
{
|
||||
/*
|
||||
@@ -1709,7 +1851,7 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
textptr = text;
|
||||
|
||||
while (*lineptr != '\0' && *lineptr != '\n' && *lineptr != ':' &&
|
||||
(textptr - text) < 80)
|
||||
(textptr - text) < (PPD_MAX_TEXT - 1))
|
||||
*textptr++ = *lineptr++;
|
||||
|
||||
*textptr = '\0';
|
||||
@@ -1717,6 +1859,8 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
|
||||
mask |= PPD_TEXT;
|
||||
}
|
||||
|
||||
/* DEBUG_printf(("text = \"%s\", lineptr = \"%s\"\n", text, lineptr));*/
|
||||
}
|
||||
|
||||
if (*lineptr == ':')
|
||||
@@ -1742,6 +1886,8 @@ ppd_read(FILE *fp, /* I - File to read from */
|
||||
|
||||
*strptr = '\0';
|
||||
|
||||
/* DEBUG_printf(("string = \"%s\", lineptr = \"%s\"\n", *string, lineptr));*/
|
||||
|
||||
mask |= PPD_STRING;
|
||||
}
|
||||
}
|
||||
|
||||
+42
-15
@@ -4,7 +4,7 @@
|
||||
* PostScript Printer Description definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -58,6 +58,15 @@ extern "C" {
|
||||
# define PPD_VERSION 4.3 /* Kept in sync with Adobe version number */
|
||||
|
||||
|
||||
/*
|
||||
* PPD size limits (defined in Adobe spec)
|
||||
*/
|
||||
|
||||
# define PPD_MAX_NAME 41 /* Maximum size of name + 1 for nul */
|
||||
# define PPD_MAX_TEXT 81 /* Maximum size of text + 1 for nul */
|
||||
# define PPD_MAX_LINE 256 /* Maximum size of line + 1 for nul */
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
@@ -92,8 +101,10 @@ typedef enum /**** Colorspaces ****/
|
||||
typedef struct /**** Option choices ****/
|
||||
{
|
||||
char marked, /* 0 if not selected, 1 otherwise */
|
||||
choice[41], /* Computer-readable option name */
|
||||
text[81], /* Human-readable option name */
|
||||
choice[PPD_MAX_NAME],
|
||||
/* Computer-readable option name */
|
||||
text[PPD_MAX_TEXT],
|
||||
/* Human-readable option name */
|
||||
*code; /* Code to send for this option */
|
||||
void *option; /* Pointer to parent option structure */
|
||||
} ppd_choice_t;
|
||||
@@ -101,9 +112,12 @@ typedef struct /**** Option choices ****/
|
||||
typedef struct /**** Options ****/
|
||||
{
|
||||
char conflicted, /* 0 if no conflicts exist, 1 otherwise */
|
||||
keyword[41], /* Option keyword name ("PageSize", etc.) */
|
||||
defchoice[41], /* Default option choice */
|
||||
text[81]; /* Human-readable text */
|
||||
keyword[PPD_MAX_NAME],
|
||||
/* Option keyword name ("PageSize", etc.) */
|
||||
defchoice[PPD_MAX_NAME],
|
||||
/* Default option choice */
|
||||
text[PPD_MAX_TEXT];
|
||||
/* Human-readable text */
|
||||
ppd_ui_t ui; /* Type of UI option */
|
||||
ppd_section_t section; /* Section for command */
|
||||
float order; /* Order number */
|
||||
@@ -113,7 +127,8 @@ typedef struct /**** Options ****/
|
||||
|
||||
typedef struct ppd_group_str /**** Groups ****/
|
||||
{
|
||||
char text[81]; /* Human-readable group name */
|
||||
char text[PPD_MAX_TEXT];
|
||||
/* Human-readable group name */
|
||||
int num_options; /* Number of options */
|
||||
ppd_option_t *options; /* Options */
|
||||
int num_subgroups; /* Number of sub-groups */
|
||||
@@ -123,16 +138,21 @@ typedef struct ppd_group_str /**** Groups ****/
|
||||
|
||||
typedef struct /**** Constraints ****/
|
||||
{
|
||||
char option1[41], /* First keyword */
|
||||
choice1[41], /* First option/choice (blank for all) */
|
||||
option2[41], /* Second keyword */
|
||||
choice2[41]; /* Second option/choice (blank for all) */
|
||||
char option1[PPD_MAX_NAME],
|
||||
/* First keyword */
|
||||
choice1[PPD_MAX_NAME],
|
||||
/* First option/choice (blank for all) */
|
||||
option2[PPD_MAX_NAME],
|
||||
/* Second keyword */
|
||||
choice2[PPD_MAX_NAME];
|
||||
/* Second option/choice (blank for all) */
|
||||
} ppd_const_t;
|
||||
|
||||
typedef struct /**** Page Sizes ****/
|
||||
{
|
||||
int marked; /* Page size selected? */
|
||||
char name[41]; /* Media size option */
|
||||
char name[PPD_MAX_NAME];
|
||||
/* Media size option */
|
||||
float width, /* Width of media in points */
|
||||
length, /* Length of media in points */
|
||||
left, /* Left printable margin in points */
|
||||
@@ -143,15 +163,18 @@ typedef struct /**** Page Sizes ****/
|
||||
|
||||
typedef struct /**** Emulators ****/
|
||||
{
|
||||
char name[41], /* Emulator name */
|
||||
char name[PPD_MAX_NAME],
|
||||
/* Emulator name */
|
||||
*start, /* Code to switch to this emulation */
|
||||
*stop; /* Code to stop this emulation */
|
||||
} ppd_emul_t;
|
||||
|
||||
typedef struct /**** sRGB Color Profiles ****/
|
||||
{
|
||||
char resolution[41], /* Resolution or "-" */
|
||||
media_type[41]; /* Media type of "-" */
|
||||
char resolution[PPD_MAX_NAME],
|
||||
/* Resolution or "-" */
|
||||
media_type[PPD_MAX_NAME];
|
||||
/* Media type of "-" */
|
||||
float density, /* Ink density to use */
|
||||
gamma, /* Gamma correction to use */
|
||||
matrix[3][3]; /* Transform matrix */
|
||||
@@ -207,11 +230,15 @@ typedef struct /**** Files ****/
|
||||
*/
|
||||
|
||||
extern void ppdClose(ppd_file_t *ppd);
|
||||
extern int ppdCollect(ppd_file_t *ppd, ppd_section_t section,
|
||||
ppd_choice_t ***choices);
|
||||
extern int ppdConflicts(ppd_file_t *ppd);
|
||||
extern int ppdEmit(ppd_file_t *ppd, FILE *fp,
|
||||
ppd_section_t section);
|
||||
extern int ppdEmitFd(ppd_file_t *ppd, int fd,
|
||||
ppd_section_t section);
|
||||
extern int ppdEmitJCL(ppd_file_t *ppd, FILE *fp, int job_id,
|
||||
const char *user, const char *title);
|
||||
extern int ppdIsMarked(ppd_file_t *ppd, const char *keyword,
|
||||
const char *option);
|
||||
extern void ppdMarkDefaults(ppd_file_t *ppd);
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* snprintf functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* String functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
|
||||
+9
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* String definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -32,7 +32,14 @@
|
||||
# include <stdio.h>
|
||||
# include <stdarg.h>
|
||||
# include <config.h>
|
||||
# include <string.h>
|
||||
|
||||
# ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
# endif /* HAVE_STRING_H */
|
||||
|
||||
# ifdef HAVE_STRINGS_H
|
||||
# include <strings.h>
|
||||
# endif /* HAVE_STRINGS_H */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Temp file utilities for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2001 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:
|
||||
*
|
||||
* cupsTempFd() - Create a temporary file.
|
||||
* cupsTempFile() - Generate a temporary filename.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include "string.h"
|
||||
#include "debug.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsTempFd()' - Create a temporary file.
|
||||
*/
|
||||
|
||||
int /* O - New file descriptor */
|
||||
cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
int len) /* I - Size of buffer */
|
||||
{
|
||||
int fd; /* File descriptor for temp file */
|
||||
#ifdef WIN32
|
||||
char tmpdir[1024]; /* Windows temporary directory */
|
||||
DWORD curtime; /* Current time */
|
||||
#else
|
||||
char *tmpdir; /* TMPDIR environment var */
|
||||
struct timeval curtime; /* Current time */
|
||||
#endif /* WIN32 */
|
||||
static char buf[1024] = ""; /* Buffer if you pass in NULL and 0 */
|
||||
|
||||
|
||||
/*
|
||||
* See if a filename was specified...
|
||||
*/
|
||||
|
||||
if (filename == NULL)
|
||||
{
|
||||
filename = buf;
|
||||
len = sizeof(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* See if TMPDIR is defined...
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
GetTempPath(sizeof(tmpdir), tmpdir);
|
||||
#else
|
||||
if ((tmpdir = getenv("TMPDIR")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Put root temp files in restricted temp directory...
|
||||
*/
|
||||
|
||||
if (getuid() == 0)
|
||||
tmpdir = CUPS_REQUESTS "/tmp";
|
||||
else
|
||||
tmpdir = "/var/tmp";
|
||||
}
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
* Make the temporary name using the specified directory...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
#ifdef WIN32
|
||||
/*
|
||||
* Get the current time of day...
|
||||
*/
|
||||
|
||||
curtime = GetTickCount();
|
||||
|
||||
/*
|
||||
* Format a string using the hex time values...
|
||||
*/
|
||||
|
||||
snprintf(filename, len - 1, "%s/%08lx", tmpdir, curtime);
|
||||
#else
|
||||
/*
|
||||
* Get the current time of day...
|
||||
*/
|
||||
|
||||
gettimeofday(&curtime, NULL);
|
||||
|
||||
/*
|
||||
* Format a string using the hex time values...
|
||||
*/
|
||||
|
||||
snprintf(filename, len - 1, "%s/%08lx%05lx", tmpdir,
|
||||
curtime.tv_sec, curtime.tv_usec);
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
* Open the file in "exclusive" mode, making sure that we don't
|
||||
* stomp on an existing file or someone's symlink crack...
|
||||
*/
|
||||
|
||||
#ifdef O_NOFOLLOW
|
||||
fd = open(filename, O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW, 0600);
|
||||
#else
|
||||
fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600);
|
||||
#endif /* O_NOFOLLOW */
|
||||
|
||||
if (fd < 0 && errno == EPERM)
|
||||
break; /* Stop immediately if permission denied! */
|
||||
}
|
||||
while (fd < 0);
|
||||
|
||||
/*
|
||||
* Return the file descriptor...
|
||||
*/
|
||||
|
||||
return (fd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsTempFile()' - Generate a temporary filename.
|
||||
*/
|
||||
|
||||
char * /* O - Filename */
|
||||
cupsTempFile(char *filename, /* I - Pointer to buffer */
|
||||
int len) /* I - Size of buffer */
|
||||
{
|
||||
int fd; /* File descriptor for temp file */
|
||||
static char buf[1024] = ""; /* Buffer if you pass in NULL and 0 */
|
||||
|
||||
|
||||
/*
|
||||
* See if a filename was specified...
|
||||
*/
|
||||
|
||||
if (filename == NULL)
|
||||
{
|
||||
filename = buf;
|
||||
len = sizeof(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the temporary file...
|
||||
*/
|
||||
|
||||
if ((fd = cupsTempFd(filename, len)) < 0)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Close the temp file - it'll be reopened later as needed...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
|
||||
/*
|
||||
* Return the temp filename...
|
||||
*/
|
||||
|
||||
return (filename);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+34
-19
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP test program for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -45,25 +45,20 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* HTTP connection */
|
||||
http_status_t status; /* Status of GET command */
|
||||
char buffer[1024]; /* Input buffer */
|
||||
char buffer[8192]; /* Input buffer */
|
||||
long bytes; /* Number of bytes read */
|
||||
FILE *out; /* Output file */
|
||||
char host[HTTP_MAX_URI],
|
||||
method[HTTP_MAX_URI],
|
||||
username[HTTP_MAX_URI],
|
||||
resource[HTTP_MAX_URI];
|
||||
int port;
|
||||
long length, total;
|
||||
time_t start, current;
|
||||
|
||||
#define HOST "dns.easysw.com"
|
||||
#define PORT 80
|
||||
|
||||
puts("Connecting to " HOST "...");
|
||||
|
||||
httpInitialize();
|
||||
http = httpConnect(HOST, PORT);
|
||||
if (http == NULL)
|
||||
{
|
||||
puts("Unable to connect to " HOST "!");
|
||||
return (1);
|
||||
}
|
||||
|
||||
puts("Connected to " HOST "...");
|
||||
|
||||
http = NULL;
|
||||
out = stdout;
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
@@ -75,22 +70,42 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
continue;
|
||||
}
|
||||
|
||||
printf("Requesting file \"%s\"...\n", argv[i]);
|
||||
httpSeparate(argv[i], method, username, host, &port, resource);
|
||||
|
||||
http = httpConnect(host, port);
|
||||
if (http == NULL)
|
||||
{
|
||||
perror(host);
|
||||
continue;
|
||||
}
|
||||
printf("Requesting file \"%s\"...\n", resource);
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
|
||||
httpGet(http, argv[i]);
|
||||
status = httpUpdate(http);
|
||||
httpGet(http, resource);
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
|
||||
if (status == HTTP_OK)
|
||||
puts("GET OK:");
|
||||
else
|
||||
printf("GET failed with status %d...\n", status);
|
||||
|
||||
|
||||
start = time(NULL);
|
||||
length = atoi(httpGetField(http, HTTP_FIELD_CONTENT_LENGTH));
|
||||
total = 0;
|
||||
|
||||
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
total += bytes;
|
||||
fwrite(buffer, bytes, 1, out);
|
||||
if (out != stdout)
|
||||
printf("Read %ld bytes, %ld total...\n", bytes, ftell(out));
|
||||
{
|
||||
current = time(NULL);
|
||||
if (current == start) current ++;
|
||||
printf("\r%ld/%ld bytes (%ld bytes/sec) ", total, length,
|
||||
total / (current - start));
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-8
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD test program for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2001 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
|
||||
@@ -56,6 +56,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
"JCL", "PAGE", "PROLOG" };
|
||||
|
||||
|
||||
setbuf(stdout, NULL);
|
||||
|
||||
/*
|
||||
* Display PPD files for each file listed on the command-line...
|
||||
*/
|
||||
@@ -68,14 +70,9 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
{
|
||||
if (strstr(argv[i], ".ppd"))
|
||||
filename = argv[i];
|
||||
else
|
||||
filename = cupsGetPPD(argv[i]);
|
||||
|
||||
if ((ppd = ppdOpenFile(filename)) == NULL)
|
||||
if ((ppd = ppdOpenFile(argv[i])) == NULL)
|
||||
{
|
||||
fprintf(stderr, "Unable to open \'%s\' as a PPD file!\n", filename);
|
||||
fprintf(stderr, "Unable to open \'%s\' as a PPD file!\n", argv[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -171,6 +168,17 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
}
|
||||
|
||||
printf(" num_profiles = %d\n", ppd->num_profiles);
|
||||
for (j = 0; j < ppd->num_profiles; j ++)
|
||||
printf(" profiles[%d] = %s/%s %.3f %.3f [ %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f ]\n",
|
||||
j, ppd->profiles[j].resolution, ppd->profiles[j].media_type,
|
||||
ppd->profiles[j].gamma, ppd->profiles[j].density,
|
||||
ppd->profiles[j].matrix[0][0], ppd->profiles[j].matrix[0][1],
|
||||
ppd->profiles[j].matrix[0][2], ppd->profiles[j].matrix[1][0],
|
||||
ppd->profiles[j].matrix[1][1], ppd->profiles[j].matrix[1][2],
|
||||
ppd->profiles[j].matrix[2][0], ppd->profiles[j].matrix[2][1],
|
||||
ppd->profiles[j].matrix[2][2]);
|
||||
|
||||
printf(" num_fonts = %d\n", ppd->num_fonts);
|
||||
for (j = 0; j < ppd->num_fonts; j ++)
|
||||
printf(" fonts[%d] = %s\n", j, ppd->fonts[j]);
|
||||
|
||||
+334
-88
@@ -4,7 +4,7 @@
|
||||
* User, system, and password routines for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2001 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -24,9 +24,16 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsUser() - Return the current users name.
|
||||
* cupsGetPassword() - Get a password from the user...
|
||||
* cupsServer() - Return the hostname of the default server...
|
||||
* cupsEncryption() - Get the default encryption settings...
|
||||
* cupsGetPassword() - Get a password from the user...
|
||||
* cupsServer() - Return the hostname of the default server...
|
||||
* cupsSetEncryption() - Set the encryption preference.
|
||||
* cupsSetPasswordCB() - Set the password callback for CUPS.
|
||||
* cupsSetServer() - Set the default server name...
|
||||
* cupsSetUser() - Set the default user name...
|
||||
* cupsUser() - Return the current users name.
|
||||
* cups_get_password() - Get a password from the user...
|
||||
* cups_get_line() - Get a line from a file...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -34,11 +41,279 @@
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include <config.h>
|
||||
#include "string.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static const char *cups_get_password(const char *prompt);
|
||||
static char *cups_get_line(char *buf, int buflen, FILE *fp);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static http_encryption_t cups_encryption = (http_encryption_t)-1;
|
||||
static char cups_user[65] = "",
|
||||
cups_server[256] = "";
|
||||
static const char *(*cups_pwdcb)(const char *) = cups_get_password;
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsEncryption()' - Get the default encryption settings...
|
||||
*/
|
||||
|
||||
http_encryption_t
|
||||
cupsEncryption(void)
|
||||
{
|
||||
FILE *fp; /* client.conf file */
|
||||
char *encryption; /* CUPS_ENCRYPTION variable */
|
||||
const char *home; /* Home directory of user */
|
||||
static char line[1024]; /* Line from file */
|
||||
|
||||
|
||||
/*
|
||||
* First see if we have already set the encryption stuff...
|
||||
*/
|
||||
|
||||
if (cups_encryption == (http_encryption_t)-1)
|
||||
{
|
||||
/*
|
||||
* Then see if the CUPS_ENCRYPTION environment variable is set...
|
||||
*/
|
||||
|
||||
if ((encryption = getenv("CUPS_ENCRYPTION")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
|
||||
*/
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/.cupsrc", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = NULL;
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/client.conf", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
|
||||
}
|
||||
|
||||
encryption = "IfRequested";
|
||||
|
||||
if (fp != NULL)
|
||||
{
|
||||
/*
|
||||
* Read the config file and look for a ServerName line...
|
||||
*/
|
||||
|
||||
while (cups_get_line(line, sizeof(line), fp) != NULL)
|
||||
if (strncmp(line, "Encryption ", 11) == 0)
|
||||
{
|
||||
/*
|
||||
* Got it! Drop any trailing newline and find the name...
|
||||
*/
|
||||
|
||||
encryption = line + strlen(line) - 1;
|
||||
if (*encryption == '\n')
|
||||
*encryption = '\0';
|
||||
|
||||
for (encryption = line + 11; isspace(*encryption); encryption ++);
|
||||
break;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the encryption preference...
|
||||
*/
|
||||
|
||||
if (strcasecmp(encryption, "never") == 0)
|
||||
cups_encryption = HTTP_ENCRYPT_NEVER;
|
||||
else if (strcasecmp(encryption, "always") == 0)
|
||||
cups_encryption = HTTP_ENCRYPT_ALWAYS;
|
||||
else if (strcasecmp(encryption, "required") == 0)
|
||||
cups_encryption = HTTP_ENCRYPT_REQUIRED;
|
||||
else
|
||||
cups_encryption = HTTP_ENCRYPT_IF_REQUESTED;
|
||||
}
|
||||
|
||||
return (cups_encryption);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetPassword()' - Get a password from the user...
|
||||
*/
|
||||
|
||||
const char * /* O - Password */
|
||||
cupsGetPassword(const char *prompt) /* I - Prompt string */
|
||||
{
|
||||
return ((*cups_pwdcb)(prompt));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsSetEncryption()' - Set the encryption preference.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */
|
||||
{
|
||||
cups_encryption = e;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsServer()' - Return the hostname of the default server...
|
||||
*/
|
||||
|
||||
const char * /* O - Server name */
|
||||
cupsServer(void)
|
||||
{
|
||||
FILE *fp; /* client.conf file */
|
||||
char *server; /* Pointer to server name */
|
||||
const char *home; /* Home directory of user */
|
||||
static char line[1024]; /* Line from file */
|
||||
|
||||
|
||||
/*
|
||||
* First see if we have already set the server name...
|
||||
*/
|
||||
|
||||
if (!cups_server[0])
|
||||
{
|
||||
/*
|
||||
* Then see if the CUPS_SERVER environment variable is set...
|
||||
*/
|
||||
|
||||
if ((server = getenv("CUPS_SERVER")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
|
||||
*/
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/.cupsrc", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = NULL;
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/client.conf", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
|
||||
}
|
||||
|
||||
server = "localhost";
|
||||
|
||||
if (fp != NULL)
|
||||
{
|
||||
/*
|
||||
* Read the config file and look for a ServerName line...
|
||||
*/
|
||||
|
||||
while (cups_get_line(line, sizeof(line), fp) != NULL)
|
||||
if (strncmp(line, "ServerName ", 11) == 0)
|
||||
{
|
||||
/*
|
||||
* Got it! Drop any trailing newline and find the name...
|
||||
*/
|
||||
|
||||
server = line + strlen(line) - 1;
|
||||
if (*server == '\n')
|
||||
*server = '\0';
|
||||
|
||||
for (server = line + 11; isspace(*server); server ++);
|
||||
break;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the server name over...
|
||||
*/
|
||||
|
||||
strncpy(cups_server, server, sizeof(cups_server) - 1);
|
||||
cups_server[sizeof(cups_server) - 1] = '\0';
|
||||
}
|
||||
|
||||
return (cups_server);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsSetPasswordCB()' - Set the password callback for CUPS.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsSetPasswordCB(const char *(*cb)(const char *)) /* I - Callback function */
|
||||
{
|
||||
if (cb == (const char *(*)(const char *))0)
|
||||
cups_pwdcb = cups_get_password;
|
||||
else
|
||||
cups_pwdcb = cb;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsSetServer()' - Set the default server name...
|
||||
*/
|
||||
|
||||
void
|
||||
cupsSetServer(const char *server) /* I - Server name */
|
||||
{
|
||||
if (server)
|
||||
{
|
||||
strncpy(cups_server, server, sizeof(cups_server) - 1);
|
||||
cups_server[sizeof(cups_server) - 1] = '\0';
|
||||
}
|
||||
else
|
||||
cups_server[0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsSetUser()' - Set the default user name...
|
||||
*/
|
||||
|
||||
void
|
||||
cupsSetUser(const char *user) /* I - User name */
|
||||
{
|
||||
if (user)
|
||||
{
|
||||
strncpy(cups_user, user, sizeof(cups_user) - 1);
|
||||
cups_user[sizeof(cups_user) - 1] = '\0';
|
||||
}
|
||||
else
|
||||
cups_user[0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
/*
|
||||
* WIN32 and OS/2 username and password stuff...
|
||||
@@ -51,16 +326,19 @@
|
||||
const char * /* O - User name */
|
||||
cupsUser(void)
|
||||
{
|
||||
return ("WindowsUser");
|
||||
if (!cups_user[0])
|
||||
strcpy(cups_user, "WindowsUser");
|
||||
|
||||
return (cups_user);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetPassword()' - Get a password from the user...
|
||||
* 'cups_get_password()' - Get a password from the user...
|
||||
*/
|
||||
|
||||
const char * /* O - Password */
|
||||
cupsGetPassword(const char *prompt) /* I - Prompt string */
|
||||
static const char * /* O - Password */
|
||||
cups_get_password(const char *prompt) /* I - Prompt string */
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
@@ -81,35 +359,49 @@ cupsUser(void)
|
||||
struct passwd *pwd; /* User/password entry */
|
||||
|
||||
|
||||
/*
|
||||
* Rewind the password file...
|
||||
*/
|
||||
if (!cups_user[0])
|
||||
{
|
||||
/*
|
||||
* Rewind the password file...
|
||||
*/
|
||||
|
||||
setpwent();
|
||||
setpwent();
|
||||
|
||||
/*
|
||||
* Lookup the password entry for the current user.
|
||||
*/
|
||||
/*
|
||||
* Lookup the password entry for the current user.
|
||||
*/
|
||||
|
||||
if ((pwd = getpwuid(getuid())) == NULL)
|
||||
return ("unknown"); /* Unknown user! */
|
||||
if ((pwd = getpwuid(getuid())) == NULL)
|
||||
strcpy(cups_user, "unknown"); /* Unknown user! */
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Copy the username...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Rewind the password file again and return the username...
|
||||
*/
|
||||
setpwent();
|
||||
|
||||
setpwent();
|
||||
strncpy(cups_user, pwd->pw_name, sizeof(cups_user) - 1);
|
||||
cups_user[sizeof(cups_user) - 1] = '\0';
|
||||
}
|
||||
|
||||
return (pwd->pw_name);
|
||||
/*
|
||||
* Rewind the password file again...
|
||||
*/
|
||||
|
||||
setpwent();
|
||||
}
|
||||
|
||||
return (cups_user);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetPassword()' - Get a password from the user...
|
||||
* 'cups_get_password()' - Get a password from the user...
|
||||
*/
|
||||
|
||||
const char * /* O - Password */
|
||||
cupsGetPassword(const char *prompt) /* I - Prompt string */
|
||||
static const char * /* O - Password */
|
||||
cups_get_password(const char *prompt) /* I - Prompt string */
|
||||
{
|
||||
return (getpass(prompt));
|
||||
}
|
||||
@@ -117,82 +409,36 @@ cupsGetPassword(const char *prompt) /* I - Prompt string */
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsServer()' - Return the hostname of the default server...
|
||||
* 'cups_get_line()' - Get a line from a file.
|
||||
*/
|
||||
|
||||
const char * /* O - Server name */
|
||||
cupsServer(void)
|
||||
static char * /* O - Line from file */
|
||||
cups_get_line(char *buf, /* I - Line buffer */
|
||||
int buflen, /* I - Size of line buffer */
|
||||
FILE *fp) /* I - File to read from */
|
||||
{
|
||||
FILE *fp; /* client.conf file */
|
||||
char *server; /* Pointer to server name */
|
||||
const char *home; /* Home directory of user */
|
||||
static char line[1024]; /* Line from file */
|
||||
char *bufptr; /* Pointer to end of buffer */
|
||||
|
||||
|
||||
/*
|
||||
* First see if the CUPS_SERVER environment variable is set...
|
||||
* Get the line from a file...
|
||||
*/
|
||||
|
||||
if ((server = getenv("CUPS_SERVER")) != NULL)
|
||||
return (server);
|
||||
if (fgets(buf, buflen, fp) == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
|
||||
* Remove all trailing whitespace...
|
||||
*/
|
||||
|
||||
if ((home = getenv("HOME")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/.cupsrc", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = NULL;
|
||||
bufptr = buf + strlen(buf) - 1;
|
||||
if (bufptr < buf)
|
||||
return (NULL);
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line), "%s/client.conf", home);
|
||||
fp = fopen(line, "r");
|
||||
}
|
||||
else
|
||||
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
|
||||
}
|
||||
while (isspace(*bufptr) && bufptr >= buf)
|
||||
*bufptr-- = '\0';
|
||||
|
||||
if (fp == NULL)
|
||||
return ("localhost");
|
||||
|
||||
/*
|
||||
* Read the config file and look for a ServerName line...
|
||||
*/
|
||||
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
if (strncmp(line, "ServerName ", 11) == 0)
|
||||
{
|
||||
/*
|
||||
* Got it! Drop any trailing newline and find the name...
|
||||
*/
|
||||
|
||||
server = line + strlen(line) - 1;
|
||||
if (*server == '\n')
|
||||
*server = '\0';
|
||||
|
||||
for (server = line + 11; isspace(*server); server ++);
|
||||
|
||||
if (*server)
|
||||
{
|
||||
fclose(fp);
|
||||
return (server);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Didn't see a ServerName line, so return "localhost"...
|
||||
*/
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return ("localhost");
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+671
-352
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+2
-2
@@ -1,6 +1,6 @@
|
||||
%%BeginResource: procset hpgltops 1.1 0
|
||||
%
|
||||
% "$Id: HPGLprolog 932 2000-02-26 20:01:37Z mike $"
|
||||
% "$Id: HPGLprolog 1605 2001-03-02 22:34:21Z andy $"
|
||||
%
|
||||
% HP-GL/2 filter procset for the Common UNIX Printing System (CUPS).
|
||||
%
|
||||
@@ -9,7 +9,7 @@
|
||||
% should be called 'NP' (newpath), but GhostScript uses the 'NP' name
|
||||
% for 'noaccess put' in some of its font files...
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs are the
|
||||
% property of Easy Software Products and are protected by Federal
|
||||
|
||||
+20
-15
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Datafile makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1993-2000 by Easy Software Products.
|
||||
# Copyright 1993-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -81,20 +81,25 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(DATADIR)/banners
|
||||
$(CHMOD) ugo+rx $(DATADIR)
|
||||
$(CHMOD) ugo+rx $(DATADIR)/banners
|
||||
$(INSTALL_DATA) $(BANNERS) $(DATADIR)/banners
|
||||
-$(MKDIR) $(DATADIR)/charsets
|
||||
$(CHMOD) ugo+rx $(DATADIR)/charsets
|
||||
$(INSTALL_DATA) $(CHARSETS) $(DATADIR)/charsets
|
||||
-$(MKDIR) $(DATADIR)/data
|
||||
$(CHMOD) ugo+rx $(DATADIR)/data
|
||||
$(INSTALL_DATA) $(DATAFILES) $(DATADIR)/data
|
||||
-if test "$(PAMDIR)" != ""; then \
|
||||
$(MKDIR) $(PAMDIR); \
|
||||
$(CHMOD) ugo+rx $(PAMDIR); \
|
||||
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
|
||||
$(INSTALL_DIR) $(DATADIR)/banners
|
||||
for file in $(BANNERS); do \
|
||||
$(INSTALL_DATA) $$file $(DATADIR)/banners; \
|
||||
done
|
||||
$(INSTALL_DIR) $(DATADIR)/charsets
|
||||
for file in $(CHARSETS); do \
|
||||
$(INSTALL_DATA) $$file $(DATADIR)/charsets; \
|
||||
done
|
||||
$(INSTALL_DIR) $(DATADIR)/data
|
||||
for file in $(DATAFILES); do \
|
||||
$(INSTALL_DATA) $$file $(DATADIR)/data; \
|
||||
done
|
||||
-if test x$(PAMDIR) != x; then \
|
||||
$(INSTALL_DIR) $(PAMDIR); \
|
||||
if test -f /lib/security/pam_unix.so; then \
|
||||
$(INSTALL_DATA) cups.suse $(PAMDIR)/cups; \
|
||||
else \
|
||||
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
|
||||
fi \
|
||||
fi
|
||||
|
||||
|
||||
|
||||
+49
-31
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,14 +161,20 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -170,28 +186,30 @@ gsave
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
pageWidth -7 mul add % - 2 lines
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Classified) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
pageHeight 6 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Classified) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +219,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +228,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +237,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +246,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +272,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: classified 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: classified 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+49
-31
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,14 +161,20 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -170,28 +186,30 @@ gsave
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
pageWidth -7 mul add % - 2 lines
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Confidential) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
pageHeight 6 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Confidential) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +219,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +228,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +237,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +246,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +272,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: confidential 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: confidential 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
auth required /lib/security/pam_unix.so nullok shadow
|
||||
account required /lib/security/pam_unix.so
|
||||
+49
-31
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,14 +161,20 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -170,28 +186,30 @@ gsave
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
pageWidth -7 mul add % - 2 lines
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Secret) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
pageHeight 6 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Secret) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +219,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +228,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +237,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +246,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +272,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: secret 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: secret 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+47
-45
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,47 +161,39 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
pageBottom 72 mul
|
||||
translate
|
||||
|
||||
% Draw the label at the top and bottom...
|
||||
0 setgray % Color
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Banner) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Banner) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +203,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +212,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +221,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +230,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +256,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: standard 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: standard 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+52
-35
@@ -14,13 +14,23 @@
|
||||
%
|
||||
% PostScript test page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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
|
||||
%
|
||||
/OCTANT { % Draw a color wheel OCTANT...
|
||||
% (name) radius r g b OCTANT -
|
||||
@@ -213,15 +223,22 @@ gsave
|
||||
/yResolution exch abs def % yResolution = abs(yres)
|
||||
/xResolution exch abs def % xResolution = abs(xres)
|
||||
|
||||
% Figure out the sizes of things...
|
||||
/wheelSize % size of wheels
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 9 mul }
|
||||
{ pageHeight 7 mul }
|
||||
ifelse def
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
/smallFont /Times-Roman findfont % smallFont = Times-Roman
|
||||
pageWidth 1.5 mul scalefont def % size = pageWidth * 1.5 (nominally 13)
|
||||
pageHeight scalefont def % size = pageHeight (nominally 11)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -239,7 +256,7 @@ gsave
|
||||
translate
|
||||
|
||||
% Size the wheel...
|
||||
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
|
||||
wheelSize
|
||||
|
||||
% Draw the colors...
|
||||
dup (C) exch 0 1 1 OCTANT 45 rotate
|
||||
@@ -268,7 +285,7 @@ gsave
|
||||
translate
|
||||
|
||||
% Size the wheel...
|
||||
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
|
||||
wheelSize
|
||||
|
||||
% Loop at 1 degree increments
|
||||
0 1 359 {
|
||||
@@ -290,7 +307,7 @@ gsave
|
||||
(1 Degree Radial Lines) CENTER % Show the text centered
|
||||
|
||||
% Imageable area...
|
||||
pageWidth 19.5 mul % Height of imageable area
|
||||
pageHeight 15 mul % Height of imageable area
|
||||
|
||||
pageWidth 4.5 mul % x = pageWidth * 1/16 * 72
|
||||
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
|
||||
@@ -319,7 +336,7 @@ gsave
|
||||
smallFont setfont % Font
|
||||
pageWidth 14 mul % x = pageWidth * 3/16 * 72
|
||||
pageHeight 36 mul % y = pageWidth * 1/2 * 72
|
||||
pageWidth -3 mul add % y -= 2 * smallFont height
|
||||
pageHeight -2 mul add % y -= 2 * smallFont height
|
||||
|
||||
% Page Size inches
|
||||
2 copy moveto % Move to x & y
|
||||
@@ -330,7 +347,7 @@ gsave
|
||||
(in) show % "in"
|
||||
|
||||
% Page Size millimeters
|
||||
pageWidth -1.5 mul add % Move down...
|
||||
pageHeight sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
10 pageWidth 25.4 mul NUMBER % pageWidth
|
||||
@@ -339,7 +356,7 @@ gsave
|
||||
(mm) show % "mm"
|
||||
|
||||
% Lower-left inches
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
(Lower-Left: ) RIGHT % Label
|
||||
@@ -349,7 +366,7 @@ gsave
|
||||
(in) show % "in"
|
||||
|
||||
% Lower-left millimeters
|
||||
pageWidth -1.5 mul add % Move down...
|
||||
pageHeight sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
10 pageLeft 25.4 mul NUMBER % pageLeft
|
||||
@@ -358,7 +375,7 @@ gsave
|
||||
(mm) show % "mm"
|
||||
|
||||
% Upper-right inches
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
(Upper-Right: ) RIGHT % Label
|
||||
@@ -368,7 +385,7 @@ gsave
|
||||
(in) show % "in"
|
||||
|
||||
% Upper-right millimeters
|
||||
pageWidth -1.5 mul add % Move down...
|
||||
pageHeight sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
10 pageRight 25.4 mul NUMBER % pageRight
|
||||
@@ -377,7 +394,7 @@ gsave
|
||||
(mm) show % "mm"
|
||||
|
||||
% Resolution dots-per-inch
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
|
||||
2 copy moveto % Move to x & y
|
||||
(Resolution: ) RIGHT % Label
|
||||
@@ -387,7 +404,7 @@ gsave
|
||||
(dpi) show % "dpi"
|
||||
|
||||
% Resolution dots-per-meter
|
||||
pageWidth -1.5 mul add % Move down...
|
||||
pageHeight sub % Move down...
|
||||
|
||||
moveto % Move to x & y
|
||||
1 xResolution 39.27 mul NUMBER % xResolution
|
||||
@@ -396,7 +413,7 @@ gsave
|
||||
(dpm) show % "dpm"
|
||||
|
||||
% Interpreter Information...
|
||||
pageWidth 19.5 mul % Height of interpreter info
|
||||
pageHeight 15 mul % Height of interpreter information
|
||||
|
||||
pageWidth 40.5 mul % x = pageWidth * 9/16 * 72
|
||||
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
|
||||
@@ -425,7 +442,7 @@ gsave
|
||||
smallFont setfont % Font
|
||||
pageWidth 49 mul % x = pageWidth * 11/16 * 72
|
||||
pageHeight 36 mul % y = pageWidth * 1/2 * 72
|
||||
pageWidth -3 mul add % y -= 2 * smallFont height
|
||||
pageHeight 2 mul sub % y -= 2 * smallFont height
|
||||
|
||||
% Language level
|
||||
2 copy moveto % Move to x & y
|
||||
@@ -434,7 +451,7 @@ gsave
|
||||
1 languagelevel NUMBER % Language level
|
||||
|
||||
% Version
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
2 copy moveto % Move to x & y
|
||||
(Version: ) RIGHT % Label
|
||||
version show % Version
|
||||
@@ -443,13 +460,13 @@ gsave
|
||||
(\)) show % ")"
|
||||
|
||||
% Product
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
2 copy moveto % Move to x & y
|
||||
(Product: ) RIGHT % Label
|
||||
product show % Product name
|
||||
|
||||
% Serial Number
|
||||
pageWidth -3 mul add % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
2 copy moveto % Move to x & y
|
||||
(Serial #: ) RIGHT % Label
|
||||
1 serialnumber NUMBER % S/N
|
||||
@@ -463,28 +480,28 @@ gsave
|
||||
|
||||
% Draw the copyright notice at the bottom...
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 14 mul % Bottom of page
|
||||
pageHeight 10 mul % Bottom of page
|
||||
2 copy moveto % Position text
|
||||
(Printed Using CUPS v1.1) CENTER % Show text centered
|
||||
(Printed Using CUPS v1.1.x) CENTER % Show text centered
|
||||
|
||||
pageWidth 3 mul sub % Move down...
|
||||
pageHeight 2 mul sub % Move down...
|
||||
2 copy moveto % Position text
|
||||
smallFont setfont % Font
|
||||
(Copyright 1993-2000 Easy Software Products, All Rights Reserved.) CENTER
|
||||
pageWidth 1.5 mul sub % Move down...
|
||||
(Copyright 1993-2001 Easy Software Products, All Rights Reserved.) CENTER
|
||||
pageHeight sub % Move down...
|
||||
2 copy moveto % Position text
|
||||
(CUPS, and the CUPS logo are the trademark property of) CENTER
|
||||
pageWidth 1.5 mul sub % Move down...
|
||||
pageHeight sub % Move down...
|
||||
2 copy moveto % Position text
|
||||
(Easy Software Products, 44141 Airport View Drive, Suite 204,) CENTER
|
||||
pageWidth 1.5 mul sub % Move down...
|
||||
pageHeight sub % Move down...
|
||||
2 copy moveto % Position text
|
||||
(Hollywood, Maryland, 20636-3111, USA.) CENTER
|
||||
|
||||
% Then the CUPS logo....
|
||||
gsave
|
||||
pageWidth 4 mul
|
||||
pageWidth 6 mul
|
||||
pageHeight 4 mul
|
||||
translate
|
||||
pageWidth 9 mul CUPSLOGO
|
||||
grestore
|
||||
@@ -492,7 +509,7 @@ gsave
|
||||
% And the ESP logo....
|
||||
gsave
|
||||
pageWidth 59 mul
|
||||
pageWidth 6 mul
|
||||
pageHeight 4 mul
|
||||
translate
|
||||
pageWidth 6 mul ESPLOGO
|
||||
grestore
|
||||
@@ -500,6 +517,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: testprint.ps 985 2000-03-13 18:55:00Z mike $".
|
||||
% End of "$Id: testprint.ps 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+49
-31
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,14 +161,20 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -170,28 +186,30 @@ gsave
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
pageWidth -7 mul add % - 2 lines
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Top Secret) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
pageHeight 6 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Top Secret) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +219,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +228,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +237,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +246,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +272,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: topsecret 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: topsecret 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+49
-31
@@ -14,36 +14,46 @@
|
||||
%
|
||||
% PostScript banner page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2000 Easy Software Products
|
||||
% Copyright 1993-2001 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs contain
|
||||
% unpublished proprietary information of Easy Software Products, and
|
||||
% are protected by Federal copyright law. They may not be disclosed
|
||||
% to third parties or copied or duplicated in any form, in whole or
|
||||
% in part, without the prior written consent of 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:
|
||||
%
|
||||
/CENTER \{ % Draw centered text
|
||||
% 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
|
||||
%
|
||||
/CENTER { % Draw centered text
|
||||
% (name) CENTER -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/RIGHT \{ % Draw right-justified text
|
||||
/RIGHT { % Draw right-justified text
|
||||
% (name) RIGHT -
|
||||
dup stringwidth pop % Get the width of the string
|
||||
neg 0 rmoveto % Shift left the entire distance
|
||||
show % Show the string
|
||||
} bind def
|
||||
/NUMBER \{ % Draw a number
|
||||
/NUMBER { % Draw a number
|
||||
% power n NUMBER -
|
||||
1 index 1 eq \{ % power == 1?
|
||||
1 index 1 eq { % power == 1?
|
||||
round cvi exch pop % Convert "n" to integer
|
||||
} \{
|
||||
} {
|
||||
1 index mul round exch div % Truncate extra decimal places
|
||||
} ifelse
|
||||
100 string cvs show % Convert to a string and show it...
|
||||
} bind def
|
||||
/CUPSLOGO \{ % Draw the CUPS logo
|
||||
/CUPSLOGO { % Draw the CUPS logo
|
||||
% height CUPSLOGO
|
||||
% Start with a big C...
|
||||
/Helvetica findfont 1 index scalefont setfont
|
||||
@@ -61,14 +71,14 @@
|
||||
dup 1.2 mul moveto
|
||||
(System) show
|
||||
} bind def
|
||||
/ESPLOGO \{ % Draw the ESP logo
|
||||
/ESPLOGO { % Draw the ESP logo
|
||||
% height ESPLOGO
|
||||
% Compute the size of the logo...
|
||||
0 0
|
||||
2 index 1.5 mul 3 index
|
||||
|
||||
% Do the "metallic" fill from 10% black to 40% black...
|
||||
1 -0.001 0 \{
|
||||
1 -0.001 0 {
|
||||
dup % loopval
|
||||
-0.15 mul % loopval * -0.15
|
||||
0.9 add % 0.9 - loopval * 0.15
|
||||
@@ -151,14 +161,20 @@ gsave
|
||||
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
|
||||
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
|
||||
|
||||
/boxWidth % width of text box
|
||||
pageWidth pageHeight lt
|
||||
{ pageWidth 54 mul }
|
||||
{ pageHeight 42 mul }
|
||||
ifelse def
|
||||
|
||||
newpath % Clear bounding path
|
||||
|
||||
% Create fonts...
|
||||
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
|
||||
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
|
||||
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
|
||||
|
||||
/mediumFont /Helvetica findfont % mediumFont = Helvetica
|
||||
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
|
||||
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
|
||||
|
||||
% Offset page to account for lower-left margin...
|
||||
pageLeft 72 mul
|
||||
@@ -170,28 +186,30 @@ gsave
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageHeight 72 mul % Top of page
|
||||
pageWidth -9 mul add % - 1 line
|
||||
pageWidth -7 mul add % - 2 lines
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Unclassified) CENTER % Show text centered
|
||||
|
||||
pageWidth 36 mul % Center of page
|
||||
pageWidth 8 mul % Bottom of page
|
||||
pageHeight 6 mul % Bottom of page
|
||||
moveto % Position text
|
||||
bigFont setfont % Font
|
||||
(Unclassified) CENTER % Show text centered
|
||||
|
||||
% Job information box...
|
||||
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
|
||||
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
0.5 setgray rectfill % Draw a shadow
|
||||
|
||||
pageWidth 18 mul % x = pageWidth * 1/4 * 72
|
||||
pageHeight 27 mul % y = pageHeight * 3/8 * 72
|
||||
pageWidth 36 mul % w = pageWidth * 1/2 * 72
|
||||
pageHeight 18 mul % h = pageHeight * 1/4 * 72
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
boxWidth 0.5 mul sub % x-= 1/2 box width
|
||||
pageHeight 30 mul % y = pageHeight * 1/4 * 72
|
||||
boxWidth % w = box width
|
||||
pageHeight 14 mul % h = pageHeight * 1/2 * 72
|
||||
|
||||
4 copy 1 setgray rectfill % Clear the box to white
|
||||
0 setgray rectstroke % Draw a black box around it...
|
||||
@@ -201,7 +219,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 4 mul add % y += 2 lines
|
||||
pageHeight 5 mul add % y += 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Job ID: ) RIGHT
|
||||
@@ -210,7 +228,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth 1 mul add % y += 1 line
|
||||
pageHeight 2 mul add % y += 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Title: ) RIGHT
|
||||
@@ -219,7 +237,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -2 mul add % y -= 1 line
|
||||
pageHeight -1 mul add % y -= 1 line
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Requesting User: ) RIGHT
|
||||
@@ -228,7 +246,7 @@ gsave
|
||||
|
||||
pageWidth 36 mul % x = pageWidth * 1/2 * 72
|
||||
pageHeight 36 mul % y = pageHeight * 1/2 * 72
|
||||
pageWidth -5 mul add % y -= 2 lines
|
||||
pageHeight -4 mul add % y -= 2 lines
|
||||
2 copy % Copy X & Y
|
||||
moveto
|
||||
(Billing Info: ) RIGHT
|
||||
@@ -254,6 +272,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: unclassified 1075 2000-05-11 20:02:21Z mike $".
|
||||
% End of "$Id: unclassified 1646 2001-03-25 12:42:57Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+33
-22
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Documentation makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1993-2000 by Easy Software Products.
|
||||
# Copyright 1993-2001 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -17,7 +17,7 @@
|
||||
# 44141 Airport View Drive, Suite 204
|
||||
# Hollywood, Maryland 20636-3111 USA
|
||||
#
|
||||
# Voice: (301) 373-9603
|
||||
# Voice: (301) 373-9600
|
||||
# EMail: cups-info@cups.org
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
@@ -47,7 +47,8 @@ include ../Makedefs
|
||||
#
|
||||
|
||||
DOCUMENTS = cmp.shtml idd.shtml ipp.shtml sam.shtml sdd.shtml \
|
||||
spm.shtml ssr.shtml stp.shtml sum.shtml svd.shtml
|
||||
spm.shtml sps.shtml ssr.shtml stp.shtml sum.shtml \
|
||||
svd.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
|
||||
@@ -78,6 +79,7 @@ WEBIMAGES = images/accept-jobs.gif \
|
||||
images/printer-stopped.gif \
|
||||
images/reject-jobs.gif \
|
||||
images/release-job.gif \
|
||||
images/restart-job.gif \
|
||||
images/right.gif \
|
||||
images/show-active.gif \
|
||||
images/show-completed.gif \
|
||||
@@ -101,14 +103,6 @@ all: $(DOCUMENTS:.shtml=.pdf) $(DOCUMENTS:.shtml=.html) overview.pdf
|
||||
ps: $(DOCUMENTS:.shtml=.ps) overview.ps
|
||||
|
||||
|
||||
#
|
||||
# Make manuals for printing...
|
||||
#
|
||||
|
||||
print: sam-7x8.pdf spm-7x8.pdf sum-7x8.pdf \
|
||||
sam-7x8.ps spm-7x8.ps sum-7x8.ps
|
||||
|
||||
|
||||
#
|
||||
# Remove all generated files...
|
||||
#
|
||||
@@ -124,16 +118,22 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(DOCDIR)
|
||||
$(CHMOD) ugo+rx $(DOCDIR)
|
||||
$(INSTALL_MAN) $(WEBPAGES) $(DOCDIR)
|
||||
$(INSTALL_MAN) overview.html overview.pdf $(DOCDIR)
|
||||
$(INSTALL_MAN) $(DOCUMENTS:.shtml=.html) $(DOCDIR)
|
||||
$(INSTALL_MAN) $(DOCUMENTS:.shtml=.pdf) $(DOCDIR)
|
||||
-$(MKDIR) $(DOCDIR)/images
|
||||
$(CHMOD) ugo+rx $(DOCDIR)/images
|
||||
$(INSTALL_MAN) $(WEBIMAGES) $(DOCDIR)/images
|
||||
$(INSTALL_MAN) $(DOCIMAGES) $(DOCDIR)/images
|
||||
$(INSTALL_DIR) $(DOCDIR)
|
||||
for file in $(WEBPAGES); do \
|
||||
$(INSTALL_MAN) $$file $(DOCDIR); \
|
||||
done
|
||||
$(INSTALL_MAN) overview.html $(DOCDIR)
|
||||
$(INSTALL_MAN) overview.pdf $(DOCDIR)
|
||||
for file in $(DOCUMENTS:.shtml=.html); do \
|
||||
$(INSTALL_MAN) $$file $(DOCDIR); \
|
||||
done
|
||||
for file in $(DOCUMENTS:.shtml=.pdf); do \
|
||||
$(INSTALL_MAN) $$file $(DOCDIR); \
|
||||
done
|
||||
$(INSTALL_DIR) $(DOCDIR)/images
|
||||
for file in $(WEBIMAGES) $(DOCIMAGES); do \
|
||||
$(INSTALL_MAN) $$file $(DOCDIR)/images; \
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
@@ -215,7 +215,18 @@ sum-7x8.ps: sum.shtml
|
||||
--size 7x8.5in --left 0.5in --right 0.25in \
|
||||
--top 0.25in --bottom 0.25in --fontsize 10 --headfootsize 10 -f $@ sum.shtml
|
||||
|
||||
$(DOCUMENTS): glossary.shtml printing-overview.shtml \
|
||||
$(DOCUMENTS:.shtml=.html): \
|
||||
glossary.shtml printing-overview.shtml \
|
||||
references.shtml system-overview.shtml \
|
||||
../LICENSE.html
|
||||
|
||||
$(DOCUMENTS:.shtml=.pdf): \
|
||||
glossary.shtml printing-overview.shtml \
|
||||
references.shtml system-overview.shtml \
|
||||
../LICENSE.html
|
||||
|
||||
$(DOCUMENTS:.shtml=.ps): \
|
||||
glossary.shtml printing-overview.shtml \
|
||||
references.shtml system-overview.shtml \
|
||||
../LICENSE.html
|
||||
|
||||
|
||||
+395
-398
@@ -1,284 +1,284 @@
|
||||
<!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-2000, All Rights Reserved">
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.1">
|
||||
<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: 17.0pt }
|
||||
H3 { font-family: sans-serif; font-size: 14.0pt }
|
||||
H4 { font-family: sans-serif; font-size: 11.0pt }
|
||||
H5 { font-family: sans-serif; font-size: 9.0pt }
|
||||
H6 { font-family: sans-serif; font-size: 8.0pt }
|
||||
SUB { font-size: 8.0pt }
|
||||
SUP { font-size: 8.0pt }
|
||||
PRE { font-size: 9.0pt }
|
||||
</STYLE>
|
||||
<TITLE>CUPS Configuration Management Plan</TITLE>
|
||||
<META NAME="author" CONTENT="Easy Software Products">
|
||||
<META NAME="copyright" CONTENT="Copyright 1997-2001, All Rights Reserved">
|
||||
<META NAME="docnumber" CONTENT="CUPS-CMP-1.1">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
|
||||
<STYLE TYPE="text/css"><!--
|
||||
BODY { font-family: serif }
|
||||
H1 { font-family: sans-serif }
|
||||
H2 { font-family: sans-serif }
|
||||
H3 { font-family: sans-serif }
|
||||
H4 { font-family: sans-serif }
|
||||
H5 { font-family: sans-serif }
|
||||
H6 { font-family: sans-serif }
|
||||
SUB { font-size: smaller }
|
||||
SUP { font-size: smaller }
|
||||
PRE { font-family: monospace }
|
||||
--></STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<CENTER><A HREF="#CONTENTS"><IMG SRC="images/cups-large.gif" BORDER="0" WIDTH="100%"><BR>
|
||||
<H1> CUPS Configuration Management Plan</H1></A><BR>
|
||||
<CENTER><A HREF="#CONTENTS"><IMG SRC="images/cups-large.gif" BORDER="0" WIDTH="431" HEIGHT="511"><BR>
|
||||
<H1>CUPS Configuration Management Plan</H1></A><BR>
|
||||
CUPS-CMP-1.1<BR>
|
||||
Easy Software Products<BR>
|
||||
Copyright 1997-2000, All Rights Reserved<BR>
|
||||
Copyright 1997-2001, All Rights Reserved<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<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>
|
||||
This configuration management plan document provides the guidelines
|
||||
for development and maintenance of the Common UNIX Printing System
|
||||
("CUPS") Version 1.1 software.
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
<P> CUPS provides a portable printing layer for UNIX®-based operating
|
||||
systems. It has been developed by <A HREF="http://www.easysw.com">Easy
|
||||
Software Products</A> to promote a standard printing solution for all
|
||||
UNIX vendors and users. CUPS provides the System V and Berkeley
|
||||
command-line interfaces. </P>
|
||||
<P> CUPS uses the Internet Printing Protocol ("IPP") as the basis for
|
||||
managing print jobs and queues. The Line Printer Daemon ("LPD") Server
|
||||
Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
|
||||
also supported with reduced functionality. CUPS adds network printer
|
||||
browsing and PostScript Printer Description ("PPD") based printing
|
||||
options to support real-world printing under UNIX. </P>
|
||||
<P> CUPS also includes a customized version of GNU Ghostscript
|
||||
(currently based off GNU Ghostscript 5.50) and an image file RIP that
|
||||
are used to support non-PostScript printers. Sample drivers for HP and
|
||||
EPSON printers are included that use these filters. </P>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
This configuration management document is organized into the following
|
||||
sections:
|
||||
<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>
|
||||
This configuration management plan document provides the guidelines for
|
||||
development and maintenance of the Common UNIX Printing System ("CUPS")
|
||||
Version 1.1 software.
|
||||
<H2><A NAME="1_2">1.2 System Overview</A></H2>
|
||||
<P>CUPS provides a portable printing layer for UNIX®-based operating
|
||||
systems. It has been developed by<A HREF="http://www.easysw.com"> Easy
|
||||
Software Products</A> to promote a standard printing solution for all
|
||||
UNIX vendors and users. CUPS provides the System V and Berkeley
|
||||
command-line interfaces.</P>
|
||||
<P>CUPS uses the Internet Printing Protocol ("IPP") as the basis for
|
||||
managing print jobs and queues. The Line Printer Daemon ("LPD") Server
|
||||
Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
|
||||
also supported with reduced functionality. CUPS adds network printer
|
||||
browsing and PostScript Printer Description ("PPD") based printing
|
||||
options to support real-world printing under UNIX.</P>
|
||||
<P>CUPS also includes a customized version of GNU Ghostscript (currently
|
||||
based off GNU Ghostscript 5.50) and an image file RIP that are used to
|
||||
support non-PostScript printers. Sample drivers for HP and EPSON
|
||||
printers are included that use these filters.</P>
|
||||
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
|
||||
This configuration management document is organized into the following
|
||||
sections:
|
||||
<UL>
|
||||
<LI> 1 - Scope</LI>
|
||||
<LI> 2 - References</LI>
|
||||
<LI> 3 - File Management</LI>
|
||||
<LI> 4 - Trouble Report Processing</LI>
|
||||
<LI> 5 - Software Releases</LI>
|
||||
<LI> A - Glossary</LI>
|
||||
<LI> B - Coding Requirements</LI>
|
||||
<LI>1 - Scope</LI>
|
||||
<LI>2 - References</LI>
|
||||
<LI>3 - File Management</LI>
|
||||
<LI>4 - Trouble Report Processing</LI>
|
||||
<LI>5 - Software Releases</LI>
|
||||
<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>
|
||||
<P> The following CUPS documentation is referenced by this document: </P>
|
||||
<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.1: CUPS Configuration Management Plan </LI>
|
||||
<LI> CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
|
||||
<LI> CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
|
||||
<LI> CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
|
||||
<LI> CUPS-SDD-1.1: CUPS Software Design Description </LI>
|
||||
<LI> CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
|
||||
<LI> CUPS-SSR-1.1: CUPS Software Security Report </LI>
|
||||
<LI> CUPS-STP-1.1: CUPS Software Test Plan </LI>
|
||||
<LI> CUPS-SUM-1.1.x: CUPS Software Users Manual </LI>
|
||||
<LI> CUPS-SVD-1.1.x: CUPS Software Version Description </LI>
|
||||
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan</LI>
|
||||
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description</LI>
|
||||
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP</LI>
|
||||
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual</LI>
|
||||
<LI>CUPS-SDD-1.1: CUPS Software Design Description</LI>
|
||||
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual</LI>
|
||||
<LI>CUPS-SSR-1.1: CUPS Software Security Report</LI>
|
||||
<LI>CUPS-STP-1.1: CUPS Software Test Plan</LI>
|
||||
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual</LI>
|
||||
<LI>CUPS-SVD-1.1: CUPS Software Version Description</LI>
|
||||
</UL>
|
||||
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
|
||||
<P> The following non-CUPS documents are referenced by this document: </P>
|
||||
<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><A HREF="http://partners.adobe.com/asn/developer/PDFS/TN/5003.PPD_Spec_v4.3.pdf">
|
||||
Adobe PostScript Printer Description File Format Specification,
|
||||
Version 4.3.</A></LI>
|
||||
Adobe PostScript Printer Description File Format Specification, Version
|
||||
4.3.</A></LI>
|
||||
<LI><A HREF="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf">
|
||||
Adobe PostScript Language Reference, Third Edition.</A></LI>
|
||||
<LI> IPP: Job and Printer Set Operations </LI>
|
||||
<LI> IPP/1.1: Encoding and Transport </LI>
|
||||
<LI> IPP/1.1: Implementers Guide </LI>
|
||||
<LI> IPP/1.1: Model and Semantics </LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc1179.txt"> RFC 1179, Line
|
||||
Printer Daemon Protocol</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</A> for the Internet
|
||||
Printing Protocol</LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2569.txt"> RFC 2569, Mapping
|
||||
between LPD and IPP Protocols</A></LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2616.txt"> RFC 2616, Hypertext
|
||||
Transfer Protocol -- HTTP/1.1</A></LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2617.txt"> RFC 2617, HTTP
|
||||
Authentication: Basic and Digest Access</A> Authentication </LI>
|
||||
Adobe PostScript Language Reference, Third Edition.</A></LI>
|
||||
<LI>IPP: Job and Printer Set Operations</LI>
|
||||
<LI>IPP/1.1: Encoding and Transport</LI>
|
||||
<LI>IPP/1.1: Implementers Guide</LI>
|
||||
<LI>IPP/1.1: Model and Semantics</LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc1179.txt">RFC 1179, Line Printer
|
||||
Daemon Protocol</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</A> for the Internet
|
||||
Printing Protocol</LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2569.txt">RFC 2569, Mapping
|
||||
between LPD and IPP Protocols</A></LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616, Hypertext
|
||||
Transfer Protocol -- HTTP/1.1</A></LI>
|
||||
<LI><A HREF="http://www.ietf.org/rfc/rfc2617.txt">RFC 2617, HTTP
|
||||
Authentication: Basic and Digest Access</A> Authentication</LI>
|
||||
</UL>
|
||||
<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", "cups", 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>
|
||||
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>
|
||||
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>
|
||||
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:
|
||||
<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", "cups", 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>
|
||||
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>
|
||||
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>
|
||||
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:
|
||||
<OL>
|
||||
<LI> STR is closed with complete resolution</LI>
|
||||
<LI> STR is closed without resolution</LI>
|
||||
<LI> STR is active</LI>
|
||||
<LI> STR is pending (new STR or additional information available)</LI>
|
||||
<LI>STR is closed with complete resolution</LI>
|
||||
<LI>STR is closed without resolution</LI>
|
||||
<LI>STR is active</LI>
|
||||
<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>
|
||||
When a trouble report is received it must be classified at one of the
|
||||
following levels:
|
||||
Trouble reports shall be processed using the following steps.
|
||||
<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>
|
||||
<LI> Request for enhancement</LI>
|
||||
<LI> Documentation error</LI>
|
||||
<LI> Unable to print a file</LI>
|
||||
<LI> Unable to print to a printer</LI>
|
||||
<LI> Unable to print at all</LI>
|
||||
<LI>Request for enhancement</LI>
|
||||
<LI>Documentation error</LI>
|
||||
<LI>Unable to print a file</LI>
|
||||
<LI>Unable to print to a printer</LI>
|
||||
<LI>Unable to print at all</LI>
|
||||
</OL>
|
||||
The scope of the problem should also be determined as:
|
||||
The scope of the problem should also be determined as:
|
||||
<OL>
|
||||
<LI> Specific to a machine</LI>
|
||||
<LI> Specific to an operating system</LI>
|
||||
<LI> Applies to all machines and operating systems</LI>
|
||||
<LI>Specific to a machine</LI>
|
||||
<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>
|
||||
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
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
CUPS uses a three-part version number separated by periods to
|
||||
represent the major, minor, and patch release numbers:
|
||||
<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
|
||||
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>
|
||||
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>
|
||||
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>
|
||||
CUPS uses a three-part version number separated by periods to represent
|
||||
the major, minor, and patch release numbers:
|
||||
<UL>
|
||||
<PRE>
|
||||
major.minor.patch
|
||||
1.1.0
|
||||
</PRE>
|
||||
</UL>
|
||||
Beta-test releases are indentified by appending the letter B followed
|
||||
by the build number:
|
||||
Beta-test releases are indentified by appending the letter B followed
|
||||
by the build number:
|
||||
<UL>
|
||||
<PRE>
|
||||
major.minor.patchbbuild
|
||||
1.1.0b1
|
||||
</PRE>
|
||||
</UL>
|
||||
A CVS snapshot is generated for every beta and final release and uses
|
||||
the version number preceded by the letter "v" and with the decimal
|
||||
points replaced by underscores:
|
||||
A CVS snapshot is generated for every beta and final release and uses
|
||||
the version number preceded by the letter "v" and with the decimal
|
||||
points replaced by underscores:
|
||||
<UL>
|
||||
<PRE>
|
||||
v1_0_0b1
|
||||
v1_0_0
|
||||
</PRE>
|
||||
</UL>
|
||||
Each change that corrects a fault in a software sub-system increments
|
||||
the patch release number. If a change affects the software design of
|
||||
CUPS then the minor release number will be incremented and the patch
|
||||
release number reset to 0. If CUPS is completely redesigned the major
|
||||
release number will be incremented and the minor and patch release
|
||||
numbers reset to 0:
|
||||
Each change that corrects a fault in a software sub-system increments
|
||||
the patch release number. If a change affects the software design of
|
||||
CUPS then the minor release number will be incremented and the patch
|
||||
release number reset to 0. If CUPS is completely redesigned the major
|
||||
release number will be incremented and the minor and patch release
|
||||
numbers reset to 0:
|
||||
<UL>
|
||||
<PRE>
|
||||
1.1.0b1 First beta release
|
||||
@@ -292,93 +292,91 @@ 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>
|
||||
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>
|
||||
Software testing shall be conducted according to the CUPS Software
|
||||
Test Plan, CUPS-STP-1.1. Failed tests cause STRs to be generated to
|
||||
correct the problems found.
|
||||
<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>
|
||||
<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>
|
||||
Software testing shall be conducted according to the CUPS Software Test
|
||||
Plan, CUPS-STP-1.1. Failed tests cause STRs to be generated to correct
|
||||
the problems found.
|
||||
<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>
|
||||
<DL>
|
||||
<DT> C </DT>
|
||||
<DD> A computer language. </DD>
|
||||
<DT> parallel </DT>
|
||||
<DD> Sending or receiving data more than 1 bit at a time. </DD>
|
||||
<DT> pipe </DT>
|
||||
<DD> A one-way communications channel between two programs. </DD>
|
||||
<DT> serial </DT>
|
||||
<DD> Sending or receiving data 1 bit at a time. </DD>
|
||||
<DT> socket </DT>
|
||||
<DD> A two-way network communications channel. </DD>
|
||||
<DT>C</DT>
|
||||
<DD>A computer language.</DD>
|
||||
<DT>parallel</DT>
|
||||
<DD>Sending or receiving data more than 1 bit at a time.</DD>
|
||||
<DT>pipe</DT>
|
||||
<DD>A one-way communications channel between two programs.</DD>
|
||||
<DT>serial</DT>
|
||||
<DD>Sending or receiving data 1 bit at a time.</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>
|
||||
<DT> CUPS </DT>
|
||||
<DD> Common UNIX Printing System </DD>
|
||||
<DT> ESC/P </DT>
|
||||
<DD> EPSON Standard Code for Printers </DD>
|
||||
<DT> FTP </DT>
|
||||
<DD> File Transfer Protocol </DD>
|
||||
<DT> HP-GL </DT>
|
||||
<DD> Hewlett-Packard Graphics Language </DD>
|
||||
<DT> HP-PCL </DT>
|
||||
<DD> Hewlett-Packard Printer Control Language </DD>
|
||||
<DT> HP-PJL </DT>
|
||||
<DD> Hewlett-Packard Printer Job Language </DD>
|
||||
<DT> IETF </DT>
|
||||
<DD> Internet Engineering Task Force </DD>
|
||||
<DT> IPP </DT>
|
||||
<DD> Internet Printing Protocol </DD>
|
||||
<DT> ISO </DT>
|
||||
<DD> International Standards Organization </DD>
|
||||
<DT> LPD </DT>
|
||||
<DD> Line Printer Daemon </DD>
|
||||
<DT> MIME </DT>
|
||||
<DD> Multimedia Internet Mail Exchange </DD>
|
||||
<DT> PCL </DT>
|
||||
<DD> Page Control Language </DD>
|
||||
<DT> PPD </DT>
|
||||
<DD> PostScript Printer Description </DD>
|
||||
<DT> SMB </DT>
|
||||
<DD> Server Message Block </DD>
|
||||
<DT> TFTP </DT>
|
||||
<DD> Trivial File Transfer Protocol </DD>
|
||||
<DT>ASCII</DT>
|
||||
<DD>American Standard Code for Information Interchange</DD>
|
||||
<DT>CUPS</DT>
|
||||
<DD>Common UNIX Printing System</DD>
|
||||
<DT>ESC/P</DT>
|
||||
<DD>EPSON Standard Code for Printers</DD>
|
||||
<DT>FTP</DT>
|
||||
<DD>File Transfer Protocol</DD>
|
||||
<DT>HP-GL</DT>
|
||||
<DD>Hewlett-Packard Graphics Language</DD>
|
||||
<DT>HP-PCL</DT>
|
||||
<DD>Hewlett-Packard Page Control Language</DD>
|
||||
<DT>HP-PJL</DT>
|
||||
<DD>Hewlett-Packard Printer Job Language</DD>
|
||||
<DT>IETF</DT>
|
||||
<DD>Internet Engineering Task Force</DD>
|
||||
<DT>IPP</DT>
|
||||
<DD>Internet Printing Protocol</DD>
|
||||
<DT>ISO</DT>
|
||||
<DD>International Standards Organization</DD>
|
||||
<DT>LPD</DT>
|
||||
<DD>Line Printer Daemon</DD>
|
||||
<DT>MIME</DT>
|
||||
<DD>Multimedia Internet Mail Exchange</DD>
|
||||
<DT>PPD</DT>
|
||||
<DD>PostScript Printer Description</DD>
|
||||
<DT>SMB</DT>
|
||||
<DD>Server Message Block</DD>
|
||||
<DT>TFTP</DT>
|
||||
<DD>Trivial File Transfer Protocol</DD>
|
||||
</DL>
|
||||
<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>
|
||||
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
|
||||
".cxx" 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>
|
||||
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$" tag:
|
||||
<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>
|
||||
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
|
||||
".cxx" 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>
|
||||
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$" tag:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
* "36;Id$"
|
||||
* "$Id$"
|
||||
*
|
||||
* Description of file contents.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights
|
||||
* Copyright 1997-2001 by Easy Software Products, all rights
|
||||
* reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are
|
||||
@@ -393,7 +391,7 @@ name and revision information is provided by the CVS "$Id$" tag:
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* Voice: (301) 373-9600
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
@@ -405,30 +403,30 @@ name and revision information is provided by the CVS "$Id$" tag:
|
||||
*/
|
||||
</PRE>
|
||||
</UL>
|
||||
The bottom of each source file shall contain a trailer giving the name
|
||||
of the file using the CVS "$Id$" 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:
|
||||
The bottom of each source file shall contain a trailer giving the name
|
||||
of the file using the CVS "$Id$" 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:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
* End of "36;Id$".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
</PRE>
|
||||
</UL>
|
||||
<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
|
||||
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>
|
||||
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:
|
||||
<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 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>
|
||||
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:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -445,14 +443,14 @@ do_this(float x) /* I - Power value (0.0 <= x <= 1.1) */
|
||||
}
|
||||
</PRE>
|
||||
</UL>
|
||||
<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>
|
||||
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:
|
||||
<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>
|
||||
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:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -469,34 +467,34 @@ 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>
|
||||
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
|
||||
begin with the prefix "cups" ("cupsThisVariable", "cupsThatVariable",
|
||||
etc.) Global variables shall be replaced by function arguments whenever
|
||||
possible.
|
||||
<P> Variables with a local scope shall be lowercase with underscores
|
||||
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>
|
||||
Each variable shall be declared on a separate line and shall be
|
||||
immediately followed by a comment block describing the variable:
|
||||
<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
|
||||
begin with the prefix "cups" ("cupsThisVariable", "cupsThatVariable",
|
||||
etc.) Global variables shall be replaced by function arguments whenever
|
||||
possible.
|
||||
<P>Variables with a local scope shall be lowercase with underscores
|
||||
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>
|
||||
Each variable shall be declared on a separate line and shall be
|
||||
immediately followed by a comment block describing the variable:
|
||||
<UL>
|
||||
<PRE>
|
||||
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>
|
||||
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>
|
||||
Each type shall have a comment block immediately before the typedef:
|
||||
<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>
|
||||
Each type shall have a comment block immediately before the typedef:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -505,15 +503,15 @@ 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>
|
||||
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>
|
||||
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:
|
||||
<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>
|
||||
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:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -526,14 +524,14 @@ 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>
|
||||
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>
|
||||
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:
|
||||
<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>
|
||||
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:
|
||||
<UL>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -546,16 +544,16 @@ 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>
|
||||
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>
|
||||
Comment blocks shall immediately follow each constant:
|
||||
<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>
|
||||
Comment blocks shall immediately follow each constant:
|
||||
<UL>
|
||||
<PRE>
|
||||
enum
|
||||
@@ -565,10 +563,10 @@ 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>
|
||||
All source code shall utilize block comments within functions to
|
||||
describe the operations being performed by a group of statements:
|
||||
<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>
|
||||
<PRE>
|
||||
/*
|
||||
@@ -593,12 +591,12 @@ 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>
|
||||
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
|
||||
a new line following the code at the original indentation:
|
||||
<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 a
|
||||
new line following the code at the original indentation:
|
||||
<UL>
|
||||
<PRE>
|
||||
{
|
||||
@@ -616,10 +614,9 @@ a new line following the code at the original indentation:
|
||||
}
|
||||
</PRE>
|
||||
</UL>
|
||||
Single-line statements following "do", "else", "for", "if", and
|
||||
"while" shall be indented 2 spaces as well. Blocks of code in a
|
||||
"switch" block shall be indented 4 spaces after each "case" and
|
||||
"default" case:
|
||||
Single-line statements following "do", "else", "for", "if", and "while"
|
||||
shall be indented 2 spaces as well. Blocks of code in a "switch" block
|
||||
shall be indented 4 spaces after each "case" and "default" case:
|
||||
<UL>
|
||||
<PRE>
|
||||
switch (array[i])
|
||||
@@ -634,45 +631,45 @@ switch (array[i])
|
||||
}
|
||||
</PRE>
|
||||
</UL>
|
||||
<H4>B.9.2.b Spacing</H4>
|
||||
A space shall follow each reserved word ("if", "while", etc.) Spaces
|
||||
shall not be inserted between a function name and the arguments in
|
||||
parenthesis.
|
||||
<H4>B.9.2.c Return Values</H4>
|
||||
Parenthesis shall surround values returned from a function using
|
||||
"return":
|
||||
<H4>B.9.2.b Spacing</H4>
|
||||
A space shall follow each reserved word ("if", "while", etc.) Spaces
|
||||
shall not be inserted between a function name and the arguments in
|
||||
parenthesis.
|
||||
<H4>B.9.2.c Return Values</H4>
|
||||
Parenthesis shall surround values returned from a function using
|
||||
"return":
|
||||
<UL>
|
||||
<PRE>
|
||||
return (STATE_IDLE);
|
||||
</PRE>
|
||||
</UL>
|
||||
<H4>B.9.2.d Loops</H4>
|
||||
Whenever convenient loops should count downward to zero to improve
|
||||
program performance:
|
||||
<H4>B.9.2.d Loops</H4>
|
||||
Whenever convenient loops should count downward to zero to improve
|
||||
program performance:
|
||||
<UL>
|
||||
<PRE>
|
||||
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">
|
||||
________________________________________</TD></TR>
|
||||
<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
|
||||
<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
|
||||
<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
|
||||
__2=Operating-System __3=All</TD></TR>
|
||||
<TR><TH ALIGN="RIGHT" VALIGN="TOP"> Detailed Description of Problem:</TH><TD
|
||||
ALIGN="LEFT"> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<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">________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________
|
||||
<BR> ________________________________________</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
|
||||
Arquivo binário não exibido.
+3
-3
@@ -1,7 +1,7 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.1">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
|
||||
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
|
||||
<META NAME="Author" CONTENT="Easy Software Products">
|
||||
<TITLE>CUPS Configuration Management Plan</TITLE>
|
||||
</HEAD>
|
||||
@@ -221,7 +221,7 @@ information is provided by the CVS "$Id$" tag:
|
||||
*
|
||||
* Description of file contents.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products, all rights
|
||||
* Copyright 1997-2001 by Easy Software Products, all rights
|
||||
* reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are
|
||||
@@ -236,7 +236,7 @@ information is provided by the CVS "$Id$" tag:
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* Voice: (301) 373-9600
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
|
||||
@@ -56,6 +56,10 @@ The following documentation for CUPS is available on this server:
|
||||
<A HREF="sdd.html">HTML</A> |
|
||||
<A HREF="sdd.pdf">PDF</A> )
|
||||
|
||||
<LI>Software Performance Specification (
|
||||
<A HREF="sps.html">HTML</A> |
|
||||
<A HREF="sps.pdf">PDF</A> )
|
||||
|
||||
<LI>Software Version Description (
|
||||
<A HREF="svd.html">HTML</A> |
|
||||
<A HREF="svd.pdf">PDF</A> )
|
||||
@@ -70,7 +74,7 @@ The following documentation for CUPS is available on this server:
|
||||
|
||||
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
|
||||
trademark property of <A HREF="http://www.easysw.com">Easy Software
|
||||
Products</A>. CUPS is copyright 1997-2000 by Easy Software Products,
|
||||
Products</A>. CUPS is copyright 1997-2001 by Easy Software Products,
|
||||
All Rights Reserved.
|
||||
|
||||
</BODY>
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário