Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| d63b19a5da |
@@ -0,0 +1,33 @@
|
||||
config.cache
|
||||
config.h
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
cups-config
|
||||
cups.list
|
||||
cups.sh
|
||||
make.log
|
||||
printpro.common
|
||||
printpro.version
|
||||
Makedefs
|
||||
aix-4.3-powerpc
|
||||
darwin-5.2-powerpc
|
||||
darwin-5.3-powerpc
|
||||
darwin-6.0-powerpc
|
||||
freebsd-4.5-intel
|
||||
hpux-10.20-hppa
|
||||
hpux-11.00-hppa
|
||||
irix-5.3-mips
|
||||
irix-6.5-mips
|
||||
linux-2.0-intel
|
||||
linux-2.2-intel
|
||||
linux-2.4-intel
|
||||
solaris-2.5-intel
|
||||
solaris-2.5-sparc
|
||||
solaris-2.7-intel
|
||||
solaris-2.7-sparc
|
||||
solaris-2.8-intel
|
||||
solaris-2.8-sparc
|
||||
solaris-2.9-intel
|
||||
solaris-2.9-sparc
|
||||
tru64-4.0-alpha
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
CGI - CUPS v1.1.19 - 05/27/2003
|
||||
-------------------------------
|
||||
|
||||
This file describes the experimental scripting/CGI support
|
||||
provided by CUPS starting with CUPS 1.1.19.
|
||||
|
||||
WARNING: CGI support is not complete; you may run into problems
|
||||
and limitations in the implementation of CGI in CUPS that are
|
||||
not present in full-featured web servers like Apache.
|
||||
|
||||
|
||||
OVERVIEW OF CGI SUPPORT IN CUPS
|
||||
|
||||
CUPS has traditionally provided a dynamic web interface through
|
||||
four CGI programs that are executed when users open special
|
||||
directories on the CUPS server. Each CGI performs
|
||||
administration, class, job, and printer functions as directed by
|
||||
the user, but the actual programs that are run and functions
|
||||
that are available are limited to those that were originally
|
||||
designed into the scheduler.
|
||||
|
||||
Starting with CUPS 1.1.19, support is now available for CGI
|
||||
programs and specific scripting languages, currently Java, Perl,
|
||||
PHP, and Python. The interpreters for these languages are
|
||||
currently configured at compile time. Future versions may
|
||||
expand the interface to allow for generic support of scripting
|
||||
languages similar to the Apache "AddHandler" directive, but with
|
||||
external programs instead of modules.
|
||||
|
||||
The following MIME types are reserved for the CGI support in
|
||||
CUPS (the names have been chosen to mirror those used by
|
||||
Apache):
|
||||
|
||||
application/x-http-cgi CGI script/program
|
||||
application/x-http-java Java program
|
||||
application/x-http-perl Perl script
|
||||
application/x-http-php PHP script
|
||||
application/x-http-python Python script
|
||||
|
||||
In order to enable the corresponding type, you must create a new
|
||||
/etc/cups/cgi.types file which maps the filename extensions to
|
||||
the appropriate MIME type, for example:
|
||||
|
||||
application/x-http-cgi cgi
|
||||
application/x-http-php php
|
||||
|
||||
CGI scripts/programs (application/x-http-cgi) also must have
|
||||
execution permissions to be treated as a CGI script or program.
|
||||
|
||||
|
||||
LIMITATIONS
|
||||
|
||||
CUPS implements most of the CGI/1.1 specification, with the
|
||||
following limitations:
|
||||
|
||||
- No Location: redirection support.
|
||||
- No PATH_INFO or PATH_TRANSLATED support.
|
||||
- Limited HTTP field support; only the Content-Length
|
||||
(CONTENT_LENGTH), Cookie (HTTP_COOKIE), and User-Agent
|
||||
(HTTP_USER_AGENT) fields are placed in environment
|
||||
variables at this time.
|
||||
|
||||
|
||||
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.
|
||||
+2225
-1
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+10
-3
@@ -1,4 +1,4 @@
|
||||
CREDITS.txt - 01/27/2000
|
||||
CREDITS.txt - 04/26/2003
|
||||
------------------------
|
||||
|
||||
Few projects are completed by one person, and CUPS is no exception. We'd
|
||||
@@ -8,19 +8,26 @@ like to thank the following individuals for their contributions:
|
||||
N. Becker - setsid().
|
||||
Jean-Eric Cuendet - GhostScript filters for CUPS.
|
||||
Van Dang - HTTP and IPP policeman.
|
||||
L. Peter Deutsch - MD5 code.
|
||||
Dr. ZP Han - setgid()/setuid().
|
||||
Guy Harris - *BSD shared libraries and lots of other fixes.
|
||||
Bjoern Jacke - I18N stuff.
|
||||
Wang Jian - CUPS RPM corrections.
|
||||
Roderick Johnstone - Beta tester of the millenium.
|
||||
Till Kamppeter - Bug fixes, beta testing, evangelism.
|
||||
Kiko - Bug fixes.
|
||||
Sergey V. Kovalyov - ESP Print Pro and CUPS beta tester.
|
||||
Mark Lawrence - Microsoft interoperability testing.
|
||||
Jeff Licquia - Bug fixes, beta testing, evangelism.
|
||||
Jason McMullan - Original CUPS RPM distributions.
|
||||
Wes Morgan - *BSD fixes.
|
||||
Ulrich Oldendorf - German locale.
|
||||
Giulio Orsero - Bug fixes and testing.
|
||||
Kurt Pfeifle - Bug fixes, beta testing, evangelism.
|
||||
Gilles QUERRET - French man pages.
|
||||
Petter Reinholdtsen - HP-UX compiler stuff.
|
||||
Stuart Stevens - HP JetDirect IPP information.
|
||||
Kiko - Bug fixes.
|
||||
L. Peter Deutsch - MD5 code.
|
||||
Andrea Suatoni - IRIX desktop integration and testing.
|
||||
|
||||
If I've missed someone, please let me know by sending an email to
|
||||
"mike@easysw.com".
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
ENCRYPTION - CUPS v1.1.19 - 05/27/2003
|
||||
--------------------------------------
|
||||
|
||||
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, GNU
|
||||
TLS, or CDSA libraries which do.
|
||||
|
||||
|
||||
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, GNU TLS, or CDSA libraries 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, GNU TLS, or CDSA libraries from:
|
||||
|
||||
http://www.openssl.org/
|
||||
http://www.gnutls.org/
|
||||
http://www.intel.com/labs/archive/cdsa.htm
|
||||
|
||||
|
||||
CONFIGURING WITH ENCRYPTION SUPPORT
|
||||
|
||||
Once you have the OpenSSL, GNU TLS, or CDSA libraries installed,
|
||||
you'll need to configure CUPS to use it with the "--enable-ssl"
|
||||
option:
|
||||
|
||||
./configure --enable-ssl
|
||||
|
||||
If the library 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.
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
INSTALL - CUPS v1.1.19 - 05/27/2003
|
||||
-----------------------------------
|
||||
|
||||
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".
|
||||
|
||||
**** IF YOU HAVE A NON-POSTSCRIPT PRINTER, YOU WILL ALSO ****
|
||||
**** NEED TO INSTALL ESP GHOSTSCRIPT OR A PATCHED VERSION ****
|
||||
**** OF THE STANDARD GHOSTSCRIPT RELEASES. ****
|
||||
|
||||
|
||||
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.
|
||||
|
||||
Also, please note that CUPS no longer includes the Ghostscript-
|
||||
based pstoraster filter. You *must* download Ghostscript
|
||||
separately and patch it using the files in the pstoraster
|
||||
subdirectory, or download the ESP Ghostscript distribution from
|
||||
the CUPS web site. For more information see the README file in
|
||||
the pstoraster subdirectory.
|
||||
|
||||
|
||||
COMPILING FROM CVS
|
||||
|
||||
The CUPS CVS repository doesn't hold a copy of the pre-built
|
||||
configure script. You'll need to run the GNU autoconf software
|
||||
(2.52 or higher) before compiling the software from CVS:
|
||||
|
||||
autoconf ENTER
|
||||
|
||||
|
||||
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 EPM 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.
|
||||
@@ -0,0 +1,19 @@
|
||||
INSTALL_fr - CUPS v1.1.19 - 04/08/2003
|
||||
--------------------------------------
|
||||
|
||||
Vous cherchez des instructions d'installation ? Lisez le fichier
|
||||
INSTALL.txt (anglais) et/ou reportez vous au "Manuel de
|
||||
l'administrateur" (en français) situé dans le sous-répertoire
|
||||
"doc/fr"
|
||||
|
||||
Vous trouverez deux autres manuels en français dans ce
|
||||
sous-répertoire :
|
||||
|
||||
- Aperçu de CUPS
|
||||
- Manuel de l'utilisateur
|
||||
|
||||
Une fois CUPS installé, si vous configurez votre navigateur
|
||||
"web" pour que la langue de base soit le français, vous
|
||||
disposerez également d'une interface "web" en français pour
|
||||
l'administration et d'utilistation de CUPS.
|
||||
|
||||
+126
-64
@@ -7,94 +7,156 @@
|
||||
|
||||
<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-2003 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>
|
||||
|
||||
<H3>Introduction</H3>
|
||||
|
||||
<P>The Common UNIX Printing System<SUP>TM</SUP>, ("CUPS<SUP>TM</SUP>"),
|
||||
is provided under the GNU General Public License ("GPL") and GNU
|
||||
Library General Public License ("LGPL"), Version 2. A copy of these
|
||||
licenses follow this introduction.
|
||||
<P>The Common UNIX Printing System<SUP>TM</SUP>,
|
||||
("CUPS<SUP>TM</SUP>"), is provided under the GNU General Public
|
||||
License ("GPL") and GNU Library General Public License ("LGPL"),
|
||||
Version 2, with exceptions for Apple operating systems and the
|
||||
OpenSSL toolkit. A copy of the exceptions and licenses follow
|
||||
this introduction.
|
||||
|
||||
<P>The GNU LGPL applies to the CUPS API library, located in the "cups"
|
||||
subdirectory of the CUPS source distribution and in the
|
||||
"/usr/include/cups" directory and "libcups.a", "libcups.sl", or
|
||||
"libcups.so" files in the binary distributions.
|
||||
|
||||
<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.
|
||||
<P>The GNU LGPL applies to the CUPS API library, located in the
|
||||
"cups" subdirectory of the CUPS source distribution and in the
|
||||
"cups" include directory and library files in the binary
|
||||
distributions. The GNU GPL applies to the remainder of the CUPS
|
||||
distribution, including the "pdftops" filter which is based upon
|
||||
Xpdf and the CUPS imaging library.
|
||||
|
||||
<P>For those not familiar with the GNU GPL, the license basically
|
||||
allows you to:
|
||||
|
||||
<UL>
|
||||
|
||||
<LI>Use the CUPS software at no charge.
|
||||
<LI>Use the CUPS software at no charge.</LI>
|
||||
|
||||
<LI>Distribute verbatim copies of the software in source or
|
||||
binary form.
|
||||
<LI>Distribute verbatim copies of the software in source
|
||||
or binary form.</LI>
|
||||
|
||||
<LI>Sell verbatim copies of the software for a media fee, or
|
||||
sell support for the software.
|
||||
<LI>Sell verbatim copies of the software for a media
|
||||
fee, or sell support for the software.</LI>
|
||||
|
||||
<LI>Distribute or sell printer drivers and filters that use
|
||||
CUPS so long as source code is made available under the GPL.
|
||||
<LI>Distribute or sell printer drivers and filters that
|
||||
use CUPS so long as source code is made available under
|
||||
the GPL.</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
<P>What this license <B>does not</B> allow you to do is make changes or
|
||||
add features to CUPS and then sell a binary distribution without source
|
||||
code. You must provide source for any new drivers, changes, or
|
||||
additions to the software, and all code must be provided under the GPL
|
||||
or LGPL as appropriate.
|
||||
<P>What this license <B>does not</B> allow you to do is make
|
||||
changes or add features to CUPS and then sell a binary
|
||||
distribution without source code. You must provide source for
|
||||
any new drivers, changes, or additions to the software, and all
|
||||
code must be provided under the GPL or LGPL as appropriate. The
|
||||
only exceptions to this are the portions of the CUPS software
|
||||
covered by the Apple operating system license exceptions
|
||||
outlined later in this license agreement.
|
||||
|
||||
<P>The GNU LGPL relaxes the "link-to" restriction, allowing you to
|
||||
develop applications that use the CUPS API library under other licenses
|
||||
and/or conditions as appropriate for your application.
|
||||
<P>The GNU LGPL relaxes the "link-to" restriction, allowing you
|
||||
to develop applications that use the CUPS API library under
|
||||
other licenses and/or conditions as appropriate for your
|
||||
application.
|
||||
|
||||
<H3>License Exceptions</H3>
|
||||
|
||||
<P>In addition, as the copyright holder of CUPS, Easy Software
|
||||
Products grants the following special exceptions:
|
||||
|
||||
<OL>
|
||||
|
||||
<LI><B>Apple Operating System Development License
|
||||
Exception</B>;
|
||||
|
||||
<OL TYPE="a">
|
||||
|
||||
<LI>Software that is developed by any person or
|
||||
entity for an Apple Operating System ("Apple
|
||||
OS-Developed Software"), including but not
|
||||
limited to Apple and third party printer
|
||||
drivers, filters, and backends for an Apple
|
||||
Operating System, that is linked to the CUPS
|
||||
imaging library or based on any sample filters
|
||||
or backends provided with CUPS shall not be
|
||||
considered to be a derivative work or collective
|
||||
work based on the CUPS program and is exempt
|
||||
from the mandatory source code release clauses
|
||||
of the GNU GPL. You may therefore distribute
|
||||
linked combinations of the CUPS imaging library
|
||||
with Apple OS-Developed Software without
|
||||
releasing the source code of the Apple
|
||||
OS-Developed Software. You may also use sample
|
||||
filters and backends provided with CUPS to
|
||||
develop Apple OS-Developed Software without
|
||||
releasing the source code of the Apple
|
||||
OS-Developed Software.</LI>
|
||||
|
||||
<LI>An Apple Operating System means any
|
||||
operating system software developed and/or
|
||||
marketed by Apple Computer, Inc., including but
|
||||
not limited to all existing releases and
|
||||
versions of Apple's Darwin, Mac OS X, and Mac OS
|
||||
X Server products and all follow-on releases and
|
||||
future versions thereof.</LI>
|
||||
|
||||
<LI>This exception is only available for Apple
|
||||
OS-Developed Software and does not apply to
|
||||
software that is distributed for use on other
|
||||
operating systems.</LI>
|
||||
|
||||
<LI>All CUPS software that falls under this
|
||||
license exception have the following text at the
|
||||
top of each source file:
|
||||
|
||||
<BLOCKQUOTE>This file is subject to the Apple
|
||||
OS-Developed Software
|
||||
exception.</BLOCKQUOTE></LI>
|
||||
|
||||
</OL>
|
||||
|
||||
<LI><B>OpenSSL Toolkit License Exception</B>;
|
||||
|
||||
<OL TYPE="a">
|
||||
|
||||
<LI>Easy Software Products explicitly allows the
|
||||
compilation and distribution of the CUPS
|
||||
software with the OpenSSL Toolkit.</LI>
|
||||
|
||||
</OL>
|
||||
|
||||
</OL>
|
||||
|
||||
<P>No developer is required to provide these exceptions in a
|
||||
derived work.
|
||||
|
||||
<H3>Trademarks</H3>
|
||||
|
||||
<P>Easy Software Products has trademarked the Common UNIX Printing
|
||||
System, CUPS, and CUPS logo. These names and logos may be used freely
|
||||
in any direct port or binary distribution of CUPS. To use them in
|
||||
derivative products, please contract Easy Software Products for written
|
||||
permission. Our intention is to protect the value of these trademarks and
|
||||
ensure that any derivative product meets the same high-quality
|
||||
standards as the original.
|
||||
<P>Easy Software Products has trademarked the Common UNIX
|
||||
Printing System, CUPS, and CUPS logo. These names and logos may
|
||||
be used freely in any direct port or binary distribution of
|
||||
CUPS. Please contract Easy Software Products for written
|
||||
permission to use them in derivative products. Our intention is
|
||||
to protect the value of these trademarks and ensure that any
|
||||
derivative product meets the same high-quality standards as the
|
||||
original.
|
||||
|
||||
<H3>Binary Distribution Rights</H3>
|
||||
|
||||
<P>Easy Software Products also sells rights to the CUPS source code
|
||||
under a binary distribution license for vendors that are unable to
|
||||
release source code for their drivers, additions, and modifications to
|
||||
CUPS under the GNU GPL and LGPL. For information please contact us at
|
||||
the address shown above.
|
||||
<P>Easy Software Products also sells rights to the CUPS source
|
||||
code under a binary distribution license for vendors that are
|
||||
unable to release source code for their drivers, additions, and
|
||||
modifications to CUPS under the GNU GPL and LGPL. For
|
||||
information please contact us at the address shown above.
|
||||
|
||||
<P>The Common UNIX Printing System provides a "pstoraster" filter that
|
||||
utilizes the GNU GhostScript 5.50 core to convert PostScript files into
|
||||
a stream of raster images. For binary distribution licensing of this
|
||||
software, please contact:
|
||||
|
||||
<BLOCKQUOTE>
|
||||
Miles Jones<BR>
|
||||
Director of Marketing<BR>
|
||||
Artifex Software Inc.<BR>
|
||||
454 Las Gallinas Ave., Suite 108<BR>
|
||||
San Rafael, CA 94903 USA<BR>
|
||||
Voice: +1.415.492.9861<BR>
|
||||
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
|
||||
distribution licensing of this software, please contact:
|
||||
<P>The Common UNIX Printing System provides a "pdftops" filter
|
||||
that is based on the Xpdf software. For binary distribution
|
||||
licensing of this software, please contact:
|
||||
|
||||
<BLOCKQUOTE>
|
||||
Derek B. Noonburg<BR>
|
||||
@@ -104,12 +166,12 @@ WWW: <A HREF="http://www.foolabs.com/xpdf/">http://www.foolabs.com/xpdf/</A>
|
||||
|
||||
<H3>Support</H3>
|
||||
|
||||
<P>Easy Software Products sells software support for CUPS as well as a
|
||||
commercial printing product based on CUPS called ESP Print Pro. You can
|
||||
find out more at our web site:
|
||||
<P>Easy Software Products sells software support for CUPS as
|
||||
well as a commercial printing product based on CUPS called ESP
|
||||
Print Pro. You can find out more at our web site:
|
||||
|
||||
<UL><PRE>
|
||||
<A HREF="http://www.easysw.com">http://www.easysw.com</A>
|
||||
<A HREF="http://www.easysw.com/">http://www.easysw.com/</A>
|
||||
</PRE></UL>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
@@ -123,7 +185,7 @@ Copyright 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim
|
||||
copies of this license document, but changing it is not allowed.
|
||||
<PRE>
|
||||
</PRE>
|
||||
|
||||
<H4>Preamble</H4>
|
||||
|
||||
|
||||
+861
@@ -0,0 +1,861 @@
|
||||
Common UNIX Printing System License Agreement
|
||||
|
||||
Copyright 1997-2003 by Easy Software Products
|
||||
44141 AIRPORT VIEW DR STE 204
|
||||
HOLLYWOOD, MARYLAND 20636-3111 USA
|
||||
|
||||
Voice: +1.301.373.9600
|
||||
Email: cups-info@cups.org
|
||||
WWW: http://www.cups.org
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
The Common UNIX Printing System(tm), ("CUPS(tm)"), is provided
|
||||
under the GNU General Public License ("GPL") and GNU Library
|
||||
General Public License ("LGPL"), Version 2, with exceptions for
|
||||
Apple operating systems and the OpenSSL toolkit. A copy of the
|
||||
exceptions and licenses follow this introduction.
|
||||
|
||||
The GNU LGPL applies to the CUPS API library, located in the
|
||||
"cups" subdirectory of the CUPS source distribution and in the
|
||||
"cups" include directory and library files in the binary
|
||||
distributions. The GNU GPL applies to the remainder of the CUPS
|
||||
distribution, including the "pdftops" filter which is based upon
|
||||
Xpdf and the CUPS imaging library.
|
||||
|
||||
For those not familiar with the GNU GPL, the license basically
|
||||
allows you to:
|
||||
|
||||
- Use the CUPS software at no charge.
|
||||
- Distribute verbatim copies of the software in source or
|
||||
binary form.
|
||||
- Sell verbatim copies of the software for a media fee, or
|
||||
sell support for the software.
|
||||
- Distribute or sell printer drivers and filters that use
|
||||
CUPS so long as source code is made available under the
|
||||
GPL.
|
||||
|
||||
What this license *does not* allow you to do is make changes or
|
||||
add features to CUPS and then sell a binary distribution without
|
||||
source code. You must provide source for any new drivers,
|
||||
changes, or additions to the software, and all code must be
|
||||
provided under the GPL or LGPL as appropriate. The only
|
||||
exceptions to this are the portions of the CUPS software covered
|
||||
by the Apple operating system license exceptions outlined later
|
||||
in this license agreement.
|
||||
|
||||
The GNU LGPL relaxes the "link-to" restriction, allowing you to
|
||||
develop applications that use the CUPS API library under other
|
||||
licenses and/or conditions as appropriate for your application.
|
||||
|
||||
|
||||
LICENSE EXCEPTIONS
|
||||
|
||||
In addition, as the copyright holder of CUPS, Easy Software
|
||||
Products grants the following special exceptions:
|
||||
|
||||
1. Apple Operating System Development License Exception;
|
||||
|
||||
a. Software that is developed by any person or entity
|
||||
for an Apple Operating System ("Apple OS-Developed
|
||||
Software"), including but not limited to Apple and
|
||||
third party printer drivers, filters, and backends
|
||||
for an Apple Operating System, that is linked to the
|
||||
CUPS imaging library or based on any sample filters
|
||||
or backends provided with CUPS shall not be
|
||||
considered to be a derivative work or collective work
|
||||
based on the CUPS program and is exempt from the
|
||||
mandatory source code release clauses of the GNU GPL.
|
||||
You may therefore distribute linked combinations of
|
||||
the CUPS imaging library with Apple OS-Developed
|
||||
Software without releasing the source code of the
|
||||
Apple OS-Developed Software. You may also use sample
|
||||
filters and backends provided with CUPS to develop
|
||||
Apple OS-Developed Software without releasing the
|
||||
source code of the Apple OS-Developed Software.
|
||||
|
||||
b. An Apple Operating System means any operating system
|
||||
software developed and/or marketed by Apple Computer,
|
||||
Inc., including but not limited to all existing
|
||||
releases and versions of Apple's Darwin, Mac OS X,
|
||||
and Mac OS X Server products and all follow-on
|
||||
releases and future versions thereof.
|
||||
|
||||
c. This exception is only available for Apple
|
||||
OS-Developed Software and does not apply to software
|
||||
that is distributed for use on other operating
|
||||
systems.
|
||||
|
||||
d. All CUPS software that falls under this license
|
||||
exception have the following text at the top of each
|
||||
source file:
|
||||
|
||||
This file is subject to the Apple OS-Developed
|
||||
Software exception.
|
||||
|
||||
2. OpenSSL Toolkit License Exception;
|
||||
|
||||
a. Easy Software Products explicitly allows the
|
||||
compilation and distribution of the CUPS software
|
||||
with the OpenSSL Toolkit.
|
||||
|
||||
No developer is required to provide these exceptions in a
|
||||
derived work.
|
||||
|
||||
|
||||
TRADEMARKS
|
||||
|
||||
Easy Software Products has trademarked the Common UNIX Printing
|
||||
System, CUPS, and CUPS logo. These names and logos may be used
|
||||
freely in any direct port or binary distribution of CUPS. Please
|
||||
contract Easy Software Products for written permission to use
|
||||
them in derivative products. Our intention is to protect the
|
||||
value of these trademarks and ensure that any derivative product
|
||||
meets the same high-quality standards as the original.
|
||||
|
||||
|
||||
BINARY DISTRIBUTION RIGHTS
|
||||
|
||||
Easy Software Products also sells rights to the CUPS source code
|
||||
under a binary distribution license for vendors that are unable
|
||||
to release source code for their drivers, additions, and
|
||||
modifications to CUPS under the GNU GPL and LGPL. For
|
||||
information please contact us at the address shown above.
|
||||
|
||||
The Common UNIX Printing System provides a "pdftops" filter that
|
||||
is based on the Xpdf software. For binary distribution licensing
|
||||
of this software, please contact:
|
||||
|
||||
Derek B. Noonburg
|
||||
Email: derekn@foolabs.com
|
||||
WWW: http://www.foolabs.com/xpdf/
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
Easy Software Products sells software support for CUPS as well
|
||||
as a commercial printing product based on CUPS called ESP Print
|
||||
Pro. You can find out more at our web site:
|
||||
|
||||
http://www.easysw.com/
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the library GPL. It is
|
||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Library General Public License, applies to some
|
||||
specially designated Free Software Foundation software, and to any
|
||||
other libraries whose authors decide to use it. You can use it for
|
||||
your libraries, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if
|
||||
you distribute copies of the library, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link a program with the library, you must provide
|
||||
complete object files to the recipients so that they can relink them
|
||||
with the library, after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright
|
||||
the library, and (2) offer you this license which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
library. If the library is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original
|
||||
version, so that any problems introduced by others will not reflect on
|
||||
the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that companies distributing free
|
||||
software will individually obtain patent licenses, thus in effect
|
||||
transforming the program into proprietary software. To prevent this,
|
||||
we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary
|
||||
GNU General Public License, which was designed for utility programs. This
|
||||
license, the GNU Library General Public License, applies to certain
|
||||
designated libraries. This license is quite different from the ordinary
|
||||
one; be sure to read it in full, and don't assume that anything in it is
|
||||
the same as in the ordinary license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that
|
||||
they blur the distinction we usually make between modifying or adding to a
|
||||
program and simply using it. Linking a program with a library, without
|
||||
changing the library, is in some sense simply using the library, and is
|
||||
analogous to running a utility program or application program. However, in
|
||||
a textual and legal sense, the linked executable is a combined work, a
|
||||
derivative of the original library, and the ordinary General Public License
|
||||
treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General
|
||||
Public License for libraries did not effectively promote software
|
||||
sharing, because most developers did not use the libraries. We
|
||||
concluded that weaker conditions might promote sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the
|
||||
users of those programs of all benefit from the free status of the
|
||||
libraries themselves. This Library General Public License is intended to
|
||||
permit developers of non-free programs to use free libraries, while
|
||||
preserving your freedom as a user of such programs to change the free
|
||||
libraries that are incorporated in them. (We have not seen how to achieve
|
||||
this as regards changes in header files, but we have achieved it as regards
|
||||
changes in the actual functions of the Library.) The hope is that this
|
||||
will lead to faster development of free libraries.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, while the latter only
|
||||
works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary
|
||||
General Public License rather than by this special one.
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which
|
||||
contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Library
|
||||
General Public License (also called "this License"). Each licensee is
|
||||
addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also compile or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
c) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
d) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the source code distributed need not include anything that is normally
|
||||
distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Library General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
+87
-65
@@ -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-2003 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,46 +26,54 @@
|
||||
# Programs...
|
||||
#
|
||||
|
||||
AR = @AR@
|
||||
AWK = @AWK@
|
||||
CC = @LIBTOOL@ @CC@
|
||||
CHMOD = @CHMOD@
|
||||
CHOWN = @CHOWN@
|
||||
CP = @CP@
|
||||
CXX = @LIBTOOL@ @CXX@
|
||||
DSO = @DSO@
|
||||
HTMLDOC = @HTMLDOC@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN = /bin/ln -sf
|
||||
MKDIR = @MKDIR@ -p
|
||||
MV = @MV@
|
||||
NROFF = @NROFF@
|
||||
RANLIB = @RANLIB@
|
||||
RM = @RM@ -f
|
||||
SED = @SED@
|
||||
SHELL = /bin/sh
|
||||
AR = @AR@
|
||||
AWK = @AWK@
|
||||
CC = @LIBTOOL@ @CC@
|
||||
CXX = @LIBTOOL@ @CXX@
|
||||
DSO = @DSO@
|
||||
HTMLDOC = @HTMLDOC@
|
||||
INSTALL = @INSTALL@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN = @LN@ -sf
|
||||
MV = @MV@
|
||||
NROFF = @NROFF@
|
||||
RANLIB = @RANLIB@
|
||||
RM = @RM@ -f
|
||||
SED = @SED@
|
||||
SHELL = /bin/sh
|
||||
STRIP = @STRIP@
|
||||
|
||||
#
|
||||
# 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...
|
||||
#
|
||||
|
||||
LIBCUPS = @LIBCUPS@
|
||||
LIBCUPSIMAGE = @LIBCUPSIMAGE@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBTIFF = @LIBTIFF@
|
||||
LIBZ = @LIBZ@
|
||||
LIBCUPS = @LIBCUPS@
|
||||
LIBCUPSIMAGE = @LIBCUPSIMAGE@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBMALLOC = @LIBMALLOC@
|
||||
LIBPAPER = @LIBPAPER@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBSLP = @LIBSLP@
|
||||
LIBTIFF = @LIBTIFF@
|
||||
LIBZ = @LIBZ@
|
||||
|
||||
#
|
||||
# Program options...
|
||||
@@ -75,18 +83,24 @@ LIBZ = @LIBZ@
|
||||
# extra debug info)
|
||||
#
|
||||
|
||||
ARFLAGS = crvs
|
||||
CFLAGS = @CFLAGS@ $(OPTIM) -I.. $(OPTIONS)
|
||||
CXXFLAGS = @CXXFLAGS@ $(OPTIM) -I.. $(OPTIONS)
|
||||
DSOLIBS = @DSOLIBS@
|
||||
IMGLIBS = @IMGLIBS@ -lm
|
||||
LDFLAGS = @LDFLAGS@ $(OPTIM)
|
||||
LINKCUPS = @LINKCUPS@
|
||||
LINKCUPSIMAGE = @LINKCUPSIMAGE@
|
||||
LIBS = $(LINKCUPS) $(NETLIBS) @LIBS@
|
||||
NETLIBS = @NETLIBS@
|
||||
OPTIM = @OPTIM@
|
||||
OPTIONS =
|
||||
ARFLAGS = @ARFLAGS@
|
||||
BACKLIBS = @BACKLIBS@
|
||||
CFLAGS = $(RC_CFLAGS) @CPPFLAGS@ @CFLAGS@ -I.. $(OPTIONS)
|
||||
COMMONLIBS = @COMMONLIBS@
|
||||
CXXFLAGS = $(RC_CFLAGS) @CPPFLAGS@ @CXXFLAGS@ -I.. $(OPTIONS)
|
||||
CXXLIBS = @CXXLIBS@
|
||||
DSOFLAGS = @LDFLAGS@ @DSOFLAGS@
|
||||
DSOLIBS = @DSOLIBS@ $(COMMONLIBS)
|
||||
IMGLIBS = @IMGLIBS@ -lm
|
||||
LDFLAGS = -L../cups -L../filter $(RC_CFLAGS) @LDFLAGS@ $(OPTIM)
|
||||
LINKCUPS = @LINKCUPS@
|
||||
LINKCUPSIMAGE = @LINKCUPSIMAGE@
|
||||
LIBS = $(LINKCUPS) $(NETLIBS) @LIBS@ $(COMMONLIBS)
|
||||
NETLIBS = @NETLIBS@
|
||||
OPTIM = @OPTIM@
|
||||
OPTIONS =
|
||||
PAMLIBS = @PAMLIBS@
|
||||
SSLLIBS = @SSLLIBS@
|
||||
|
||||
#
|
||||
# Directories...
|
||||
@@ -117,48 +131,56 @@ srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
BINDIR = @bindir@
|
||||
DATADIR = @CUPS_DATADIR@
|
||||
DOCDIR = @CUPS_DOCROOT@
|
||||
INCLUDEDIR = $(includedir)
|
||||
BUILDROOT = $(DSTROOT)
|
||||
|
||||
AMANDIR = $(BUILDROOT)@AMANDIR@
|
||||
BINDIR = $(BUILDROOT)@bindir@
|
||||
DATADIR = $(BUILDROOT)@CUPS_DATADIR@
|
||||
DOCDIR = $(BUILDROOT)@CUPS_DOCROOT@
|
||||
INCLUDEDIR = $(BUILDROOT)$(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@
|
||||
LIBDIR = $(BUILDROOT)$(libdir)
|
||||
LOCALEDIR = $(BUILDROOT)@CUPS_LOCALEDIR@
|
||||
LOGDIR = $(BUILDROOT)@CUPS_LOGDIR@
|
||||
MANDIR = $(BUILDROOT)@mandir@
|
||||
PAMDIR = $(BUILDROOT)@PAMDIR@
|
||||
PMANDIR = $(BUILDROOT)@PMANDIR@
|
||||
REQUESTS = $(BUILDROOT)@CUPS_REQUESTS@
|
||||
SBINDIR = $(BUILDROOT)@sbindir@
|
||||
SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@
|
||||
SERVERROOT = $(BUILDROOT)@CUPS_SERVERROOT@
|
||||
|
||||
CAT1EXT = @CAT1EXT@
|
||||
CAT3EXT = @CAT3EXT@
|
||||
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 .3 .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.3 .man.5 .man.8:
|
||||
echo Formatting $<...
|
||||
$(RM) $@
|
||||
$(NROFF) -man $< >$@
|
||||
-$(NROFF) -man $< >$@
|
||||
.man.z:
|
||||
echo Formatting $<...
|
||||
$(RM) $@ t.z
|
||||
$(NROFF) -man $< >t
|
||||
pack -f t
|
||||
$(MV) t.z $@
|
||||
$(RM) $@ $@.tmp $@.tmp.z
|
||||
-$(NROFF) -man $< >$@.tmp
|
||||
pack -f $@.tmp
|
||||
$(MV) $@.tmp.z $@
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id$"
|
||||
|
||||
+68
-22
@@ -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-2003 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 filter man pdftops pstoraster \
|
||||
DIRS = cups backend berkeley cgi-bin filter man pdftops \
|
||||
scheduler systemv
|
||||
|
||||
#
|
||||
@@ -36,6 +36,7 @@ DIRS = cups backend berkeley cgi-bin filter man pdftops pstoraster \
|
||||
#
|
||||
|
||||
all:
|
||||
chmod +x cups-config
|
||||
for dir in $(DIRS); do\
|
||||
echo Making all in $$dir... ;\
|
||||
(cd $$dir ; $(MAKE) $(MFLAGS)) || exit 1;\
|
||||
@@ -51,11 +52,22 @@ clean:
|
||||
(cd $$dir; $(MAKE) $(MFLAGS) clean) || exit 1;\
|
||||
done
|
||||
|
||||
#
|
||||
# Make dependencies
|
||||
#
|
||||
|
||||
depend:
|
||||
for dir in $(DIRS); do\
|
||||
echo Making dependencies in $$dir... ;\
|
||||
(cd $$dir; $(MAKE) $(MFLAGS) depend) || exit 1;\
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
# Install object and target files...
|
||||
#
|
||||
|
||||
install:
|
||||
install: installhdrs
|
||||
for dir in $(DIRS); do\
|
||||
echo Installing in $$dir... ;\
|
||||
(cd $$dir; $(MAKE) $(MFLAGS) install) || exit 1;\
|
||||
@@ -74,32 +86,66 @@ install:
|
||||
(cd ppd; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing in templates...
|
||||
(cd templates; $(MAKE) $(MFLAGS) install)
|
||||
echo Installing cups-config script...
|
||||
$(INSTALL_DIR) $(BINDIR)
|
||||
$(INSTALL_SCRIPT) cups-config $(BINDIR)/cups-config
|
||||
echo Installing startup script...
|
||||
if test "x$INITDIR" != "x"; then \
|
||||
$(MKDIR) $(prefix)/$(INITDIR)/init.d; \
|
||||
$(RM) $(prefix)/$(INITDIR)/init.d/cups; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/init.d/cups; \
|
||||
$(CHMOD) ugo+rx $(prefix)/$(INITDIR)/init.d/cups; \
|
||||
$(MKDIR) $(prefix)/$(INITDIR)/rc0.d; \
|
||||
$(RM) $(prefix)/$(INITDIR)/rc0.d/K00cups; \
|
||||
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc0.d/K00cups; \
|
||||
$(MKDIR) $(prefix)/$(INITDIR)/rc3.d; \
|
||||
$(RM) $(prefix)/$(INITDIR)/rc3.d/S99cups; \
|
||||
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc3.d/S99cups; \
|
||||
if test "x$(INITDIR)" != "x"; then \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDIR)/init.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/init.d/cups; \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDIR)/rc0.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/rc0.d/K00cups; \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDIR)/rc2.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/rc2.d/S99cups; \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDIR)/rc3.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/rc3.d/S99cups; \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDIR)/rc5.d; \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \
|
||||
fi
|
||||
if test "x$(INITDIR)" = "x" -a "x$(INITDDIR)" != "x"; then \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDDIR); \
|
||||
if test "$(INITDDIR)" = "/System/Library/StartupItems/PrintingServices"; then \
|
||||
$(INSTALL_SCRIPT) cups.osx $(BUILDROOT)$(INITDDIR)/PrintingServices; \
|
||||
$(INSTALL_DATA) cups.plist $(BUILDROOT)$(INITDDIR)/StartupParameters.plist; \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
|
||||
$(INSTALL_DATA) cups.strings $(BUILDROOT)$(INITDDIR)/Resources/English.lproj/Localizable.strings; \
|
||||
else \
|
||||
$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
|
||||
fi \
|
||||
fi
|
||||
|
||||
#
|
||||
# Install source and header files...
|
||||
#
|
||||
|
||||
installsrc:
|
||||
gnutar --dereference --exclude=CVS -cf - . | gnutar -C $(SRCROOT) -xf -
|
||||
|
||||
installhdrs:
|
||||
(cd cups ; $(MAKE) $(MFLAGS) installhdrs) || exit 1;\
|
||||
(cd filter ; $(MAKE) $(MFLAGS) installhdrs) || exit 1;
|
||||
|
||||
|
||||
#
|
||||
# Run the test suite...
|
||||
#
|
||||
|
||||
check 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
|
||||
|
||||
+157
-140
@@ -1,54 +1,67 @@
|
||||
README - CUPS v1.1.2 - 08/04/2000
|
||||
---------------------------------
|
||||
README - CUPS v1.1.19 - 05/27/2003
|
||||
----------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt"
|
||||
instead...
|
||||
|
||||
**** IF YOU HAVE A NON-POSTSCRIPT PRINTER, YOU WILL ALSO ****
|
||||
**** NEED TO INSTALL ESP GHOSTSCRIPT OR A PATCHED VERSION ****
|
||||
**** OF THE STANDARD GHOSTSCRIPT RELEASES. ****
|
||||
|
||||
|
||||
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 includes an image file RIP that supports printing of image
|
||||
files to non-PostScript printers. A customized version of GNU
|
||||
Ghostscript 7.05 for CUPS called ESP Ghostscript is available
|
||||
separately to support printing of PostScript files within the
|
||||
CUPS driver framework. Sample drivers for Dymo, EPSON, HP, and
|
||||
OKIDATA 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 +70,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 +194,78 @@ 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-2003 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.
|
||||
The PDF filter (pdftops) is based on the Xpdf software,
|
||||
Copyright 1996-2002 by Derek B. Noonburg.
|
||||
|
||||
The PDF filter (pdftops) is based on the Xpdf 0.90 software, Copyright
|
||||
1996-1999 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 +274,10 @@ 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
|
||||
Derek B. Noonburg who developed the Xpdf software used to print
|
||||
PDF files.
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
README_fr - CUPS v1.1.19 - 04/08/2003
|
||||
-------------------------------------
|
||||
|
||||
Vous cherchez des instructions d'installation ? Lisez le fichier
|
||||
INSTALL.txt (anglais) et/ou reportez vous au "Manuel de
|
||||
l'administrateur" (en français) situé dans le sous-répertoire
|
||||
"doc/fr"
|
||||
|
||||
Vous trouverez deux autres manuels en français dans ce
|
||||
sous-répertoire :
|
||||
|
||||
- Aperçu de CUPS
|
||||
- Manuel de l'utilisateur
|
||||
|
||||
Une fois CUPS installé, si vous configurez votre navigateur
|
||||
"web" pour que la langue de base soit le français, vous
|
||||
disposerez également d'une interface "web" en français pour
|
||||
l'administration et d'utilistation de CUPS.
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
betest
|
||||
ipp
|
||||
lpd
|
||||
parallel
|
||||
scsi
|
||||
serial
|
||||
socket
|
||||
usb
|
||||
@@ -0,0 +1,17 @@
|
||||
# DO NOT DELETE
|
||||
|
||||
betest.o: ../cups/string.h ../config.h
|
||||
ipp.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
ipp.o: ../cups/ppd.h ../cups/language.h ../cups/string.h ../config.h
|
||||
lpd.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
lpd.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
parallel.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
parallel.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
scsi.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
scsi.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
serial.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
serial.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
socket.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
socket.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
usb.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
usb.o: ../cups/ppd.h ../cups/string.h ../config.h
|
||||
+36
-22
@@ -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-2003 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
|
||||
@@ -21,12 +21,14 @@
|
||||
# EMail: cups-info@cups.org
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
# This file is subject to the Apple OS-Developed Software exception.
|
||||
#
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
BACKENDS = ipp lpd parallel serial socket usb
|
||||
BACKENDS = ipp lpd parallel scsi serial socket usb
|
||||
TARGETS = betest $(BACKENDS)
|
||||
OBJS = betest.o ipp.o lpd.o parallel.o serial.o socket.o usb.o
|
||||
OBJS = betest.o ipp.o lpd.o parallel.o scsi.o serial.o socket.o usb.o
|
||||
|
||||
|
||||
#
|
||||
@@ -44,15 +46,23 @@ clean:
|
||||
$(RM) $(OBJS) $(TARGETS) http
|
||||
|
||||
|
||||
#
|
||||
# Update dependencies (without system header dependencies...)
|
||||
#
|
||||
|
||||
depend:
|
||||
makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
|
||||
|
||||
|
||||
#
|
||||
# Install all targets...
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERBIN)/backend
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)/backend
|
||||
$(INSTALL_BIN) $(BACKENDS) $(SERVERBIN)/backend
|
||||
install: all
|
||||
$(INSTALL_DIR) $(SERVERBIN)/backend
|
||||
for file in $(BACKENDS); do \
|
||||
$(INSTALL_BIN) $$file $(SERVERBIN)/backend; \
|
||||
done
|
||||
$(RM) $(SERVERBIN)/backend/http
|
||||
$(LN) ipp $(SERVERBIN)/backend/http
|
||||
|
||||
@@ -65,8 +75,6 @@ betest: betest.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o betest betest.o $(LIBS)
|
||||
|
||||
betest.o: ../cups/string.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# ipp
|
||||
@@ -78,8 +86,6 @@ ipp: ipp.o ../cups/$(LIBCUPS)
|
||||
$(RM) http
|
||||
$(LN) ipp http
|
||||
|
||||
ipp.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# lpd
|
||||
@@ -89,8 +95,6 @@ lpd: lpd.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o lpd lpd.o $(LIBS)
|
||||
|
||||
lpd.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# parallel
|
||||
@@ -100,7 +104,16 @@ parallel: parallel.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o parallel parallel.o $(LIBS)
|
||||
|
||||
parallel.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
#
|
||||
# scsi
|
||||
#
|
||||
|
||||
scsi: scsi.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o scsi scsi.o $(LIBS)
|
||||
|
||||
scsi.o: scsi.c scsi-irix.c scsi-linux.c
|
||||
|
||||
|
||||
#
|
||||
@@ -109,9 +122,7 @@ parallel.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
serial: serial.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o serial serial.o $(LIBS)
|
||||
|
||||
serial.o: ../cups/cups.h ../Makedefs
|
||||
$(CC) $(LDFLAGS) -o serial serial.o $(BACKLIBS) $(LIBS)
|
||||
|
||||
|
||||
#
|
||||
@@ -122,8 +133,6 @@ socket: socket.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o socket socket.o $(LIBS)
|
||||
|
||||
socket.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# usb
|
||||
@@ -131,9 +140,14 @@ socket.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
usb: usb.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o usb usb.o $(LIBS)
|
||||
$(CC) $(LDFLAGS) -o usb usb.o $(BACKLIBS) $(LIBS)
|
||||
|
||||
usb.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
#
|
||||
# Dependencies...
|
||||
#
|
||||
|
||||
include Dependencies
|
||||
|
||||
|
||||
#
|
||||
|
||||
+3
-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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Run the named backend.
|
||||
|
||||
+902
-405
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+701
-213
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+120
-31
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the specified parallel port.
|
||||
@@ -38,13 +40,13 @@
|
||||
#include <cups/string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
#ifdef WIN32
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <termios.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef __sgi
|
||||
# include <invent.h>
|
||||
@@ -83,7 +85,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
resource[1024], /* Resource info (device and options) */
|
||||
*options; /* Pointer to options */
|
||||
int port; /* Port number (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int fd; /* Parallel device */
|
||||
int wbytes; /* Number of bytes written */
|
||||
@@ -97,6 +99,30 @@ 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);
|
||||
|
||||
/*
|
||||
* Ignore SIGPIPE signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGPIPE, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &action, NULL);
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -115,7 +141,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if (argc == 6)
|
||||
{
|
||||
fp = stdin;
|
||||
fp = 0;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
@@ -124,7 +150,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Try to open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(argv[6], "rb")) == NULL)
|
||||
if ((fp = open(argv[6], O_RDONLY)) < 0)
|
||||
{
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
@@ -166,9 +192,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
fputs("INFO: Parallel port busy; will retry in 30 seconds...\n", stderr);
|
||||
sleep(30);
|
||||
}
|
||||
else if (errno == ENXIO || errno == EIO || errno == ENOENT)
|
||||
{
|
||||
fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
|
||||
sleep(30);
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to open parallel port device file");
|
||||
fprintf(stderr, "ERROR: Unable to open parallel port device file \"%s\": %s\n",
|
||||
resource, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -190,20 +222,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...
|
||||
@@ -213,14 +249,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
{
|
||||
copies --;
|
||||
|
||||
if (fp != stdin)
|
||||
if (fp != 0)
|
||||
{
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
lseek(fp, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
@@ -246,7 +282,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
|
||||
(unsigned long)tbytes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,8 +292,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
if (fp != 0)
|
||||
close(fp);
|
||||
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -269,14 +308,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 */
|
||||
probefile[255]; /* Probe 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 */
|
||||
@@ -290,14 +332,39 @@ list_devices(void)
|
||||
* First open the device to make sure the driver module is loaded...
|
||||
*/
|
||||
|
||||
sprintf(device, "/dev/lp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
if ((fd = open("/dev/parallel/0", O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
strcpy(basedevice, "/dev/parallel/");
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(device, "/dev/par%d", i);
|
||||
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
|
||||
{
|
||||
sprintf(device, "/dev/printers/%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
strcpy(basedevice, "/dev/printers/");
|
||||
}
|
||||
else
|
||||
strcpy(basedevice, "/dev/unknown-parallel");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -342,20 +409,20 @@ list_devices(void)
|
||||
|
||||
if (strncmp(line, "MODEL:", 6) == 0 &&
|
||||
strncmp(line, "MODEL:Unknown", 13) != 0)
|
||||
strncpy(model, line + 6, sizeof(model) - 1);
|
||||
strlcpy(model, line + 6, sizeof(model));
|
||||
else if (strncmp(line, "MANUFACTURER:", 13) == 0 &&
|
||||
strncmp(line, "MANUFACTURER:Unknown", 20) != 0)
|
||||
strncpy(make, line + 13, sizeof(make) - 1);
|
||||
strlcpy(make, line + 13, sizeof(make));
|
||||
}
|
||||
|
||||
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 if (fd >= 0)
|
||||
{
|
||||
@@ -563,7 +630,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 */
|
||||
@@ -573,6 +640,28 @@ list_devices(void)
|
||||
{
|
||||
sprintf(device, "/dev/lpt%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d (interrupt-driven)\"\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 (polled)\"\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);
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* IRIX SCSI printer support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2003 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the
|
||||
* following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the
|
||||
* above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use
|
||||
* of this software must display the following
|
||||
* acknowledgement:
|
||||
*
|
||||
* This product includes software developed by Easy
|
||||
* Software Products.
|
||||
*
|
||||
* 4. The name of Easy Software Products may not be used to
|
||||
* endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
||||
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* list_devices() - List the available SCSI printer devices.
|
||||
* print_device() - Print a file to a SCSI device.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers.
|
||||
*/
|
||||
|
||||
#include <bstring.h> /* memcpy() and friends */
|
||||
#include <sys/dsreq.h> /* SCSI interface stuff */
|
||||
|
||||
|
||||
/*
|
||||
* 'list_devices()' - List the available SCSI printer devices.
|
||||
*/
|
||||
|
||||
void
|
||||
list_devices(void)
|
||||
{
|
||||
puts("direct scsi \"Unknown\" \"SCSI Printer\"");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'print_device()' - Print a file to a SCSI device.
|
||||
*/
|
||||
|
||||
int /* O - Print status */
|
||||
print_device(const char *resource, /* I - SCSI device */
|
||||
int fd, /* I - File to print */
|
||||
int copies) /* I - Number of copies to print */
|
||||
{
|
||||
int scsi_fd; /* SCSI file descriptor */
|
||||
char buffer[8192]; /* Data buffer */
|
||||
int bytes; /* Number of bytes */
|
||||
int try; /* Current try */
|
||||
dsreq_t scsi_req; /* SCSI request */
|
||||
char scsi_cmd[6]; /* SCSI command data */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure we have a valid resource name...
|
||||
*/
|
||||
|
||||
if (strncmp(resource, "/dev/scsi/", 10) != 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Bad SCSI device file \"%s\"!\n", resource);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Open the SCSI device file...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
if ((scsi_fd = open(resource, O_RDWR | O_EXCL)) == -1)
|
||||
{
|
||||
if (errno != EAGAIN && errno != EBUSY)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to open SCSI device \"%s\" - %s\n",
|
||||
resource, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "INFO: SCSI device \"%s\" busy; retrying...\n",
|
||||
resource);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
}
|
||||
while (scsi_fd == -1);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (fd != 0)
|
||||
{
|
||||
#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
#else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the print file to the device...
|
||||
*/
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
if (fd != 0)
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
|
||||
while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
memset(&scsi_req, 0, sizeof(scsi_req));
|
||||
|
||||
scsi_req.ds_flags = DSRQ_WRITE;
|
||||
scsi_req.ds_time = 60 * 1000;
|
||||
scsi_req.ds_cmdbuf = scsi_cmd;
|
||||
scsi_req.ds_cmdlen = 6;
|
||||
scsi_req.ds_databuf = buffer;
|
||||
scsi_req.ds_datalen = bytes;
|
||||
|
||||
scsi_cmd[0] = 0x0a; /* Group 0 print command */
|
||||
scsi_cmd[1] = 0x00;
|
||||
scsi_cmd[2] = bytes / 65536;
|
||||
scsi_cmd[3] = bytes / 256;
|
||||
scsi_cmd[4] = bytes;
|
||||
scsi_cmd[5] = 0x00;
|
||||
|
||||
for (try = 0; try < 10; try ++)
|
||||
if (ioctl(scsi_fd, DS_ENTER, &scsi_req) < 0 ||
|
||||
scsi_req.ds_status != 0)
|
||||
{
|
||||
fprintf(stderr, "WARNING: SCSI command timed out (%d); retrying...\n",
|
||||
scsi_req.ds_status);
|
||||
sleep(try + 1);
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
if (try >= 10)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to send print data (%d)\n",
|
||||
scsi_req.ds_status);
|
||||
close(scsi_fd);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
copies --;
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the device and return...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Linux SCSI printer support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2003 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the
|
||||
* following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the
|
||||
* above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use
|
||||
* of this software must display the following
|
||||
* acknowledgement:
|
||||
*
|
||||
* This product includes software developed by Easy
|
||||
* Software Products.
|
||||
*
|
||||
* 4. The name of Easy Software Products may not be used to
|
||||
* endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
||||
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* list_devices() - List the available SCSI printer devices.
|
||||
* print_device() - Print a file to a SCSI device.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers.
|
||||
*/
|
||||
|
||||
#include <scsi/sg.h>
|
||||
|
||||
|
||||
/*
|
||||
* We currently only support the Linux 2.4 generic SCSI interface.
|
||||
*/
|
||||
|
||||
#ifndef SG_DXFER_TO_DEV
|
||||
/*
|
||||
* Dummy functions that do nothing on unsupported platforms...
|
||||
*/
|
||||
void list_devices(void) {}
|
||||
int print_device(const char *resource, int fd, int copies) { return (1); }
|
||||
#else
|
||||
|
||||
|
||||
/*
|
||||
* 'list_devices()' - List the available SCSI printer devices.
|
||||
*/
|
||||
|
||||
void
|
||||
list_devices(void)
|
||||
{
|
||||
puts("direct scsi \"Unknown\" \"SCSI Printer\"");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'print_device()' - Print a file to a SCSI device.
|
||||
*/
|
||||
|
||||
int /* O - Print status */
|
||||
print_device(const char *resource, /* I - SCSI device */
|
||||
int fd, /* I - File to print */
|
||||
int copies) /* I - Number of copies to print */
|
||||
{
|
||||
int scsi_fd; /* SCSI file descriptor */
|
||||
char buffer[8192]; /* Data buffer */
|
||||
int bytes; /* Number of bytes */
|
||||
int try; /* Current try */
|
||||
sg_io_hdr_t scsi_req; /* SCSI request */
|
||||
char scsi_cmd[6], /* SCSI command data */
|
||||
scsi_sense[32]; /* SCSI sense data */
|
||||
# if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
# endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure we have a valid resource name...
|
||||
*/
|
||||
|
||||
if (strncmp(resource, "/dev/sg", 7) != 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Bad SCSI device file \"%s\"!\n", resource);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Open the SCSI device file...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
if ((scsi_fd = open(resource, O_RDWR | O_EXCL)) == -1)
|
||||
{
|
||||
if (errno != EAGAIN && errno != EBUSY)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to open SCSI device \"%s\" - %s\n",
|
||||
resource, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "INFO: SCSI device \"%s\" busy; retrying...\n",
|
||||
resource);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
}
|
||||
while (scsi_fd == -1);
|
||||
|
||||
/*
|
||||
* Now that we are "connected" to the port, ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
* current page... Only ignore SIGTERM if we are printing data from
|
||||
* stdin (otherwise you can't cancel raw jobs...)
|
||||
*/
|
||||
|
||||
if (fd != 0)
|
||||
{
|
||||
# ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
|
||||
sigset(SIGTERM, SIG_IGN);
|
||||
# elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
# else
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
# endif /* HAVE_SIGSET */
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the print file to the device...
|
||||
*/
|
||||
|
||||
while (copies > 0)
|
||||
{
|
||||
if (fd != 0)
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
|
||||
while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
memset(&scsi_req, 0, sizeof(scsi_req));
|
||||
|
||||
scsi_req.interface_id = 'S';
|
||||
scsi_req.dxfer_direction = SG_DXFER_TO_DEV;
|
||||
scsi_req.cmd_len = 6;
|
||||
scsi_req.mx_sb_len = sizeof(scsi_sense);
|
||||
scsi_req.iovec_count = 0;
|
||||
scsi_req.dxfer_len = bytes;
|
||||
scsi_req.dxferp = buffer;
|
||||
scsi_req.cmdp = scsi_cmd;
|
||||
scsi_req.sbp = scsi_sense;
|
||||
scsi_req.timeout = 60 * 1000;
|
||||
|
||||
scsi_cmd[0] = 0x0a; /* Group 0 print command */
|
||||
scsi_cmd[1] = 0x00;
|
||||
scsi_cmd[2] = bytes / 65536;
|
||||
scsi_cmd[3] = bytes / 256;
|
||||
scsi_cmd[4] = bytes;
|
||||
scsi_cmd[5] = 0x00;
|
||||
|
||||
for (try = 0; try < 10; try ++)
|
||||
if (ioctl(scsi_fd, SG_IO, &scsi_req) < 0 ||
|
||||
scsi_req.status != 0)
|
||||
{
|
||||
fprintf(stderr, "WARNING: SCSI command timed out (%d); retrying...\n",
|
||||
scsi_req.status);
|
||||
sleep(try + 1);
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
if (try >= 10)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to send print data (%d)\n",
|
||||
scsi_req.status);
|
||||
close(scsi_fd);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
copies --;
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the device and return...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* !SG_DXFER_TO_DEV */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -0,0 +1,223 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* SCSI printer backend for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 2003 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the
|
||||
* following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the
|
||||
* above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use
|
||||
* of this software must display the following
|
||||
* acknowledgement:
|
||||
*
|
||||
* This product includes software developed by Easy
|
||||
* Software Products.
|
||||
*
|
||||
* 4. The name of Easy Software Products may not be used to
|
||||
* endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
||||
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the specified SCSI printer.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers.
|
||||
*/
|
||||
|
||||
#include <cups/cups.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <cups/string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#ifdef WIN32
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
# endif /* HAVE_SYS_IOCTL_H */
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
void list_devices(void);
|
||||
int print_device(const char *resource, int fd, int copies);
|
||||
|
||||
|
||||
#ifdef __linux__
|
||||
# include "scsi-linux.c"
|
||||
#elif defined(__sgi)
|
||||
# include "scsi-irix.c"
|
||||
#else
|
||||
/*
|
||||
* Dummy functions that do nothing on unsupported platforms...
|
||||
*/
|
||||
void list_devices(void) {}
|
||||
int print_device(const char *resource, int fd, int copies) { return (1); }
|
||||
#endif /* __linux */
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Send a file to the specified SCSI printer.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* printer-uri job-id user title copies options [file]
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024], /* Resource info (device and options) */
|
||||
*options; /* Pointer to options */
|
||||
int port; /* Port number (not used) */
|
||||
int fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int status; /* Exit status */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Ignore SIGPIPE signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGPIPE, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &action, NULL);
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
return (0);
|
||||
}
|
||||
else if (argc < 6 || argc > 7)
|
||||
{
|
||||
fputs("Usage: scsi:/dev/file job-id user title copies options [file]\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we have 7 arguments, print the file named on the command-line.
|
||||
* Otherwise, send stdin instead...
|
||||
*/
|
||||
|
||||
if (argc == 6)
|
||||
{
|
||||
fp = 0;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Try to open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = open(argv[6], O_RDONLY)) < 0)
|
||||
{
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
copies = atoi(argv[4]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the device name and options from the URI...
|
||||
*/
|
||||
|
||||
httpSeparate(argv[0], method, username, hostname, &port, resource);
|
||||
|
||||
/*
|
||||
* See if there are any options...
|
||||
*/
|
||||
|
||||
if ((options = strchr(resource, '?')) != NULL)
|
||||
{
|
||||
/*
|
||||
* Yup, terminate the device name string and move to the first
|
||||
* character of the options...
|
||||
*/
|
||||
|
||||
*options++ = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
*/
|
||||
|
||||
status = print_device(resource, fp, copies);
|
||||
|
||||
/*
|
||||
* Close input file and return...
|
||||
*/
|
||||
|
||||
if (fp != 0)
|
||||
close(fp);
|
||||
|
||||
if (!status)
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+315
-29
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the printer or server.
|
||||
@@ -38,13 +40,20 @@
|
||||
#include <cups/string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
#ifdef __hpux
|
||||
# include <sys/modem.h>
|
||||
#endif /* __hpux */
|
||||
|
||||
#ifdef WIN32
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <termios.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
# ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
# endif /* HAVE_SYS_IOCTL_H */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef __sgi
|
||||
# include <invent.h>
|
||||
@@ -57,6 +66,21 @@
|
||||
# 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 */
|
||||
|
||||
#if defined(__APPLE__)
|
||||
# include <CoreFoundation/CoreFoundation.h>
|
||||
# include <IOKit/IOKitLib.h>
|
||||
# include <IOKit/serial/IOSerialKeys.h>
|
||||
# include <IOKit/IOBSD.h>
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
@@ -86,20 +110,47 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
value[255], /* Value of option */
|
||||
*ptr; /* Pointer into name or value */
|
||||
int port; /* Port number (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int fd; /* Parallel device */
|
||||
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 */
|
||||
struct termios opts; /* Serial port options */
|
||||
struct termios origopts; /* Original port options */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Ignore SIGPIPE signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGPIPE, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &action, NULL);
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -118,7 +169,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if (argc == 6)
|
||||
{
|
||||
fp = stdin;
|
||||
fp = 0;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
@@ -127,7 +178,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Try to open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(argv[6], "rb")) == NULL)
|
||||
if ((fp = open(argv[6], O_RDONLY)) < 0)
|
||||
{
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
@@ -162,7 +213,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)
|
||||
{
|
||||
@@ -171,7 +222,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to open serial port device file");
|
||||
fprintf(stderr, "ERROR: Unable to open serial port device file \"%s\": %s\n",
|
||||
resource, strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -182,9 +234,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Set any options provided...
|
||||
*/
|
||||
|
||||
tcgetattr(fd, &origopts);
|
||||
tcgetattr(fd, &opts);
|
||||
|
||||
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
|
||||
opts.c_oflag &= ~OPOST; /* Don't post-process */
|
||||
|
||||
bufsize = 96; /* 9600 baud / 10 bits/char / 10Hz */
|
||||
dtrdsr = 0; /* No dtr/dsr flow control */
|
||||
|
||||
if (options != NULL)
|
||||
while (*options)
|
||||
@@ -225,6 +282,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 +314,24 @@ 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 */
|
||||
# ifdef B230400
|
||||
case 230400 :
|
||||
cfsetispeed(&opts, B230400);
|
||||
cfsetospeed(&opts, B230400);
|
||||
break;
|
||||
# endif /* B230400 */
|
||||
default :
|
||||
fprintf(stderr, "WARNING: Unsupported baud rate %s!\n", value);
|
||||
break;
|
||||
@@ -301,44 +378,112 @@ 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 --;
|
||||
|
||||
if (fp != stdin)
|
||||
if (fp != 0)
|
||||
{
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
lseek(fp, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
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 = read(fp, buffer, bufsize)) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
@@ -364,17 +509,22 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
|
||||
(unsigned long)tbytes);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the socket connection and input file and return...
|
||||
* Close the serial port and input file and return...
|
||||
*/
|
||||
|
||||
tcsetattr(fd, TCSADRAIN, &origopts);
|
||||
|
||||
close(fd);
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
if (fp != 0)
|
||||
close(fp);
|
||||
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -387,23 +537,41 @@ 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
|
||||
#if defined(__linux) || defined(linux) || defined(__linux__)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
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)
|
||||
{
|
||||
close(fd);
|
||||
# if defined(_ARCH_PPC) || defined(powerpc) || defined(__powerpc)
|
||||
printf("serial serial:%s?baud=230400 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
# else
|
||||
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
# endif /* _ARCH_PPC || powerpc || __powerpc */
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 16; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/usb/ttyUSB%d", i);
|
||||
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("serial serial:%s?baud=230400 \"Unknown\" \"USB Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
}
|
||||
}
|
||||
#elif defined(__sgi)
|
||||
@@ -433,7 +601,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 +616,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 +626,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 +685,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 +787,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 +869,119 @@ 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);
|
||||
}
|
||||
}
|
||||
#elif defined(__APPLE__)
|
||||
/*
|
||||
* Standard serial ports on MacOS X...
|
||||
*/
|
||||
|
||||
kern_return_t kernResult;
|
||||
mach_port_t masterPort;
|
||||
io_iterator_t serialPortIterator;
|
||||
CFMutableDictionaryRef classesToMatch;
|
||||
io_object_t serialService;
|
||||
|
||||
printf("serial serial \"Unknown\" \"Serial Printer (serial)\"\n");
|
||||
|
||||
kernResult = IOMasterPort(MACH_PORT_NULL, &masterPort);
|
||||
if (KERN_SUCCESS != kernResult)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Serial devices are instances of class IOSerialBSDClient.
|
||||
*/
|
||||
|
||||
classesToMatch = IOServiceMatching(kIOSerialBSDServiceValue);
|
||||
if (classesToMatch != NULL)
|
||||
{
|
||||
CFDictionarySetValue(classesToMatch, CFSTR(kIOSerialBSDTypeKey),
|
||||
CFSTR(kIOSerialBSDRS232Type));
|
||||
|
||||
kernResult = IOServiceGetMatchingServices(masterPort, classesToMatch,
|
||||
&serialPortIterator);
|
||||
if (kernResult == KERN_SUCCESS)
|
||||
{
|
||||
while ((serialService = IOIteratorNext(serialPortIterator)))
|
||||
{
|
||||
CFTypeRef serialNameAsCFString;
|
||||
CFTypeRef bsdPathAsCFString;
|
||||
char serialName[128];
|
||||
char bsdPath[1024];
|
||||
Boolean result;
|
||||
|
||||
|
||||
serialNameAsCFString =
|
||||
IORegistryEntryCreateCFProperty(serialService,
|
||||
CFSTR(kIOTTYDeviceKey),
|
||||
kCFAllocatorDefault, 0);
|
||||
if (serialNameAsCFString)
|
||||
{
|
||||
result = CFStringGetCString(serialNameAsCFString, serialName,
|
||||
sizeof(serialName),
|
||||
kCFStringEncodingASCII);
|
||||
CFRelease(serialNameAsCFString);
|
||||
|
||||
if (result)
|
||||
{
|
||||
bsdPathAsCFString =
|
||||
IORegistryEntryCreateCFProperty(serialService,
|
||||
CFSTR(kIOCalloutDeviceKey),
|
||||
kCFAllocatorDefault, 0);
|
||||
if (bsdPathAsCFString)
|
||||
{
|
||||
result = CFStringGetCString(bsdPathAsCFString, bsdPath,
|
||||
sizeof(bsdPath),
|
||||
kCFStringEncodingASCII);
|
||||
CFRelease(bsdPathAsCFString);
|
||||
|
||||
if (result)
|
||||
printf("serial serial:%s?baud=115200 \"Unknown\" \"%s\"\n", bsdPath,
|
||||
serialName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IOObjectRelease(serialService);
|
||||
}
|
||||
|
||||
IOObjectRelease(serialPortIterator); /* Release the iterator. */
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+201
-35
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the printer or server.
|
||||
@@ -40,14 +42,56 @@
|
||||
#include <sys/stat.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
#ifdef WIN32
|
||||
# include <winsock.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <sys/socket.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <netdb.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* Some OS's don't have hstrerror(), most notably Solaris...
|
||||
*/
|
||||
|
||||
#ifndef HAVE_HSTRERROR
|
||||
# define hstrerror cups_hstrerror
|
||||
|
||||
const char * /* O - Error string */
|
||||
cups_hstrerror(int error) /* I - Error number */
|
||||
{
|
||||
static const char * const errors[] =
|
||||
{
|
||||
"OK",
|
||||
"Host not found.",
|
||||
"Try again.",
|
||||
"Unrecoverable lookup error.",
|
||||
"No data associated with name."
|
||||
};
|
||||
|
||||
|
||||
if (error < 0 || error > 4)
|
||||
return ("Unknown hostname lookup error.");
|
||||
else
|
||||
return (errors[error]);
|
||||
}
|
||||
#elif defined(_AIX)
|
||||
/*
|
||||
* AIX doesn't provide a prototype but does provide the function...
|
||||
*/
|
||||
extern const char *hstrerror(int);
|
||||
#endif /* !HAVE_HSTRERROR */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
void print_backchannel(const unsigned char *buffer, int nbytes);
|
||||
|
||||
|
||||
/*
|
||||
@@ -58,24 +102,25 @@
|
||||
* printer-uri job-id user title copies options [file]
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024]; /* Resource info (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int 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 */
|
||||
struct hostent *hostaddr; /* Host address */
|
||||
int wbytes; /* Number of bytes written */
|
||||
size_t nbytes, /* Number of bytes read */
|
||||
tbytes; /* Total number of bytes written */
|
||||
int nbytes; /* Number of bytes read */
|
||||
size_t tbytes; /* Total number of bytes written */
|
||||
char buffer[8192], /* Output buffer */
|
||||
*bufptr; /* Pointer into buffer */
|
||||
struct timeval timeout; /* Timeout for select() */
|
||||
@@ -85,6 +130,30 @@ 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);
|
||||
|
||||
/*
|
||||
* Ignore SIGPIPE signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGPIPE, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &action, NULL);
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
puts("network socket \"Unknown\" \"AppSocket/HP JetDirect\"");
|
||||
@@ -104,7 +173,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if (argc == 6)
|
||||
{
|
||||
fp = stdin;
|
||||
fp = 0;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
@@ -113,7 +182,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Try to open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(argv[6], "rb")) == NULL)
|
||||
if ((fp = open(argv[6], O_RDONLY)) < 0)
|
||||
{
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
@@ -135,10 +204,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Then try to connect to the remote host...
|
||||
*/
|
||||
|
||||
if ((hostaddr = gethostbyname(hostname)) == NULL)
|
||||
if ((hostaddr = httpGetHostByName(hostname)) == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
|
||||
hostname, strerror(errno));
|
||||
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s\n",
|
||||
hostname, hstrerror(h_errno));
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -152,7 +221,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)
|
||||
{
|
||||
@@ -166,15 +235,19 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
close(fd);
|
||||
fd = -1;
|
||||
|
||||
if (error == ECONNREFUSED)
|
||||
if (error == ECONNREFUSED || error == EHOSTDOWN ||
|
||||
error == EHOSTUNREACH)
|
||||
{
|
||||
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 +258,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...
|
||||
@@ -206,16 +283,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
copies --;
|
||||
|
||||
if (fp != stdin)
|
||||
if (fp != 0)
|
||||
{
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
lseek(fp, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
fputs("INFO: Connected to host, sending print job...\n", stderr);
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
@@ -240,8 +317,9 @@ 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);
|
||||
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
@@ -251,11 +329,59 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
|
||||
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
|
||||
{
|
||||
fprintf(stderr, "INFO: Received %d bytes of back-channel data!\n",
|
||||
nbytes);
|
||||
print_backchannel((unsigned char *)buffer, nbytes);
|
||||
}
|
||||
}
|
||||
else if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
|
||||
(unsigned long)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 %d bytes of back-channel data!\n",
|
||||
nbytes);
|
||||
print_backchannel((unsigned char *)buffer, nbytes);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -269,13 +395,53 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Close the input file and return...
|
||||
*/
|
||||
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
if (fp != 0)
|
||||
close(fp);
|
||||
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'print_backchannel()' - Print the contents of a back-channel buffer.
|
||||
*/
|
||||
|
||||
void
|
||||
print_backchannel(const unsigned char *buffer, /* I - Data buffer */
|
||||
int nbytes) /* I - Number of bytes */
|
||||
{
|
||||
char line[255], /* Formatted line */
|
||||
*lineptr; /* Pointer into line */
|
||||
|
||||
|
||||
for (lineptr = line; nbytes > 0; buffer ++, nbytes --)
|
||||
{
|
||||
if (*buffer < 0x20 || *buffer >= 0x7f)
|
||||
{
|
||||
snprintf(lineptr, sizeof(line) - (lineptr - line), "<%02X>", *buffer);
|
||||
lineptr += strlen(lineptr);
|
||||
}
|
||||
else
|
||||
*lineptr++ = *buffer;
|
||||
|
||||
if ((lineptr - line) > 72)
|
||||
{
|
||||
*lineptr = '\0';
|
||||
fprintf(stderr, "DEBUG: DATA: %s\n", line);
|
||||
lineptr = line;
|
||||
}
|
||||
}
|
||||
|
||||
if (lineptr > line)
|
||||
{
|
||||
*lineptr = '\0';
|
||||
fprintf(stderr, "DEBUG: DATA: %s\n", line);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+509
-146
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the specified USB port.
|
||||
@@ -38,20 +40,43 @@
|
||||
#include <cups/string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
#ifdef WIN32
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <termios.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef __linux
|
||||
# include <sys/ioctl.h>
|
||||
# include <linux/lp.h>
|
||||
# define IOCNR_GET_DEVICE_ID 1
|
||||
|
||||
/*
|
||||
* Get device_id string
|
||||
*/
|
||||
# define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
|
||||
#endif /* __linux */
|
||||
|
||||
#ifdef __sun
|
||||
# ifdef __sparc
|
||||
# include <sys/ecppio.h>
|
||||
# else
|
||||
# include <sys/ecppsys.h>
|
||||
# endif /* __sparc */
|
||||
#endif /* __sun */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
void decode_device_id(int port, const char *device_id,
|
||||
char *make_model, int mmsize,
|
||||
char *uri, int urisize);
|
||||
void list_devices(void);
|
||||
int open_device(const char *uri);
|
||||
|
||||
|
||||
/*
|
||||
@@ -66,13 +91,7 @@ int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
char method[255], /* Method in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024], /* Resource info (device and options) */
|
||||
*options; /* Pointer to options */
|
||||
int port; /* Port number (not used) */
|
||||
FILE *fp; /* Print file */
|
||||
int fp; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
int fd; /* Parallel device */
|
||||
int wbytes; /* Number of bytes written */
|
||||
@@ -84,8 +103,35 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
#ifdef __linux
|
||||
unsigned char status; /* Port status (off-line, out-of-paper, etc.) */
|
||||
#endif /* __linux */
|
||||
|
||||
|
||||
/*
|
||||
* Make sure status messages are not buffered...
|
||||
*/
|
||||
|
||||
setbuf(stderr, NULL);
|
||||
|
||||
/*
|
||||
* Ignore SIGPIPE signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGPIPE, SIG_IGN);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &action, NULL);
|
||||
#else
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Check command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
list_devices();
|
||||
@@ -104,7 +150,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
if (argc == 6)
|
||||
{
|
||||
fp = stdin;
|
||||
fp = 0;
|
||||
copies = 1;
|
||||
}
|
||||
else
|
||||
@@ -113,7 +159,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
* Try to open the print file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(argv[6], "rb")) == NULL)
|
||||
if ((fp = open(argv[6], O_RDONLY)) < 0)
|
||||
{
|
||||
perror("ERROR: unable to open print file");
|
||||
return (1);
|
||||
@@ -122,42 +168,28 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
copies = atoi(argv[4]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the device name and options from the URI...
|
||||
*/
|
||||
|
||||
httpSeparate(argv[0], method, username, hostname, &port, resource);
|
||||
|
||||
/*
|
||||
* See if there are any options...
|
||||
*/
|
||||
|
||||
if ((options = strchr(resource, '?')) != NULL)
|
||||
{
|
||||
/*
|
||||
* Yup, terminate the device name string and move to the first
|
||||
* character of the options...
|
||||
*/
|
||||
|
||||
*options++ = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Open the USB port device...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
if ((fd = open(resource, O_WRONLY | O_EXCL)) == -1)
|
||||
if ((fd = open_device(argv[0])) == -1)
|
||||
{
|
||||
if (errno == EBUSY)
|
||||
{
|
||||
fputs("INFO: USB port busy; will retry in 30 seconds...\n", stderr);
|
||||
sleep(30);
|
||||
}
|
||||
else if (errno == ENXIO || errno == EIO || errno == ENOENT)
|
||||
{
|
||||
fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
|
||||
sleep(30);
|
||||
}
|
||||
else
|
||||
{
|
||||
perror("ERROR: Unable to open USB port device file");
|
||||
fprintf(stderr, "ERROR: Unable to open USB device \"%s\": %s\n",
|
||||
argv[0], strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
@@ -179,20 +211,45 @@ 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 */
|
||||
}
|
||||
|
||||
#ifdef __linux
|
||||
/*
|
||||
* Show the printer status before we send the file; normally, we'd
|
||||
* do this while we write data to the printer, however at least some
|
||||
* Linux kernels have buggy USB drivers which don't like to be
|
||||
* queried while sending data to the printer...
|
||||
*/
|
||||
|
||||
if (ioctl(fd, LPGETSTATUS, &status) == 0)
|
||||
{
|
||||
fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
|
||||
|
||||
if (status & LP_NOPA)
|
||||
fputs("WARNING: Media tray empty!\n", stderr);
|
||||
else if (status & LP_ERR)
|
||||
fputs("WARNING: Printer fault!\n", stderr);
|
||||
else if (status & LP_OFFL)
|
||||
fputs("WARNING: Printer off-line.\n", stderr);
|
||||
}
|
||||
#endif /* __linux */
|
||||
|
||||
/*
|
||||
* Finally, send the print file...
|
||||
@@ -202,14 +259,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
{
|
||||
copies --;
|
||||
|
||||
if (fp != stdin)
|
||||
if (fp != 0)
|
||||
{
|
||||
fputs("PAGE: 1 1\n", stderr);
|
||||
rewind(fp);
|
||||
lseek(fp, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
tbytes = 0;
|
||||
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
|
||||
while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
/*
|
||||
* Write the print data to the printer...
|
||||
@@ -220,6 +277,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
while (nbytes > 0)
|
||||
{
|
||||
|
||||
if ((wbytes = write(fd, bufptr, nbytes)) < 0)
|
||||
if (errno == ENOTTY)
|
||||
wbytes = write(fd, bufptr, nbytes);
|
||||
@@ -235,7 +293,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
|
||||
if (argc > 6)
|
||||
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
|
||||
fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
|
||||
(unsigned long)tbytes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,13 +303,120 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
if (fp != 0)
|
||||
close(fp);
|
||||
|
||||
fputs("INFO: Ready to print.\n", stderr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'decode_device_id()' - Decode the IEEE-1284 device ID string.
|
||||
*/
|
||||
|
||||
void
|
||||
decode_device_id(int port, /* I - Port number */
|
||||
const char *device_id, /* I - 1284 device ID string */
|
||||
char *make_model, /* O - Make/model */
|
||||
int mmsize, /* I - Size of buffer */
|
||||
char *uri, /* O - Device URI */
|
||||
int urisize) /* I - Size of buffer */
|
||||
{
|
||||
char *attr, /* 1284 attribute */
|
||||
*delim, /* 1284 delimiter */
|
||||
*uriptr, /* Pointer into URI */
|
||||
serial_number[1024]; /* Serial number string */
|
||||
|
||||
|
||||
/*
|
||||
* Look for the description field...
|
||||
*/
|
||||
|
||||
if ((attr = strstr(device_id, "DES:")) != NULL)
|
||||
attr += 4;
|
||||
else if ((attr = strstr(device_id, "DESCRIPTION:")) != NULL)
|
||||
attr += 12;
|
||||
|
||||
if (attr)
|
||||
{
|
||||
if (strncasecmp(attr, "Hewlett-Packard ", 16) == 0)
|
||||
{
|
||||
strlcpy(make_model, "HP ", mmsize);
|
||||
strlcpy(make_model + 3, attr + 16, mmsize - 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
strlcpy(make_model, attr, mmsize);
|
||||
}
|
||||
|
||||
if ((delim = strchr(make_model, ';')) != NULL)
|
||||
*delim = '\0';
|
||||
}
|
||||
else
|
||||
strlcpy(make_model, "Unknown", mmsize);
|
||||
|
||||
/*
|
||||
* Look for the serial number field...
|
||||
*/
|
||||
|
||||
if ((attr = strstr(device_id, "SERN:")) != NULL)
|
||||
attr += 5;
|
||||
else if ((attr = strstr(device_id, "SERIALNUMBER:")) != NULL)
|
||||
attr += 13;
|
||||
|
||||
if (attr)
|
||||
{
|
||||
strlcpy(serial_number, attr, sizeof(serial_number));
|
||||
|
||||
if ((delim = strchr(serial_number, ';')) != NULL)
|
||||
*delim = '\0';
|
||||
}
|
||||
else
|
||||
serial_number[0] = '\0';
|
||||
|
||||
/*
|
||||
* Generate the device URI from the make_model and serial number strings.
|
||||
*/
|
||||
|
||||
strlcpy(uri, "usb://", urisize);
|
||||
for (uriptr = uri + 6, delim = make_model;
|
||||
*delim && uriptr < (uri + urisize - 1);
|
||||
delim ++)
|
||||
if (*delim == ' ')
|
||||
{
|
||||
delim ++;
|
||||
*uriptr++ = '/';
|
||||
break;
|
||||
}
|
||||
else
|
||||
*uriptr++ = *delim;
|
||||
|
||||
for (; *delim && uriptr < (uri + urisize - 3); delim ++)
|
||||
if (*delim == ' ')
|
||||
{
|
||||
*uriptr++ = '%';
|
||||
*uriptr++ = '2';
|
||||
*uriptr++ = '0';
|
||||
}
|
||||
else
|
||||
*uriptr++ = *delim;
|
||||
|
||||
*uriptr = '\0';
|
||||
|
||||
if (serial_number[0])
|
||||
{
|
||||
/*
|
||||
* Add the serial number to the URI...
|
||||
*/
|
||||
|
||||
strlcat(uri, "?serial=", urisize);
|
||||
strlcat(uri, serial_number, urisize);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'list_devices()' - List all USB devices.
|
||||
*/
|
||||
@@ -260,134 +426,331 @@ list_devices(void)
|
||||
{
|
||||
#ifdef __linux
|
||||
int i; /* Looping var */
|
||||
int length; /* Length of device ID info */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
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 */
|
||||
char format[255], /* Format for device filename */
|
||||
device[255], /* Device filename */
|
||||
device_id[1024], /* Device ID string */
|
||||
device_uri[1024], /* Device URI string */
|
||||
make_model[1024]; /* Make and model */
|
||||
|
||||
|
||||
/*
|
||||
* First try opening one of the USB devices to load the driver
|
||||
* module as needed...
|
||||
* First figure out which USB printer filename to use...
|
||||
*/
|
||||
|
||||
if ((fd = open("/dev/usb/lp0", O_WRONLY)) >= 0)
|
||||
close(fd); /* 2.3.x and 2.4.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));
|
||||
memset(model, 0, sizeof(model));
|
||||
|
||||
while (fgets(line, sizeof(line), probe) != NULL)
|
||||
{
|
||||
/*
|
||||
* Strip trailing newline.
|
||||
*/
|
||||
|
||||
if ((delim = strrchr(line, '\n')) != NULL)
|
||||
*delim = '\0';
|
||||
|
||||
/*
|
||||
* See if it is a printer device ("P: ...")
|
||||
*/
|
||||
|
||||
if (strncmp(line, "S:", 2) == 0)
|
||||
{
|
||||
/*
|
||||
* String attribute...
|
||||
*/
|
||||
|
||||
if (strncmp(line, "S: Manufacturer=", 17) == 0)
|
||||
{
|
||||
strncpy(make, line + 17, sizeof(make) - 1);
|
||||
if (strcmp(make, "Hewlett-Packard") == 0)
|
||||
strcpy(make, "HP");
|
||||
}
|
||||
else if (strncmp(line, "S: Product=", 12) == 0)
|
||||
strncpy(model, line + 12, sizeof(model) - 1);
|
||||
}
|
||||
else if (strncmp(line, "I:", 2) == 0 &&
|
||||
(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);
|
||||
|
||||
i ++;
|
||||
|
||||
memset(make, 0, sizeof(make));
|
||||
memset(model, 0, sizeof(model));
|
||||
}
|
||||
}
|
||||
|
||||
fclose(probe);
|
||||
}
|
||||
if (access("/dev/usb/lp0", 0) == 0)
|
||||
strcpy(format, "/dev/usb/lp%d");
|
||||
else if (access("/dev/usb/usblp0", 0) == 0)
|
||||
strcpy(format, "/dev/usb/usblp%d");
|
||||
else
|
||||
strcpy(format, "/dev/usblp%d");
|
||||
|
||||
/*
|
||||
* Then open each USB device...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 16; i ++)
|
||||
{
|
||||
/*
|
||||
* Just probe manually for USB devices...
|
||||
*/
|
||||
sprintf(device, format, i);
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
sprintf(device, "/dev/usb/lp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
if (ioctl(fd, LPIOC_GET_DEVICE_ID(sizeof(device_id)), device_id) == 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
}
|
||||
length = (((unsigned)device_id[0] & 255) << 8) +
|
||||
((unsigned)device_id[1] & 255);
|
||||
|
||||
sprintf(device, "/dev/usblp%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
/*
|
||||
* Check to see if the length is larger than our buffer; first
|
||||
* assume that the vendor incorrectly implemented the 1284 spec,
|
||||
* and then limit the length to the size of our buffer...
|
||||
*/
|
||||
|
||||
if (length > (sizeof(device_id) - 2))
|
||||
length = (((unsigned)device_id[1] & 255) << 8) +
|
||||
((unsigned)device_id[0] & 255);
|
||||
|
||||
if (length > (sizeof(device_id) - 2))
|
||||
length = sizeof(device_id) - 2;
|
||||
|
||||
memcpy(device_id, device_id + 2, length);
|
||||
device_id[length] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
close(fd);
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
if (device_id[0])
|
||||
{
|
||||
decode_device_id(i, device_id, make_model, sizeof(make_model),
|
||||
device_uri, sizeof(device_uri));
|
||||
|
||||
printf("direct %s \"%s\" \"USB Printer #%d\"\n", device_uri,
|
||||
make_model, i + 1);
|
||||
}
|
||||
else
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
}
|
||||
#elif defined(__sgi)
|
||||
#elif defined(__sun)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255], /* Device filename */
|
||||
device_id[1024], /* Device ID string */
|
||||
device_uri[1024], /* Device URI string */
|
||||
make_model[1024]; /* Make and model */
|
||||
# ifdef ECPPIOC_GETDEVID
|
||||
struct ecpp_device_id did; /* Device ID buffer */
|
||||
# endif /* ECPPIOC_GETDEVID */
|
||||
|
||||
|
||||
/*
|
||||
* Open each USB device...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/usb/printer%d", i);
|
||||
|
||||
# ifndef ECPPIOC_GETDEVID
|
||||
if (!access(device, 0))
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
# else
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
did.mode = ECPP_CENTRONICS;
|
||||
did.len = sizeof(device_id);
|
||||
did.rlen = 0;
|
||||
did.addr = device_id;
|
||||
|
||||
if (ioctl(fd, ECPPIOC_GETDEVID, &did) == 0)
|
||||
{
|
||||
if (did.rlen < (sizeof(device_id) - 1))
|
||||
device_id[did.rlen] = '\0';
|
||||
else
|
||||
device_id[sizeof(device_id) - 1] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
close(fd);
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
if (device_id[0])
|
||||
{
|
||||
decode_device_id(i, device_id, make_model, sizeof(make_model),
|
||||
device_uri, sizeof(device_uri));
|
||||
|
||||
printf("direct %s \"%s\" \"USB Printer #%d\"\n", device_uri,
|
||||
make_model, i + 1);
|
||||
}
|
||||
else
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
# endif /* !ECPPIOC_GETDEVID */
|
||||
}
|
||||
#elif defined(__hpux)
|
||||
#elif defined(__osf)
|
||||
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
|
||||
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255]; /* Device filename */
|
||||
|
||||
for (i = 0; i < 3; i ++)
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/ulpt%d", i);
|
||||
if ((fd = open(device, O_WRONLY)) >= 0)
|
||||
{
|
||||
close(fd);
|
||||
printf("direct usb:%s \"Unknown\" \"USB Port #%d\"\n", device, i + 1);
|
||||
}
|
||||
if (!access(device, 0))
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
|
||||
|
||||
sprintf(device, "/dev/unlpt%d", i);
|
||||
if (!access(device, 0))
|
||||
printf("direct usb:%s \"Unknown\" \"USB Printer #%d (no reset)\"\n", device, i + 1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'open_device()' - Open a USB device...
|
||||
*/
|
||||
|
||||
int /* O - File descriptor or -1 on error */
|
||||
open_device(const char *uri) /* I - Device URI */
|
||||
{
|
||||
/*
|
||||
* The generic implementation just treats the URI as a device filename...
|
||||
* Specific operating systems may also support using the device serial
|
||||
* number and/or make/model.
|
||||
*/
|
||||
|
||||
if (strncmp(uri, "usb:/dev/", 9) == 0)
|
||||
return (open(uri + 4, O_RDWR | O_EXCL));
|
||||
#ifdef __linux
|
||||
else if (strncmp(uri, "usb://", 6) == 0)
|
||||
{
|
||||
/*
|
||||
* For Linux, try looking up the device serial number or model...
|
||||
*/
|
||||
|
||||
int i; /* Looping var */
|
||||
int length; /* Length of device ID info */
|
||||
int fd; /* File descriptor */
|
||||
char format[255], /* Format for device filename */
|
||||
device[255], /* Device filename */
|
||||
device_id[1024], /* Device ID string */
|
||||
make_model[1024], /* Make and model */
|
||||
device_uri[1024]; /* Device URI string */
|
||||
|
||||
|
||||
/*
|
||||
* First figure out which USB printer filename to use...
|
||||
*/
|
||||
|
||||
if (access("/dev/usb/lp0", 0) == 0)
|
||||
strcpy(format, "/dev/usb/lp%d");
|
||||
else if (access("/dev/usb/usblp0", 0) == 0)
|
||||
strcpy(format, "/dev/usb/usblp%d");
|
||||
else
|
||||
strcpy(format, "/dev/usblp%d");
|
||||
|
||||
/*
|
||||
* Then find the correct USB device...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 16; i ++)
|
||||
{
|
||||
sprintf(device, format, i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
if (ioctl(fd, LPIOC_GET_DEVICE_ID(sizeof(device_id)), device_id) == 0)
|
||||
{
|
||||
length = (((unsigned)device_id[0] & 255) << 8) +
|
||||
((unsigned)device_id[1] & 255);
|
||||
memcpy(device_id, device_id + 2, length);
|
||||
device_id[length] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
if (device_id[0])
|
||||
{
|
||||
/*
|
||||
* Got the device ID - is this the one?
|
||||
*/
|
||||
|
||||
decode_device_id(i, device_id, make_model, sizeof(make_model),
|
||||
device_uri, sizeof(device_uri));
|
||||
|
||||
if (strcmp(uri, device_uri) == 0)
|
||||
return (fd); /* Yes, return this file descriptor... */
|
||||
}
|
||||
|
||||
/*
|
||||
* This wasn't the one...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Couldn't find the printer, return "no such device or address"...
|
||||
*/
|
||||
|
||||
errno = ENODEV;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
#elif defined(__sun) && defined(ECPPIOC_GETDEVID)
|
||||
else if (strncmp(uri, "usb://", 6) == 0)
|
||||
{
|
||||
/*
|
||||
* For Solaris, try looking up the device serial number or model...
|
||||
*/
|
||||
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
char device[255], /* Device filename */
|
||||
device_id[1024], /* Device ID string */
|
||||
make_model[1024], /* Make and model */
|
||||
device_uri[1024]; /* Device URI string */
|
||||
struct ecpp_device_id did; /* Device ID buffer */
|
||||
|
||||
|
||||
/*
|
||||
* Find the correct USB device...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 8; i ++)
|
||||
{
|
||||
sprintf(device, "/dev/usb/printer%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
did.mode = ECPP_CENTRONICS;
|
||||
did.len = sizeof(device_id);
|
||||
did.rlen = 0;
|
||||
did.addr = device_id;
|
||||
|
||||
if (ioctl(fd, ECPPIOC_GETDEVID, &did) == 0)
|
||||
{
|
||||
if (did.rlen < (sizeof(device_id) - 1))
|
||||
device_id[did.rlen] = '\0';
|
||||
else
|
||||
device_id[sizeof(device_id) - 1] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
}
|
||||
else
|
||||
device_id[0] = '\0';
|
||||
|
||||
if (device_id[0])
|
||||
{
|
||||
/*
|
||||
* Got the device ID - is this the one?
|
||||
*/
|
||||
|
||||
decode_device_id(i, device_id, make_model, sizeof(make_model),
|
||||
device_uri, sizeof(device_uri));
|
||||
|
||||
if (strcmp(uri, device_uri) == 0)
|
||||
return (fd); /* Yes, return this file descriptor... */
|
||||
}
|
||||
|
||||
/*
|
||||
* This wasn't the one...
|
||||
*/
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Couldn't find the printer, return "no such device or address"...
|
||||
*/
|
||||
|
||||
errno = ENODEV;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
#endif /* __linux */
|
||||
else
|
||||
{
|
||||
errno = ENODEV;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
lpc
|
||||
lpq
|
||||
lpr
|
||||
lprm
|
||||
@@ -0,0 +1,12 @@
|
||||
# DO NOT DELETE
|
||||
|
||||
lpc.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
lpc.o: ../cups/ppd.h ../cups/language.h ../cups/debug.h ../cups/string.h
|
||||
lpc.o: ../config.h
|
||||
lpq.o: ../cups/string.h ../config.h ../cups/cups.h ../cups/ipp.h
|
||||
lpq.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/language.h
|
||||
lpq.o: ../cups/debug.h
|
||||
lpr.o: ../cups/string.h ../config.h ../cups/cups.h ../cups/ipp.h
|
||||
lpr.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h
|
||||
lprm.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
lprm.o: ../cups/ppd.h ../cups/language.h ../cups/string.h ../config.h
|
||||
+21
-14
@@ -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-2003 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
|
||||
@@ -43,16 +43,24 @@ clean:
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
|
||||
|
||||
#
|
||||
# Update dependencies (without system header dependencies...)
|
||||
#
|
||||
|
||||
depend:
|
||||
makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
|
||||
|
||||
|
||||
#
|
||||
# Install all targets...
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(BINDIR)
|
||||
$(CHMOD) ugo+rx $(BINDIR)
|
||||
$(INSTALL_BIN) lpq lpr lprm $(BINDIR)
|
||||
-$(MKDIR) $(SBINDIR)
|
||||
$(CHMOD) ugo+rx $(SBINDIR)
|
||||
install: all
|
||||
$(INSTALL_DIR) $(BINDIR)
|
||||
$(INSTALL_BIN) lpq $(BINDIR)
|
||||
$(INSTALL_BIN) lpr $(BINDIR)
|
||||
$(INSTALL_BIN) lprm $(BINDIR)
|
||||
$(INSTALL_DIR) $(SBINDIR)
|
||||
$(INSTALL_BIN) lpc $(SBINDIR)
|
||||
|
||||
|
||||
@@ -64,8 +72,6 @@ lpc: lpc.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o lpc lpc.o $(LIBS)
|
||||
|
||||
lpc.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# lpq
|
||||
@@ -75,8 +81,6 @@ lpq: lpq.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o lpq lpq.o $(LIBS)
|
||||
|
||||
lpq.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# lpr
|
||||
@@ -86,8 +90,6 @@ lpr: lpr.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o lpr lpr.o $(LIBS)
|
||||
|
||||
lpr.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# lprm
|
||||
@@ -97,7 +99,12 @@ lprm: lprm.o ../cups/$(LIBCUPS)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o lprm lprm.o $(LIBS)
|
||||
|
||||
lprm.o: ../cups/cups.h ../Makedefs
|
||||
|
||||
#
|
||||
# Dependencies...
|
||||
#
|
||||
|
||||
include Dependencies
|
||||
|
||||
|
||||
#
|
||||
|
||||
+28
-12
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpc" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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 <cups/cups.h>
|
||||
#include <cups/language.h>
|
||||
#include <cups/debug.h>
|
||||
#include <cups/string.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -69,7 +70,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 +179,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 +217,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 +230,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 +259,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 +425,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);
|
||||
|
||||
+76
-16
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpq" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -26,6 +26,7 @@
|
||||
* main() - Parse options and commands.
|
||||
* show_jobs() - Show jobs.
|
||||
* show_printer() - Show printer status.
|
||||
* usage() - Show program usage.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -38,7 +39,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <cups/string.h>
|
||||
#include <cups/cups.h>
|
||||
#include <cups/language.h>
|
||||
#include <cups/debug.h>
|
||||
@@ -51,6 +52,7 @@
|
||||
static int show_jobs(http_t *, const char *, const char *, const int,
|
||||
const int);
|
||||
static void show_printer(http_t *, const char *);
|
||||
static void usage(void);
|
||||
|
||||
|
||||
/*
|
||||
@@ -65,18 +67,27 @@ 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 */
|
||||
#ifdef HAVE_SSL
|
||||
http_encryption_t encryption; /* Encryption? */
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
|
||||
/*
|
||||
* 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...
|
||||
@@ -101,14 +112,53 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
switch (argv[i][1])
|
||||
{
|
||||
case 'E' : /* Encrypt */
|
||||
#ifdef HAVE_SSL
|
||||
encryption = HTTP_ENCRYPT_REQUIRED;
|
||||
|
||||
if (http)
|
||||
httpEncryption(http, encryption);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_SSL */
|
||||
break;
|
||||
|
||||
case 'P' : /* Printer */
|
||||
if (argv[i][2])
|
||||
dest = argv[i] + 2;
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
|
||||
if (i >= argc)
|
||||
{
|
||||
httpClose(http);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
|
||||
usage();
|
||||
}
|
||||
|
||||
dest = argv[i];
|
||||
}
|
||||
|
||||
if ((instance = strchr(dest, '/')) != NULL)
|
||||
*instance++ = '\0';
|
||||
|
||||
if (cupsGetDest(dest, instance, num_dests, dests) == NULL)
|
||||
{
|
||||
if (instance)
|
||||
fprintf(stderr, "lpq: Unknown destination \"%s/%s\"!\n",
|
||||
dest, instance);
|
||||
else
|
||||
fprintf(stderr, "lpq: Unknown destination \"%s\"!\n", dest);
|
||||
|
||||
return (1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a' : /* All printers */
|
||||
dest = NULL;
|
||||
break;
|
||||
|
||||
case 'l' : /* Long status */
|
||||
@@ -116,10 +166,11 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
break;
|
||||
|
||||
default :
|
||||
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
|
||||
httpClose(http);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
return (1);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
|
||||
usage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (isdigit(argv[i][0]))
|
||||
@@ -361,7 +412,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 ++;
|
||||
@@ -374,7 +425,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 ++;
|
||||
}
|
||||
|
||||
@@ -386,20 +437,17 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
snprintf(namestr, sizeof(namestr), "%d copies of %s", jobcopies,
|
||||
jobname);
|
||||
else
|
||||
{
|
||||
strncpy(namestr, jobname, sizeof(namestr) - 1);
|
||||
namestr[sizeof(namestr) - 1] = '\0';
|
||||
}
|
||||
strlcpy(namestr, jobname, sizeof(namestr));
|
||||
|
||||
printf("%s: %-31s [job %d localhost]\n", jobuser, rankstr, jobid);
|
||||
printf(" %-31.31s %d bytes\n", namestr, jobsize);
|
||||
printf("%s: %-33.33s [job %d localhost]\n", jobuser, rankstr, jobid);
|
||||
printf(" %-39.39s %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 %-7.7s %-7d %-31.31s %d bytes\n", rankstr, jobuser,
|
||||
jobid, jobname, jobsize);
|
||||
#endif /* __osf */
|
||||
|
||||
@@ -464,7 +512,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);
|
||||
|
||||
@@ -508,6 +556,18 @@ show_printer(http_t *http, /* I - HTTP connection to server */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'usage()' - Show program usage.
|
||||
*/
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+112
-34
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpr" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -33,10 +33,14 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <cups/string.h>
|
||||
#include <cups/cups.h>
|
||||
|
||||
|
||||
#ifndef WIN32
|
||||
# include <unistd.h>
|
||||
# include <signal.h>
|
||||
|
||||
|
||||
@@ -65,6 +69,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 +83,11 @@ 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 */
|
||||
struct sigaction oldaction; /* Old signal action */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
deletefile = 0;
|
||||
@@ -95,12 +101,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_SSL
|
||||
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_SSL */
|
||||
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 +137,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,6 +146,12 @@ 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;
|
||||
@@ -141,6 +175,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;
|
||||
@@ -151,6 +190,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];
|
||||
}
|
||||
|
||||
@@ -176,13 +221,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
i ++;
|
||||
num_copies = atoi(argv[i]);
|
||||
}
|
||||
if (i >= argc)
|
||||
{
|
||||
fputs("lpr: Expected copy count after -# option!\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (num_copies < 1 || num_copies > 100)
|
||||
{
|
||||
fputs("lpr: Number copies must be between 1 and 100.\n", stderr);
|
||||
return (1);
|
||||
num_copies = atoi(argv[i]);
|
||||
}
|
||||
|
||||
sprintf(buffer, "%d", num_copies);
|
||||
@@ -197,10 +242,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);
|
||||
@@ -211,6 +278,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Print a file...
|
||||
*/
|
||||
|
||||
if (access(argv[i], R_OK) != 0)
|
||||
{
|
||||
fprintf(stderr, "lpr: Unable to access \"%s\" - %s\n", argv[i],
|
||||
strerror(errno));
|
||||
return (1);
|
||||
}
|
||||
|
||||
files[num_files] = argv[i];
|
||||
num_files ++;
|
||||
|
||||
@@ -233,23 +307,25 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (num_dests == 0)
|
||||
num_dests = cupsGetDests(&dests);
|
||||
|
||||
for (j = 0, dest = dests; j < num_dests; j ++, dest ++)
|
||||
if (dest->is_default)
|
||||
{
|
||||
printer = dests[j].name;
|
||||
if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL)
|
||||
{
|
||||
printer = dest->name;
|
||||
|
||||
for (j = 0; j < dest->num_options; j ++)
|
||||
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;
|
||||
}
|
||||
for (j = 0; j < dest->num_options; j ++)
|
||||
if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
|
||||
num_options = cupsAddOption(dest->options[j].name,
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
}
|
||||
}
|
||||
|
||||
if (printer == NULL)
|
||||
{
|
||||
fputs("lpr: error - no default destination available.\n", stderr);
|
||||
if (cupsLastError() >= IPP_BAD_REQUEST)
|
||||
fputs("lpr: error - scheduler not responding!\n", stderr);
|
||||
else
|
||||
fputs("lpr: error - no default destination available.\n", stderr);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -274,35 +350,37 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
#ifndef WIN32
|
||||
# if defined(HAVE_SIGSET)
|
||||
sigset(SIGHUP, sighandler);
|
||||
sigset(SIGINT, sighandler);
|
||||
if (sigset(SIGINT, sighandler) == SIG_IGN)
|
||||
sigset(SIGINT, SIG_IGN);
|
||||
sigset(SIGTERM, sighandler);
|
||||
# elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_handler = sighandler;
|
||||
|
||||
sigaction(SIGHUP, &action, NULL);
|
||||
sigaction(SIGINT, &action, NULL);
|
||||
sigaction(SIGINT, NULL, &oldaction);
|
||||
if (oldaction.sa_handler != SIG_IGN)
|
||||
sigaction(SIGINT, &action, NULL);
|
||||
sigaction(SIGTERM, &action, NULL);
|
||||
# else
|
||||
signal(SIGHUP, sighandler);
|
||||
signal(SIGINT, sighandler);
|
||||
if (signal(SIGINT, sighandler) == SIG_IGN)
|
||||
signal(SIGINT, SIG_IGN);
|
||||
signal(SIGTERM, sighandler);
|
||||
# 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)
|
||||
{
|
||||
|
||||
+45
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lprm" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -32,10 +32,10 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <cups/cups.h>
|
||||
#include <cups/language.h>
|
||||
#include <cups/string.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ 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 */
|
||||
@@ -57,17 +58,19 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
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 = NULL;
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
op = IPP_CANCEL_JOB;
|
||||
job_id = 0;
|
||||
dest = NULL;
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
encryption = cupsEncryption();
|
||||
|
||||
num_dests = cupsGetDests(&dests);
|
||||
|
||||
@@ -79,7 +82,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* 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);
|
||||
@@ -94,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_SSL
|
||||
encryption = HTTP_ENCRYPT_REQUIRED;
|
||||
|
||||
httpEncryption(http, encryption);
|
||||
#else
|
||||
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
|
||||
argv[0]);
|
||||
#endif /* HAVE_SSL */
|
||||
break;
|
||||
|
||||
case 'P' : /* Cancel jobs on a printer */
|
||||
if (argv[i][2])
|
||||
dest = argv[i] + 2;
|
||||
@@ -102,6 +116,17 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
i ++;
|
||||
dest = argv[i];
|
||||
}
|
||||
|
||||
if ((instance = strchr(dest, '/')) != NULL)
|
||||
*instance = '\0';
|
||||
|
||||
if (cupsGetDest(dest, NULL, num_dests, dests) == NULL)
|
||||
{
|
||||
fprintf(stderr, "lprm: Unknown destination \"%s\"!\n", dest);
|
||||
cupsFreeDests(num_dests, dests);
|
||||
httpClose(http);
|
||||
return(1);
|
||||
}
|
||||
break;
|
||||
|
||||
default :
|
||||
@@ -116,7 +141,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Cancel a job or printer...
|
||||
*/
|
||||
|
||||
if (isdigit(argv[i][0]))
|
||||
if (isdigit(argv[i][0]) && cupsGetDest(argv[i], NULL, num_dests, dests) == NULL)
|
||||
{
|
||||
dest = NULL;
|
||||
op = IPP_CANCEL_JOB;
|
||||
@@ -131,7 +156,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
|
||||
@@ -202,6 +230,14 @@ 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
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
admin.cgi
|
||||
classes.cgi
|
||||
jobs.cgi
|
||||
libcgi.a
|
||||
printers.cgi
|
||||
@@ -0,0 +1,20 @@
|
||||
# DO NOT DELETE
|
||||
|
||||
html.o: cgi.h ../cups/string.h ../config.h
|
||||
ipp-var.o: ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
ipp-var.o: ../cups/md5.h ../cups/ppd.h ../cups/debug.h ../cups/language.h
|
||||
ipp-var.o: ../cups/string.h ../config.h cgi.h
|
||||
template.o: cgi.h ../cups/string.h ../config.h
|
||||
var.o: cgi.h ../cups/string.h ../config.h
|
||||
admin.o: ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
admin.o: ../cups/ppd.h ../cups/debug.h ../cups/language.h ../cups/string.h
|
||||
admin.o: ../config.h cgi.h
|
||||
classes.o: ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
classes.o: ../cups/md5.h ../cups/ppd.h ../cups/debug.h ../cups/language.h
|
||||
classes.o: ../cups/string.h ../config.h cgi.h
|
||||
jobs.o: ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
jobs.o: ../cups/ppd.h ../cups/debug.h ../cups/language.h ../cups/string.h
|
||||
jobs.o: ../config.h cgi.h
|
||||
printers.o: ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
printers.o: ../cups/md5.h ../cups/ppd.h ../cups/debug.h ../cups/language.h
|
||||
printers.o: ../cups/string.h ../config.h cgi.h
|
||||
+24
-20
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# CGI makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-1999 by Easy Software Products.
|
||||
# Copyright 1997-2003 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,18 +42,26 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) libcgi.a $(TARGETS)
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
|
||||
|
||||
#
|
||||
# Update dependencies (without system header dependencies...)
|
||||
#
|
||||
|
||||
depend:
|
||||
makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
|
||||
|
||||
|
||||
#
|
||||
# Install all targets...
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERBIN)/cgi-bin
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)
|
||||
$(CHMOD) ugo+rx $(SERVERBIN)/cgi-bin
|
||||
$(INSTALL_BIN) $(TARGETS) $(SERVERBIN)/cgi-bin
|
||||
install: all
|
||||
$(INSTALL_DIR) $(SERVERBIN)/cgi-bin
|
||||
for file in $(CGIS); do \
|
||||
$(INSTALL_BIN) $$file $(SERVERBIN)/cgi-bin; \
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
@@ -65,9 +74,6 @@ libcgi.a: $(LIBOBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
$(LIBOBJS): cgi.h
|
||||
ipp-var.o: ipp-var.h
|
||||
|
||||
|
||||
#
|
||||
# admin.cgi
|
||||
@@ -77,8 +83,6 @@ admin.cgi: admin.o ../Makedefs ../cups/$(LIBCUPS) libcgi.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ admin.o libcgi.a $(LIBS)
|
||||
|
||||
admin.o: cgi.h ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/language.h
|
||||
|
||||
|
||||
#
|
||||
# classes.cgi
|
||||
@@ -88,8 +92,6 @@ classes.cgi: classes.o ../Makedefs ../cups/$(LIBCUPS) libcgi.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ classes.o libcgi.a $(LIBS)
|
||||
|
||||
classes.o: cgi.h ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/language.h
|
||||
|
||||
|
||||
#
|
||||
# jobs.cgi
|
||||
@@ -99,8 +101,6 @@ jobs.cgi: jobs.o ../Makedefs ../cups/$(LIBCUPS) libcgi.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ jobs.o libcgi.a $(LIBS)
|
||||
|
||||
jobs.o: cgi.h ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/language.h
|
||||
|
||||
|
||||
#
|
||||
# printers.cgi
|
||||
@@ -110,9 +110,13 @@ printers.cgi: printers.o ../Makedefs ../cups/$(LIBCUPS) libcgi.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ printers.o libcgi.a $(LIBS)
|
||||
|
||||
printers.o: cgi.h ipp-var.h ../cups/cups.h ../cups/ipp.h ../cups/language.h
|
||||
|
||||
$(OBJS): ../Makedefs
|
||||
#
|
||||
# Dependencies...
|
||||
#
|
||||
|
||||
include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
|
||||
+290
-191
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Administration CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -29,7 +29,6 @@
|
||||
* do_config_printer() - Configure the default options for a printer.
|
||||
* do_delete_class() - Delete a class...
|
||||
* do_delete_printer() - Delete a printer...
|
||||
* do_job_op() - Do a job operation.
|
||||
* do_printer_op() - Do a printer operation.
|
||||
* get_line() - Get a line that is terminated by a LF, CR, or CR LF.
|
||||
*/
|
||||
@@ -40,6 +39,7 @@
|
||||
|
||||
#include "ipp-var.h"
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -51,7 +51,6 @@ static void do_am_printer(http_t *http, cups_lang_t *language, int modify);
|
||||
static void do_config_printer(http_t *http, cups_lang_t *language);
|
||||
static void do_delete_class(http_t *http, cups_lang_t *language);
|
||||
static void do_delete_printer(http_t *http, cups_lang_t *language);
|
||||
static void do_job_op(http_t *http, cups_lang_t *language, ipp_op_t op);
|
||||
static void do_printer_op(http_t *http, cups_lang_t *language, ipp_op_t op);
|
||||
static char *get_line(char *buf, int length, FILE *fp);
|
||||
|
||||
@@ -104,21 +103,13 @@ 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...
|
||||
*/
|
||||
|
||||
if (strcmp(op, "cancel-job") == 0)
|
||||
do_job_op(http, language, IPP_CANCEL_JOB);
|
||||
else if (strcmp(op, "hold-job") == 0)
|
||||
do_job_op(http, language, IPP_HOLD_JOB);
|
||||
else if (strcmp(op, "release-job") == 0)
|
||||
do_job_op(http, language, IPP_RELEASE_JOB);
|
||||
else if (strcmp(op, "restart-job") == 0)
|
||||
do_job_op(http, language, IPP_RESTART_JOB);
|
||||
else if (strcmp(op, "start-printer") == 0)
|
||||
if (strcmp(op, "start-printer") == 0)
|
||||
do_printer_op(http, language, IPP_RESUME_PRINTER);
|
||||
else if (strcmp(op, "stop-printer") == 0)
|
||||
do_printer_op(http, language, IPP_PAUSE_PRINTER);
|
||||
@@ -126,6 +117,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
do_printer_op(http, language, CUPS_ACCEPT_JOBS);
|
||||
else if (strcmp(op, "reject-jobs") == 0)
|
||||
do_printer_op(http, language, CUPS_REJECT_JOBS);
|
||||
else if (strcmp(op, "purge-jobs") == 0)
|
||||
do_printer_op(http, language, IPP_PURGE_JOBS);
|
||||
else if (strcmp(op, "add-class") == 0)
|
||||
do_am_class(http, language, 0);
|
||||
else if (strcmp(op, "add-printer") == 0)
|
||||
@@ -240,7 +233,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
@@ -263,17 +256,14 @@ do_am_class(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
name = cgiGetVariable("PRINTER_NAME");
|
||||
if (isdigit(*name))
|
||||
ptr = name;
|
||||
else
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/')
|
||||
break;
|
||||
|
||||
if (*ptr || ptr == name)
|
||||
if (*ptr || ptr == name || strlen(name) > 127)
|
||||
{
|
||||
cgiSetVariable("ERROR", "The class name may only contain letters, "
|
||||
"numbers, and the underscore.");
|
||||
cgiSetVariable("ERROR", "The class name may only contain up to 127 printable "
|
||||
"characters.");
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
return;
|
||||
}
|
||||
@@ -457,7 +447,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_NOT_AUTHORIZED;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -486,13 +476,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 */
|
||||
@@ -510,49 +502,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, NULL, 0);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "modify-printer.tmpl", getenv("LANG"));
|
||||
}
|
||||
else
|
||||
@@ -564,21 +561,20 @@ 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");
|
||||
if (isdigit(*name))
|
||||
ptr = name;
|
||||
else
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if (!isalnum(*ptr) && *ptr != '_')
|
||||
break;
|
||||
for (ptr = name; *ptr; ptr ++)
|
||||
if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/')
|
||||
break;
|
||||
|
||||
if (*ptr || ptr == name)
|
||||
if (*ptr || ptr == name || strlen(name) > 127)
|
||||
{
|
||||
cgiSetVariable("ERROR", "The printer name may only contain letters, "
|
||||
"numbers, and the underscore.");
|
||||
cgiSetVariable("ERROR", "The printer name may only contain up to 127 printable "
|
||||
"characters.");
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
return;
|
||||
}
|
||||
@@ -614,7 +610,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
@@ -622,10 +618,31 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
* Let the user choose...
|
||||
*/
|
||||
|
||||
if (oldinfo &&
|
||||
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
|
||||
{
|
||||
strlcpy(uri, attr->values[0].string.text, sizeof(uri));
|
||||
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...
|
||||
*/
|
||||
@@ -657,6 +674,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:
|
||||
@@ -714,14 +774,25 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
* Let the user choose a model...
|
||||
*/
|
||||
|
||||
ippSetCGIVars(response, "ppd-make", var);
|
||||
strlcpy(make, var, sizeof(make));
|
||||
|
||||
ippSetCGIVars(response, "ppd-make", make, NULL, 0);
|
||||
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
|
||||
{
|
||||
@@ -765,7 +836,7 @@ 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"));
|
||||
strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
|
||||
if (strncmp(uri, "serial:", 7) == 0)
|
||||
{
|
||||
/*
|
||||
@@ -775,9 +846,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",
|
||||
@@ -798,7 +870,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_NOT_AUTHORIZED;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -810,6 +882,9 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
else
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-added.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
if (oldinfo)
|
||||
ippDelete(oldinfo);
|
||||
}
|
||||
|
||||
|
||||
@@ -834,12 +909,14 @@ 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... */
|
||||
ppd_file_t *ppd; /* PPD file */
|
||||
ppd_group_t *group; /* Option group */
|
||||
ppd_option_t *option; /* Option */
|
||||
ppd_attr_t *protocol; /* cupsProtocol attribute */
|
||||
|
||||
|
||||
/*
|
||||
@@ -859,10 +936,28 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
* Get the PPD file...
|
||||
*/
|
||||
|
||||
cupsSetServer("localhost");
|
||||
|
||||
if ((filename = cupsGetPPD(printer)) == NULL)
|
||||
{
|
||||
cgiSetVariable("ERROR", ippErrorString(IPP_NOT_FOUND));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
if (cupsLastError() == IPP_NOT_FOUND)
|
||||
{
|
||||
/*
|
||||
* No PPD file for this printer, so we can't configure it!
|
||||
*/
|
||||
|
||||
cgiSetVariable("ERROR", ippErrorString(IPP_NOT_POSSIBLE));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Unable to access the PPD file for some reason...
|
||||
*/
|
||||
|
||||
cgiSetVariable("ERROR", ippErrorString(cupsLastError()));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -874,19 +969,34 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
else
|
||||
have_options = 0;
|
||||
|
||||
for (i = ppd->num_groups, group = ppd->groups;
|
||||
i > 0 && !have_options;
|
||||
i --, group ++)
|
||||
for (j = group->num_options, option = group->options;
|
||||
j > 0;
|
||||
j --, option ++)
|
||||
ppdMarkDefaults(ppd);
|
||||
|
||||
DEBUG_printf(("<P>ppd->num_groups = %d\n"
|
||||
"<UL>\n", ppd->num_groups));
|
||||
|
||||
for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++)
|
||||
{
|
||||
DEBUG_printf(("<LI>%s<UL>\n", group->text));
|
||||
|
||||
for (j = group->num_options, option = group->options; j > 0; j --, option ++)
|
||||
if ((var = cgiGetVariable(option->keyword)) != NULL)
|
||||
{
|
||||
DEBUG_printf(("<LI>%s = \"%s\"</LI>\n", option->keyword, var));
|
||||
have_options = 1;
|
||||
break;
|
||||
ppdMarkOption(ppd, option->keyword, var);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
else
|
||||
printf("<LI>%s not defined!</LI>\n", option->keyword);
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (!have_options)
|
||||
DEBUG_puts("</UL></LI>");
|
||||
}
|
||||
|
||||
DEBUG_printf(("</UL>\n"
|
||||
"<P>ppdConflicts(ppd) = %d\n", ppdConflicts(ppd)));
|
||||
|
||||
if (!have_options || ppdConflicts(ppd))
|
||||
{
|
||||
/*
|
||||
* Show the options to the user...
|
||||
@@ -895,11 +1005,31 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "config-printer.tmpl",
|
||||
getenv("LANG"));
|
||||
|
||||
if (ppdConflicts(ppd))
|
||||
{
|
||||
for (i = ppd->num_groups, k = 0, group = ppd->groups; i > 0; i --, group ++)
|
||||
for (j = group->num_options, option = group->options; j > 0; j --, option ++)
|
||||
if (option->conflicted)
|
||||
{
|
||||
cgiSetArray("ckeyword", k, option->keyword);
|
||||
cgiSetArray("ckeytext", k, option->text);
|
||||
k ++;
|
||||
}
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "option-conflict.tmpl",
|
||||
getenv("LANG"));
|
||||
}
|
||||
|
||||
for (i = ppd->num_groups, group = ppd->groups;
|
||||
i > 0;
|
||||
i --, group ++)
|
||||
{
|
||||
cgiSetVariable("GROUP", group->text);
|
||||
if (strcmp(group->text, "InstallableOptions") == 0)
|
||||
cgiSetVariable("GROUP",
|
||||
cupsLangString(language, CUPS_MSG_OPTIONS_INSTALLED));
|
||||
else
|
||||
cgiSetVariable("GROUP", group->text);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "option-header.tmpl",
|
||||
getenv("LANG"));
|
||||
|
||||
@@ -912,7 +1042,11 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
|
||||
cgiSetVariable("KEYWORD", option->keyword);
|
||||
cgiSetVariable("KEYTEXT", option->text);
|
||||
cgiSetVariable("DEFCHOICE", option->defchoice);
|
||||
|
||||
if (option->conflicted)
|
||||
cgiSetVariable("CONFLICTED", "1");
|
||||
else
|
||||
cgiSetVariable("CONFLICTED", "0");
|
||||
|
||||
cgiSetSize("CHOICES", option->num_choices);
|
||||
cgiSetSize("TEXT", option->num_choices);
|
||||
@@ -920,6 +1054,9 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
{
|
||||
cgiSetArray("CHOICES", k, option->choices[k].choice);
|
||||
cgiSetArray("TEXT", k, option->choices[k].text);
|
||||
|
||||
if (option->choices[k].marked)
|
||||
cgiSetVariable("DEFCHOICE", option->choices[k].choice);
|
||||
}
|
||||
|
||||
switch (option->ui)
|
||||
@@ -1017,6 +1154,45 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
/*
|
||||
* Binary protocol support...
|
||||
*/
|
||||
|
||||
if (ppd->protocols && strstr(ppd->protocols, "BCP"))
|
||||
{
|
||||
protocol = ppdFindAttr(ppd, "cupsProtocol", NULL);
|
||||
|
||||
cgiSetVariable("GROUP", "PS Binary Protocol");
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "option-header.tmpl",
|
||||
getenv("LANG"));
|
||||
|
||||
cgiSetSize("CHOICES", 2);
|
||||
cgiSetSize("TEXT", 2);
|
||||
cgiSetArray("CHOICES", 0, "None");
|
||||
cgiSetArray("TEXT", 0, "None");
|
||||
|
||||
if (strstr(ppd->protocols, "TBCP"))
|
||||
{
|
||||
cgiSetArray("CHOICES", 1, "TBCP");
|
||||
cgiSetArray("TEXT", 1, "TBCP");
|
||||
}
|
||||
else
|
||||
{
|
||||
cgiSetArray("CHOICES", 1, "BCP");
|
||||
cgiSetArray("TEXT", 1, "BCP");
|
||||
}
|
||||
|
||||
cgiSetVariable("KEYWORD", "protocol");
|
||||
cgiSetVariable("KEYTEXT", "PS Binary Protocol");
|
||||
cgiSetVariable("DEFCHOICE", protocol ? protocol->value : "None");
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "option-pickone.tmpl",
|
||||
getenv("LANG"));
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "option-trailer.tmpl",
|
||||
getenv("LANG"));
|
||||
}
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "config-printer2.tmpl",
|
||||
getenv("LANG"));
|
||||
}
|
||||
@@ -1026,14 +1202,23 @@ 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)
|
||||
{
|
||||
if (strncmp(line, "*Default", 8) != 0)
|
||||
if (!strncmp(line, "*cupsProtocol:", 14) && cgiGetVariable("protocol"))
|
||||
continue;
|
||||
else if (strncmp(line, "*Default", 8))
|
||||
fprintf(out, "%s\n", line);
|
||||
else
|
||||
{
|
||||
@@ -1041,7 +1226,7 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
* Get default option name...
|
||||
*/
|
||||
|
||||
strcpy(keyword, line + 8);
|
||||
strlcpy(keyword, line + 8, sizeof(keyword));
|
||||
|
||||
for (keyptr = keyword; *keyptr; keyptr ++)
|
||||
if (*keyptr == ':' || isspace(*keyptr))
|
||||
@@ -1061,8 +1246,12 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
}
|
||||
|
||||
if ((var = cgiGetVariable("protocol")) != NULL)
|
||||
fprintf(out, "*cupsProtocol: %s\n", cgiGetVariable("protocol"));
|
||||
|
||||
fclose(in);
|
||||
fclose(out);
|
||||
close(outfd);
|
||||
|
||||
/*
|
||||
* Build a CUPS_ADD_PRINTER request, which requires the following
|
||||
@@ -1106,7 +1295,7 @@ do_config_printer(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_NOT_AUTHORIZED;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -1187,7 +1376,7 @@ do_delete_class(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -1263,7 +1452,7 @@ do_delete_printer(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -1275,98 +1464,6 @@ do_delete_printer(http_t *http, /* I - HTTP connection */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'do_job_op()' - Do a job operation.
|
||||
*/
|
||||
|
||||
static void
|
||||
do_job_op(http_t *http, /* I - HTTP connection */
|
||||
cups_lang_t *language, /* I - Client's language */
|
||||
ipp_op_t op) /* I - Operation to perform */
|
||||
{
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
char uri[HTTP_MAX_URI]; /* Job URI */
|
||||
const char *job; /* Job ID */
|
||||
const char *printer; /* Printer name (purge-jobs) */
|
||||
ipp_status_t status; /* Operation status... */
|
||||
|
||||
|
||||
if ((job = cgiGetVariable("JOB_ID")) != NULL)
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%s", job);
|
||||
else if ((printer = cgiGetVariable("PRINTER_NAME")) != NULL)
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", printer);
|
||||
else
|
||||
{
|
||||
cgiSetVariable("ERROR", ippErrorString(IPP_NOT_FOUND));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a job request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* job-uri or printer-uri (purge-jobs)
|
||||
* requesting-user-name
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = op;
|
||||
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 (job)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
|
||||
NULL, uri);
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
if (getenv("REMOTE_USER") != NULL)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, getenv("REMOTE_USER"));
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, "root");
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/jobs")) != NULL)
|
||||
{
|
||||
status = response->request.status.status_code;
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
cgiSetVariable("ERROR", ippErrorString(status));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
}
|
||||
else if (op == IPP_CANCEL_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-cancel.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_HOLD_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-hold.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_RELEASE_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-release.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_RESTART_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-restart.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'do_printer_op()' - Do a printer operation.
|
||||
*/
|
||||
@@ -1426,7 +1523,7 @@ do_printer_op(http_t *http, /* I - HTTP connection */
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
@@ -1441,6 +1538,8 @@ do_printer_op(http_t *http, /* I - HTTP connection */
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-accept.tmpl", getenv("LANG"));
|
||||
else if (op == CUPS_REJECT_JOBS)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-reject.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_PURGE_JOBS)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-purge.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+4
-5
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI support library definitions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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
|
||||
@@ -25,15 +25,14 @@
|
||||
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <ctype.h>
|
||||
# include <time.h>
|
||||
|
||||
# include <cups/string.h>
|
||||
|
||||
# ifdef WIN32
|
||||
# include <direct.h>
|
||||
# include <io.h>
|
||||
# include <malloc.h>
|
||||
# define strcasecmp(s,t) stricmp((s),(t))
|
||||
# define strncasecmp(s,t,n) strnicmp((s),(t),(n))
|
||||
# else
|
||||
# include <unistd.h>
|
||||
# endif /* WIN32 */
|
||||
|
||||
+12
-7
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Class status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -71,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...
|
||||
@@ -126,13 +126,15 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
resource[HTTP_MAX_URI],
|
||||
uri[HTTP_MAX_URI];
|
||||
int port; /* URI data */
|
||||
char server[1024]; /* Name of server */
|
||||
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);
|
||||
|
||||
@@ -200,13 +202,16 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
uri);
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", NULL, "all");
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
@@ -257,7 +262,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "jobs.tmpl", getenv("LANG"));
|
||||
@@ -318,12 +323,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
CUPS_DATADIR "/data/testprint.ps")) != NULL)
|
||||
{
|
||||
status = response->request.status.status_code;
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
status = cupsLastError();
|
||||
|
||||
cgiSetVariable("PRINTER_NAME", pclass);
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI HTML functions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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
|
||||
|
||||
+144
-45
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP variable routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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.
|
||||
*/
|
||||
@@ -71,6 +72,10 @@ ippSetServerVersion(void)
|
||||
cgiSetVariable("SERVER_NAME", getenv("SERVER_NAME"));
|
||||
cgiSetVariable("REMOTE_USER", getenv("REMOTE_USER"));
|
||||
cgiSetVariable("CUPS_VERSION", CUPS_SVERSION);
|
||||
|
||||
#ifdef LC_TIME
|
||||
setlocale(LC_TIME, "");
|
||||
#endif /* LC_TIME */
|
||||
}
|
||||
|
||||
|
||||
@@ -81,13 +86,16 @@ ippSetServerVersion(void)
|
||||
void
|
||||
ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
const char *filter_name, /* I - Filter name */
|
||||
const char *filter_value) /* I - Filter value */
|
||||
const char *filter_value, /* I - Filter value */
|
||||
const char *prefix, /* I - Prefix for name or NULL */
|
||||
int parent_el) /* I - Parent element number */
|
||||
{
|
||||
int element; /* Element in CGI array */
|
||||
ipp_attribute_t *attr, /* Attribute in response... */
|
||||
*filter; /* Filtering attribute */
|
||||
int i; /* Looping var */
|
||||
char name[1024], /* Name of attribute */
|
||||
*nameptr, /* Pointer into name */
|
||||
value[16384], /* Value(s) */
|
||||
*valptr; /* Pointer into value */
|
||||
char method[HTTP_MAX_URI],
|
||||
@@ -96,18 +104,48 @@ 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 */
|
||||
char servername[1024];/* Locale server name */
|
||||
struct tm *date; /* Date information */
|
||||
|
||||
|
||||
ippSetServerVersion();
|
||||
DEBUG_printf(("<P>ippSetCGIVars(response=%p, filter_name=\"%s\", filter_value=\"%s\", prefix=\"%s\")\n",
|
||||
response, filter_name, filter_value, prefix));
|
||||
|
||||
/*
|
||||
* Set common CGI template variables...
|
||||
*/
|
||||
|
||||
strcpy(server, cupsServer());
|
||||
if (!prefix)
|
||||
ippSetServerVersion();
|
||||
|
||||
for (attr = response->attrs;
|
||||
attr && attr->group_tag == IPP_TAG_OPERATION;
|
||||
attr = attr->next);
|
||||
/*
|
||||
* Get the server name associated with the client interface as well as
|
||||
* the locally configured hostname. We'll check *both* of these to
|
||||
* see if the printer URL is local...
|
||||
*/
|
||||
|
||||
for (element = 0; attr != NULL; attr = attr->next, element ++)
|
||||
server = getenv("SERVER_NAME");
|
||||
gethostname(servername, sizeof(servername));
|
||||
|
||||
/*
|
||||
* Flag whether we are using SSL on this connection...
|
||||
*/
|
||||
|
||||
ishttps = getenv("HTTPS") != NULL;
|
||||
|
||||
/*
|
||||
* Loop through the attributes and set them for the template...
|
||||
*/
|
||||
|
||||
attr = response->attrs;
|
||||
|
||||
if (!prefix)
|
||||
while (attr && attr->group_tag == IPP_TAG_OPERATION)
|
||||
attr = attr->next;
|
||||
|
||||
for (element = parent_el; attr != NULL; attr = attr->next, element ++)
|
||||
{
|
||||
/*
|
||||
* Copy attributes to a separator...
|
||||
@@ -119,6 +157,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;
|
||||
|
||||
@@ -142,25 +184,48 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
if (attr->name == NULL)
|
||||
continue;
|
||||
|
||||
for (i = 0; attr->name[i]; i ++)
|
||||
if (attr->name[i] == '-')
|
||||
name[i] = '_';
|
||||
else
|
||||
name[i] = attr->name[i];
|
||||
if (prefix)
|
||||
{
|
||||
snprintf(name, sizeof(name), "%s.", prefix);
|
||||
nameptr = name + strlen(name);
|
||||
}
|
||||
else
|
||||
nameptr = name;
|
||||
|
||||
name[i] = '\0';
|
||||
for (i = 0; attr->name[i] && nameptr < (name + sizeof(name) - 1); i ++)
|
||||
if (attr->name[i] == '-')
|
||||
*nameptr++ = '_';
|
||||
else
|
||||
*nameptr++ = attr->name[i];
|
||||
|
||||
*nameptr = '\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 */
|
||||
valptr = value; /* Start at the beginning */
|
||||
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
{
|
||||
if (i)
|
||||
strcat(valptr, ",");
|
||||
strlcat(valptr, ",", sizeof(value) - (valptr - value));
|
||||
|
||||
valptr += strlen(valptr);
|
||||
|
||||
@@ -168,27 +233,38 @@ 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");
|
||||
strlcat(valptr, "novalue", sizeof(value) - (valptr - value));
|
||||
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 :
|
||||
@@ -201,27 +277,35 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
strcmp(method, "http") == 0)
|
||||
{
|
||||
/*
|
||||
* Map localhost access to localhost...
|
||||
* Map local access to a local URI...
|
||||
*/
|
||||
|
||||
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");
|
||||
if (strcasecmp(hostname, server) == 0 ||
|
||||
strcasecmp(hostname, servername) == 0)
|
||||
{
|
||||
/*
|
||||
* Make URI relative to the current server...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Rewrite URI with HTTP address...
|
||||
*/
|
||||
strlcpy(uri, resource, sizeof(uri));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* 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);
|
||||
strlcat(valptr, uri, sizeof(value) - (valptr - value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -232,9 +316,17 @@ 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);
|
||||
case IPP_TAG_MIMETYPE :
|
||||
strlcat(valptr, attr->values[i].string.text,
|
||||
sizeof(value) - (valptr - value));
|
||||
break;
|
||||
|
||||
case IPP_TAG_BEGIN_COLLECTION :
|
||||
snprintf(value, sizeof(value), "%s%d", name, i + 1);
|
||||
ippSetCGIVars(attr->values[i].collection, filter_name,
|
||||
filter_value, value, element);
|
||||
break;
|
||||
|
||||
default :
|
||||
break; /* anti-compiler-warning-code */
|
||||
}
|
||||
@@ -244,12 +336,19 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
|
||||
* Add the element...
|
||||
*/
|
||||
|
||||
cgiSetArray(name, element, value);
|
||||
if (attr->value_tag != IPP_TAG_BEGIN_COLLECTION)
|
||||
{
|
||||
cgiSetArray(name, element, value);
|
||||
|
||||
DEBUG_printf(("<P>%s[%d]=\"%s\"\n", name, element, value));
|
||||
}
|
||||
}
|
||||
|
||||
if (attr == NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
DEBUG_puts("<P>Leaving ippSetCGIVars()...");
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP variable definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -26,7 +26,6 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <cups/cups.h>
|
||||
#include <cups/debug.h>
|
||||
#include <cups/language.h>
|
||||
@@ -47,7 +46,8 @@
|
||||
|
||||
extern char *ippGetTemplateDir(void);
|
||||
extern void ippSetServerVersion(void);
|
||||
extern void ippSetCGIVars(ipp_t *, const char *, const char *);
|
||||
extern void ippSetCGIVars(ipp_t *, const char *, const char *,
|
||||
const char *, int);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
+159
-39
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Job status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* 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() - Main entry for CGI.
|
||||
* main() - Main entry for CGI.
|
||||
* do_job_op() - Do a job operation.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -33,6 +34,13 @@
|
||||
#include "ipp-var.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void do_job_op(http_t *http, cups_lang_t *language, ipp_op_t op);
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry for CGI.
|
||||
*/
|
||||
@@ -46,7 +54,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
const char *which_jobs; /* Which jobs to show */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
|
||||
const char *op; /* Operation name */
|
||||
|
||||
|
||||
/*
|
||||
* Get any form variables...
|
||||
@@ -64,7 +73,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...
|
||||
@@ -78,43 +87,69 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "header.tmpl", getenv("LANG"));
|
||||
|
||||
/*
|
||||
* Build an IPP_GET_JOBS request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
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);
|
||||
|
||||
request->request.op.operation_id = IPP_GET_JOBS;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
|
||||
"ipp://localhost/jobs");
|
||||
|
||||
if ((which_jobs = cgiGetVariable("which_jobs")) != NULL)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs",
|
||||
NULL, which_jobs);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
if ((op = cgiGetVariable("OP")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippDelete(response);
|
||||
/*
|
||||
* Do the operation...
|
||||
*/
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "jobs.tmpl", getenv("LANG"));
|
||||
if (strcmp(op, "cancel-job") == 0)
|
||||
do_job_op(http, language, IPP_CANCEL_JOB);
|
||||
else if (strcmp(op, "hold-job") == 0)
|
||||
do_job_op(http, language, IPP_HOLD_JOB);
|
||||
else if (strcmp(op, "release-job") == 0)
|
||||
do_job_op(http, language, IPP_RELEASE_JOB);
|
||||
else if (strcmp(op, "restart-job") == 0)
|
||||
do_job_op(http, language, IPP_RESTART_JOB);
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Bad operation code... Display an error...
|
||||
*/
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-op.tmpl", getenv("LANG"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Build an IPP_GET_JOBS request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
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);
|
||||
|
||||
request->request.op.operation_id = IPP_GET_JOBS;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
|
||||
"ipp://localhost/jobs");
|
||||
|
||||
if ((which_jobs = cgiGetVariable("which_jobs")) != NULL)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs",
|
||||
NULL, which_jobs);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "jobs.tmpl", getenv("LANG"));
|
||||
}
|
||||
}
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "trailer.tmpl", getenv("LANG"));
|
||||
@@ -134,6 +169,91 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'do_job_op()' - Do a job operation.
|
||||
*/
|
||||
|
||||
static void
|
||||
do_job_op(http_t *http, /* I - HTTP connection */
|
||||
cups_lang_t *language, /* I - Client's language */
|
||||
ipp_op_t op) /* I - Operation to perform */
|
||||
{
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
char uri[HTTP_MAX_URI]; /* Job URI */
|
||||
const char *job; /* Job ID */
|
||||
ipp_status_t status; /* Operation status... */
|
||||
|
||||
|
||||
if ((job = cgiGetVariable("JOB_ID")) != NULL)
|
||||
snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%s", job);
|
||||
else
|
||||
{
|
||||
cgiSetVariable("ERROR", ippErrorString(IPP_NOT_FOUND));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a job request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* job-uri or printer-uri (purge-jobs)
|
||||
* requesting-user-name
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = op;
|
||||
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);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
|
||||
NULL, uri);
|
||||
|
||||
if (getenv("REMOTE_USER") != NULL)
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, getenv("REMOTE_USER"));
|
||||
else
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, "unknown");
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/jobs")) != NULL)
|
||||
{
|
||||
status = response->request.status.status_code;
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_OK_CONFLICT)
|
||||
{
|
||||
cgiSetVariable("ERROR", ippErrorString(status));
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
|
||||
}
|
||||
else if (op == IPP_CANCEL_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-cancel.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_HOLD_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-hold.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_RELEASE_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-release.tmpl", getenv("LANG"));
|
||||
else if (op == IPP_RESTART_JOB)
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "job-restart.tmpl", getenv("LANG"));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+26
-9
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Printer status CGI for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -54,6 +54,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
const char *op; /* Operation to perform, if any */
|
||||
|
||||
|
||||
setbuf(stdout, NULL);
|
||||
|
||||
/*
|
||||
* Get any form variables...
|
||||
*/
|
||||
@@ -71,13 +73,14 @@ 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...
|
||||
*/
|
||||
|
||||
printf("Content-Type: text/html;charset=%s\n\n", cupsLangEncoding(language));
|
||||
printf("Content-Type: text/html;charset=%s\r\n\r\n",
|
||||
cupsLangEncoding(language));
|
||||
|
||||
/*
|
||||
* See if we need to show a list of printers or the status of a
|
||||
@@ -87,7 +90,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
ippSetServerVersion();
|
||||
|
||||
printer = argv[0];
|
||||
if (strcmp(printer, "/") == 0 || strcmp(printer, "printers.cgi") == 0)
|
||||
if (strcmp(printer, "/") == 0 || strstr(printer, "printers.cgi") != NULL)
|
||||
{
|
||||
printer = NULL;
|
||||
cgiSetVariable("TITLE", cupsLangString(language, CUPS_MSG_PRINTER));
|
||||
@@ -126,13 +129,15 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
resource[HTTP_MAX_URI],
|
||||
uri[HTTP_MAX_URI];
|
||||
int port; /* URI data */
|
||||
char server[1024]; /* Name of server */
|
||||
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);
|
||||
|
||||
@@ -200,15 +205,24 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
uri);
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes", NULL, "all");
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
}
|
||||
else if (printer)
|
||||
fprintf(stderr, "ERROR: Get-Printer-Attributes request failed - %s (%x)\n",
|
||||
ippErrorString(cupsLastError()), cupsLastError());
|
||||
else
|
||||
fprintf(stderr, "ERROR: CUPS-Get-Printers request failed - %s (%x)\n",
|
||||
ippErrorString(cupsLastError()), cupsLastError());
|
||||
|
||||
/*
|
||||
* Write the report...
|
||||
@@ -257,11 +271,14 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
||||
{
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
ippDelete(response);
|
||||
|
||||
cgiCopyTemplateLang(stdout, TEMPLATES, "jobs.tmpl", getenv("LANG"));
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ERROR: Get-Jobs request failed - %s (%x)\n",
|
||||
ippErrorString(cupsLastError()), cupsLastError());
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -318,12 +335,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
CUPS_DATADIR "/data/testprint.ps")) != NULL)
|
||||
{
|
||||
status = response->request.status.status_code;
|
||||
ippSetCGIVars(response, NULL, NULL);
|
||||
ippSetCGIVars(response, NULL, NULL, NULL, 0);
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
status = IPP_GONE;
|
||||
status = cupsLastError();
|
||||
|
||||
cgiSetVariable("PRINTER_NAME", printer);
|
||||
|
||||
|
||||
+60
-23
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI template function.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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,19 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
if ((innerval = cgiGetArray(innername, atoi(innerptr) - 1)) == NULL)
|
||||
*s = '\0';
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
strlcpy(s, innerval, sizeof(compare) - (s - compare));
|
||||
}
|
||||
else if (innername[0] == '?')
|
||||
{
|
||||
if ((innerval = cgiGetArray(innername + 1, element)) == NULL)
|
||||
*s = '\0';
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
strlcpy(s, innerval, sizeof(compare) - (s - compare));
|
||||
}
|
||||
else if ((innerval = cgiGetArray(innername, element)) == NULL)
|
||||
sprintf(s, "{%s}", innername);
|
||||
snprintf(s, sizeof(s), "{%s}", innername);
|
||||
else
|
||||
strcpy(s, innerval);
|
||||
strlcpy(s, innerval, sizeof(compare) - (s - compare));
|
||||
|
||||
s += strlen(s);
|
||||
}
|
||||
@@ -378,16 +406,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 +451,13 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
}
|
||||
else if (out)
|
||||
putc(ch, out);
|
||||
|
||||
/*
|
||||
* Flush any pending output...
|
||||
*/
|
||||
|
||||
if (out)
|
||||
fflush(out);
|
||||
}
|
||||
|
||||
|
||||
@@ -436,11 +471,13 @@ cgi_puts(const char *s,
|
||||
{
|
||||
while (*s)
|
||||
{
|
||||
if (s[0] == '<' && s[1] != '/' && !isalpha(s[1]))
|
||||
if (s[0] == '<')
|
||||
fputs("<", out);
|
||||
else if (s[0] == '>')
|
||||
fputs(">", out);
|
||||
else if (*s == '\"')
|
||||
fputs(""", out);
|
||||
else if (s[0] == '&' && isspace(s[1]))
|
||||
else if (s[0] == '&')
|
||||
fputs("&", out);
|
||||
else
|
||||
putc(*s, out);
|
||||
|
||||
+47
-31
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* CGI form variable and array functions.
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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>
|
||||
|
||||
|
||||
/*
|
||||
@@ -240,7 +242,7 @@ cgiSetArray(const char *name, /* I - Name of variable */
|
||||
var_t *var; /* Returned variable */
|
||||
|
||||
|
||||
if (name == NULL || value == NULL || element < 0)
|
||||
if (name == NULL || value == NULL || element < 0 || element > 100000)
|
||||
return;
|
||||
|
||||
if ((var = cgi_find_variable(name)) == NULL)
|
||||
@@ -284,7 +286,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
|
||||
var_t *var; /* Returned variable */
|
||||
|
||||
|
||||
if (name == NULL || size < 0)
|
||||
if (name == NULL || size < 0 || size > 100000)
|
||||
return;
|
||||
|
||||
if ((var = cgi_find_variable(name)) == NULL)
|
||||
@@ -359,7 +361,7 @@ cgi_add_variable(const char *name, /* I - Variable name */
|
||||
var_t *var; /* New variable */
|
||||
|
||||
|
||||
if (name == NULL || value == NULL)
|
||||
if (name == NULL || value == NULL || element < 0 || element > 100000)
|
||||
return;
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
cupsd.conf
|
||||
pam.conf
|
||||
+6
-3
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Configuration file makefile for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1993-2000 by Easy Software Products.
|
||||
# Copyright 1993-2003 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 ; \
|
||||
@@ -66,6 +65,10 @@ install:
|
||||
fi ; \
|
||||
$(INSTALL_DATA) $$file $(SERVERROOT) ; \
|
||||
done
|
||||
-if test x$(PAMDIR) != x$(BUILDROOT); then \
|
||||
$(INSTALL_DIR) $(PAMDIR); \
|
||||
$(INSTALL_DATA) pam.conf $(PAMDIR)/cups; \
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: classes.conf 1152 2000-06-22 18:25:29Z mike $"
|
||||
# "$Id: classes.conf 3041 2002-12-17 19:00:27Z swdev $"
|
||||
#
|
||||
# Sample class configuration file for the Common UNIX Printing System
|
||||
# (CUPS) scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2003 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 3041 2002-12-17 19:00:27Z swdev $".
|
||||
#
|
||||
|
||||
+25
-8
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: client.conf 969 2000-03-10 16:56:46Z mike $"
|
||||
# "$Id: client.conf 3705 2003-05-09 19:14:44Z mike $"
|
||||
#
|
||||
# Sample client configuration file for the Common UNIX Printing System
|
||||
# (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2003 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,41 @@
|
||||
# #
|
||||
# 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. ONLY ONE SERVER NAME MAY BE SPECIFIED AT A TIME. To use
|
||||
# more than one server you must use a local scheduler with browsing
|
||||
# and possibly polling.
|
||||
#
|
||||
|
||||
#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 3705 2003-05-09 19:14:44Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: cupsd.conf 1344 2000-09-06 18:32:40Z mike $"
|
||||
# "$Id$"
|
||||
#
|
||||
# Sample configuration file for the Common UNIX Printing System (CUPS)
|
||||
# scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2003 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
|
||||
@@ -63,24 +63,47 @@
|
||||
#
|
||||
# AccessLog: the access log file; if this does not start with a leading /
|
||||
# then it is assumed to be relative to ServerRoot. By default set to
|
||||
# "/var/log/cups/access_log"
|
||||
# "@CUPS_LOGDIR@/access_log"
|
||||
#
|
||||
# You can also use the special name "syslog" to send the output to the
|
||||
# syslog file or daemon.
|
||||
#
|
||||
|
||||
#AccessLog /var/log/cups/access_log
|
||||
#AccessLog @CUPS_LOGDIR@/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.
|
||||
# By default "@CUPS_DATADIR@".
|
||||
#
|
||||
|
||||
#DataDir /usr/share/cups
|
||||
#DataDir @CUPS_DATADIR@
|
||||
|
||||
#
|
||||
# DefaultCharset: the default character set to use. If not specified,
|
||||
# defaults to utf-8. Note that this can also be overridden in
|
||||
# defaults to "utf-8". Note that this can also be overridden in
|
||||
# HTML documents...
|
||||
#
|
||||
|
||||
@@ -95,34 +118,45 @@
|
||||
|
||||
#
|
||||
# DocumentRoot: the root directory for HTTP documents that are served.
|
||||
# By default the compiled in directory.
|
||||
# By default "@CUPS_DOCROOT@".
|
||||
#
|
||||
|
||||
#DocumentRoot /usr/share/cups/doc
|
||||
#DocumentRoot @CUPS_DOCROOT@
|
||||
|
||||
#
|
||||
# ErrorLog: the error log file; if this does not start with a leading /
|
||||
# then it is assumed to be relative to ServerRoot. By default set to
|
||||
# "/var/log/cups/error_log"
|
||||
# "@CUPS_LOGDIR@/error_log"
|
||||
#
|
||||
# You can also use the special name "syslog" to send the output to the
|
||||
# syslog file or daemon.
|
||||
#
|
||||
|
||||
#ErrorLog /var/log/cups/error_log
|
||||
#ErrorLog @CUPS_LOGDIR@/error_log
|
||||
|
||||
#
|
||||
# FileDevice: determines whether the scheduler will allow new printers
|
||||
# to be added using device URIs of the form "file:/foo/bar". The default
|
||||
# is not to allow file devices due to the potential security vulnerability
|
||||
# and due to the fact that file devices do not support raw printing.
|
||||
#
|
||||
|
||||
#FileDevice No
|
||||
|
||||
|
||||
#
|
||||
# FontPath: the path to locate all font files (currently only for pstoraster)
|
||||
# By default /usr/share/cups/fonts.
|
||||
# By default "@CUPS_FONTPATH@".
|
||||
#
|
||||
|
||||
#FontPath /usr/share/cups/fonts
|
||||
#FontPath @CUPS_FONTPATH@
|
||||
|
||||
#
|
||||
# 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.
|
||||
@@ -141,13 +175,13 @@ LogLevel info
|
||||
#
|
||||
# PageLog: the page log file; if this does not start with a leading /
|
||||
# then it is assumed to be relative to ServerRoot. By default set to
|
||||
# "/var/log/cups/page_log"
|
||||
# "@CUPS_LOGDIR@/page_log"
|
||||
#
|
||||
# You can also use the special name "syslog" to send the output to the
|
||||
# syslog file or daemon.
|
||||
#
|
||||
|
||||
#PageLog /var/log/cups/page_log
|
||||
#PageLog @CUPS_LOGDIR@/page_log
|
||||
|
||||
#
|
||||
# PreserveJobHistory: whether or not to preserve the job history after a
|
||||
@@ -164,18 +198,81 @@ 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
|
||||
|
||||
#
|
||||
# MaxCopies: maximum number of copies that a user can request. Default is
|
||||
# 100.
|
||||
#
|
||||
|
||||
#MaxCopies 100
|
||||
|
||||
#
|
||||
# MaxJobs: maximum number of jobs to keep in memory (active and completed.)
|
||||
# Default is 500; the value 0 is used for no limit.
|
||||
#
|
||||
|
||||
#MaxJobs 500
|
||||
|
||||
#
|
||||
# MaxJobsPerPrinter: maximum number of active jobs per printer. The default
|
||||
# is 0 for no limit.
|
||||
#
|
||||
|
||||
#MaxJobsPerPrinter 0
|
||||
|
||||
#
|
||||
# MaxJobsPerUser: maximum number of active jobs per user. The default
|
||||
# is 0 for no limit.
|
||||
#
|
||||
|
||||
#MaxJobsPerUser 0
|
||||
|
||||
#
|
||||
# MaxPrinterHistory: controls the maximum number of history collections
|
||||
# in the printer-state-history attribute. Set to 0 to disable history
|
||||
# data.
|
||||
#
|
||||
|
||||
#MaxPrinterHistory 10
|
||||
|
||||
#
|
||||
# Printcap: the name of the printcap file. Default is /etc/printcap.
|
||||
# Leave blank to disable printcap file generation.
|
||||
#
|
||||
|
||||
#Printcap /etc/printcap
|
||||
|
||||
#
|
||||
# RequestRoot: the directory where request files are stored.
|
||||
# By default /var/spool/cups.
|
||||
# PrintcapFormat: the format of the printcap file, currently either
|
||||
# BSD or Solaris. The default is "BSD".
|
||||
#
|
||||
|
||||
#RequestRoot /var/spool/cups
|
||||
#PrintcapFormat BSD
|
||||
#PrintcapFormat Solaris
|
||||
|
||||
#
|
||||
# PrintcapGUI: the name of the GUI options panel program to associate
|
||||
# with print queues under IRIX. The default is "/usr/bin/glpoptions"
|
||||
# from ESP Print Pro.
|
||||
#
|
||||
# This option is only used under IRIX; the options panel program
|
||||
# must accept the "-d printer" and "-o options" options and write
|
||||
# the selected printer options back to stdout on completion.
|
||||
#
|
||||
|
||||
#PrintcapGUI /usr/bin/glpoptions
|
||||
|
||||
#
|
||||
# RequestRoot: the directory where request files are stored.
|
||||
# By default "@CUPS_REQUESTS@".
|
||||
#
|
||||
|
||||
#RequestRoot @CUPS_REQUESTS@
|
||||
|
||||
#
|
||||
# RemoteRoot: the name of the user assigned to unauthenticated accesses
|
||||
@@ -186,17 +283,55 @@ LogLevel info
|
||||
|
||||
#
|
||||
# ServerBin: the root directory for the scheduler executables.
|
||||
# By default /usr/lib/cups or /usr/lib32/cups (IRIX 6.5).
|
||||
# By default "@CUPS_SERVERBIN@".
|
||||
#
|
||||
|
||||
#ServerBin /usr/lib/cups
|
||||
#ServerBin @CUPS_SERVERBIN@
|
||||
|
||||
#
|
||||
# ServerRoot: the root directory for the scheduler.
|
||||
# By default /etc/cups.
|
||||
# By default "@CUPS_SERVERROOT@".
|
||||
#
|
||||
|
||||
#ServerRoot /etc/cups
|
||||
#ServerRoot @CUPS_SERVERROOT@
|
||||
|
||||
|
||||
########
|
||||
######## Fax Support
|
||||
########
|
||||
|
||||
#
|
||||
# FaxRetryLimit: the number of times a fax job is retried.
|
||||
# The default is 5 times.
|
||||
#
|
||||
|
||||
#FaxRetryLimit 5
|
||||
|
||||
#
|
||||
# FaxRetryInterval: the number of seconds between fax job retries.
|
||||
# The default is 300 seconds/5 minutes.
|
||||
#
|
||||
|
||||
#FaxRetryInterval 300
|
||||
|
||||
|
||||
########
|
||||
######## Encryption Support
|
||||
########
|
||||
|
||||
#
|
||||
# ServerCertificate: the file to read containing the server's certificate.
|
||||
# Defaults to "@CUPS_SERVERROOT@/ssl/server.crt".
|
||||
#
|
||||
|
||||
#ServerCertificate @CUPS_SERVERROOT@/ssl/server.crt
|
||||
|
||||
#
|
||||
# ServerKey: the file to read containing the server's key.
|
||||
# Defaults to "@CUPS_SERVERROOT@/ssl/server.key".
|
||||
#
|
||||
|
||||
#ServerKey @CUPS_SERVERROOT@/ssl/server.key
|
||||
|
||||
|
||||
########
|
||||
@@ -205,16 +340,16 @@ LogLevel info
|
||||
|
||||
#
|
||||
# User/Group: the user and group the server runs under. Normally this
|
||||
# must be lp and sys, however you can configure things for another user
|
||||
# or group as needed.
|
||||
# must be @CUPS_USER@ and @CUPS_GROUP@, however you can configure things for another
|
||||
# user or group as needed.
|
||||
#
|
||||
# Note: the server must be run initially as root to support the
|
||||
# default IPP port of 631. It changes users whenever an external
|
||||
# program is run...
|
||||
# program is run, or if the RunAsUser directive is specified...
|
||||
#
|
||||
|
||||
#User lp
|
||||
#Group sys
|
||||
#User @CUPS_USER@
|
||||
#Group @CUPS_GROUP@
|
||||
|
||||
#
|
||||
# RIPCache: the amount of memory that each RIP should use to cache
|
||||
@@ -226,12 +361,12 @@ LogLevel info
|
||||
#RIPCache 8m
|
||||
|
||||
#
|
||||
# TempDir: the directory to put temporary files in. This directory must be
|
||||
# writable by the user defined above! Defaults to "/var/spool/cups/tmp" or
|
||||
# TempDir: the directory to put temporary files in. This directory must be
|
||||
# writable by the user defined above! Defaults to "@CUPS_REQUESTS@/tmp" or
|
||||
# the value of the TMPDIR environment variable.
|
||||
#
|
||||
|
||||
#TempDir /var/spool/cups/tmp
|
||||
#TempDir @CUPS_REQUESTS@/tmp
|
||||
|
||||
#
|
||||
# FilterLimit: sets the maximum cost of all job filters that can be run
|
||||
@@ -263,8 +398,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
|
||||
|
||||
#
|
||||
@@ -295,6 +435,15 @@ Port 631
|
||||
|
||||
#MaxClients 100
|
||||
|
||||
#
|
||||
# MaxClientsPerHost: controls the maximum number of simultaneous clients that
|
||||
# will be handled from a specific host. Defaults to 10 or 1/10th of the
|
||||
# MaxClients setting, whichever is larger. A value of 0 specifies the
|
||||
# automatic (10 or 1/10th) setting.
|
||||
#
|
||||
|
||||
#MaxClientsPerHost 0
|
||||
|
||||
#
|
||||
# MaxRequestSize: controls the maximum size of HTTP requests and print files.
|
||||
# Set to 0 to disable this feature (defaults to 0.)
|
||||
@@ -314,12 +463,59 @@ 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 respond 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.
|
||||
#
|
||||
# The @LOCAL address broadcasts to all non point-to-point interfaces.
|
||||
# For example, if you have a LAN and a dial-up link, @LOCAL would
|
||||
# send printer updates to the LAN but not to the dial-up link.
|
||||
# Similarly, the @IF(name) address sends to the named network
|
||||
# interface, e.g. @IF(eth0) under Linux. Interfaces are refreshed
|
||||
# automatically (no more than once every 60 seconds), so they can
|
||||
# be used on dynamically-configured interfaces, e.g. PPP, 802.11, etc.
|
||||
#
|
||||
|
||||
#BrowseAddress x.y.z.255
|
||||
#BrowseAddress x.y.255.255
|
||||
#BrowseAddress x.255.255.255
|
||||
#BrowseAddress 255.255.255.255
|
||||
#BrowseAddress @LOCAL
|
||||
#BrowseAddress @IF(name)
|
||||
|
||||
#
|
||||
# BrowseShortNames: whether or not to use "short" names for remote printers
|
||||
# when possible (e.g. "printer" instead of "printer@host".) Enabled by
|
||||
@@ -328,18 +524,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.
|
||||
@@ -361,6 +545,8 @@ Port 631
|
||||
# nnn.nnn.nnn.nnn
|
||||
# nnn.nnn.nnn.nnn/mm
|
||||
# nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
# @LOCAL
|
||||
# @IF(name)
|
||||
#
|
||||
# The hostname/domainname restrictions only work if you have turned hostname
|
||||
# lookups on!
|
||||
@@ -408,6 +594,7 @@ Port 631
|
||||
#
|
||||
|
||||
#BrowseRelay source-address destination-address
|
||||
#BrowseRelay @IF(src) @IF(dst)
|
||||
|
||||
#
|
||||
# BrowseTimeout: the timeout for network printers - if we don't
|
||||
@@ -438,6 +625,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
|
||||
@@ -449,7 +666,14 @@ Port 631
|
||||
# will be "sys", "system", or "root" (checked for in that order.)
|
||||
#
|
||||
|
||||
#SystemGroup sys
|
||||
#SystemGroup @CUPS_GROUP@
|
||||
|
||||
#
|
||||
# RootCertDuration: How frequently the root certificate is regenerated.
|
||||
# Defaults to 300 seconds.
|
||||
#
|
||||
|
||||
#RootCertDuration 300
|
||||
|
||||
#
|
||||
# Access permissions for each directory served by the scheduler.
|
||||
@@ -473,11 +697,11 @@ Port 631
|
||||
#
|
||||
# Order: the order of Allow/Deny processing.
|
||||
#
|
||||
# Allow: allows access from the specified hostname, domain, IP address, or
|
||||
# network.
|
||||
# Allow: allows access from the specified hostname, domain, IP address,
|
||||
# network, or interface.
|
||||
#
|
||||
# Deny: denies access from the specified hostname, domain, IP address, or
|
||||
# network.
|
||||
# Deny: denies access from the specified hostname, domain, IP address,
|
||||
# network, or interface.
|
||||
#
|
||||
# Both "Allow" and "Deny" accept the following notations for addresses:
|
||||
#
|
||||
@@ -492,12 +716,38 @@ Port 631
|
||||
# nnn.nnn.nnn.nnn
|
||||
# nnn.nnn.nnn.nnn/mm
|
||||
# nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
|
||||
# @LOCAL
|
||||
# @IF(name)
|
||||
#
|
||||
# The host and domain address require that you enable hostname lookups
|
||||
# with "HostNameLookups On" above.
|
||||
#
|
||||
# The @LOCAL address allows or denies from all non point-to-point
|
||||
# interfaces. For example, if you have a LAN and a dial-up link,
|
||||
# @LOCAL could allow connections from the LAN but not from the dial-up
|
||||
# link. Similarly, the @IF(name) address allows or denies from the
|
||||
# named network interface, e.g. @IF(eth0) under Linux. Interfaces are
|
||||
# refreshed automatically (no more than once every 60 seconds), so
|
||||
# they can be used on dynamically-configured interfaces, e.g. PPP,
|
||||
# 802.11, etc.
|
||||
#
|
||||
# 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>
|
||||
@@ -514,6 +764,13 @@ Port 631
|
||||
#
|
||||
#</Location>
|
||||
|
||||
#<Location /jobs>
|
||||
#
|
||||
# You may wish to limit access to job operations, either with Allow
|
||||
# and Deny lines, or by requiring a username and password.
|
||||
#
|
||||
#</Location>
|
||||
|
||||
#<Location /printers>
|
||||
#
|
||||
# You may wish to limit access to printers and classes, either with Allow
|
||||
@@ -559,8 +816,10 @@ AuthClass System
|
||||
Order Deny,Allow
|
||||
Deny From All
|
||||
Allow From 127.0.0.1
|
||||
|
||||
#Encryption Required
|
||||
</Location>
|
||||
|
||||
#
|
||||
# End of "$Id: cupsd.conf 1344 2000-09-06 18:32:40Z mike $".
|
||||
# End of "$Id$".
|
||||
#
|
||||
+55
-15
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $"
|
||||
# "$Id: mime.convs 3709 2003-05-12 17:38:18Z mike $"
|
||||
#
|
||||
# MIME converts file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products.
|
||||
# Copyright 1997-2003 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -30,10 +30,12 @@
|
||||
#
|
||||
# General Notes:
|
||||
#
|
||||
# Currently the "cost" field is not used (all filters are assumed to
|
||||
# be equally costly in terms of speed/memory). Also, a filter program
|
||||
# *must* accept the standard command-line arguments (job-id, user, title,
|
||||
# copies,options,[filename or stdin]) or this won't work.
|
||||
# The "cost" field is used to find the least costly filters to run
|
||||
# when converting a job file to a printable format.
|
||||
#
|
||||
# All filters *must* accept the standard command-line arguments
|
||||
# (job-id, user, title, copies, options, [filename or stdin]) to
|
||||
# work with CUPS.
|
||||
#
|
||||
|
||||
########################################################################
|
||||
@@ -41,26 +43,64 @@
|
||||
# PostScript filters
|
||||
#
|
||||
|
||||
#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
|
||||
text/html application/postscript 33 texttops
|
||||
image/gif application/vnd.cups-postscript 66 imagetops
|
||||
image/png application/vnd.cups-postscript 66 imagetops
|
||||
image/jpeg application/vnd.cups-postscript 66 imagetops
|
||||
image/tiff application/vnd.cups-postscript 66 imagetops
|
||||
image/x-bitmap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-photocd application/vnd.cups-postscript 66 imagetops
|
||||
image/x-portable-anymap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-portable-bitmap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-portable-graymap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-portable-pixmap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-sgi-rgb application/vnd.cups-postscript 66 imagetops
|
||||
image/x-xbitmap application/vnd.cups-postscript 66 imagetops
|
||||
image/x-xpixmap application/vnd.cups-postscript 66 imagetops
|
||||
#image/x-xwindowdump application/vnd.cups-postscript 66 imagetops
|
||||
image/x-sun-raster application/vnd.cups-postscript 66 imagetops
|
||||
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Form filter...
|
||||
#
|
||||
# This filter does not currently exist, but the file format is defined
|
||||
# in the IDD and registered with the IANA for future use...
|
||||
#
|
||||
|
||||
#application/vnd.cups-form application/vnd.cups-postscript 33 formtops
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Raster filters...
|
||||
#
|
||||
|
||||
image/* application/vnd.cups-raster 100 imagetoraster
|
||||
application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
|
||||
image/gif application/vnd.cups-raster 100 imagetoraster
|
||||
image/png application/vnd.cups-raster 100 imagetoraster
|
||||
image/jpeg application/vnd.cups-raster 100 imagetoraster
|
||||
image/tiff application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-bitmap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-photocd application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-portable-anymap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-portable-bitmap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-portable-graymap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-portable-pixmap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-sgi-rgb application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-xbitmap application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-xpixmap application/vnd.cups-raster 100 imagetoraster
|
||||
#image/x-xwindowdump application/vnd.cups-raster 100 imagetoraster
|
||||
image/x-sun-raster application/vnd.cups-raster 100 imagetoraster
|
||||
|
||||
# pstoraster is now part of ESP Ghostscript...
|
||||
#application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
|
||||
|
||||
########################################################################
|
||||
#
|
||||
@@ -71,8 +111,8 @@ application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
|
||||
# option.
|
||||
#
|
||||
|
||||
#*/* application/vnd.cups-raw 0 -
|
||||
#application/octet-stream application/vnd.cups-raw 0 -
|
||||
|
||||
#
|
||||
# End of "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $".
|
||||
# End of "$Id: mime.convs 3709 2003-05-12 17:38:18Z mike $".
|
||||
#
|
||||
|
||||
+30
-14
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: mime.types 1340 2000-09-06 13:53:00Z mike $"
|
||||
# "$Id: mime.types 3564 2003-04-07 18:03:28Z mike $"
|
||||
#
|
||||
# MIME types file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products.
|
||||
# Copyright 1997-2003 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Easy Software Products and are protected by Federal
|
||||
@@ -41,6 +41,8 @@
|
||||
# printable(offset,length) True if bytes are printable 8-bit chars
|
||||
# (CR, NL, TAB, BS, 32-126, 128-254)
|
||||
# string(offset,"string") True if bytes are identical to string
|
||||
# istring(offset,"string") True if bytes are identical to
|
||||
# case-insensitive string
|
||||
# char(offset,value) True if byte is identical
|
||||
# short(offset,value) True if 16-bit integer is identical
|
||||
# int(offset,value) True if 32-bit integer is identical
|
||||
@@ -60,7 +62,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.
|
||||
#
|
||||
|
||||
########################################################################
|
||||
@@ -68,12 +70,21 @@
|
||||
# Application-generated files...
|
||||
#
|
||||
|
||||
application/msword doc string(0,<D0CF11E0A1B11AE1>)
|
||||
#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/postscript ai eps ps string(0,%!) string(0,<04>%!) \
|
||||
contains(0,128,<1B>%-12345X) + \
|
||||
(contains(0,1024,"LANGUAGE=POSTSCRIPT") \
|
||||
contains(0,1024,"LANGUAGE = Postscript") \
|
||||
contains(0,1024,"LANGUAGE = POSTSCRIPT"))
|
||||
application/vnd.hp-HPGL hpgl string(0,<1B>&)\
|
||||
string(0,<1B>E<1B>%0B) \
|
||||
string(0,<1B>%-1B) string(0,<201B>)\
|
||||
string(0,BP;) string(0,IN;) string(0,DF;) \
|
||||
string(0,BPINPS;) \
|
||||
(contains(0,128,<1B>%-12345X) + \
|
||||
(contains(0,1024,"LANGUAGE=HPGL") \
|
||||
contains(0,1024,"LANGUAGE = HPGL")))
|
||||
|
||||
########################################################################
|
||||
#
|
||||
@@ -96,8 +107,8 @@ image/x-portable-pixmap ppm string(0,P3) string(0,P6)
|
||||
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-xwindowdump xwd string(4,<00000007>)
|
||||
image/x-sun-raster ras string(0,<59a66a95>)
|
||||
|
||||
#image/fpx fpx
|
||||
image/x-alias pix short(8,8) short(8,24)
|
||||
@@ -109,7 +120,7 @@ image/x-bitmap bmp string(0,BM) && !printable(2,14)
|
||||
#
|
||||
|
||||
text/html html htm printable(0,1024) +\
|
||||
(string(0,"<HTML>") string(0,"<!DOCTYPE"))
|
||||
(istring(0,"<HTML>") istring(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,#!) +\
|
||||
@@ -124,10 +135,15 @@ text/plain txt printable(0,1024)
|
||||
# CUPS-specific types...
|
||||
#
|
||||
|
||||
application/vnd.cups-command string(0,'#CUPS-COMMAND')
|
||||
application/vnd.cups-form string(0,"<CUPSFORM>")
|
||||
application/vnd.cups-postscript string(0,<1B>%-12345X)
|
||||
application/vnd.cups-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(0,1024,"LANGUAGE=PCL") \
|
||||
contains(0,1024,"LANGUAGE = PCL")))
|
||||
|
||||
########################################################################
|
||||
#
|
||||
@@ -141,5 +157,5 @@ application/vnd.cups-raw
|
||||
#application/octet-stream
|
||||
|
||||
#
|
||||
# End of "$Id: mime.types 1340 2000-09-06 13:53:00Z mike $".
|
||||
# End of "$Id: mime.types 3564 2003-04-07 18:03:28Z mike $".
|
||||
#
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
auth required @PAMMOD@ nullok shadow
|
||||
account required @PAMMOD@
|
||||
@@ -0,0 +1,3 @@
|
||||
#%PAM-1.0
|
||||
auth required pam_unix.so shadow nodelay nullok
|
||||
account required pam_unix.so
|
||||
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# "$Id: printers.conf 1152 2000-06-22 18:25:29Z mike $"
|
||||
# "$Id: printers.conf 3041 2002-12-17 19:00:27Z swdev $"
|
||||
#
|
||||
# Sample printer configuration file for the Common UNIX Printing System
|
||||
# (CUPS) scheduler.
|
||||
#
|
||||
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
|
||||
# Copyright 1997-2003 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 3041 2002-12-17 19:00:27Z swdev $".
|
||||
#
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 3724 2003-05-14 18:24:38Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 We need at least autoconf 2.50...
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
dnl Set the name of the config header file...
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Version number information...
|
||||
CUPS_VERSION="1.1.19"
|
||||
AC_SUBST(CUPS_VERSION)
|
||||
AC_DEFINE_UNQUOTED(CUPS_SVERSION, "CUPS v$CUPS_VERSION")
|
||||
|
||||
dnl Default compiler flags...
|
||||
CFLAGS="${CFLAGS:=}"
|
||||
CPPFLAGS="${CPPFLAGS:=}"
|
||||
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(LN,ln)
|
||||
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)
|
||||
AC_PATH_PROG(STRIP,strip)
|
||||
|
||||
if test "x$AR" = x; then
|
||||
AC_MSG_ERROR([Unable to find required library archive command.])
|
||||
fi
|
||||
if test "x$CC" = x; then
|
||||
AC_MSG_ERROR([Unable to find required C compiler command.])
|
||||
fi
|
||||
if test "x$CXX" = x; then
|
||||
AC_MSG_ERROR([Unable to find required C++ compiler command.])
|
||||
fi
|
||||
|
||||
dnl Architecture checks...
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
dnl Check for libraries...
|
||||
AC_SEARCH_LIBS(crypt, crypt)
|
||||
AC_SEARCH_LIBS(getspent, sec gen)
|
||||
|
||||
LIBMALLOC=""
|
||||
AC_ARG_ENABLE(mallinfo, [ --enable-mallinfo turn on malloc debug information, default=no])
|
||||
|
||||
if test x$enable_mallinfo = xyes; then
|
||||
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
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBMALLOC)
|
||||
|
||||
dnl Check for libpaper support...
|
||||
AC_ARG_ENABLE(libpaper, [ --enable-libpaper turn on libpaper support, default=no])
|
||||
|
||||
if test x$enable_libpaper = xyes; then
|
||||
AC_CHECK_LIB(paper,systempapername,
|
||||
AC_DEFINE(HAVE_LIBPAPER)
|
||||
LIBPAPER="-lpaper",
|
||||
LIBPAPER="")
|
||||
else
|
||||
LIBPAPER=""
|
||||
fi
|
||||
AC_SUBST(LIBPAPER)
|
||||
|
||||
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(string.h,AC_DEFINE(HAVE_STRING_H))
|
||||
AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H))
|
||||
AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_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 strlcat strlcpy)
|
||||
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 and mkstemps functions.
|
||||
AC_CHECK_FUNCS(mkstemp mkstemps)
|
||||
|
||||
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 See if the tm structure has the tm_gmtoff member...
|
||||
AC_MSG_CHECKING(for tm_gmtoff member in tm structure)
|
||||
AC_TRY_COMPILE([#include <time.h>],[struct tm t;
|
||||
int o = t.tm_gmtoff;],
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_TM_GMTOFF),
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl Flags for "ar" command...
|
||||
case $uname in
|
||||
Darwin* | *BSD*)
|
||||
ARFLAGS="-rcv"
|
||||
;;
|
||||
*)
|
||||
ARFLAGS="crvs"
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(ARFLAGS)
|
||||
|
||||
dnl Extra platform-specific libraries...
|
||||
case $uname in
|
||||
Darwin*)
|
||||
BACKLIBS="-framework IOKit"
|
||||
COMMONLIBS="-framework CoreFoundation"
|
||||
;;
|
||||
*)
|
||||
BACKLIBS=""
|
||||
COMMONLIBS=""
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(BACKLIBS)
|
||||
AC_SUBST(COMMONLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-common.m4 3724 2003-05-14 18:24:38Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,195 @@
|
||||
dnl
|
||||
dnl "$Id: cups-compiler.m4 3520 2003-03-25 16:25:55Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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])
|
||||
|
||||
AC_ARG_WITH(optim, [ --with-optim="flags" set optimization flags ])
|
||||
|
||||
dnl Update compiler options...
|
||||
CXXLIBS=""
|
||||
AC_SUBST(CXXLIBS)
|
||||
|
||||
if test -n "$GCC"; then
|
||||
# Starting with GCC 3.0, you must link C++ programs against either
|
||||
# libstdc++ (shared by default), or libsupc++ (always static). If
|
||||
# you care about binary portability between Linux distributions,
|
||||
# you need to either 1) build your own GCC with static C++ libraries
|
||||
# or 2) link using gcc and libsupc++. We choose the latter since
|
||||
# CUPS doesn't (currently) use any of the stdc++ library.
|
||||
#
|
||||
# Also, GCC 3.0.x still has problems compiling some code. You may
|
||||
# or may not have success with it. USE 3.0.x WITH EXTREME CAUTION!
|
||||
#
|
||||
# Previous versions of GCC do not have the reliance on the stdc++
|
||||
# or g++ libraries, so the extra supc++ library is not needed.
|
||||
|
||||
AC_MSG_CHECKING(if libsupc++ is required)
|
||||
|
||||
SUPC="`$CXX -print-file-name=libsupc++.a 2>/dev/null`"
|
||||
case "$SUPC" in
|
||||
libsupc++.a*)
|
||||
# Library not found, so this is and older GCC...
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*)
|
||||
# This is gcc 3.x, and it knows of libsupc++, so we need it
|
||||
CXXLIBS="-lsupc++"
|
||||
AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac
|
||||
|
||||
CXX="$CC"
|
||||
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
if test $uname = HP-UX; then
|
||||
# GCC under HP-UX has bugs with -O2
|
||||
OPTIM="-O1"
|
||||
else
|
||||
OPTIM="-O2"
|
||||
fi
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $PICFLAG = 1 -a $uname != AIX; then
|
||||
OPTIM="-fPIC $OPTIM"
|
||||
fi
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-Wall $OPTIM"
|
||||
fi
|
||||
else
|
||||
case $uname in
|
||||
AIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-O2 -qmaxmem=6000"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
HP-UX*)
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="+O2"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
|
||||
CFLAGS="-Ae $CFLAGS"
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="+DAportable $OPTIM"
|
||||
fi
|
||||
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="+z $OPTIM"
|
||||
fi
|
||||
;;
|
||||
IRIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-O2"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $uversion -ge 62 -a "x$with_optim" = x; then
|
||||
OPTIM="$OPTIM -n32 -mips3"
|
||||
fi
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-fullwarn $OPTIM"
|
||||
fi
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-xO4"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="$OPTIM -xarch=generic"
|
||||
fi
|
||||
|
||||
if test $PICFLAG = 1; then
|
||||
OPTIM="-KPIC $OPTIM"
|
||||
fi
|
||||
;;
|
||||
UNIX_SVR*)
|
||||
# UnixWare
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-O"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
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
|
||||
|
||||
if test $uname = HP-UX; then
|
||||
# HP-UX 10.20 (at least) needs this definition to get the
|
||||
# h_errno global...
|
||||
OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED"
|
||||
|
||||
# HP-UX 11.00 (at least) needs this definition to get the
|
||||
# u_short type used by the IP headers...
|
||||
OPTIM="$OPTIM -D_INCLUDE_HPUX_SOURCE"
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-compiler.m4 3520 2003-03-25 16:25:55Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,242 @@
|
||||
dnl
|
||||
dnl "$Id: cups-directories.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl Directory stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 "$libdir" = "\${exec_prefix}/lib"; then
|
||||
libdir="$exec_prefix/lib"
|
||||
fi
|
||||
|
||||
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"
|
||||
;;
|
||||
|
||||
Darwin*)
|
||||
# Darwin and MacOS X...
|
||||
INITDIR=""
|
||||
INITDDIR="/System/Library/StartupItems/PrintingServices"
|
||||
;;
|
||||
|
||||
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
|
||||
*BSD* | Darwin*)
|
||||
# *BSD and Darwin (MacOS X)
|
||||
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="$libdir/cups"
|
||||
AC_DEFINE_UNQUOTED(CUPS_SERVERBIN, "$libdir/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* | *BSD* | Darwin*)
|
||||
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...
|
||||
CUPS_FONTPATH="$fontpath"
|
||||
AC_SUBST(CUPS_FONTPATH)
|
||||
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$fontpath")
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-directories.m4 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,82 @@
|
||||
dnl
|
||||
dnl "$Id: cups-image.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl Image library stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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"
|
||||
|
||||
EXPORT_LIBJPEG="$LIBJPEG"
|
||||
EXPORT_LIBPNG="$LIBPNG"
|
||||
EXPORT_LIBTIFF="$LIBTIFF"
|
||||
EXPORT_LIBZ="$LIBZ"
|
||||
|
||||
AC_SUBST(EXPORT_LIBJPEG)
|
||||
AC_SUBST(EXPORT_LIBPNG)
|
||||
AC_SUBST(EXPORT_LIBTIFF)
|
||||
AC_SUBST(EXPORT_LIBZ)
|
||||
|
||||
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-image.m4 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,49 @@
|
||||
dnl
|
||||
dnl "$Id: cups-libtool.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl Libtool stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,104 @@
|
||||
dnl
|
||||
dnl "$Id: cups-manpages.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl Manpage stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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
|
||||
Darwin* | Linux* | *BSD* | AIX*)
|
||||
# Darwin, MacOS X, Linux, *BSD, and AIX
|
||||
mandir="/usr/share/man"
|
||||
AMANDIR="/usr/share/man"
|
||||
PMANDIR="/usr/share/man"
|
||||
;;
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
mandir="/usr/share/catman/u_man"
|
||||
AMANDIR="/usr/share/catman/a_man"
|
||||
PMANDIR="/usr/share/catman/p_man"
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
mandir="/usr/man"
|
||||
AMANDIR="/usr/man"
|
||||
PMANDIR="/usr/man"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
AMANDIR="$mandir"
|
||||
PMANDIR="$mandir"
|
||||
fi
|
||||
|
||||
AC_SUBST(AMANDIR)
|
||||
AC_SUBST(PMANDIR)
|
||||
|
||||
dnl Setup manpage extensions...
|
||||
case "$uname" in
|
||||
*BSD* | Darwin*)
|
||||
# *BSD
|
||||
CAT1EXT=0
|
||||
CAT3EXT=0
|
||||
CAT5EXT=0
|
||||
CAT8EXT=0
|
||||
MAN8EXT=8
|
||||
MAN8DIR=8
|
||||
;;
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
CAT1EXT=z
|
||||
CAT3EXT=z
|
||||
CAT5EXT=z
|
||||
CAT8EXT=z
|
||||
MAN8EXT=1m
|
||||
MAN8DIR=1
|
||||
;;
|
||||
SunOS* | HP-UX*)
|
||||
# Solaris and HP-UX
|
||||
CAT1EXT=1
|
||||
CAT3EXT=3
|
||||
CAT5EXT=5
|
||||
CAT8EXT=1m
|
||||
MAN8EXT=1m
|
||||
MAN8DIR=1m
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
CAT1EXT=1
|
||||
CAT3EXT=3
|
||||
CAT5EXT=5
|
||||
CAT8EXT=8
|
||||
MAN8EXT=8
|
||||
MAN8DIR=8
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(CAT1EXT)
|
||||
AC_SUBST(CAT3EXT)
|
||||
AC_SUBST(CAT5EXT)
|
||||
AC_SUBST(CAT8EXT)
|
||||
AC_SUBST(MAN8EXT)
|
||||
AC_SUBST(MAN8DIR)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-manpages.m4 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,48 @@
|
||||
dnl
|
||||
dnl "$Id: cups-network.m4 3349 2003-02-12 19:31:12Z mike $"
|
||||
dnl
|
||||
dnl Networking stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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_CHECK_FUNCS(rresvport getifaddrs hstrerror)
|
||||
|
||||
AC_CHECK_MEMBER(struct sockaddr.sa_len,,,[#include <sys/socket.h>])
|
||||
AC_CHECK_HEADER(sys/sockio.h,AC_DEFINE(HAVE_SYS_SOCKIO_H))
|
||||
|
||||
AC_SUBST(NETLIBS)
|
||||
|
||||
maxfiles=4096
|
||||
|
||||
AC_ARG_WITH(maxfiles, [ --with-maxfiles=N set maximum number of file descriptors for CUPS. ],
|
||||
maxfiles=$withval)
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_MAX_FDS, $maxfiles)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-network.m4 3349 2003-02-12 19:31:12Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,48 @@
|
||||
dnl
|
||||
dnl "$Id: cups-openslp.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl OpenSLP configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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"
|
||||
CPPFLAGS="-I$withval $CPPFLAGS",)
|
||||
|
||||
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 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,109 @@
|
||||
dnl
|
||||
dnl "$Id: cups-openssl.m4 3250 2003-01-28 13:35:56Z mike $"
|
||||
dnl
|
||||
dnl OpenSSL/GNUTLS stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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_ENABLE(openssl, [ --enable-openssl use OpenSSL for SSL/TLS support, default=yes])
|
||||
AC_ARG_ENABLE(gnutls, [ --enable-gnutls use GNU TLS for SSL/TLS support, default=yes])
|
||||
AC_ARG_ENABLE(cdsassl, [ --enable-cdsassl use CDSA for 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"
|
||||
CPPFLAGS="-I$withval $CPPFLAGS",)
|
||||
|
||||
SSLLIBS=""
|
||||
|
||||
if test x$enable_ssl != xno; then
|
||||
dnl Check for the OpenSSL library first, which has precedence over
|
||||
dnl CDSA and GNUTLS...
|
||||
if test "x${SSLLIBS}" = "x" -a "x${enable_openssl}" != "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_SSL)
|
||||
AC_DEFINE(HAVE_LIBSSL)],,
|
||||
$libcrypto)
|
||||
|
||||
if test "x${SSLLIBS}" != "x"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
LIBS="$SAVELIBS")
|
||||
fi
|
||||
|
||||
dnl If OpenSSL wasn't found, look for CDSA...
|
||||
if test "x${SSLLIBS}" = "x" -a "x${enable_cdsassl}" != "xno"; then
|
||||
if test $uname = Darwin; then
|
||||
AC_CHECK_HEADER(Security/SecureTransport.h,
|
||||
[SSLLIBS="-framework CoreFoundation -framework Security"
|
||||
AC_DEFINE(HAVE_SSL)
|
||||
AC_DEFINE(HAVE_CDSASSL)])
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Then look for GNU TLS...
|
||||
if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno"; then
|
||||
AC_CHECK_HEADER(gnutls/gnutls.h,
|
||||
dnl Save the current libraries so the crypto stuff isn't always
|
||||
dnl included...
|
||||
SAVELIBS="$LIBS"
|
||||
|
||||
TEST_GNUTLS_LIBS=`libgnutls-config --libs`
|
||||
AC_CHECK_LIB(gnutls, gnutls_init,
|
||||
[SSLLIBS=$TEST_GNUTLS_LIBS
|
||||
AC_DEFINE(HAVE_SSL)
|
||||
AC_DEFINE(HAVE_GNUTLS)],,
|
||||
$TEST_GNUTLS_LIBS)
|
||||
|
||||
LIBS="$SAVELIBS")
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(SSLLIBS)
|
||||
|
||||
EXPORT_SSLLIBS="$SSLLIBS"
|
||||
AC_SUBST(EXPORT_SSLLIBS)
|
||||
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-openssl.m4 3250 2003-01-28 13:35:56Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,90 @@
|
||||
dnl
|
||||
dnl "$Id: cups-opsys.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl Operating system stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 x$uname = xDarwin; then
|
||||
CUPS_GROUP="admin"
|
||||
AC_MSG_RESULT(Darwin, using "$CUPS_GROUP")
|
||||
else
|
||||
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
|
||||
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 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
@@ -0,0 +1,71 @@
|
||||
dnl
|
||||
dnl "$Id: cups-pam.m4 3041 2002-12-17 19:00:27Z swdev $"
|
||||
dnl
|
||||
dnl PAM stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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=""
|
||||
PAMMOD="pam_unknown.so"
|
||||
|
||||
if test x$enable_pam != xno; then
|
||||
SAVELIBS="$LIBS"
|
||||
|
||||
AC_CHECK_LIB(dl,dlopen)
|
||||
AC_CHECK_LIB(pam,pam_start)
|
||||
AC_CHECK_HEADER(pam/pam_appl.h,AC_DEFINE(HAVE_PAM_PAM_APPL_H))
|
||||
|
||||
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"
|
||||
|
||||
# This test might need to be updated as Linux distributors move
|
||||
# things around...
|
||||
for mod in pam_unix2.so pam_unix.so pam_pwdb.so; do
|
||||
if test -f /lib/security/$mod; then
|
||||
PAMMOD="$mod"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
AC_SUBST(PAMDIR)
|
||||
AC_SUBST(PAMLIBS)
|
||||
AC_SUBST(PAMMOD)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-pam.m4 3041 2002-12-17 19:00:27Z swdev $".
|
||||
dnl
|
||||
@@ -0,0 +1,91 @@
|
||||
dnl
|
||||
dnl "$Id: cups-scripting.m4 3472 2003-03-14 17:04:09Z mike $"
|
||||
dnl
|
||||
dnl Scripting configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 Do we have Java?
|
||||
AC_ARG_WITH(java, [ --with-java set Java interpreter for web interfaces ],
|
||||
CUPS_JAVA="$withval",
|
||||
CUPS_JAVA="")
|
||||
|
||||
if test "x$CUPS_JAVA" = x; then
|
||||
AC_PATH_PROG(JAVA,java)
|
||||
CUPS_JAVA="$JAVA"
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_JAVA, "$CUPS_JAVA")
|
||||
|
||||
if test "x$CUPS_JAVA" != x; then
|
||||
AC_DEFINE(HAVE_JAVA)
|
||||
fi
|
||||
|
||||
dnl Do we have Perl?
|
||||
AC_ARG_WITH(perl, [ --with-perl set Perl interpreter for web interfaces ],
|
||||
CUPS_PERL="$withval",
|
||||
CUPS_PERL="")
|
||||
|
||||
if test "x$CUPS_PERL" = x; then
|
||||
AC_PATH_PROG(PERL,perl)
|
||||
CUPS_PERL="$PERL"
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_PERL, "$CUPS_PERL")
|
||||
|
||||
if test "x$CUPS_PERL" != x; then
|
||||
AC_DEFINE(HAVE_PERL)
|
||||
fi
|
||||
|
||||
dnl Do we have PHP?
|
||||
AC_ARG_WITH(php, [ --with-php set PHP interpreter for web interfaces ],
|
||||
CUPS_PHP="$withval",
|
||||
CUPS_PHP="")
|
||||
|
||||
if test "x$CUPS_PHP" = x; then
|
||||
AC_PATH_PROG(PHP,php)
|
||||
CUPS_PHP="$PHP"
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_PHP, "$CUPS_PHP")
|
||||
|
||||
if test "x$CUPS_PHP" != x; then
|
||||
AC_DEFINE(HAVE_PHP)
|
||||
fi
|
||||
|
||||
dnl Do we have Python?
|
||||
AC_ARG_WITH(python, [ --with-python set Python interpreter for web interfaces ],
|
||||
CUPS_PYTHON="$withval",
|
||||
CUPS_PYTHON="")
|
||||
|
||||
if test "x$CUPS_PYTHON" = x; then
|
||||
AC_PATH_PROG(PYTHON,python)
|
||||
CUPS_PYTHON="$PYTHON"
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(CUPS_PYTHON, "$CUPS_PYTHON")
|
||||
|
||||
if test "x$CUPS_PYTHON" != x; then
|
||||
AC_DEFINE(HAVE_PYTHON)
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-scripting.m4 3472 2003-03-14 17:04:09Z mike $".
|
||||
dnl
|
||||
@@ -0,0 +1,156 @@
|
||||
dnl
|
||||
dnl "$Id: cups-sharedlibs.m4 3737 2003-05-16 19:07:15Z mike $"
|
||||
dnl
|
||||
dnl Shared library support for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2003 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 \$@"
|
||||
;;
|
||||
IRIX*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-rpath,\$(libdir),-set_version,sgi2.5,-soname,\$@ -shared \$(OPTIM)"
|
||||
;;
|
||||
OSF1* | Linux* | *BSD*)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-soname,\$@ -shared \$(OPTIM)"
|
||||
;;
|
||||
Darwin*)
|
||||
LIBCUPS="libcups.2.dylib"
|
||||
LIBCUPSIMAGE="libcupsimage.2.dylib"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS \$(RC_CFLAGS) -dynamiclib -lc"
|
||||
;;
|
||||
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)
|
||||
|
||||
if test x$enable_shared = xno; then
|
||||
LINKCUPS="../cups/libcups.a \$(SSLLIBS)"
|
||||
LINKCUPSIMAGE="../filter/libcupsimage.a"
|
||||
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...
|
||||
EXPORT_LDFLAGS=""
|
||||
|
||||
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="+s +b $libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,+s,+b,$libdir"
|
||||
EXPORT_LDFLAGS="-Wl,+s,+b,$libdir"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
DSOFLAGS="-R$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -R$libdir"
|
||||
EXPORT_LDFLAGS="-R$libdir"
|
||||
;;
|
||||
*BSD*)
|
||||
# *BSD
|
||||
DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,-R$libdir"
|
||||
EXPORT_LDFLAGS="-Wl,-R$libdir"
|
||||
;;
|
||||
Linux*)
|
||||
# Linux
|
||||
DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir"
|
||||
EXPORT_LDFLAGS="-Wl,-rpath,$libdir"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
DSOLIBS=""
|
||||
IMGLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
|
||||
fi
|
||||
|
||||
AC_SUBST(DSOLIBS)
|
||||
AC_SUBST(IMGLIBS)
|
||||
AC_SUBST(EXPORT_LDFLAGS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-sharedlibs.m4 3737 2003-05-16 19:07:15Z mike $".
|
||||
dnl
|
||||
+153
-3
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* @configure_input@
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 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,23 @@
|
||||
* Version of software...
|
||||
*/
|
||||
|
||||
#define CUPS_SVERSION "CUPS v1.1.3"
|
||||
#define CUPS_SVERSION "CUPS v1.1.19rc3"
|
||||
|
||||
|
||||
/*
|
||||
* Default user and group...
|
||||
*/
|
||||
|
||||
#define CUPS_DEFAULT_USER "lp"
|
||||
#define CUPS_DEFAULT_GROUP "sys"
|
||||
|
||||
|
||||
/*
|
||||
* Maximum number of file descriptors to support.
|
||||
*/
|
||||
|
||||
#define CUPS_MAX_FDS 4096
|
||||
|
||||
|
||||
/*
|
||||
* Where are files stored?
|
||||
@@ -44,6 +60,13 @@
|
||||
#define CUPS_FONTPATH "/usr/share/cups/fonts"
|
||||
|
||||
|
||||
/*
|
||||
* What is the format string for strftime?
|
||||
*/
|
||||
|
||||
#define CUPS_STRFTIME_FORMAT NULL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have various image libraries?
|
||||
*/
|
||||
@@ -53,12 +76,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?
|
||||
*/
|
||||
@@ -68,6 +93,7 @@
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
#undef HAVE_NDIR_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have PAM stuff?
|
||||
*/
|
||||
@@ -76,18 +102,32 @@
|
||||
#define HAVE_LIBPAM 0
|
||||
#endif /* !HAVE_LIBPAM */
|
||||
|
||||
#undef HAVE_PAM_PAM_APPL_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <shadow.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SHADOW_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <crypt.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_CRYPT_H
|
||||
|
||||
|
||||
/*
|
||||
* Use <string.h>, <strings.h>, and/or <bstring.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_STRING_H
|
||||
#undef HAVE_STRINGS_H
|
||||
#undef HAVE_BSTRING_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the strXXX() functions?
|
||||
*/
|
||||
@@ -95,6 +135,9 @@
|
||||
#undef HAVE_STRDUP
|
||||
#undef HAVE_STRCASECMP
|
||||
#undef HAVE_STRNCASECMP
|
||||
#undef HAVE_STRLCAT
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the vsyslog() function?
|
||||
@@ -102,6 +145,7 @@
|
||||
|
||||
#undef HAVE_VSYSLOG
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the (v)snprintf() functions?
|
||||
*/
|
||||
@@ -109,6 +153,7 @@
|
||||
#undef HAVE_SNPRINTF
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
|
||||
/*
|
||||
* What signal functions to use?
|
||||
*/
|
||||
@@ -116,6 +161,7 @@
|
||||
#undef HAVE_SIGSET
|
||||
#undef HAVE_SIGACTION
|
||||
|
||||
|
||||
/*
|
||||
* What wait functions to use?
|
||||
*/
|
||||
@@ -123,6 +169,110 @@
|
||||
#undef HAVE_WAITPID
|
||||
#undef HAVE_WAIT3
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the mallinfo function and malloc.h?
|
||||
*/
|
||||
|
||||
#undef HAVE_MALLINFO
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
|
||||
/*
|
||||
* Which encryption libraries do we have?
|
||||
*/
|
||||
|
||||
#undef HAVE_CDSASSL
|
||||
#undef HAVE_GNUTLS
|
||||
#undef HAVE_LIBSSL
|
||||
#undef HAVE_SSL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the OpenSLP library?
|
||||
*/
|
||||
|
||||
#undef HAVE_LIBSLP
|
||||
|
||||
|
||||
/*
|
||||
* Do we have libpaper?
|
||||
*/
|
||||
|
||||
#undef HAVE_LIBPAPER
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <sys/ioctl.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SYS_IOCTL_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have mkstemp() and/or mkstemps()?
|
||||
*/
|
||||
|
||||
#undef HAVE_MKSTEMP
|
||||
#undef HAVE_MKSTEMPS
|
||||
|
||||
|
||||
/*
|
||||
* Does the "tm" structure contain the "tm_gmtoff" member?
|
||||
*/
|
||||
|
||||
#undef HAVE_TM_GMTOFF
|
||||
|
||||
|
||||
/*
|
||||
* Do we have rresvport()?
|
||||
*/
|
||||
|
||||
#undef HAVE_RRESVPORT
|
||||
|
||||
|
||||
/*
|
||||
* Do we have getifaddrs()?
|
||||
*/
|
||||
|
||||
#undef HAVE_GETIFADDRS
|
||||
|
||||
|
||||
/*
|
||||
* Do we have hstrerror()?
|
||||
*/
|
||||
|
||||
#undef HAVE_HSTRERROR
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the <sys/sockio.h> header file?
|
||||
*/
|
||||
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
|
||||
/*
|
||||
* Does the sockaddr structure contain an sa_len parameter?
|
||||
*/
|
||||
|
||||
#undef HAVE_STRUCT_SOCKADDR_SA_LEN
|
||||
|
||||
|
||||
/*
|
||||
* Various scripting languages...
|
||||
*/
|
||||
|
||||
#undef HAVE_JAVA
|
||||
#define CUPS_JAVA "/usr/bin/java"
|
||||
#undef HAVE_PERL
|
||||
#define CUPS_PERL "/usr/bin/perl"
|
||||
#undef HAVE_PHP
|
||||
#define CUPS_PHP "/usr/bin/php"
|
||||
#undef HAVE_PYTHON
|
||||
#define CUPS_PYTHON "/usr/bin/python"
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+16
-507
@@ -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-2003 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,518 +23,27 @@ 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:=}"
|
||||
sinclude(config-scripts/cups-scripting.m4)
|
||||
|
||||
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])
|
||||
AC_OUTPUT(Makedefs cups.list cups.sh cups-config conf/cupsd.conf conf/pam.conf)
|
||||
|
||||
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]])
|
||||
|
||||
AC_ARG_WITH(fontpath, [ --with-fontpath set font path for pstoraster],fontpath="$withval",fontpath="")
|
||||
|
||||
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(CHOWN,chown)
|
||||
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"; 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 "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"; 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 "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 Fix "fontpath" variable...
|
||||
if test "x$fontpath" = "x"; then
|
||||
fontpath="$datadir/cups/fonts"
|
||||
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 init.d locations...
|
||||
if test $prefix = "/"; then
|
||||
case "$uname" in
|
||||
FreeBSD* | NetBSD* | OpenBSD*)
|
||||
# *BSD
|
||||
INITDIR=""
|
||||
INITDDIR=""
|
||||
;;
|
||||
|
||||
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"
|
||||
;;
|
||||
|
||||
*)
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
;;
|
||||
|
||||
esac
|
||||
else
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
fi
|
||||
|
||||
AC_SUBST(INITDIR)
|
||||
AC_SUBST(INITDDIR)
|
||||
|
||||
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)
|
||||
|
||||
dnl Set the CUPS_FONTPATH directory...
|
||||
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$fontpath")
|
||||
|
||||
AC_OUTPUT(Makedefs cups.sh)
|
||||
chmod +x cups-config
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
|
||||
Arquivo executável
+134
@@ -0,0 +1,134 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# "$Id$"
|
||||
#
|
||||
# CUPS configuration utility.
|
||||
#
|
||||
# Copyright 2001-2003 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
|
||||
#
|
||||
|
||||
VERSION="@CUPS_VERSION@"
|
||||
APIVERSION="1.1"
|
||||
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
bindir=@bindir@
|
||||
includedir=@includedir@
|
||||
libdir=@libdir@
|
||||
datadir=@datadir@
|
||||
sysconfdir=@sysconfdir@
|
||||
cups_datadir=@CUPS_DATADIR@
|
||||
cups_serverbin=@CUPS_SERVERBIN@
|
||||
cups_serverroot=@CUPS_SERVERROOT@
|
||||
|
||||
# flags for C++ compiler:
|
||||
CFLAGS=""
|
||||
LDFLAGS="@EXPORT_LDFLAGS@"
|
||||
LIBS="@EXPORT_SSLLIBS@ @NETLIBS@"
|
||||
IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@ @EXPORT_LIBZ@"
|
||||
|
||||
if test $includedir != /usr/include; then
|
||||
CFLAGS="$CFLAGS -I$includedir"
|
||||
fi
|
||||
|
||||
if test $libdir != /usr/lib -a $libdir != /usr/lib32; then
|
||||
LDFLAGS="$LDFLAGS -L$libdir"
|
||||
fi
|
||||
|
||||
usage ()
|
||||
{
|
||||
echo "Usage: cups-config --api-version"
|
||||
echo " cups-config --cflags"
|
||||
echo " cups-config --datadir"
|
||||
echo " cups-config --help"
|
||||
echo " cups-config --ldflags"
|
||||
echo " cups-config [--image] [--static] --libs"
|
||||
echo " cups-config --serverbin"
|
||||
echo " cups-config --serverroot"
|
||||
echo " cups-config --version"
|
||||
|
||||
exit $1
|
||||
}
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage 1
|
||||
fi
|
||||
|
||||
# Parse command line options
|
||||
static=no
|
||||
image=no
|
||||
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
--api-version)
|
||||
echo $APIVERSION
|
||||
;;
|
||||
--cflags)
|
||||
echo $CFLAGS
|
||||
;;
|
||||
--datadir)
|
||||
echo $cups_datadir
|
||||
;;
|
||||
--help)
|
||||
usage 0
|
||||
;;
|
||||
--image)
|
||||
image=yes
|
||||
;;
|
||||
--ldflags)
|
||||
echo $LDFLAGS
|
||||
;;
|
||||
--libs)
|
||||
if test $static = no; then
|
||||
if test $image = no; then
|
||||
echo -lcups $LIBS
|
||||
else
|
||||
echo -lcupsimage $IMGLIBS -lcups $LIBS
|
||||
fi
|
||||
else
|
||||
if test $image = no; then
|
||||
echo $libdir/libcups.a $LIBS
|
||||
else
|
||||
echo $libdir/libcupsimage.a $IMGLIBS $libdir/libcups.a $LIBS
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
--serverbin)
|
||||
echo $cups_serverbin
|
||||
;;
|
||||
--serverroot)
|
||||
echo $cups_serverroot
|
||||
;;
|
||||
--static)
|
||||
static=yes
|
||||
;;
|
||||
--version)
|
||||
echo $VERSION
|
||||
;;
|
||||
*)
|
||||
usage 1
|
||||
;;
|
||||
esac
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
+61
-61
@@ -15,7 +15,55 @@ Package=<4>
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "cupsd"=.\scheduler\cupsd.dsp - Package Owner=<4>
|
||||
Project: "enumports"=.\visualc\enumports.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "fltk"="..\fltk-1.1\visualc\fltk.lib.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "fltkimages"="..\fltk-1.1\visualc\fltkimages.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "gui"=.\gui\gui.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "printers"=.\gui\printers.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
@@ -26,26 +74,23 @@ 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
|
||||
Project_Dep_Name fltk
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name gui
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name fltkimages
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name zlib
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "image"=.\filter\image.dsp - Package Owner=<4>
|
||||
Project: "restartspooler"=.\visualc\restartspooler.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
@@ -57,7 +102,7 @@ Package=<4>
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "pstops"=.\filter\pstops.dsp - Package Owner=<4>
|
||||
Project: "zlib"="..\htmldoc-1.8\visualc\zlib.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
@@ -69,51 +114,6 @@ 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>
|
||||
|
||||
-511
@@ -1,511 +0,0 @@
|
||||
#
|
||||
# "$Id: cups.list 1313 2000-08-24 17:54:28Z 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.3
|
||||
%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 0700 lp sys $REQUESTS -
|
||||
d 1700 lp 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/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
|
||||
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/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/sps.html doc/sps.html
|
||||
f 0444 root sys $DOCDIR/sps.pdf doc/sps.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 1313 2000-08-24 17:54:28Z mike $".
|
||||
#
|
||||
+502
@@ -0,0 +1,502 @@
|
||||
#
|
||||
# "$Id$"
|
||||
#
|
||||
# ESP Package Manager (EPM) file list for the Common UNIX Printing
|
||||
# System (CUPS).
|
||||
#
|
||||
# Copyright 1997-2003 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-2003 by Easy Software Products, All Rights Reserved.
|
||||
%vendor Easy Software Products
|
||||
%license LICENSE.txt
|
||||
%readme README.txt
|
||||
%version @CUPS_VERSION@
|
||||
%description The Common UNIX Printing System provides a portable printing
|
||||
%description layer for UNIX® operating systems. It has been developed by
|
||||
%description Easy Software Products to promote a standard printing solution
|
||||
%description for all UNIX vendors and users. CUPS provides the System V and
|
||||
%description Berkeley command-line interfaces.
|
||||
%provides cups-devel
|
||||
%provides cups-libs
|
||||
%provides cupsys
|
||||
%provides cupsys-bsd
|
||||
%provides cupsys-client
|
||||
%provides cupsys-devel
|
||||
%provides libcups1
|
||||
%provides libcupsys2
|
||||
%provides libcupsys2-dev
|
||||
|
||||
%format rpm deb portable
|
||||
%provides libcups.so.2
|
||||
%provides libcupsimage.so.2
|
||||
%format all
|
||||
|
||||
#
|
||||
# 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@
|
||||
$PMANDIR=@PMANDIR@
|
||||
$REQUESTS=@CUPS_REQUESTS@
|
||||
$SBINDIR=@sbindir@
|
||||
$SERVERBIN=@CUPS_SERVERBIN@
|
||||
$SERVERROOT=@CUPS_SERVERROOT@
|
||||
|
||||
$CUPS_USER=@CUPS_USER@
|
||||
$CUPS_GROUP=@CUPS_GROUP@
|
||||
|
||||
$CAT1EXT=@CAT1EXT@
|
||||
$CAT3EXT=@CAT3EXT@
|
||||
$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
|
||||
|
||||
# Make sure the shared libraries are refreshed...
|
||||
%system linux
|
||||
%postinstall ldconfig
|
||||
%system all
|
||||
|
||||
# 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/scsi backend/scsi
|
||||
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/gziptoany filter/gziptoany
|
||||
f 0555 root sys $SERVERBIN/filter/hpgltops filter/hpgltops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetops filter/imagetops
|
||||
f 0555 root sys $SERVERBIN/filter/imagetoraster filter/imagetoraster
|
||||
f 0555 root sys $SERVERBIN/filter/pdftops pdftops/pdftops
|
||||
f 0555 root sys $SERVERBIN/filter/pstops filter/pstops
|
||||
f 0555 root sys $SERVERBIN/filter/rastertodymo filter/rastertodymo
|
||||
f 0555 root sys $SERVERBIN/filter/rastertoepson filter/rastertoepson
|
||||
f 0555 root sys $SERVERBIN/filter/rastertohp filter/rastertohp
|
||||
f 0555 root sys $SERVERBIN/filter/texttops filter/texttops
|
||||
|
||||
# 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/cupsaddsmb systemv/cupsaddsmb
|
||||
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/cupstestppd systemv/cupstestppd
|
||||
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 darwin
|
||||
f 0555 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib
|
||||
l 0555 root sys $LIBDIR/libcups.dylib libcups.2.dylib
|
||||
f 0555 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib
|
||||
l 0555 root sys $LIBDIR/libcupsimage.dylib libcupsimage.2.dylib
|
||||
%system !hpux !aix !darwin
|
||||
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/be/cups_be locale/be/cups_be
|
||||
f 0444 root sys $LOCALEDIR/cs/cups_cs locale/cs/cups_cs
|
||||
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/en_US/cups_en_US locale/en_US/cups_en_US
|
||||
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
|
||||
f 0444 root sys $LOCALEDIR/ru_RU/cups_ru_RU locale/ru_RU/cups_ru_RU
|
||||
f 0444 root sys $LOCALEDIR/sv/cups_sv locale/sv/cups_sv
|
||||
f 0444 root sys $LOCALEDIR/uk/cups_uk locale/uk/cups_uk
|
||||
f 0444 root sys $LOCALEDIR/uk_UA/cups_uk_UA locale/uk_UA/cups_uk_UA
|
||||
f 0444 root sys $LOCALEDIR/zh_CN/cups_zh_CN locale/zh_CN/cups_zh_CN
|
||||
|
||||
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-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/iso-8859-10 data/iso-8859-10
|
||||
f 0444 root sys $DATADIR/charsets/iso-8859-13 data/iso-8859-13
|
||||
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/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/Courier*
|
||||
f 0444 root sys $DATADIR/fonts/Symbol fonts/Symbol
|
||||
|
||||
d 0555 root sys $DATADIR/model -
|
||||
f 0444 root sys $DATADIR/model ppd/*.ppd
|
||||
|
||||
d 0555 root sys $DATADIR/templates -
|
||||
c 0444 root sys $DATADIR/templates templates/*.tmpl
|
||||
|
||||
d 0555 root sys $DATADIR/templates/de -
|
||||
c 0444 root sys $DATADIR/templates/de templates/de/*.tmpl
|
||||
|
||||
d 0555 root sys $DATADIR/templates/fr -
|
||||
c 0444 root sys $DATADIR/templates/fr templates/fr/*.tmpl
|
||||
|
||||
# Config files
|
||||
d 0555 root sys $SERVERROOT -
|
||||
d 0711 $CUPS_USER $CUPS_GROUP $SERVERROOT/certs -
|
||||
d 0755 root sys $SERVERROOT/interfaces -
|
||||
d 0755 root sys $SERVERROOT/ppd -
|
||||
c 0600 root sys $SERVERROOT conf/*.conf
|
||||
c 0600 root sys $SERVERROOT/mime.convs conf/mime.convs
|
||||
c 0600 root sys $SERVERROOT/mime.types conf/mime.types
|
||||
|
||||
%if PAMDIR
|
||||
d 0555 root sys $PAMDIR -
|
||||
|
||||
%system linux
|
||||
# Linux almost always supports PAM...
|
||||
c 0644 root sys $PAMDIR/cups conf/pam.conf
|
||||
|
||||
%system irix
|
||||
# IRIX doesn't normally support PAM, but the freeware project
|
||||
# includes a version of PAM that can be used...
|
||||
c 0644 root sys $PAMDIR/cups conf/pam.irix
|
||||
|
||||
%system all
|
||||
%endif
|
||||
|
||||
# Developer files
|
||||
f 0555 root sys $BINDIR/cups-config cups-config
|
||||
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
|
||||
f 0444 root sys $LIBDIR/libcupsimage.a filter/libcupsimage.a
|
||||
|
||||
# Documentation files
|
||||
d 0555 root sys $DOCDIR -
|
||||
f 0444 root sys $DOCDIR doc/*.css
|
||||
f 0444 root sys $DOCDIR doc/*.html
|
||||
f 0444 root sys $DOCDIR doc/*.pdf
|
||||
f 0444 root sys $DOCDIR/robots.txt doc/robots.txt
|
||||
d 0555 root sys $DOCDIR/de -
|
||||
f 0444 root sys $DOCDIR/de doc/de/*.css
|
||||
f 0444 root sys $DOCDIR/de doc/de/*.html
|
||||
f 0444 root sys $DOCDIR/de doc/de/*.pdf
|
||||
d 0555 root sys $DOCDIR/fr -
|
||||
f 0444 root sys $DOCDIR/fr doc/fr/*.css
|
||||
f 0444 root sys $DOCDIR/fr doc/fr/*.html
|
||||
f 0444 root sys $DOCDIR/fr doc/fr/*.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 -
|
||||
d 0555 root sys $PMANDIR -
|
||||
d 0555 root sys $PMANDIR/cat3 -
|
||||
d 0555 root sys $PMANDIR/man3 -
|
||||
|
||||
f 0444 root sys $MANDIR/cat1/backend.$CAT1EXT man/backend.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/cat1/cupstestppd.$CAT1EXT man/cupstestppd.$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 $PMANDIR/cat3/cups-config.$CAT3EXT man/cups-config.$CAT3EXT
|
||||
|
||||
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/cupsaddsmb.$CAT8EXT man/cupsaddsmb.$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/cupstestppd.$MAN1EXT man/cupstestppd.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.$MAN1EXT
|
||||
|
||||
f 0444 root sys $PMANDIR/man3/cups-config.$MAN3EXT man/cups-config.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.$MAN8EXT
|
||||
f 0444 root sys $AMANDIR/man$MAN8DIR/cupsaddsmb.$MAN8EXT man/cupsaddsmb.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.$MAN8EXT
|
||||
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
|
||||
|
||||
d 0555 root sys $AMANDIR/fr -
|
||||
d 0555 root sys $AMANDIR/fr/cat$MAN8DIR -
|
||||
d 0555 root sys $AMANDIR/fr/man$MAN8DIR -
|
||||
d 0555 root sys $MANDIR/fr -
|
||||
d 0555 root sys $MANDIR/fr/cat1 -
|
||||
d 0555 root sys $MANDIR/fr/cat5 -
|
||||
d 0555 root sys $MANDIR/fr/man1 -
|
||||
d 0555 root sys $MANDIR/fr/man5 -
|
||||
d 0555 root sys $PMANDIR/fr -
|
||||
d 0555 root sys $PMANDIR/fr/cat3 -
|
||||
d 0555 root sys $PMANDIR/fr/man3 -
|
||||
|
||||
f 0444 root sys $MANDIR/fr/cat1/backend.$CAT1EXT man/backend.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/filter.$CAT1EXT man/filter.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lpoptions.$CAT1EXT man/lpoptions.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lppasswd.$CAT1EXT man/lppasswd.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lpq.$CAT1EXT man/lpq.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lprm.$CAT1EXT man/lprm.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lpr.$CAT1EXT man/lpr.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lpstat.$CAT1EXT man/lpstat.$CAT1EXT
|
||||
f 0444 root sys $MANDIR/fr/cat1/lp.$CAT1EXT man/lp.$CAT1EXT
|
||||
l 0444 root sys $MANDIR/fr/cat1/cancel.$CAT1EXT lp.$CAT1EXT
|
||||
|
||||
f 0444 root sys $PMANDIR/fr/cat3/cups-config.$CAT3EXT man/cups-config.$CAT3EXT
|
||||
|
||||
f 0444 root sys $MANDIR/fr/cat5/classes.conf.$CAT5EXT man/classes.conf.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/fr/cat5/cupsd.conf.$CAT5EXT man/cupsd.conf.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/fr/cat5/mime.convs.$CAT5EXT man/mime.convs.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/fr/cat5/mime.types.$CAT5EXT man/mime.types.$CAT5EXT
|
||||
f 0444 root sys $MANDIR/fr/cat5/printers.conf.$CAT5EXT man/printers.conf.$CAT5EXT
|
||||
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/accept.$CAT8EXT man/accept.$CAT8EXT
|
||||
l 0444 root sys $AMANDIR/fr/cat$MAN8DIR/reject.$CAT8EXT accept.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/cupsaddsmb.$CAT8EXT man/cupsaddsmb.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/cups-lpd.$CAT8EXT man/cups-lpd.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/cups-polld.$CAT8EXT man/cups-polld.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/cupsd.$CAT8EXT man/cupsd.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/enable.$CAT8EXT man/enable.$CAT8EXT
|
||||
l 0444 root sys $AMANDIR/fr/cat$MAN8DIR/disable.$CAT8EXT enable.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/lpadmin.$CAT8EXT man/lpadmin.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/lpc.$CAT8EXT man/lpc.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/lpinfo.$CAT8EXT man/lpinfo.$CAT8EXT
|
||||
f 0444 root sys $AMANDIR/fr/cat$MAN8DIR/lpmove.$CAT8EXT man/lpmove.$CAT8EXT
|
||||
|
||||
f 0444 root sys $MANDIR/fr/man1/backend.$MAN1EXT man/backend.man
|
||||
f 0444 root sys $MANDIR/fr/man1/filter.$MAN1EXT man/filter.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lpoptions.$MAN1EXT man/lpoptions.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lppasswd.$MAN1EXT man/lppasswd.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lpq.$MAN1EXT man/lpq.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lprm.$MAN1EXT man/lprm.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lpr.$MAN1EXT man/lpr.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lpstat.$MAN1EXT man/lpstat.man
|
||||
f 0444 root sys $MANDIR/fr/man1/lp.$MAN1EXT man/lp.man
|
||||
l 0444 root sys $MANDIR/fr/man1/cancel.$MAN1EXT lp.$MAN1EXT
|
||||
|
||||
f 0444 root sys $PMANDIR/fr/man3/cups-config.$MAN3EXT man/cups-config.man
|
||||
|
||||
f 0444 root sys $MANDIR/fr/man5/classes.conf.$MAN5EXT man/classes.conf.man
|
||||
f 0444 root sys $MANDIR/fr/man5/cupsd.conf.$MAN5EXT man/cupsd.conf.man
|
||||
f 0444 root sys $MANDIR/fr/man5/mime.convs.$MAN5EXT man/mime.convs.man
|
||||
f 0444 root sys $MANDIR/fr/man5/mime.types.$MAN5EXT man/mime.types.man
|
||||
f 0444 root sys $MANDIR/fr/man5/printers.conf.$MAN5EXT man/printers.conf.man
|
||||
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/accept.$MAN8EXT man/accept.man
|
||||
l 0444 root sys $AMANDIR/fr/man$MAN8DIR/reject.$MAN8EXT accept.$MAN8EXT
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/cupsaddsmb.$MAN8EXT man/cupsaddsmb.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/cups-polld.$MAN8EXT man/cups-polld.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/cupsd.$MAN8EXT man/cupsd.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/enable.$MAN8EXT man/enable.man
|
||||
l 0444 root sys $AMANDIR/fr/man$MAN8DIR/disable.$MAN8EXT enable.$MAN8EXT
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/lpadmin.$MAN8EXT man/lpadmin.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/lpc.$MAN8EXT man/lpc.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/lpinfo.$MAN8EXT man/lpinfo.man
|
||||
f 0444 root sys $AMANDIR/fr/man$MAN8DIR/lpmove.$MAN8EXT man/lpmove.man
|
||||
|
||||
# Startup script
|
||||
%system all
|
||||
i 0555 root sys cups cups.sh
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
|
||||
##
|
||||
# PrintingServices - a.k.a. CUPS
|
||||
##
|
||||
|
||||
. /etc/rc.common
|
||||
|
||||
StartService ()
|
||||
{
|
||||
if [ "${CUPS:=-YES-}" = "-YES-" ]; then
|
||||
ConsoleMessage "Starting printing services"
|
||||
/usr/sbin/cupsd
|
||||
fi
|
||||
}
|
||||
|
||||
StopService ()
|
||||
{
|
||||
# Until cupsd has a pid file...
|
||||
pid=`ps ax | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'`
|
||||
if test "$pid" != ""; then
|
||||
ConsoleMessage "Stopping printing services"
|
||||
kill "${pid}"
|
||||
fi
|
||||
}
|
||||
|
||||
RestartService ()
|
||||
{
|
||||
# Until cupsd has a pid file...
|
||||
pid=`ps ax | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'`
|
||||
if test "x$pid" != x; then
|
||||
ConsoleMessage "Restarting printing services"
|
||||
kill -HUP "${pid}"
|
||||
else
|
||||
StartService
|
||||
fi
|
||||
}
|
||||
|
||||
RunService "$1"
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Description = "Printing Services";
|
||||
Provides = ("PrintingServices");
|
||||
Requires = ("Resolver");
|
||||
Uses = ("Network Time");
|
||||
OrderPreference = "Late";
|
||||
}
|
||||
+130
-33
@@ -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-2003 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,74 +23,173 @@
|
||||
# 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
|
||||
|
||||
if $IS_ON verbose; then
|
||||
ECHO=echo
|
||||
else
|
||||
ECHO=:
|
||||
fi
|
||||
ECHO_OK=:
|
||||
ECHO_ERROR=:
|
||||
;;
|
||||
|
||||
*BSD*)
|
||||
IS_ON=:
|
||||
ECHO=echo
|
||||
ECHO_OK=:
|
||||
ECHO_ERROR=:
|
||||
;;
|
||||
|
||||
Darwin*)
|
||||
. /etc/rc.common
|
||||
|
||||
if test "${CUPS:=-YES-}" = "-NO-"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
IS_ON=:
|
||||
ECHO=ConsoleMessage
|
||||
ECHO_OK=:
|
||||
ECHO_ERROR=:
|
||||
;;
|
||||
|
||||
Linux*)
|
||||
IS_ON=/bin/true
|
||||
if test -f /etc/init.d/functions; then
|
||||
. /etc/init.d/functions
|
||||
ECHO=echo
|
||||
ECHO_OK="echo_success"
|
||||
ECHO_ERROR="echo_failure"
|
||||
else
|
||||
ECHO=echo
|
||||
ECHO_OK=:
|
||||
ECHO_ERROR=:
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
IS_ON=/bin/true
|
||||
ECHO=echo
|
||||
ECHO_OK=:
|
||||
ECHO_ERROR=:
|
||||
;;
|
||||
esac
|
||||
|
||||
# The verbose flag controls the printing of the names of
|
||||
# daemons as they are started.
|
||||
if $IS_ON verbose; then
|
||||
ECHO=echo
|
||||
else
|
||||
ECHO=:
|
||||
#### OS-Independent Stuff
|
||||
|
||||
#
|
||||
# Set the timezone, if possible... This allows the
|
||||
# scheduler and all child processes to know the local
|
||||
# timezone when reporting dates and times to the user.
|
||||
# If no timezone information is found, then Greenwich
|
||||
# Mean Time (GMT) will probably be used.
|
||||
#
|
||||
|
||||
for file in /etc/TIMEZONE /etc/rc.config /etc/sysconfig/clock; do
|
||||
if test -f $file; then
|
||||
. $file
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$ZONE" != x; then
|
||||
TZ="$ZONE"
|
||||
fi
|
||||
|
||||
# See if the CUPS server is running...
|
||||
if test "x$TIMEZONE" != x; then
|
||||
TZ="$TIMEZONE"
|
||||
fi
|
||||
|
||||
if test "x$TZ" != x; then
|
||||
export TZ
|
||||
fi
|
||||
|
||||
#
|
||||
# See if the CUPS server (cupsd) is running...
|
||||
#
|
||||
|
||||
case "`uname`" in
|
||||
IRIX* | HP-UX | SunOS)
|
||||
pid=`ps -e | awk '{print $1,$4}' | grep cupsd | awk '{print $1}'`
|
||||
HP-UX* | AIX* | SINIX*)
|
||||
pid=`ps -e | awk '{if (match($4, ".*/cupsd$") || $4 == "cupsd") print $1}'`
|
||||
;;
|
||||
OSF1)
|
||||
pid=`ps -e | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
|
||||
IRIX* | SunOS*)
|
||||
pid=`ps -e | nawk '{if (match($4, ".*/cupsd$") || $4 == "cupsd") print $1}'`
|
||||
;;
|
||||
Linux)
|
||||
pid=`ps ax | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
|
||||
UnixWare*)
|
||||
pid=`ps -e | awk '{if (match($6, ".*/cupsd$") || $6 == "cupsd") print $1}'`
|
||||
. /etc/TIMEZONE
|
||||
;;
|
||||
OSF1*)
|
||||
pid=`ps -e | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'`
|
||||
;;
|
||||
Linux* | *BSD* | Darwin*)
|
||||
pid=`ps ax | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'`
|
||||
;;
|
||||
*)
|
||||
pid=""
|
||||
;;
|
||||
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."
|
||||
if test $? != 0; then
|
||||
$ECHO_FAIL
|
||||
$ECHO "cups: unable to $1 scheduler."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
$ECHO_OK
|
||||
$ECHO "cups: ${1}ed scheduler."
|
||||
fi
|
||||
;;
|
||||
|
||||
stop)
|
||||
if test "$pid" != ""; then
|
||||
kill $pid
|
||||
$ECHO "cups: scheduler stopped."
|
||||
$ECHO_OK
|
||||
$ECHO "cups: stopped scheduler."
|
||||
fi
|
||||
;;
|
||||
|
||||
status)
|
||||
if test "$pid" != ""; then
|
||||
echo "cups: Scheduler is running."
|
||||
echo "cups: scheduler is running."
|
||||
else
|
||||
echo "cups: Scheduler is not running."
|
||||
echo "cups: scheduler is not running."
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -106,6 +199,10 @@ case $1 in
|
||||
;;
|
||||
esac
|
||||
|
||||
#
|
||||
# Exit with no errors.
|
||||
#
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
|
||||
+95
-50
@@ -1,11 +1,11 @@
|
||||
#
|
||||
# "$Id: cups.spec 1339 2000-09-06 12:38:12Z mike $"
|
||||
# "$Id: cups.spec 3724 2003-05-14 18:24:38Z 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-2003 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,22 +26,32 @@
|
||||
|
||||
Summary: Common Unix Printing System
|
||||
Name: cups
|
||||
Version: 1.1.3
|
||||
Release: 0
|
||||
Version: 1.1.19
|
||||
Release: 1
|
||||
Copyright: GPL
|
||||
Group: System Environment/Daemons
|
||||
Source: ftp://ftp.easysw.com/pub/cups/%{version}/cups-%{version}-source.tar.gz
|
||||
Url: http://www.cups.org
|
||||
Packager: Michael Sweet <mike@easysw.com>
|
||||
Packager: Anonymous <anonymous@foo.com>
|
||||
Vendor: Easy Software Products
|
||||
# use buildroot so as not to disturb the version already installed
|
||||
|
||||
# Use buildroot so as not to disturb the version already installed
|
||||
BuildRoot: /var/tmp/%{name}-root
|
||||
Conflicts: lpr
|
||||
|
||||
# Dependencies...
|
||||
Conflicts: lpr, LPRng
|
||||
Provides: libcups.so.2
|
||||
Provides: libcupsimage.so.2
|
||||
|
||||
%package devel
|
||||
Summary: Common Unix Printing System - development environment
|
||||
Group: Development/Libraries
|
||||
|
||||
%package libs
|
||||
Summary: Common Unix Printing System - shared libraries
|
||||
Group: System Environment/Libraries
|
||||
Provides: libcups1
|
||||
|
||||
%description
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. It has been developed by Easy Software Products
|
||||
@@ -51,57 +61,46 @@ CUPS provides the System V and Berkeley command-line interfaces.
|
||||
%description devel
|
||||
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.
|
||||
additional printer drivers and other CUPS services.
|
||||
|
||||
%description libs
|
||||
The Common UNIX Printing System provides a portable printing layer for
|
||||
UNIX® operating systems. This package contains the CUPS shared libraries.
|
||||
|
||||
%prep
|
||||
%setup
|
||||
|
||||
%build
|
||||
./configure
|
||||
CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" ./configure
|
||||
|
||||
# If we got this far, all prerequisite libraries must be here.
|
||||
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
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc0.d
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc3.d
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc5.d
|
||||
|
||||
make prefix=$RPM_BUILD_ROOT \
|
||||
exec_prefix=$RPM_BUILD_ROOT/usr \
|
||||
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 \
|
||||
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
|
||||
make BUILDROOT=$RPM_BUILD_ROOT install
|
||||
|
||||
%post
|
||||
ldconfig
|
||||
|
||||
if test -x /sbin/chkconfig; then
|
||||
/sbin/chkconfig --add cups
|
||||
/sbin/chkconfig cups on
|
||||
fi
|
||||
|
||||
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
|
||||
# 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
|
||||
if test -f /sbin/init.d/cups; then
|
||||
@@ -124,7 +123,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%dir /etc/cups
|
||||
%config /etc/cups/*.conf
|
||||
%config(noreplace) /etc/cups/*.conf
|
||||
%dir /etc/cups/certs
|
||||
%dir /etc/cups/interfaces
|
||||
/etc/cups/mime.types
|
||||
@@ -136,39 +135,85 @@ rm -rf $RPM_BUILD_ROOT
|
||||
# RC dirs are a pain under Linux... Uncomment the appropriate ones if you
|
||||
# don't use Red Hat or Mandrake...
|
||||
|
||||
# OLD RedHat/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*
|
||||
# NEW RedHat/Mandrake
|
||||
#/etc/init.d/*
|
||||
#/etc/rc0.d/*
|
||||
#/etc/rc3.d/*
|
||||
#/etc/rc5.d/*
|
||||
|
||||
/usr/bin/cancel
|
||||
/usr/bin/disable
|
||||
/usr/bin/enable
|
||||
/usr/bin/lp*
|
||||
%dir /usr/lib/cups
|
||||
/usr/lib/cups/*
|
||||
/usr/man/*
|
||||
/usr/sbin/*
|
||||
%dir /usr/share/cups
|
||||
/usr/share/cups/*
|
||||
%dir /usr/share/doc/cups
|
||||
/usr/share/doc/cups/*
|
||||
%dir /usr/share/locale
|
||||
/usr/share/locale/*
|
||||
|
||||
%dir /usr/share/man/cat1
|
||||
/usr/share/man/cat1/*
|
||||
%dir /usr/share/man/cat5
|
||||
/usr/share/man/cat5/*
|
||||
%dir /usr/share/man/cat8
|
||||
/usr/share/man/cat8/*
|
||||
%dir /usr/share/man/man1
|
||||
/usr/share/man/man1/*
|
||||
%dir /usr/share/man/man5
|
||||
/usr/share/man/man5/*
|
||||
%dir /usr/share/man/man8
|
||||
/usr/share/man/man8/*
|
||||
|
||||
%dir /usr/share/man/fr/cat1
|
||||
/usr/share/man/fr/cat1/*
|
||||
%dir /usr/share/man/fr/cat5
|
||||
/usr/share/man/fr/cat5/*
|
||||
%dir /usr/share/man/fr/cat8
|
||||
/usr/share/man/fr/cat8/*
|
||||
%dir /usr/share/man/fr/man1
|
||||
/usr/share/man/fr/man1/*
|
||||
%dir /usr/share/man/fr/man5
|
||||
/usr/share/man/fr/man5/*
|
||||
%dir /usr/share/man/fr/man8
|
||||
/usr/share/man/fr/man8/*
|
||||
|
||||
%attr(0700,lp,root) %dir /var/spool/cups
|
||||
%attr(1700,lp,root) %dir/var/spool/cups/tmp
|
||||
%attr(1700,lp,root) %dir /var/spool/cups/tmp
|
||||
|
||||
%files devel
|
||||
/usr/bin/cups-config
|
||||
%dir /usr/include/cups
|
||||
/usr/include/cups/*
|
||||
/usr/lib/*.a
|
||||
|
||||
%dir /usr/share/man/cat3
|
||||
/usr/share/man/cat3/*
|
||||
%dir /usr/share/man/man3
|
||||
/usr/share/man/man3/*
|
||||
|
||||
%dir /usr/share/man/fr/cat3
|
||||
/usr/share/man/fr/cat3/*
|
||||
%dir /usr/share/man/fr/man3
|
||||
/usr/share/man/fr/man3/*
|
||||
|
||||
%files libs
|
||||
/usr/lib/*.so*
|
||||
|
||||
#
|
||||
# End of "$Id: cups.spec 1339 2000-09-06 12:38:12Z mike $".
|
||||
# End of "$Id: cups.spec 3724 2003-05-14 18:24:38Z mike $".
|
||||
#
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
|
||||
<plist version="0.9">
|
||||
<dict>
|
||||
<key>Starting printing services</key>
|
||||
<string>Starting printing services</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
libcups.a
|
||||
libcups.la
|
||||
libcups.sl
|
||||
libcups.sl.2
|
||||
libcups.so
|
||||
libcups.so.2
|
||||
libcups_s.a
|
||||
libcups.2.dylib
|
||||
libcups.dylib
|
||||
testhttp
|
||||
testipp
|
||||
testlang
|
||||
testppd
|
||||
@@ -0,0 +1,26 @@
|
||||
# DO NOT DELETE
|
||||
|
||||
attr.o: ppd.h debug.h string.h ../config.h
|
||||
dest.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h language.h
|
||||
emit.o: ppd.h string.h ../config.h
|
||||
encode.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h debug.h
|
||||
http.o: string.h ../config.h http.h md5.h http-private.h debug.h
|
||||
http-addr.o: string.h ../config.h http.h md5.h
|
||||
http-support.o: string.h ../config.h http.h md5.h ipp.h
|
||||
ipp.o: string.h ../config.h language.h ipp.h http.h md5.h debug.h
|
||||
ipp-support.o: string.h ../config.h language.h ipp.h http.h md5.h debug.h
|
||||
language.o: string.h ../config.h language.h cups_C.h
|
||||
mark.o: ppd.h string.h ../config.h debug.h
|
||||
md5.o: md5.h string.h ../config.h
|
||||
md5passwd.o: http.h string.h ../config.h md5.h
|
||||
options.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h debug.h
|
||||
page.o: ppd.h string.h ../config.h
|
||||
ppd.o: ppd.h string.h ../config.h language.h debug.h
|
||||
snprintf.o: string.h ../config.h
|
||||
string.o: string.h ../config.h
|
||||
tempfile.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h debug.h
|
||||
usersys.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h
|
||||
util.o: cups.h ipp.h http.h string.h ../config.h md5.h ppd.h language.h
|
||||
util.o: debug.h
|
||||
testhttp.o: http.h string.h ../config.h md5.h
|
||||
testlang.o: language.h
|
||||
+89
-43
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
# EMail: cups-info@cups.org
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
# This file is subject to the Apple OS-Developed Software exception.
|
||||
#
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
@@ -28,9 +30,11 @@ 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 = attr.o dest.o emit.o encode.o http.o http-addr.o \
|
||||
http-support.o ipp.o ipp-support.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 testipp.o testlang.o
|
||||
|
||||
|
||||
#
|
||||
@@ -44,7 +48,8 @@ HEADERS = cups.h http.h ipp.h language.h md5.h ppd.h
|
||||
# Targets in this directory...
|
||||
#
|
||||
|
||||
TARGETS = $(LIBCUPS) libcups.a
|
||||
TARGETS = $(LIBCUPS) libcups.a \
|
||||
testhttp testipp testlang
|
||||
|
||||
|
||||
#
|
||||
@@ -59,46 +64,92 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2`
|
||||
$(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2` libcups.dylib
|
||||
|
||||
|
||||
#
|
||||
# Update dependencies (without system header dependencies...)
|
||||
#
|
||||
|
||||
depend:
|
||||
makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
|
||||
|
||||
|
||||
#
|
||||
# Install object and target files...
|
||||
#
|
||||
|
||||
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: all installhdrs
|
||||
$(INSTALL_DIR) $(LIBDIR)
|
||||
$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
|
||||
if test $(LIBCUPS) != "libcups.a" -a $(LIBCUPS) != "libcups.la"; then \
|
||||
$(INSTALL_LIB) libcups.a $(LIBDIR); \
|
||||
$(RM) `basename $(LIBDIR)/$(LIBCUPS) .2`; \
|
||||
$(LN) $(LIBCUPS) `basename $(LIBDIR)/$(LIBCUPS) .2`; \
|
||||
if test $(LIBCUPS) = "libcups.so.2" -o $(LIBCUPS) = "libcups.sl.2"; then \
|
||||
$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
|
||||
$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
|
||||
fi
|
||||
if test $(LIBCUPS) = "libcups.2.dylib"; then \
|
||||
$(STRIP) -x $(LIBDIR)/$(LIBCUPS); \
|
||||
$(RM) $(LIBDIR)/libcups.dylib; \
|
||||
$(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \
|
||||
fi
|
||||
if test $(LIBCUPS) != "libcups.a"; then \
|
||||
$(INSTALL_LIB) libcups.a $(LIBDIR); \
|
||||
fi
|
||||
$(RANLIB) $(LIBDIR)/libcups.a
|
||||
|
||||
installhdrs:
|
||||
$(INSTALL_DIR) $(INCLUDEDIR)/cups
|
||||
for file in $(HEADERS); do \
|
||||
$(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
# 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) $(COMMONLIBS)
|
||||
$(RM) `basename $@ .2`
|
||||
$(LN) $@ `basename $@ .2`
|
||||
|
||||
|
||||
#
|
||||
# libcups.2.dylib
|
||||
#
|
||||
|
||||
libcups.2.dylib: $(LIBOBJS) ../Makedefs
|
||||
echo Linking $@...
|
||||
$(DSO) $(DSOFLAGS) -o $@ \
|
||||
-install_name $(libdir)/$@ \
|
||||
-current_version 2.5.0 \
|
||||
-compatibility_version 2.0.0 \
|
||||
$(LIBOBJS) $(SSLLIBS) $(COMMONLIBS)
|
||||
$(RM) libcups.dylib
|
||||
$(LN) $@ libcups.dylib
|
||||
|
||||
|
||||
#
|
||||
# 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) $(COMMONLIBS) -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:5 $(SSLLIBS) $(COMMONLIBS)
|
||||
|
||||
|
||||
#
|
||||
@@ -121,21 +172,6 @@ cups_C.h: ../locale/C/cups_C
|
||||
$(RM) cups_C.h
|
||||
$(AWK) '{print "\"" $$0 "\","}' < ../locale/C/cups_C > cups_C.h
|
||||
|
||||
dest.o: cups.h http.h ipp.h language.h string.h
|
||||
emit.o: ppd.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
|
||||
mark.o: ppd.h
|
||||
md5.o: md5.h
|
||||
options.o: cups.h
|
||||
page.o: ppd.h
|
||||
ppd.o: language.h ppd.h
|
||||
snprintf.o: string.h
|
||||
string.o: string.h
|
||||
usersys.o: cups.h
|
||||
util.o: cups.h http.h ipp.h
|
||||
|
||||
|
||||
#
|
||||
# testhttp (dependency on static CUPS library is intentional)
|
||||
@@ -143,22 +179,32 @@ util.o: cups.h http.h ipp.h
|
||||
|
||||
testhttp: testhttp.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS)
|
||||
|
||||
testhttp.o: http.h
|
||||
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS) $(SSLLIBS) $(COMMONLIBS)
|
||||
|
||||
|
||||
#
|
||||
# testppd (dependency on static CUPS library is intentional)
|
||||
# testipp (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testppd: testppd.o libcups.a
|
||||
testipp: testipp.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testppd.o libcups.a $(NETLIBS)
|
||||
$(CC) $(LDFLAGS) -o $@ testipp.o libcups.a $(NETLIBS) $(SSLLIBS) $(COMMONLIBS)
|
||||
|
||||
testppd.o: ppd.h
|
||||
|
||||
$(OBJS): ../Makedefs ../config.h
|
||||
#
|
||||
# testlang (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testlang: testlang.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testlang.o libcups.a $(NETLIBS) $(SSLLIBS) $(COMMONLIBS)
|
||||
|
||||
|
||||
#
|
||||
# Dependencies...
|
||||
#
|
||||
|
||||
include Dependencies
|
||||
|
||||
|
||||
#
|
||||
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* PPD model-specific attribute routines for the Common UNIX Printing System
|
||||
* (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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-9600
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ppdFindAttr() - Find the first matching attribute...
|
||||
* ppdFindNextAttr() - Find the next matching attribute...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "ppd.h"
|
||||
#include "debug.h"
|
||||
#include "string.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
/*
|
||||
* Private function...
|
||||
*/
|
||||
|
||||
extern int _ppd_attr_compare(ppd_attr_t **a, ppd_attr_t **b);
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdFindAttr()' - Find the first matching attribute...
|
||||
*/
|
||||
|
||||
ppd_attr_t * /* O - Attribute or NULL if not found */
|
||||
ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */
|
||||
const char *name, /* I - Attribute name */
|
||||
const char *spec) /* I - Specifier string or NULL */
|
||||
{
|
||||
ppd_attr_t key, /* Search key */
|
||||
*keyptr, /* Pointer to key */
|
||||
**match; /* Matching attribute */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (ppd == NULL || name == NULL || ppd->num_attrs == 0)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Do a binary search for a matching attribute...
|
||||
*/
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
strncpy(key.name, name, sizeof(key.name) - 1);
|
||||
if (spec)
|
||||
strncpy(key.spec, spec, sizeof(key.spec) - 1);
|
||||
|
||||
keyptr = &key;
|
||||
|
||||
match = bsearch(&keyptr, ppd->attrs, ppd->num_attrs, sizeof(ppd_attr_t *),
|
||||
(int (*)(const void *, const void *))_ppd_attr_compare);
|
||||
|
||||
if (match == NULL)
|
||||
{
|
||||
/*
|
||||
* No match!
|
||||
*/
|
||||
|
||||
ppd->cur_attr = -1;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (match > ppd->attrs && spec == NULL)
|
||||
{
|
||||
/*
|
||||
* Find the first attribute with the same name...
|
||||
*/
|
||||
|
||||
while (match > ppd->attrs)
|
||||
{
|
||||
if (strcmp(match[-1]->name, name) != 0)
|
||||
break;
|
||||
|
||||
match --;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the current attribute and return its value...
|
||||
*/
|
||||
|
||||
ppd->cur_attr = match - ppd->attrs;
|
||||
|
||||
return (*match);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdFindNextAttr()' - Find the next matching attribute...
|
||||
*/
|
||||
|
||||
ppd_attr_t * /* O - Attribute or NULL if not found */
|
||||
ppdFindNextAttr(ppd_file_t *ppd, /* I - PPD file data */
|
||||
const char *name, /* I - Attribute name */
|
||||
const char *spec) /* I - Specifier string or NULL */
|
||||
{
|
||||
ppd_attr_t **match; /* Matching attribute */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (ppd == NULL || name == NULL || ppd->num_attrs == 0 || ppd->cur_attr < 0)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* See if there are more attributes to return...
|
||||
*/
|
||||
|
||||
ppd->cur_attr ++;
|
||||
|
||||
if (ppd->cur_attr >= ppd->num_attrs)
|
||||
{
|
||||
/*
|
||||
* Nope...
|
||||
*/
|
||||
|
||||
ppd->cur_attr = -1;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the next attribute to see if it is a match...
|
||||
*/
|
||||
|
||||
match = ppd->attrs + ppd->cur_attr;
|
||||
|
||||
if (strcmp((*match)->name, name) != 0 ||
|
||||
(spec != NULL && strcmp((*match)->spec, spec) != 0))
|
||||
{
|
||||
/*
|
||||
* Nope...
|
||||
*/
|
||||
|
||||
ppd->cur_attr = -1;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the next attribute's value...
|
||||
*/
|
||||
|
||||
return (*match);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+47
-11
@@ -41,7 +41,7 @@ RSC=rc.exe
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\visualc" /I ".." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../visualc" /I ".." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
@@ -64,7 +64,7 @@ LIB32=link.exe -lib
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\visualc" /I ".." /I "../visualc" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "../visualc" /I ".." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
@@ -85,11 +85,23 @@ LIB32=link.exe -lib
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\dest.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\emit.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\filter.c
|
||||
SOURCE=.\encode.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\http-addr.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\http-support.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -97,6 +109,10 @@ SOURCE=.\http.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ipp-support.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ipp.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -105,11 +121,19 @@ SOURCE=.\language.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\oemlicense\license.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
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 +149,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 +157,11 @@ SOURCE=.\string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\type.c
|
||||
SOURCE=.\tempfile.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\usersys.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -153,6 +177,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 +197,11 @@ SOURCE=.\language.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mime.h
|
||||
SOURCE=..\oemlicense\license.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\md5.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -173,7 +209,7 @@ SOURCE=.\ppd.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\raster.h
|
||||
SOURCE=.\string.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
|
||||
+35
-5
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* API definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -20,6 +20,8 @@
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_CUPS_H_
|
||||
@@ -29,8 +31,8 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/ipp.h>
|
||||
# include <cups/ppd.h>
|
||||
# include "ipp.h"
|
||||
# include "ppd.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -46,7 +48,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0100
|
||||
# define CUPS_VERSION 1.0119
|
||||
# define CUPS_VERSION_MAJOR 1
|
||||
# define CUPS_VERSION_MINOR 1
|
||||
# define CUPS_VERSION_PATCH 19
|
||||
# define CUPS_DATE_ANY -1
|
||||
|
||||
|
||||
@@ -75,6 +80,8 @@ 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_FAX = 0x40000, /* Fax queue */
|
||||
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
|
||||
};
|
||||
|
||||
@@ -93,7 +100,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 +124,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 +140,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 +152,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 +164,7 @@ 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);
|
||||
|
||||
+4
-1
@@ -18,7 +18,7 @@
|
||||
"Cyan",
|
||||
"Magenta",
|
||||
"Yellow",
|
||||
"Copyright 1993-2000 by Easy Software Products, All Rights Reserved.",
|
||||
"Copyright 1993-2003 by Easy Software Products, All Rights Reserved.",
|
||||
"General",
|
||||
"Printer",
|
||||
"Image",
|
||||
@@ -108,6 +108,8 @@
|
||||
"Top",
|
||||
"Filename(s)",
|
||||
"Print",
|
||||
"Options Installed",
|
||||
"Auto",
|
||||
"400 Your browser sent a request that this server could not understand.",
|
||||
"This server could not verify that you are authorized to access the resource.",
|
||||
"You must pay to access this server.",
|
||||
@@ -124,6 +126,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.",
|
||||
|
||||
+3
-1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Debugging macros for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -20,6 +20,8 @@
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_DEBUG_H_
|
||||
|
||||
+355
-61
@@ -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-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -22,14 +22,17 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* 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 +40,7 @@
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include "language.h"
|
||||
#include "string.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
@@ -48,6 +52,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);
|
||||
|
||||
|
||||
/*
|
||||
@@ -205,11 +211,14 @@ 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 */
|
||||
int num_reals; /* Number of real queues */
|
||||
cups_dest_t *reals; /* Real queues */
|
||||
|
||||
|
||||
/*
|
||||
@@ -220,41 +229,63 @@ 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);
|
||||
}
|
||||
num_dests = cups_get_sdests(CUPS_GET_PRINTERS, num_dests, dests);
|
||||
num_dests = cups_get_sdests(CUPS_GET_CLASSES, num_dests, dests);
|
||||
|
||||
/*
|
||||
* Grab all available classes...
|
||||
* Make a copy of the "real" queues for a later sanity check...
|
||||
*/
|
||||
|
||||
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);
|
||||
if (num_dests > 0)
|
||||
{
|
||||
num_reals = num_dests;
|
||||
reals = calloc(num_reals, sizeof(cups_dest_t));
|
||||
|
||||
if (reals)
|
||||
memcpy(reals, *dests, num_reals * sizeof(cups_dest_t));
|
||||
else
|
||||
num_reals = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
num_reals = 0;
|
||||
reals = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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...
|
||||
*/
|
||||
|
||||
strlcpy(name, defprinter, sizeof(name));
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This initialization of "instance" is unnecessary, but avoids a
|
||||
* compiler warning...
|
||||
*/
|
||||
|
||||
instance = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the /etc/cups/lpoptions and ~/.lpoptions files...
|
||||
@@ -274,6 +305,48 @@ cupsGetDests(cups_dest_t **dests) /* O - Destinations */
|
||||
num_dests = cups_get_dests(filename, num_dests, dests);
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate the current default destination - this prevents old
|
||||
* Default lines in /etc/cups/lpoptions and ~/.lpoptions from
|
||||
* pointing to a non-existent printer or class...
|
||||
*/
|
||||
|
||||
if (num_reals)
|
||||
{
|
||||
/*
|
||||
* See if we have a default printer...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(NULL, NULL, num_dests, *dests)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Have a default; see if it is real...
|
||||
*/
|
||||
|
||||
dest = cupsGetDest(dest->name, NULL, num_reals, reals);
|
||||
}
|
||||
|
||||
/*
|
||||
* If dest is NULL, then no default (that exists) is set, so we
|
||||
* need to set a default if one exists...
|
||||
*/
|
||||
|
||||
if (dest == NULL && defprinter != NULL)
|
||||
{
|
||||
for (i = 0; i < num_dests; i ++)
|
||||
(*dests)[i].is_default = 0;
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, num_dests, *dests)) != NULL)
|
||||
dest->is_default = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free memory...
|
||||
*/
|
||||
|
||||
free(reals);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of destinations...
|
||||
*/
|
||||
@@ -291,35 +364,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:
|
||||
@@ -331,20 +430,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...
|
||||
*/
|
||||
@@ -369,8 +515,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...
|
||||
*/
|
||||
@@ -441,6 +597,14 @@ cups_get_dests(const char *filename, /* I - File to read from */
|
||||
|
||||
*lineptr++ = '\0';
|
||||
|
||||
/*
|
||||
* See if the primary instance of the destination exists; if not,
|
||||
* ignore this entry and move on...
|
||||
*/
|
||||
|
||||
if (cupsGetDest(name, NULL, num_dests, *dests) == NULL)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Add the destination...
|
||||
*/
|
||||
@@ -461,18 +625,6 @@ cups_get_dests(const char *filename, /* I - File to read from */
|
||||
* Add options until we hit the end of the line...
|
||||
*/
|
||||
|
||||
if (dest->num_options)
|
||||
{
|
||||
/*
|
||||
* Free old options...
|
||||
*/
|
||||
|
||||
cupsFreeOptions(dest->num_options, dest->options);
|
||||
|
||||
dest->num_options = 0;
|
||||
dest->options = (cups_option_t *)0;
|
||||
}
|
||||
|
||||
dest->num_options = cupsParseOptions(lineptr, dest->num_options,
|
||||
&(dest->options));
|
||||
|
||||
@@ -480,7 +632,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;
|
||||
@@ -499,6 +651,148 @@ 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 * const 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_KEYWORD,
|
||||
"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, "");
|
||||
|
||||
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)
|
||||
if (job_sheets[0])
|
||||
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$".
|
||||
*/
|
||||
|
||||
+370
-21
@@ -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-2003 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,12 +23,17 @@
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* 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.
|
||||
* ppd_sort() - Sort options by ordering numbers...
|
||||
* ppdCollect() - Collect all marked options that reside in the
|
||||
* specified section.
|
||||
* 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_handle_media() - Handle media selection...
|
||||
* ppd_sort() - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -50,9 +55,19 @@
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void ppd_handle_media(ppd_file_t *ppd);
|
||||
static int ppd_sort(ppd_choice_t **c1, ppd_choice_t **c2);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static const char *ppd_custom_code =
|
||||
"pop pop pop\n"
|
||||
"<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n";
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdCollect()' - Collect all marked options that reside in the specified
|
||||
* section.
|
||||
@@ -150,6 +165,16 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
ppd_size_t *size; /* Custom page size */
|
||||
|
||||
|
||||
/*
|
||||
* Use PageSize or PageRegion as required...
|
||||
*/
|
||||
|
||||
ppd_handle_media(ppd);
|
||||
|
||||
/*
|
||||
* Collect the options we need to emit and emit them!
|
||||
*/
|
||||
|
||||
if ((count = ppdCollect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
@@ -157,28 +182,66 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
* Send wrapper commands to prevent printer errors for unsupported
|
||||
* options...
|
||||
*/
|
||||
|
||||
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice) < 0)
|
||||
if (fputs("[{\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
if ((strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 ||
|
||||
strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageRegion") == 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...)
|
||||
* Variable size; write out standard size options, using the
|
||||
* parameter positions defined in the PPD file...
|
||||
*/
|
||||
|
||||
ppd_attr_t *attr; /* PPD attribute */
|
||||
int pos, /* Position of custom value */
|
||||
values[5]; /* Values for custom command */
|
||||
|
||||
|
||||
fputs("%%BeginFeature: *CustomPageSize True\n", fp);
|
||||
|
||||
size = ppdPageSize(ppd, "Custom");
|
||||
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
|
||||
|
||||
memset(values, 0, sizeof(values));
|
||||
|
||||
if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Width")) != NULL)
|
||||
{
|
||||
pos = atoi(attr->value) - 1;
|
||||
|
||||
if (pos < 0 || pos > 4)
|
||||
pos = 0;
|
||||
}
|
||||
else
|
||||
pos = 0;
|
||||
|
||||
values[pos] = (int)size->width;
|
||||
|
||||
if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Height")) != NULL)
|
||||
{
|
||||
pos = atoi(attr->value) - 1;
|
||||
|
||||
if (pos < 0 || pos > 4)
|
||||
pos = 1;
|
||||
}
|
||||
else
|
||||
pos = 1;
|
||||
|
||||
values[pos] = (int)size->length;
|
||||
|
||||
fprintf(fp, "%d %d %d %d %d\n", values[0], values[1],
|
||||
values[2], values[3], values[4]);
|
||||
|
||||
if (choices[i]->code == NULL)
|
||||
{
|
||||
@@ -188,10 +251,16 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Level 2 command sequence...
|
||||
*/
|
||||
|
||||
fputs("pop pop pop\n", fp);
|
||||
fputs("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
|
||||
fputs(ppd_custom_code, fp);
|
||||
}
|
||||
}
|
||||
else if (fprintf(fp, "%%%%BeginFeature: *%s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
|
||||
{
|
||||
@@ -210,6 +279,12 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (fputs("} stopped cleartomark\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
@@ -232,23 +307,60 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
count, /* Number of choices */
|
||||
custom_size; /* Non-zero if this option is a custom size */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
ppd_size_t *size; /* Custom page size */
|
||||
char buf[1024]; /* Output buffer for feature */
|
||||
|
||||
|
||||
/*
|
||||
* Use PageSize or PageRegion as required...
|
||||
*/
|
||||
|
||||
ppd_handle_media(ppd);
|
||||
|
||||
/*
|
||||
* Collect the options we need to emit and emit them!
|
||||
*/
|
||||
|
||||
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...
|
||||
*/
|
||||
|
||||
sprintf(buf, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
|
||||
if ((strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 ||
|
||||
strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageRegion") == 0) &&
|
||||
strcasecmp(choices[i]->choice, "Custom") == 0)
|
||||
{
|
||||
custom_size = 1;
|
||||
|
||||
strcpy(buf, "%%BeginFeature: *CustomPageSize True\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
custom_size = 0;
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -256,13 +368,87 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
if (custom_size)
|
||||
{
|
||||
/*
|
||||
* Variable size; write out standard size options, using the
|
||||
* parameter positions defined in the PPD file...
|
||||
*/
|
||||
|
||||
ppd_attr_t *attr; /* PPD attribute */
|
||||
int pos, /* Position of custom value */
|
||||
values[5]; /* Values for custom command */
|
||||
|
||||
|
||||
size = ppdPageSize(ppd, "Custom");
|
||||
|
||||
memset(values, 0, sizeof(values));
|
||||
|
||||
if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Width")) != NULL)
|
||||
{
|
||||
pos = atoi(attr->value) - 1;
|
||||
|
||||
if (pos < 0 || pos > 4)
|
||||
pos = 0;
|
||||
}
|
||||
else
|
||||
pos = 0;
|
||||
|
||||
values[pos] = (int)size->width;
|
||||
|
||||
if ((attr = ppdFindAttr(ppd, "ParamCustomPageSize", "Height")) != NULL)
|
||||
{
|
||||
pos = atoi(attr->value) - 1;
|
||||
|
||||
if (pos < 0 || pos > 4)
|
||||
pos = 1;
|
||||
}
|
||||
else
|
||||
pos = 1;
|
||||
|
||||
values[pos] = (int)size->length;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d %d %d %d %d\n", values[0], values[1],
|
||||
values[2], values[3], values[4]);
|
||||
|
||||
if (write(fd, buf, strlen(buf)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
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...
|
||||
*/
|
||||
|
||||
if (write(fd, ppd_custom_code, strlen(ppd_custom_code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
|
||||
{
|
||||
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, "%%EndFeature\n", 13) < 1)
|
||||
if (write(fd, "} stopped cleartomark\n", 22) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
@@ -279,6 +465,169 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '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_handle_media()' - Handle media selection...
|
||||
*/
|
||||
|
||||
static void
|
||||
ppd_handle_media(ppd_file_t *ppd)
|
||||
{
|
||||
ppd_choice_t *manual_feed, /* ManualFeed choice, if any */
|
||||
*input_slot, /* InputSlot choice, if any */
|
||||
*page; /* PageSize/PageRegion */
|
||||
ppd_size_t *size; /* Current media size */
|
||||
ppd_attr_t *rpr; /* RequiresPageRegion value */
|
||||
|
||||
|
||||
/*
|
||||
* This function determines if the user has selected a media source
|
||||
* via the InputSlot or ManualFeed options; if so, it marks the
|
||||
* PageRegion option corresponding to the current media size.
|
||||
* Otherwise it marks the PageSize option.
|
||||
*/
|
||||
|
||||
if ((size = ppdPageSize(ppd, NULL)) == NULL)
|
||||
return;
|
||||
|
||||
manual_feed = ppdFindMarkedChoice(ppd, "ManualFeed");
|
||||
input_slot = ppdFindMarkedChoice(ppd, "InputSlot");
|
||||
|
||||
if (input_slot != NULL)
|
||||
rpr = ppdFindAttr(ppd, "RequiresPageRegion", input_slot->choice);
|
||||
else
|
||||
rpr = NULL;
|
||||
|
||||
if (!rpr)
|
||||
rpr = ppdFindAttr(ppd, "RequiresPageRegion", "All");
|
||||
|
||||
if (strcasecmp(size->name, "Custom") == 0 ||
|
||||
(manual_feed == NULL && input_slot == NULL) ||
|
||||
(manual_feed != NULL && strcasecmp(manual_feed->choice, "False") == 0) ||
|
||||
(input_slot != NULL && (input_slot->code == NULL || !input_slot->code[0])))
|
||||
{
|
||||
/*
|
||||
* Manual feed was not selected and/or the input slot selection does
|
||||
* not contain any PostScript code. Use the PageSize option...
|
||||
*/
|
||||
|
||||
ppdMarkOption(ppd, "PageSize", size->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Manual feed was selected and/or the input slot selection contains
|
||||
* PostScript code. Use the PageRegion option...
|
||||
*/
|
||||
|
||||
ppdMarkOption(ppd, "PageRegion", size->name);
|
||||
|
||||
if ((rpr && rpr->value && !strcmp(rpr->value, "False")) ||
|
||||
(!rpr && !ppd->num_filters))
|
||||
{
|
||||
/*
|
||||
* Either the PPD file specifies no PageRegion code or the PPD file
|
||||
* not for a CUPS raster driver and thus defaults to no PageRegion
|
||||
* code... Unmark the PageRegion choice so that we don't output the
|
||||
* code...
|
||||
*/
|
||||
|
||||
page = ppdFindMarkedChoice(ppd, "PageRegion");
|
||||
|
||||
if (page)
|
||||
page->marked = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_sort()' - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
+386
@@ -0,0 +1,386 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Option encoding routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* 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"
|
||||
|
||||
|
||||
/*
|
||||
* Local list of option names and the value tags they should use...
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *name;
|
||||
ipp_tag_t value_tag;
|
||||
} ipp_option_t;
|
||||
|
||||
static const ipp_option_t ipp_options[] =
|
||||
{
|
||||
{ "blackplot", IPP_TAG_BOOLEAN },
|
||||
{ "brightness", IPP_TAG_INTEGER },
|
||||
{ "columns", IPP_TAG_INTEGER },
|
||||
{ "copies", IPP_TAG_INTEGER },
|
||||
{ "finishings", IPP_TAG_ENUM },
|
||||
{ "fitplot", IPP_TAG_BOOLEAN },
|
||||
{ "gamma", IPP_TAG_INTEGER },
|
||||
{ "hue", IPP_TAG_INTEGER },
|
||||
{ "job-k-limit", IPP_TAG_INTEGER },
|
||||
{ "job-page-limit", IPP_TAG_INTEGER },
|
||||
{ "job-priority", IPP_TAG_INTEGER },
|
||||
{ "job-quota-period", IPP_TAG_INTEGER },
|
||||
{ "landscape", IPP_TAG_BOOLEAN },
|
||||
{ "media", IPP_TAG_KEYWORD },
|
||||
{ "mirror", IPP_TAG_BOOLEAN },
|
||||
{ "natural-scaling", IPP_TAG_INTEGER },
|
||||
{ "number-up", IPP_TAG_INTEGER },
|
||||
{ "orientation-requested", IPP_TAG_ENUM },
|
||||
{ "page-bottom", IPP_TAG_INTEGER },
|
||||
{ "page-left", IPP_TAG_INTEGER },
|
||||
{ "page-ranges", IPP_TAG_RANGE },
|
||||
{ "page-right", IPP_TAG_INTEGER },
|
||||
{ "page-top", IPP_TAG_INTEGER },
|
||||
{ "penwidth", IPP_TAG_INTEGER },
|
||||
{ "ppi", IPP_TAG_INTEGER },
|
||||
{ "prettyprint", IPP_TAG_BOOLEAN },
|
||||
{ "printer-resolution", IPP_TAG_RESOLUTION },
|
||||
{ "print-quality", IPP_TAG_ENUM },
|
||||
{ "saturation", IPP_TAG_INTEGER },
|
||||
{ "scaling", IPP_TAG_INTEGER },
|
||||
{ "sides", IPP_TAG_KEYWORD },
|
||||
{ "wrap", IPP_TAG_BOOLEAN }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* '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 */
|
||||
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; sep ++)
|
||||
{
|
||||
if (*sep == '\'')
|
||||
{
|
||||
/*
|
||||
* Skip quoted option value...
|
||||
*/
|
||||
|
||||
sep ++;
|
||||
|
||||
while (*sep && *sep != '\'')
|
||||
sep ++;
|
||||
|
||||
if (!*sep)
|
||||
sep --;
|
||||
}
|
||||
else if (*sep == '\"')
|
||||
{
|
||||
/*
|
||||
* Skip quoted option value...
|
||||
*/
|
||||
|
||||
sep ++;
|
||||
|
||||
while (*sep && *sep != '\"')
|
||||
sep ++;
|
||||
|
||||
if (!*sep)
|
||||
sep --;
|
||||
}
|
||||
else if (*sep == ',')
|
||||
count ++;
|
||||
else if (*sep == '\\' && sep[1])
|
||||
sep ++;
|
||||
}
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: option = \'%s\', count = %d\n",
|
||||
options[i].name, count));
|
||||
|
||||
/*
|
||||
* Allocate memory for the attribute values...
|
||||
*/
|
||||
|
||||
if ((attr = _ipp_add_attr(ipp, count)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for attributes!");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now figure out what type of value we have...
|
||||
*/
|
||||
|
||||
attr->group_tag = IPP_TAG_JOB;
|
||||
|
||||
if (strcasecmp(options[i].value, "true") == 0 ||
|
||||
strcasecmp(options[i].value, "false") == 0)
|
||||
attr->value_tag = IPP_TAG_BOOLEAN;
|
||||
else
|
||||
attr->value_tag = IPP_TAG_NAME;
|
||||
|
||||
for (j = 0; j < (int)(sizeof(ipp_options) / sizeof(ipp_options[0])); j ++)
|
||||
if (strcasecmp(options[i].name, ipp_options[j].name) == 0)
|
||||
{
|
||||
attr->value_tag = ipp_options[j].value_tag;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the name over...
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan the value string for values...
|
||||
*/
|
||||
|
||||
for (j = 0; j < count; 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);
|
||||
|
||||
/*
|
||||
* Copy the option value(s) over as needed by the type...
|
||||
*/
|
||||
|
||||
switch (attr->value_tag)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
/*
|
||||
* Integer/enumeration value...
|
||||
*/
|
||||
|
||||
attr->values[j].integer = strtol(val, &s, 0);
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Adding integer option value %d...\n",
|
||||
attr->values[j].integer));
|
||||
break;
|
||||
|
||||
case IPP_TAG_BOOLEAN :
|
||||
if (strcasecmp(val, "true") == 0)
|
||||
{
|
||||
/*
|
||||
* Boolean value - true...
|
||||
*/
|
||||
|
||||
attr->values[j].boolean = 1;
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Boolean value - false...
|
||||
*/
|
||||
|
||||
attr->values[j].boolean = 0;
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
|
||||
}
|
||||
break;
|
||||
|
||||
case IPP_TAG_RANGE :
|
||||
/*
|
||||
* Range...
|
||||
*/
|
||||
|
||||
if (*val == '-')
|
||||
{
|
||||
attr->values[j].range.lower = 1;
|
||||
s = val;
|
||||
}
|
||||
else
|
||||
attr->values[j].range.lower = strtol(val, &s, 0);
|
||||
|
||||
if (*s == '-')
|
||||
{
|
||||
if (s[1])
|
||||
attr->values[j].range.upper = strtol(s + 1, NULL, 0);
|
||||
else
|
||||
attr->values[j].range.upper = 2147483647;
|
||||
}
|
||||
else
|
||||
attr->values[j].range.upper = attr->values[j].range.lower;
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Added range option value %d-%d...\n",
|
||||
attr->values[j].range.lower,
|
||||
attr->values[j].range.upper));
|
||||
break;
|
||||
|
||||
case IPP_TAG_RESOLUTION :
|
||||
/*
|
||||
* Resolution...
|
||||
*/
|
||||
|
||||
attr->values[j].resolution.xres = strtol(val, &s, 0);
|
||||
|
||||
if (*s == 'x')
|
||||
attr->values[j].resolution.yres = strtol(s + 1, &s, 0);
|
||||
else
|
||||
attr->values[j].resolution.yres = attr->values[j].resolution.xres;
|
||||
|
||||
if (strcasecmp(s, "dpc") == 0)
|
||||
attr->values[j].resolution.units = IPP_RES_PER_CM;
|
||||
else
|
||||
attr->values[j].resolution.units = IPP_RES_PER_INCH;
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Adding resolution option value %s...\n",
|
||||
val));
|
||||
break;
|
||||
|
||||
default :
|
||||
if ((attr->values[j].string.text = strdup(val)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Ran out of memory!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n",
|
||||
val));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* HTTP host/address routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* httpGetHostByName() - Lookup a hostname or IP address, and return
|
||||
* address records for the specified name.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
|
||||
#include "http.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'httpGetHostByName()' - Lookup a hostname or IP address, and return
|
||||
* address records for the specified name.
|
||||
*/
|
||||
|
||||
struct hostent * /* O - Host entry */
|
||||
httpGetHostByName(const char *name) /* I - Hostname or IP address */
|
||||
{
|
||||
const char *nameptr; /* Pointer into name */
|
||||
unsigned ip[4]; /* IP address components */
|
||||
static unsigned packed_ip; /* Packed IPv4 address */
|
||||
static char *packed_ptr[2]; /* Pointer to packed address */
|
||||
static struct hostent host_ip; /* Host entry for IP address */
|
||||
|
||||
|
||||
#if defined(__APPLE__)
|
||||
/* OS X hack to avoid it's ocassional long delay in lookupd */
|
||||
static const char sLoopback[] = "127.0.0.1";
|
||||
if (strcmp(name, "localhost") == 0)
|
||||
name = sLoopback;
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/*
|
||||
* This function is needed because some operating systems have a
|
||||
* buggy implementation of gethostbyname() that does not support
|
||||
* IP addresses. If the first character of the name string is a
|
||||
* number, then sscanf() is used to extract the IP components.
|
||||
* We then pack the components into an IPv4 address manually,
|
||||
* since the inet_aton() function is deprecated. We use the
|
||||
* htonl() macro to get the right byte order for the address.
|
||||
*/
|
||||
|
||||
for (nameptr = name; isdigit(*nameptr) || *nameptr == '.'; nameptr ++);
|
||||
|
||||
if (!*nameptr)
|
||||
{
|
||||
/*
|
||||
* We have an IP address; break it up and provide the host entry
|
||||
* to the caller. Currently only supports IPv4 addresses, although
|
||||
* it should be trivial to support IPv6 in CUPS 1.2.
|
||||
*/
|
||||
|
||||
if (sscanf(name, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) != 4)
|
||||
return (NULL); /* Must have 4 numbers */
|
||||
|
||||
packed_ip = htonl(((((((ip[0] << 8) | ip[1]) << 8) | ip[2]) << 8) | ip[3]));
|
||||
|
||||
/*
|
||||
* Fill in the host entry and return it...
|
||||
*/
|
||||
|
||||
host_ip.h_name = (char *)name;
|
||||
host_ip.h_aliases = NULL;
|
||||
host_ip.h_addrtype = AF_INET;
|
||||
host_ip.h_length = 4;
|
||||
host_ip.h_addr_list = packed_ptr;
|
||||
packed_ptr[0] = (char *)(&packed_ip);
|
||||
packed_ptr[1] = NULL;
|
||||
|
||||
return (&host_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Use the gethostbyname() function to get the IP address for
|
||||
* the name...
|
||||
*/
|
||||
|
||||
return (gethostbyname(name));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Private HTTP definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_HTTP_PRIVATE_H_
|
||||
# define _CUPS_HTTP_PRIVATE_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include "http.h"
|
||||
# include "config.h"
|
||||
|
||||
# if defined HAVE_LIBSSL
|
||||
/*
|
||||
* The OpenSSL library provides its own SSL/TLS context structure for its
|
||||
* IO and protocol management...
|
||||
*/
|
||||
|
||||
# include <openssl/err.h>
|
||||
# include <openssl/rand.h>
|
||||
# include <openssl/ssl.h>
|
||||
|
||||
typedef SSL http_tls_t;
|
||||
|
||||
# elif defined HAVE_GNUTLS
|
||||
/*
|
||||
* The GNU TLS library is more of a "bare metal" SSL/TLS library...
|
||||
*/
|
||||
# include <gnutls/gnutls.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gnutls_session session; /* GNU TLS session object */
|
||||
void *credentials; /* GNU TLS credentials object */
|
||||
} http_tls_t;
|
||||
|
||||
# elif defined(HAVE_CDSASSL)
|
||||
/*
|
||||
* Darwin's Security framework provides its own SSL/TLS context structure
|
||||
* for its IO and protocol management...
|
||||
*/
|
||||
|
||||
# include <Security/SecureTransport.h>
|
||||
|
||||
typedef SSLConnectionRef http_tls_t;
|
||||
|
||||
# endif /* HAVE_LIBSSL */
|
||||
|
||||
#endif /* !_CUPS_HTTP_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -0,0 +1,316 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* HTTP support routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* httpSeparate() - Separate a Universal Resource Identifier into its
|
||||
* components.
|
||||
* httpStatus() - Return a short string describing a HTTP status code.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
|
||||
#include "http.h"
|
||||
#include "ipp.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'httpSeparate()' - Separate a Universal Resource Identifier into its
|
||||
* components.
|
||||
*/
|
||||
|
||||
void
|
||||
httpSeparate(const char *uri, /* I - Universal Resource Identifier */
|
||||
char *method, /* O - Method [32] (http, https, etc.) */
|
||||
char *username, /* O - Username [32] */
|
||||
char *host, /* O - Hostname [32] */
|
||||
int *port, /* O - Port number to use */
|
||||
char *resource) /* O - Resource/filename [1024] */
|
||||
{
|
||||
char *ptr; /* Pointer into string... */
|
||||
const char *atsign, /* @ sign */
|
||||
*slash; /* Separator */
|
||||
char safeuri[HTTP_MAX_URI]; /* "Safe" local copy of URI */
|
||||
char quoted; /* Quoted character */
|
||||
|
||||
|
||||
/*
|
||||
* 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...
|
||||
*/
|
||||
|
||||
strlcpy(safeuri, uri, sizeof(safeuri));
|
||||
|
||||
uri = safeuri;
|
||||
|
||||
/*
|
||||
* Grab the method portion of the URI...
|
||||
*/
|
||||
|
||||
if (strncmp(uri, "//", 2) == 0)
|
||||
{
|
||||
/*
|
||||
* Workaround for HP IPP client bug...
|
||||
*/
|
||||
|
||||
strcpy(method, "ipp");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Standard URI with method...
|
||||
*/
|
||||
|
||||
for (ptr = host; *uri != ':' && *uri != '\0'; uri ++)
|
||||
if (ptr < (host + HTTP_MAX_URI - 1))
|
||||
*ptr++ = *uri;
|
||||
|
||||
*ptr = '\0';
|
||||
if (*uri == ':')
|
||||
uri ++;
|
||||
|
||||
/*
|
||||
* If the method contains a period or slash, then it's probably
|
||||
* hostname/filename...
|
||||
*/
|
||||
|
||||
if (strchr(host, '.') != NULL || strchr(host, '/') != NULL || *uri == '\0')
|
||||
{
|
||||
if ((ptr = strchr(host, '/')) != NULL)
|
||||
{
|
||||
strlcpy(resource, ptr, HTTP_MAX_URI);
|
||||
*ptr = '\0';
|
||||
}
|
||||
else
|
||||
resource[0] = '\0';
|
||||
|
||||
if (isdigit(*uri))
|
||||
{
|
||||
/*
|
||||
* OK, we have "hostname:port[/resource]"...
|
||||
*/
|
||||
|
||||
*port = strtol(uri, (char **)&uri, 10);
|
||||
|
||||
if (*uri == '/')
|
||||
strlcpy(resource, uri, HTTP_MAX_URI);
|
||||
}
|
||||
else
|
||||
*port = 631;
|
||||
|
||||
strcpy(method, "http");
|
||||
username[0] = '\0';
|
||||
return;
|
||||
}
|
||||
else
|
||||
strlcpy(method, host, 32);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the method starts with less than 2 slashes then it is a local resource...
|
||||
*/
|
||||
|
||||
if (strncmp(uri, "//", 2) != 0)
|
||||
{
|
||||
strlcpy(resource, uri, HTTP_MAX_URI);
|
||||
|
||||
username[0] = '\0';
|
||||
host[0] = '\0';
|
||||
*port = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab the username, if any...
|
||||
*/
|
||||
|
||||
uri += 2;
|
||||
|
||||
if ((slash = strchr(uri, '/')) == NULL)
|
||||
slash = uri + strlen(uri);
|
||||
|
||||
if ((atsign = strchr(uri, '@')) != NULL && atsign < slash)
|
||||
{
|
||||
/*
|
||||
* Got a username:password combo...
|
||||
*/
|
||||
|
||||
for (ptr = username; uri < atsign; uri ++)
|
||||
if (ptr < (username + HTTP_MAX_URI - 1))
|
||||
{
|
||||
if (*uri == '%' && isxdigit(uri[1]) && isxdigit(uri[2]))
|
||||
{
|
||||
/*
|
||||
* Grab a hex-encoded username and password...
|
||||
*/
|
||||
|
||||
uri ++;
|
||||
if (isalpha(*uri))
|
||||
quoted = (tolower(*uri) - 'a' + 10) << 4;
|
||||
else
|
||||
quoted = (*uri - '0') << 4;
|
||||
|
||||
uri ++;
|
||||
if (isalpha(*uri))
|
||||
quoted |= tolower(*uri) - 'a' + 10;
|
||||
else
|
||||
quoted |= *uri - '0';
|
||||
|
||||
*ptr++ = quoted;
|
||||
}
|
||||
else
|
||||
*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)
|
||||
*port = ippPort();
|
||||
else if (strcasecmp(method, "socket") == 0) /* Not registered yet... */
|
||||
*port = 9100;
|
||||
else
|
||||
*port = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Parse port number...
|
||||
*/
|
||||
|
||||
*port = 0;
|
||||
uri ++;
|
||||
while (isdigit(*uri))
|
||||
{
|
||||
*port = (*port * 10) + *uri - '0';
|
||||
uri ++;
|
||||
}
|
||||
}
|
||||
|
||||
if (*uri == '\0')
|
||||
{
|
||||
/*
|
||||
* Hostname but no port or path...
|
||||
*/
|
||||
|
||||
resource[0] = '/';
|
||||
resource[1] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The remaining portion is the resource string...
|
||||
*/
|
||||
|
||||
strlcpy(resource, uri, HTTP_MAX_URI);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpStatus()' - Return a short string describing a HTTP status code.
|
||||
*/
|
||||
|
||||
const char * /* O - String or NULL */
|
||||
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 :
|
||||
return ("Created");
|
||||
case HTTP_ACCEPTED :
|
||||
return ("Accepted");
|
||||
case HTTP_NO_CONTENT :
|
||||
return ("No Content");
|
||||
case HTTP_NOT_MODIFIED :
|
||||
return ("Not Modified");
|
||||
case HTTP_BAD_REQUEST :
|
||||
return ("Bad Request");
|
||||
case HTTP_UNAUTHORIZED :
|
||||
return ("Unauthorized");
|
||||
case HTTP_FORBIDDEN :
|
||||
return ("Forbidden");
|
||||
case HTTP_NOT_FOUND :
|
||||
return ("Not Found");
|
||||
case HTTP_REQUEST_TOO_LARGE :
|
||||
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 :
|
||||
return ("Not Supported");
|
||||
default :
|
||||
return ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+1082
-356
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+44
-6
@@ -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-2003 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
|
||||
@@ -21,6 +21,8 @@
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_HTTP_H_
|
||||
@@ -32,7 +34,7 @@
|
||||
|
||||
# include <string.h>
|
||||
# include <time.h>
|
||||
# if defined(WIN32) || defined(__EMX__)
|
||||
# ifdef WIN32
|
||||
# include <winsock.h>
|
||||
# else
|
||||
# include <unistd.h>
|
||||
@@ -44,10 +46,12 @@
|
||||
# include <arpa/inet.h>
|
||||
# include <netinet/in_systm.h>
|
||||
# include <netinet/ip.h>
|
||||
# include <netinet/tcp.h>
|
||||
# endif /* WIN32 || __EMX__ */
|
||||
# if !defined(__APPLE__) || !defined(TCP_NODELAY)
|
||||
# include <netinet/tcp.h>
|
||||
# endif /* !__APPLE__ || !TCP_NODELAY */
|
||||
# endif /* WIN32 */
|
||||
|
||||
# include <cups/md5.h>
|
||||
# include "md5.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -126,6 +130,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 +167,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 +200,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 +280,11 @@ typedef struct
|
||||
/* Nonce value */
|
||||
int nonce_count; /* Nonce count */
|
||||
void *tls; /* TLS state information */
|
||||
http_encryption_t encryption; /* Encryption requirements */
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
fd_set *input_set; /* select() set for httpWait() */
|
||||
http_status_t expect; /* Expect: header */
|
||||
char *cookie; /* Cookie value(s) */
|
||||
} http_t;
|
||||
|
||||
|
||||
@@ -274,7 +298,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);
|
||||
@@ -282,13 +309,18 @@ extern char *httpGets(char *line, int length, http_t *http);
|
||||
extern const char *httpGetDateString(time_t t);
|
||||
extern time_t httpGetDateTime(const char *s);
|
||||
# define httpGetField(http,field) (http)->fields[field]
|
||||
extern struct hostent *httpGetHostByName(const char *name);
|
||||
extern char *httpGetSubField(http_t *http, http_field_t field,
|
||||
const char *name, char *value);
|
||||
extern int httpHead(http_t *http, const char *uri);
|
||||
extern void httpInitialize(void);
|
||||
extern int httpOptions(http_t *http, const char *uri);
|
||||
extern int httpPost(http_t *http, const char *uri);
|
||||
extern int httpPrintf(http_t *http, const char *format, ...);
|
||||
extern int httpPrintf(http_t *http, const char *format, ...)
|
||||
# ifdef __GNUC__
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)))
|
||||
# endif /* __GNUC__ */
|
||||
;
|
||||
extern int httpPut(http_t *http, const char *uri);
|
||||
extern int httpRead(http_t *http, char *buffer, int length);
|
||||
extern int httpReconnect(http_t *http);
|
||||
@@ -310,6 +342,12 @@ extern char *httpMD5Final(const char *, const char *, const char *,
|
||||
char [33]);
|
||||
extern char *httpMD5String(const md5_byte_t *, char [33]);
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
extern void httpClearCookie(http_t *http);
|
||||
#define httpGetCookie(http) ((http)->cookie)
|
||||
extern void httpSetCookie(http_t *http, const char *cookie);
|
||||
extern int httpWait(http_t *http, int msec);
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Internet Printing Protocol support functions for the Common UNIX
|
||||
* Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2003 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
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ippErrorString() - Return a textual message for the given error
|
||||
* message.
|
||||
* ippPort() - Return the default IPP port number.
|
||||
* ippSetPort() - Set the default port number.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "string.h"
|
||||
#include "language.h"
|
||||
|
||||
#include "ipp.h"
|
||||
#include "debug.h"
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int ipp_port = 0;
|
||||
|
||||
|
||||
/*
|
||||
* 'ippErrorString()' - Return a textual message for the given error message.
|
||||
*/
|
||||
|
||||
const char * /* O - Text string */
|
||||
ippErrorString(ipp_status_t error) /* I - Error status */
|
||||
{
|
||||
static char unknown[255]; /* Unknown error statuses */
|
||||
static const char * const 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"
|
||||
},
|
||||
* const 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"
|
||||
},
|
||||
* const 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"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* See if the error code is a known value...
|
||||
*/
|
||||
|
||||
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]);
|
||||
|
||||
/*
|
||||
* No, build an "unknown-xxxx" error string...
|
||||
*/
|
||||
|
||||
sprintf(unknown, "unknown-%04x", error);
|
||||
|
||||
return (unknown);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ippPort()' - Return the default IPP port number.
|
||||
*/
|
||||
|
||||
int /* O - Port number */
|
||||
ippPort(void)
|
||||
{
|
||||
const char *server_port; /* SERVER_PORT environment variable */
|
||||
struct servent *port; /* Port number info */
|
||||
|
||||
|
||||
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 = IPP_PORT);
|
||||
else
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+1428
-601
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+128
-23
@@ -4,7 +4,7 @@
|
||||
* Internet Printing Protocol definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -21,6 +21,8 @@
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_IPP_H_
|
||||
@@ -30,7 +32,7 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/http.h>
|
||||
# include "http.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -46,12 +48,14 @@ extern "C" {
|
||||
* IPP version string...
|
||||
*/
|
||||
|
||||
# define IPP_VERSION "\001\000"
|
||||
# define IPP_VERSION "\001\001"
|
||||
|
||||
/*
|
||||
* IPP registered port number... This is the default value - applications
|
||||
* should use the ippPort() function so that you can customize things in
|
||||
* /etc/services if needed!
|
||||
* IPP registered port number...
|
||||
*
|
||||
* Note: Applications should never use IPP_PORT, but instead use the
|
||||
* ippPort() function to allow overrides via the IPP_PORT environment
|
||||
* variable and services file if needed!
|
||||
*/
|
||||
|
||||
# define IPP_PORT 631
|
||||
@@ -61,7 +65,7 @@ extern "C" {
|
||||
*/
|
||||
|
||||
# define IPP_MAX_NAME 256
|
||||
# define IPP_MAX_VALUES 100
|
||||
# define IPP_MAX_VALUES 10 /* Now just an allocation increment */
|
||||
|
||||
|
||||
/*
|
||||
@@ -76,13 +80,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 +96,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 +107,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 +121,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 +214,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 +252,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 +262,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 +286,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,11 +301,16 @@ 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 ****/
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
typedef int (*ipp_iocb_t)(void *, ipp_uchar_t *, int);
|
||||
/**** IPP IO Callback Function ****/
|
||||
|
||||
typedef union /**** Request Header ****/
|
||||
{
|
||||
struct /* Any Header */
|
||||
@@ -257,8 +333,18 @@ typedef union /**** Request Header ****/
|
||||
ipp_status_t status_code; /* Status code */
|
||||
int request_id; /* Request ID */
|
||||
} status;
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
struct /* Event Header */
|
||||
{
|
||||
ipp_uchar_t version[2]; /* Protocol version number */
|
||||
int status_code; /* Status code */
|
||||
int request_id; /* Request ID */
|
||||
} event;
|
||||
} ipp_request_t;
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
typedef struct ipp_str ipp_t;
|
||||
|
||||
typedef union /**** Attribute Value ****/
|
||||
{
|
||||
@@ -292,12 +378,14 @@ typedef union /**** Attribute Value ****/
|
||||
int length; /* Length of attribute */
|
||||
void *data; /* Data in attribute */
|
||||
} unknown; /* Unknown attribute type */
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
ipp_t *collection; /* Collection value */
|
||||
} ipp_value_t;
|
||||
|
||||
typedef struct ipp_attribute_s /**** Attribute ****/
|
||||
{
|
||||
struct ipp_attribute_s *next;
|
||||
/* Next atrtribute in list */
|
||||
struct ipp_attribute_s *next; /* Next attribute in list */
|
||||
ipp_tag_t group_tag, /* Job/Printer/Operation group tag */
|
||||
value_tag; /* What type of value is it? */
|
||||
char *name; /* Name of attribute */
|
||||
@@ -305,7 +393,7 @@ typedef struct ipp_attribute_s /**** Attribute ****/
|
||||
ipp_value_t values[1]; /* Values */
|
||||
} ipp_attribute_t;
|
||||
|
||||
typedef struct /**** Request State ****/
|
||||
struct ipp_str /**** IPP Request/Response/Notification ****/
|
||||
{
|
||||
ipp_state_t state; /* State of request */
|
||||
ipp_request_t request; /* Request header */
|
||||
@@ -313,7 +401,7 @@ typedef struct /**** Request State ****/
|
||||
*last, /* Last attribute in list */
|
||||
*current; /* Current attribute (for read/write) */
|
||||
ipp_tag_t curtag; /* Current attribute group tag */
|
||||
} ipp_t;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -331,11 +419,14 @@ extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, const char
|
||||
extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, ipp_res_t units, const int *xres, const int *yres);
|
||||
extern ipp_attribute_t *ippAddSeparator(ipp_t *ipp);
|
||||
extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, const char *charset, const char *value);
|
||||
extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, int num_values, const char *charset, const char **values);
|
||||
extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, int num_values, const char *charset, const char * const *values);
|
||||
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);
|
||||
@@ -344,6 +435,20 @@ extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
|
||||
extern int ippPort(void);
|
||||
extern void ippSetPort(int p);
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
extern ipp_attribute_t *ippAddCollection(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_t *value);
|
||||
extern ipp_attribute_t *ippAddCollections(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const ipp_t **values);
|
||||
extern void ippDeleteAttribute(ipp_t *ipp, ipp_attribute_t *attr);
|
||||
extern ipp_state_t ippReadFile(int fd, ipp_t *ipp);
|
||||
extern ipp_state_t ippReadIO(void *src, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp);
|
||||
extern ipp_state_t ippWriteFile(int fd, ipp_t *ipp);
|
||||
extern ipp_state_t ippWriteIO(void *dst, ipp_iocb_t cb, int blocking, ipp_t *parent, ipp_t *ipp);
|
||||
|
||||
|
||||
/*
|
||||
* "Private" functions used internally by CUPS...
|
||||
*/
|
||||
|
||||
extern ipp_attribute_t *_ipp_add_attr(ipp_t *, int);
|
||||
extern void _ipp_free_attr(ipp_attribute_t *);
|
||||
|
||||
|
||||
+433
-101
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* I18N/language support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2000 by Easy Software Products.
|
||||
* Copyright 1997-2003 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -21,13 +21,17 @@
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsLangEncoding() - Return the character encoding (us-ascii, etc.)
|
||||
* for the given language.
|
||||
* cupsLangFlush() - Flush all language data out of the cache.
|
||||
* cupsLangFree() - Free language data.
|
||||
* cupsLangGet() - Get a language.
|
||||
* cupsLangEncoding() - Return the character encoding (us-ascii, etc.)
|
||||
* for the given language.
|
||||
* cupsLangFlush() - Flush all language data out of the cache.
|
||||
* cupsLangFree() - Free language data.
|
||||
* cupsLangGet() - Get a language.
|
||||
* appleLangDefault() - Get the default locale string.
|
||||
* cups_cache_lookup() - Lookup a language in the cache...
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -37,18 +41,38 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#ifdef WIN32
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif /* WIN32 */
|
||||
#include "string.h"
|
||||
#include "language.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <CoreFoundation/CoreFoundation.h>
|
||||
static const char *appleLangDefault(void);
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
static cups_lang_t *cups_cache_lookup(const char *name,
|
||||
cups_encoding_t encoding);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static cups_lang_t *lang_cache = NULL; /* Language string cache */
|
||||
static char *lang_blank = ""; /* Blank constant string */
|
||||
static char *lang_encodings[] = /* Encoding strings */
|
||||
{
|
||||
static cups_lang_t *lang_cache = NULL;
|
||||
/* Language string cache */
|
||||
static const char lang_blank[] = "";
|
||||
/* Blank constant string */
|
||||
static const char * const lang_encodings[] =
|
||||
{ /* Encoding strings */
|
||||
"us-ascii",
|
||||
"iso-8859-1",
|
||||
"iso-8859-2",
|
||||
@@ -73,10 +97,12 @@ static char *lang_encodings[] = /* Encoding strings */
|
||||
"windows-1255",
|
||||
"windows-1256",
|
||||
"windows-1257",
|
||||
"windows-1258"
|
||||
"windows-1258",
|
||||
"koi8-r",
|
||||
"koi8-u"
|
||||
};
|
||||
static char *lang_default[] = /* Default POSIX locale */
|
||||
{
|
||||
static const char * const lang_default[] =
|
||||
{ /* Default POSIX locale */
|
||||
#include "cups_C.h"
|
||||
NULL
|
||||
};
|
||||
@@ -91,9 +117,9 @@ char * /* O - Character encoding */
|
||||
cupsLangEncoding(cups_lang_t *lang) /* I - Language data */
|
||||
{
|
||||
if (lang == NULL)
|
||||
return (lang_encodings[0]);
|
||||
return ((char*)lang_encodings[0]);
|
||||
else
|
||||
return (lang_encodings[lang->encoding]);
|
||||
return ((char*)lang_encodings[lang->encoding]);
|
||||
}
|
||||
|
||||
|
||||
@@ -104,20 +130,34 @@ cupsLangEncoding(cups_lang_t *lang) /* I - Language data */
|
||||
void
|
||||
cupsLangFlush(void)
|
||||
{
|
||||
int i; /* Looping var */
|
||||
cups_lang_t *lang, /* Current language */
|
||||
*next; /* Next language */
|
||||
int i; /* Looping var */
|
||||
cups_lang_t *lang, /* Current language */
|
||||
*next; /* Next language */
|
||||
|
||||
|
||||
/*
|
||||
* Free all languages in the cache...
|
||||
*/
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = next)
|
||||
{
|
||||
/*
|
||||
* Free all messages...
|
||||
*/
|
||||
|
||||
for (i = 0; i < CUPS_MSG_MAX; i ++)
|
||||
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
|
||||
free(lang->messages[i]);
|
||||
|
||||
/*
|
||||
* Then free the language structure itself...
|
||||
*/
|
||||
|
||||
next = lang->next;
|
||||
free(lang);
|
||||
}
|
||||
|
||||
lang_cache = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -139,115 +179,218 @@ cupsLangFree(cups_lang_t *lang) /* I - Language to free */
|
||||
* 'cupsLangGet()' - Get a language.
|
||||
*/
|
||||
|
||||
cups_lang_t * /* O - Language data */
|
||||
cupsLangGet(const char *language) /* I - Language or locale */
|
||||
cups_lang_t * /* O - Language data */
|
||||
cupsLangGet(const char *language) /* I - Language or locale */
|
||||
{
|
||||
int i, count; /* Looping vars */
|
||||
char langname[16], /* Requested language name */
|
||||
real[16], /* Real language name */
|
||||
filename[1024], /* Filename for language locale file */
|
||||
*localedir; /* Directory for locale files */
|
||||
FILE *fp; /* Language locale file pointer */
|
||||
char line[1024]; /* Line from file */
|
||||
cups_msg_t msg; /* Message number */
|
||||
char *text; /* Message text */
|
||||
cups_lang_t *lang; /* Current language... */
|
||||
int i, count; /* Looping vars */
|
||||
char langname[16], /* Requested language name */
|
||||
country[16], /* Country code */
|
||||
charset[16], /* Character set */
|
||||
*ptr, /* Pointer into language/ */
|
||||
real[48], /* Real language name */
|
||||
filename[1024], /* Filename for language locale file */
|
||||
*localedir; /* Directory for locale files */
|
||||
cups_encoding_t encoding; /* Encoding to use */
|
||||
FILE *fp; /* Language locale file pointer */
|
||||
char line[1024]; /* Line from file */
|
||||
cups_msg_t msg; /* Message number */
|
||||
char *text; /* Message text */
|
||||
cups_lang_t *lang; /* Current language... */
|
||||
const char *oldlocale; /* Old locale name */
|
||||
static const char * const locale_encodings[] =
|
||||
{ /* Locale charset names */
|
||||
"ASCII",
|
||||
"ISO8859-1",
|
||||
"ISO8859-2",
|
||||
"ISO8859-3",
|
||||
"ISO8859-4",
|
||||
"ISO8859-5",
|
||||
"ISO8859-6",
|
||||
"ISO8859-7",
|
||||
"ISO8859-8",
|
||||
"ISO8859-9",
|
||||
"ISO8859-10",
|
||||
"UTF-8",
|
||||
"ISO8859-13",
|
||||
"ISO8859-14",
|
||||
"ISO8859-15",
|
||||
"CP874",
|
||||
"CP1250",
|
||||
"CP1251",
|
||||
"CP1252",
|
||||
"CP1253",
|
||||
"CP1254",
|
||||
"CP1255",
|
||||
"CP1256",
|
||||
"CP1257",
|
||||
"CP1258",
|
||||
"KOI8R",
|
||||
"KOI8U"
|
||||
};
|
||||
|
||||
|
||||
#ifdef __APPLE__
|
||||
/*
|
||||
* Convert the language string passed in to a locale string. "C" is the
|
||||
* standard POSIX locale and is copied unchanged. Otherwise the
|
||||
* language string is converted from ll-cc (language-country) to ll_cc
|
||||
* to match the file naming convention used by all POSIX-compliant
|
||||
* operating systems. Any trailing character set specification is
|
||||
* dropped.
|
||||
* Apple's setlocale doesn't give us the user's localization
|
||||
* preference so we have to look it up this way...
|
||||
*/
|
||||
|
||||
if (language == NULL || language[0] == '\0' ||
|
||||
if (language == NULL)
|
||||
{
|
||||
language = appleLangDefault();
|
||||
setlocale(LC_ALL, language);
|
||||
}
|
||||
#elif defined(LC_MESSAGES)
|
||||
if (language == NULL)
|
||||
language = setlocale(LC_MESSAGES, "");
|
||||
#else
|
||||
if (language == NULL)
|
||||
language = setlocale(LC_ALL, "");
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/*
|
||||
* Set the locale back to POSIX while we do string ops, since
|
||||
* apparently some buggy C libraries break ctype() for non-I18N
|
||||
* chars...
|
||||
*/
|
||||
|
||||
#if defined(__APPLE__) || !defined(LC_CTYPE)
|
||||
oldlocale = setlocale(LC_ALL, "C");
|
||||
#else
|
||||
oldlocale = setlocale(LC_CTYPE, "C");
|
||||
#endif /* __APPLE__ || !LC_CTYPE */
|
||||
|
||||
/*
|
||||
* Parse the language string passed in to a locale string. "C" is the
|
||||
* standard POSIX locale and is copied unchanged. Otherwise the
|
||||
* language string is converted from ll-cc[.charset] (language-country)
|
||||
* to ll_CC[.CHARSET] to match the file naming convention used by all
|
||||
* POSIX-compliant operating systems. Invalid language names are mapped
|
||||
* to the POSIX locale.
|
||||
*/
|
||||
|
||||
country[0] = '\0';
|
||||
charset[0] = '\0';
|
||||
|
||||
if (language == NULL || !language[0] ||
|
||||
strcmp(language, "POSIX") == 0)
|
||||
strcpy(langname, "C");
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Copy the locale string over safely...
|
||||
* Copy the parts of the locale string over safely...
|
||||
*/
|
||||
|
||||
strncpy(langname, language, sizeof(langname) - 1);
|
||||
langname[sizeof(langname) - 1] = '\0';
|
||||
for (ptr = langname; *language; language ++)
|
||||
if (*language == '_' || *language == '-')
|
||||
{
|
||||
language ++;
|
||||
break;
|
||||
}
|
||||
else if (ptr < (langname + sizeof(langname) - 1))
|
||||
*ptr++ = tolower(*language);
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
for (ptr = country; *language; language ++)
|
||||
if (*language == '.')
|
||||
{
|
||||
language ++;
|
||||
break;
|
||||
}
|
||||
else if (ptr < (country + sizeof(country) - 1))
|
||||
*ptr++ = toupper(*language);
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
for (ptr = charset; *language; language ++)
|
||||
if (ptr < (charset + sizeof(charset) - 1))
|
||||
*ptr++ = toupper(*language);
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
/*
|
||||
* Strip charset from "locale.charset"...
|
||||
* Force a POSIX locale for an invalid language name...
|
||||
*/
|
||||
|
||||
if ((text = strchr(langname, '.')) != NULL)
|
||||
*text = '\0';
|
||||
}
|
||||
|
||||
if (strlen(langname) < 2)
|
||||
strcpy(real, "C");
|
||||
else
|
||||
{
|
||||
real[0] = tolower(langname[0]);
|
||||
real[1] = tolower(langname[1]);
|
||||
|
||||
if (langname[2] == '_' || langname[2] == '-')
|
||||
if (strlen(langname) != 2)
|
||||
{
|
||||
real[2] = '_';
|
||||
real[3] = toupper(langname[3]);
|
||||
real[4] = toupper(langname[4]);
|
||||
real[5] = '\0';
|
||||
langname[5] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
langname[2] = '\0';
|
||||
real[2] = '\0';
|
||||
strcpy(langname, "C");
|
||||
country[0] = '\0';
|
||||
charset[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Next try to open a locale file; we will try the country-localized file
|
||||
* first, and then look for generic language file. If all else fails we
|
||||
* will use the POSIX locale.
|
||||
* Restore the locale...
|
||||
*/
|
||||
|
||||
#if defined(__APPLE__) || !defined(LC_CTYPE)
|
||||
setlocale(LC_ALL, oldlocale);
|
||||
#else
|
||||
setlocale(LC_CTYPE, oldlocale);
|
||||
#endif /* __APPLE__ || !LC_CTYPE */
|
||||
|
||||
/*
|
||||
* Figure out the desired encoding...
|
||||
*/
|
||||
|
||||
encoding = CUPS_US_ASCII;
|
||||
|
||||
for (i = 0; i < (int)(sizeof(locale_encodings) / sizeof(locale_encodings[0])); i ++)
|
||||
if (!strcmp(charset, locale_encodings[i]))
|
||||
{
|
||||
encoding = (cups_encoding_t)i;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now find the message catalog for this locale...
|
||||
*/
|
||||
|
||||
if ((localedir = getenv("LOCALEDIR")) == NULL)
|
||||
localedir = CUPS_LOCALEDIR;
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir, real, real);
|
||||
|
||||
if ((fp = fopen(filename, "r")) == NULL)
|
||||
if (strlen(real) > 2)
|
||||
{
|
||||
/*
|
||||
* Nope, see if we can open a generic language file...
|
||||
*/
|
||||
|
||||
real[2] = '\0';
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir, real,
|
||||
real);
|
||||
fp = fopen(filename, "r");
|
||||
}
|
||||
|
||||
/*
|
||||
* Then see if we already have this language loaded...
|
||||
* See if we already have this language/country loaded...
|
||||
*/
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = lang->next)
|
||||
if (strcmp(lang->language, langname) == 0)
|
||||
{
|
||||
lang->used ++;
|
||||
snprintf(real, sizeof(real), "%s_%s", langname, country);
|
||||
|
||||
if (fp != NULL)
|
||||
fclose(fp);
|
||||
if ((lang = cups_cache_lookup(real, encoding)) != NULL)
|
||||
return (lang);
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir, real, real);
|
||||
|
||||
if (access(filename, 0))
|
||||
{
|
||||
/*
|
||||
* Country localization not available, look for generic localization...
|
||||
*/
|
||||
|
||||
if ((lang = cups_cache_lookup(langname, encoding)) != NULL)
|
||||
return (lang);
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/%s/cups_%s", localedir,
|
||||
langname, langname);
|
||||
|
||||
if (access(filename, 0))
|
||||
{
|
||||
/*
|
||||
* No generic localization, so use POSIX...
|
||||
*/
|
||||
|
||||
strcpy(real, "C");
|
||||
snprintf(filename, sizeof(filename), "%s/C/cups_C", localedir);
|
||||
}
|
||||
else
|
||||
strcpy(real, langname);
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, we have an open messages file; the first line will contain the
|
||||
* language encoding (us-ascii, iso-8859-1, etc.), and the rest will
|
||||
* be messages consisting of:
|
||||
* Open the messages file; the first line contains the default
|
||||
* language encoding (us-ascii, iso-8859-1, etc.), and the rest are
|
||||
* messages consisting of:
|
||||
*
|
||||
* #### SP message text
|
||||
*
|
||||
@@ -262,8 +405,13 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
* All leading whitespace is deleted.
|
||||
*/
|
||||
|
||||
if (strcmp(real, "C"))
|
||||
fp = fopen(filename, "r");
|
||||
else
|
||||
fp = NULL;
|
||||
|
||||
if (fp == NULL)
|
||||
strcpy(line, lang_default[0]);
|
||||
strlcpy(line, lang_default[0], sizeof(line));
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
{
|
||||
/*
|
||||
@@ -312,7 +460,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
|
||||
free(lang->messages[i]);
|
||||
|
||||
lang->messages[i] = lang_blank;
|
||||
lang->messages[i] = (char*)lang_blank;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -320,14 +468,19 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
*/
|
||||
|
||||
lang->used ++;
|
||||
strcpy(lang->language, langname);
|
||||
strlcpy(lang->language, real, sizeof(lang->language));
|
||||
|
||||
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
|
||||
if (strcmp(lang_encodings[i], line) == 0)
|
||||
{
|
||||
lang->encoding = (cups_encoding_t)i;
|
||||
break;
|
||||
}
|
||||
if (charset[0])
|
||||
lang->encoding = encoding;
|
||||
else
|
||||
{
|
||||
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
|
||||
if (strcmp(lang_encodings[i], line) == 0)
|
||||
{
|
||||
lang->encoding = (cups_encoding_t)i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the strings from the file...
|
||||
@@ -347,7 +500,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
if (lang_default[count] == NULL)
|
||||
break;
|
||||
|
||||
strcpy(line, lang_default[count]);
|
||||
strlcpy(line, lang_default[count], sizeof(line));
|
||||
}
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
break;
|
||||
@@ -397,6 +550,185 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
}
|
||||
|
||||
|
||||
#ifdef __APPLE__
|
||||
/*
|
||||
* Code & data to translate OSX's language names to their ISO 639-1 locale.
|
||||
*
|
||||
* In Radar bug #2563420 there's a request to have CoreFoundation export a
|
||||
* function to do this mapping. If this function gets implemented we should
|
||||
* use it.
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char * const name; /* Language name */
|
||||
const char * const locale; /* Locale name */
|
||||
} apple_name_locale_t;
|
||||
|
||||
static const apple_name_locale_t apple_name_locale[] =
|
||||
{
|
||||
{ "English" , "en_US.UTF-8" }, { "French" , "fr.UTF-8" },
|
||||
{ "German" , "de.UTF-8" }, { "Italian" , "it.UTF-8" },
|
||||
{ "Dutch" , "nl.UTF-8" }, { "Swedish" , "sv.UTF-8" },
|
||||
{ "Spanish" , "es.UTF-8" }, { "Danish" , "da.UTF-8" },
|
||||
{ "Portuguese" , "pt.UTF-8" }, { "Norwegian" , "no.UTF-8" },
|
||||
{ "Hebrew" , "he.UTF-8" }, { "Japanese" , "ja.UTF-8" },
|
||||
{ "Arabic" , "ar.UTF-8" }, { "Finnish" , "fi.UTF-8" },
|
||||
{ "Greek" , "el.UTF-8" }, { "Icelandic" , "is.UTF-8" },
|
||||
{ "Maltese" , "mt.UTF-8" }, { "Turkish" , "tr.UTF-8" },
|
||||
{ "Croatian" , "hr.UTF-8" }, { "Chinese" , "zh.UTF-8" },
|
||||
{ "Urdu" , "ur.UTF-8" }, { "Hindi" , "hi.UTF-8" },
|
||||
{ "Thai" , "th.UTF-8" }, { "Korean" , "ko.UTF-8" },
|
||||
{ "Lithuanian" , "lt.UTF-8" }, { "Polish" , "pl.UTF-8" },
|
||||
{ "Hungarian" , "hu.UTF-8" }, { "Estonian" , "et.UTF-8" },
|
||||
{ "Latvian" , "lv.UTF-8" }, { "Sami" , "se.UTF-8" },
|
||||
{ "Faroese" , "fo.UTF-8" }, { "Farsi" , "fa.UTF-8" },
|
||||
{ "Russian" , "ru.UTF-8" }, { "Chinese" , "zh.UTF-8" },
|
||||
{ "Dutch" , "nl.UTF-8" }, { "Irish" , "ga.UTF-8" },
|
||||
{ "Albanian" , "sq.UTF-8" }, { "Romanian" , "ro.UTF-8" },
|
||||
{ "Czech" , "cs.UTF-8" }, { "Slovak" , "sk.UTF-8" },
|
||||
{ "Slovenian" , "sl.UTF-8" }, { "Yiddish" , "yi.UTF-8" },
|
||||
{ "Serbian" , "sr.UTF-8" }, { "Macedonian" , "mk.UTF-8" },
|
||||
{ "Bulgarian" , "bg.UTF-8" }, { "Ukrainian" , "uk.UTF-8" },
|
||||
{ "Byelorussian", "be.UTF-8" }, { "Uzbek" , "uz.UTF-8" },
|
||||
{ "Kazakh" , "kk.UTF-8" }, { "Azerbaijani", "az.UTF-8" },
|
||||
{ "Azerbaijani" , "az.UTF-8" }, { "Armenian" , "hy.UTF-8" },
|
||||
{ "Georgian" , "ka.UTF-8" }, { "Moldavian" , "mo.UTF-8" },
|
||||
{ "Kirghiz" , "ky.UTF-8" }, { "Tajiki" , "tg.UTF-8" },
|
||||
{ "Turkmen" , "tk.UTF-8" }, { "Mongolian" , "mn.UTF-8" },
|
||||
{ "Mongolian" , "mn.UTF-8" }, { "Pashto" , "ps.UTF-8" },
|
||||
{ "Kurdish" , "ku.UTF-8" }, { "Kashmiri" , "ks.UTF-8" },
|
||||
{ "Sindhi" , "sd.UTF-8" }, { "Tibetan" , "bo.UTF-8" },
|
||||
{ "Nepali" , "ne.UTF-8" }, { "Sanskrit" , "sa.UTF-8" },
|
||||
{ "Marathi" , "mr.UTF-8" }, { "Bengali" , "bn.UTF-8" },
|
||||
{ "Assamese" , "as.UTF-8" }, { "Gujarati" , "gu.UTF-8" },
|
||||
{ "Punjabi" , "pa.UTF-8" }, { "Oriya" , "or.UTF-8" },
|
||||
{ "Malayalam" , "ml.UTF-8" }, { "Kannada" , "kn.UTF-8" },
|
||||
{ "Tamil" , "ta.UTF-8" }, { "Telugu" , "te.UTF-8" },
|
||||
{ "Sinhalese" , "si.UTF-8" }, { "Burmese" , "my.UTF-8" },
|
||||
{ "Khmer" , "km.UTF-8" }, { "Lao" , "lo.UTF-8" },
|
||||
{ "Vietnamese" , "vi.UTF-8" }, { "Indonesian" , "id.UTF-8" },
|
||||
{ "Tagalog" , "tl.UTF-8" }, { "Malay" , "ms.UTF-8" },
|
||||
{ "Malay" , "ms.UTF-8" }, { "Amharic" , "am.UTF-8" },
|
||||
{ "Tigrinya" , "ti.UTF-8" }, { "Oromo" , "om.UTF-8" },
|
||||
{ "Somali" , "so.UTF-8" }, { "Swahili" , "sw.UTF-8" },
|
||||
{ "Kinyarwanda" , "rw.UTF-8" }, { "Rundi" , "rn.UTF-8" },
|
||||
{ "Nyanja" , "" }, { "Malagasy" , "mg.UTF-8" },
|
||||
{ "Esperanto" , "eo.UTF-8" }, { "Welsh" , "cy.UTF-8" },
|
||||
{ "Basque" , "eu.UTF-8" }, { "Catalan" , "ca.UTF-8" },
|
||||
{ "Latin" , "la.UTF-8" }, { "Quechua" , "qu.UTF-8" },
|
||||
{ "Guarani" , "gn.UTF-8" }, { "Aymara" , "ay.UTF-8" },
|
||||
{ "Tatar" , "tt.UTF-8" }, { "Uighur" , "ug.UTF-8" },
|
||||
{ "Dzongkha" , "dz.UTF-8" }, { "Javanese" , "jv.UTF-8" },
|
||||
{ "Sundanese" , "su.UTF-8" }, { "Galician" , "gl.UTF-8" },
|
||||
{ "Afrikaans" , "af.UTF-8" }, { "Breton" , "br.UTF-8" },
|
||||
{ "Inuktitut" , "iu.UTF-8" }, { "Scottish" , "gd.UTF-8" },
|
||||
{ "Manx" , "gv.UTF-8" }, { "Irish" , "ga.UTF-8" },
|
||||
{ "Tongan" , "to.UTF-8" }, { "Greek" , "el.UTF-8" },
|
||||
{ "Greenlandic" , "kl.UTF-8" }, { "Azerbaijani", "az.UTF-8" }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* 'appleLangDefault()' - Get the default locale string.
|
||||
*/
|
||||
|
||||
static const char * /* O - Locale string */
|
||||
appleLangDefault(void)
|
||||
{
|
||||
int i; /* Looping var */
|
||||
CFPropertyListRef localizationList; /* List of localization data */
|
||||
CFStringRef localizationName; /* Current name */
|
||||
char buff[256]; /* Temporary buffer */
|
||||
static const char *language = NULL; /* Cached language */
|
||||
|
||||
|
||||
/*
|
||||
* Only do the lookup and translation the first time.
|
||||
*/
|
||||
|
||||
if (language == NULL)
|
||||
{
|
||||
localizationList = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
|
||||
if (localizationList != NULL &&
|
||||
CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
{
|
||||
localizationName = CFArrayGetValueAtIndex(localizationList, 0);
|
||||
|
||||
if (localizationName != NULL &&
|
||||
CFGetTypeID(localizationName) == CFStringGetTypeID())
|
||||
{
|
||||
CFIndex length = CFStringGetLength(localizationName);
|
||||
|
||||
if (length <= sizeof(buff) &&
|
||||
CFStringGetCString(localizationName, buff, sizeof(buff), kCFStringEncodingASCII))
|
||||
{
|
||||
buff[sizeof(buff) - 1] = '\0';
|
||||
|
||||
for (i = 0;
|
||||
i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]);
|
||||
i++)
|
||||
{
|
||||
if (strcasecmp(buff, apple_name_locale[i].name) == 0)
|
||||
{
|
||||
language = apple_name_locale[i].locale;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(localizationList);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we didn't find the language, default to en_US...
|
||||
*/
|
||||
|
||||
if (language == NULL)
|
||||
language = apple_name_locale[0].locale;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the cached locale...
|
||||
*/
|
||||
|
||||
return (language);
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_cache_lookup()' - Lookup a language in the cache...
|
||||
*/
|
||||
|
||||
static cups_lang_t * /* O - Language data or NULL */
|
||||
cups_cache_lookup(const char *name,/* I - Name of locale */
|
||||
cups_encoding_t encoding)
|
||||
/* I - Encoding of locale */
|
||||
{
|
||||
cups_lang_t *lang; /* Current language */
|
||||
|
||||
|
||||
/*
|
||||
* Loop through the cache and return a match if found...
|
||||
*/
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = lang->next)
|
||||
if (!strcmp(lang->language, name) && encoding == lang->encoding)
|
||||
{
|
||||
lang->used ++;
|
||||
|
||||
return (lang);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
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