Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| c183ed42e7 |
+1
-362
@@ -1,367 +1,6 @@
|
||||
CHANGES.txt - 2007-03-19
|
||||
CHANGES.txt - 2006-07-18
|
||||
------------------------
|
||||
|
||||
CHANGES IN CUPS V1.2.10
|
||||
|
||||
- ppdLocalize() now supports localizing for Japanese
|
||||
using the "jp" locale name used by the ppdmerge
|
||||
program from the CUPS DDK 1.1.0 (STR #2301)
|
||||
- _cupsAdminSetServerSettings() did not support changing
|
||||
of top-level directives as designed.
|
||||
- The init script path check was broken.
|
||||
- CUPS incorrectly used the attribute "notify-recipient"
|
||||
instead of "notify-recicpient-uri" in several places
|
||||
(STR #2297)
|
||||
- Fixed a configure script bug on MirBSD (STR #2294)
|
||||
- The pdftops filter did not limit the amount of recursion
|
||||
of page sets (STR #2293)
|
||||
- Custom page sizes with fractional point sizes did not
|
||||
work (STR #2296)
|
||||
- The lpoptions command would crash when adding or removing
|
||||
options on a system with no printers (STR #2295)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.9
|
||||
|
||||
- The scheduler did not use the default job-sheets
|
||||
(banners) for implicit classes (STR #2284)
|
||||
- The scheduler could crash when listing complete jobs
|
||||
that had been unloaded from memory (STR #2288)
|
||||
- The French localization was doubled up (STR #2287)
|
||||
- Build system fixes for several platforms (STR #2260,
|
||||
STR #2275)
|
||||
- The scheduler's openssl certificate generation code was
|
||||
broken on some platforms (STR #2282)
|
||||
- The scheduler's log rotation check for devices was
|
||||
broken (STR #2278)
|
||||
- The LPD mini-daemon did not handle the document-format
|
||||
option correctly (STR #2266)
|
||||
- The pdftops filter ignored the "match" size option in the
|
||||
pdftops.conf file (STR #2285)
|
||||
- cupstestppd now validates UTF-8 text strings in
|
||||
globalized PPD files (STR #2283)
|
||||
- The outputorder=reverse option did not work with all
|
||||
printers (STR #2279)
|
||||
- Classes containing other classes did not always work
|
||||
(STR #2255)
|
||||
- Printer location and description information was lost
|
||||
if the corresponding string contained the "#" character
|
||||
(STR #2254)
|
||||
- cupsRemoveOption() did not work properly (STR #2264)
|
||||
- The USB backend did not work with some USB to parallel
|
||||
cables on Mac OS X.
|
||||
- The test page did not print the rulers properly on
|
||||
large media sizes (STR #2252)
|
||||
- The text filter could crash when pretty printing certain
|
||||
types of files (STR #2158)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.8
|
||||
|
||||
- Documentation fixes (STR #2141, STR #2157)
|
||||
- The HTTP upgrade redirection used by the scheduler did
|
||||
not work with Internet Explorer (STR #2235)
|
||||
- Members of a class with Unicode names did not appear
|
||||
correctly in the web interface (STR #2154)
|
||||
- Changing the "Save debugging information" setting in
|
||||
the web interface no longer affects the other server
|
||||
settings (STR #1993)
|
||||
- The scheduler did not choose SSL certificates correctly
|
||||
on Mac OS X (STR #2225)
|
||||
- The scheduler could get in an infinite loop when
|
||||
printing to a remote class (STR #2228)
|
||||
- The jobs web page did not have separating space after
|
||||
the number of pages column (STR #2230)
|
||||
- Added French localization (STR #2221)
|
||||
- Updated Spanish localization (STR #2223)
|
||||
- Updated Japanese localization (STR #2216)
|
||||
- cupsBorderlessScalingFacter was limited to a range of
|
||||
0.9 to 1.1, but some printers need larger values (STR
|
||||
#2222)
|
||||
- Landscape printing of PDF files did not always work
|
||||
(STR #2149)
|
||||
- Fixed slow USB printing on Minolta printers (STR #2104,
|
||||
STR #2219)
|
||||
- The ZPL label printer driver could produce stretched
|
||||
output (PR #6448)
|
||||
- The IPP backend now clears the printer-state-message
|
||||
when there are no outstanding errors or warnings (STR
|
||||
#2126)
|
||||
- The CUPS Java scripting support did not work with
|
||||
recent versions of Java due to the use of Sun's private
|
||||
Base64 class (STR #2152)
|
||||
- The scheduler did not pass HTTP GET form variables to
|
||||
custom CGI programs (STR #2173)
|
||||
- The lpoptions command now displays the reason why a PPD
|
||||
file cannot be found (STR #2184)
|
||||
- The scheduler did not accept "none" as a browse
|
||||
protocol name (STR #2200)
|
||||
- The scheduler still loaded the remote printer cache,
|
||||
even when browsing was disabled (STR #2198)
|
||||
- The SNMP backend now shows OfficeJet printers with the
|
||||
"HP" manufacturer prefix (STR #2151)
|
||||
- Web interface HTML cleanup (STR #2153)
|
||||
- The parallel backend consumed 100% CPU on FreeBSD due
|
||||
to an apparently common parallel port driver bug (STR
|
||||
#2161)
|
||||
- ippReadIO() incorrectly returned IPP_IDLE when the
|
||||
initial IPP message header could not be read (STR
|
||||
#2179)
|
||||
- cupsRasterInterpretPPD() did not support custom options
|
||||
(STR #1960)
|
||||
- Collated output produced by the PostScript filter could
|
||||
lose some options (STR #2137)
|
||||
- job-hold-until with time values for the next day would
|
||||
be held for 60 days (STR #2144)
|
||||
- Some types of Sun raster files did not print correctly
|
||||
(STR #2107)
|
||||
- Raw PBM files did not print correctly (STR #2106)
|
||||
- The SNMP backend no longer uses IPP with HP printers,
|
||||
as some recent firmware versions appear to not work
|
||||
(STR #2055)
|
||||
- cupsMarkOptions() did not handle the
|
||||
multiple-document-handling option (STR #2135)
|
||||
- lpstat did not show the local job ID of active printers
|
||||
(STR #2125)
|
||||
- The backends incorrectly used STATUS:
|
||||
media-tray-empty-error messages for out-of-paper
|
||||
conditions (STR #2123, STR #2124)
|
||||
- cupsGetPPD2() returned the wrong error when the PPD
|
||||
file did not exist (STR #2122)
|
||||
- cupsDoAuthentication() did not translate the password
|
||||
prompt (STR #2121)
|
||||
- httpGetLength2() did not handle error messages without
|
||||
content correctly (STR #2133)
|
||||
- Added support for 32/64-bit libraries on HP-UX Itanium
|
||||
systems (STR #2115)
|
||||
- Fixed a configure script problem with the 32/64-bit
|
||||
library support (STR #2114)
|
||||
- The PostScript filter did not properly output document
|
||||
setup commands for reversed output (STR #2111)
|
||||
- The scheduler did not parse IPv6 netmasks properly (STR
|
||||
#2117)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.7
|
||||
|
||||
- Documentation updates (STR #2089)
|
||||
- Added an Italian translation (STR #2105)
|
||||
- The PostScript filter now rotates the bounding box
|
||||
values as needed (STR #2079)
|
||||
- The scheduler no longer loads the remote printer cache
|
||||
when browsing is disabled (STR #2084)
|
||||
- The scheduler no longer writes a new launchd
|
||||
configuration file if it doesn't have to (STR #2083)
|
||||
- Updated the USB and PAP backends for Mac OS X (STR
|
||||
#2086)
|
||||
- The scheduler now picks up on changes to IPv6 and DNS
|
||||
configuration on Mac OS X (STR #2085)
|
||||
- The lpstat program could still hang (STR #2098)
|
||||
- Fixed an inefficiency in the SNMP IPP detection code
|
||||
(STR #2100)
|
||||
- The SSL negotiation code did not implement short
|
||||
timeouts (STR #2091)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.6
|
||||
|
||||
- The web interface was not localized on Mac OS X (STR
|
||||
#2075)
|
||||
- "lpc status" did not show the number of queued jobs for
|
||||
disabled queues (STR #2069)
|
||||
- The lpstat program could hang (STR #2073)
|
||||
- The serial backend did not support the new USB serial
|
||||
filenames on Linux (STR #2061)
|
||||
- The parallel backend did not support bidirectional I/O
|
||||
properly (STR #2056)
|
||||
- The network backends now log the numeric address that
|
||||
is being used (STR #2046)
|
||||
- Fixed a compile error when using libpaper.
|
||||
- Fixed a compile error when compiling on Solaris with
|
||||
threading enabled (STR #2049, STR #2050)
|
||||
- Missing printer-state-changed event for
|
||||
printer-state-message updates (STR #2047)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.5
|
||||
|
||||
- Documentation updates (STR #2038)
|
||||
- The SNMP backend no longer uses IPP for Epson printers
|
||||
(STR #2028)
|
||||
- Updated the configure script for Tru64 UNIX 5.1 (STR
|
||||
#2033)
|
||||
- Tru64 5.1B's getaddrinfo() and getnameinfo() functions
|
||||
leak file descriptors (STR #2034)
|
||||
- cupsAddDest() didn't add the parent destination's
|
||||
options and attributes.
|
||||
- ppdConflicts() did not handle custom option
|
||||
constraints.
|
||||
- Raw printing of gzip'd files did not work (STR #2009)
|
||||
- The scheduler no longer preserves default option
|
||||
choices when the new PPD no longer provides the old
|
||||
default choice (STR #1929)
|
||||
- The Linux SCSI backend is now only built if the SCSI
|
||||
development headers are installed.
|
||||
- USB printing to Minolta printers did not work (STR
|
||||
#2019)
|
||||
- Windows clients could not monitor the queue status (STR
|
||||
#2006)
|
||||
- The scheduler didn't log the operation name in the
|
||||
access_log file for Create-Job and Print-Job requests.
|
||||
- The PostScript filter now separates collated copies
|
||||
with any required JCL commands so that JCL-based
|
||||
finishing options act on the individual copies and not
|
||||
all of the copies as a single document.
|
||||
- The PostScript filter now disables duplex printing when
|
||||
printing a 1-page document.
|
||||
- cups-lpd didn't pass the correct
|
||||
job-originating-host-name value (STR #2023)
|
||||
- Fixed some speling errors in the German message catalog
|
||||
(STR #2012)
|
||||
- cupstestppd did not catch PPD files with bad
|
||||
UIConstraints values (STR #2016)
|
||||
- The USB backend did not work with the current udev-
|
||||
created printers if the first printer was disconnected
|
||||
(STR #2017)
|
||||
- Mirrored and rotated printing did not work with some
|
||||
documents (STR #2004)
|
||||
- 2-sided printing with banners did not work properly on
|
||||
some printers (STR #2018)
|
||||
- Updated the raw type rule to handle PJL within the
|
||||
first 4k of a print job (STR #1969)
|
||||
- Added an Estonian translation (STR #1957)
|
||||
- Clarified the documentation for the cupsd.conf @LOCAL
|
||||
and @IF(name) allow/deny functionality (STR #1992)
|
||||
- The PostScript filters did not escape the Title and For
|
||||
comments in the print job header (STR #1988)
|
||||
- The scheduler would use 100% CPU if browsing was
|
||||
disabled and the cupsd.conf file contained BrowsePoll
|
||||
lines (STR #1994)
|
||||
- The cupsDirRead() function did not work properly on
|
||||
non-POSIX-compliant systems (STR #2001)
|
||||
- The cupsFile functions didn't handle read/write errors
|
||||
properly (STR #1996)
|
||||
- The DBUS support now works with older versions of the
|
||||
DBUS library.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.4
|
||||
|
||||
- The --with-printcap configure option did not work (STR
|
||||
#1984)
|
||||
- The character set reported by cupsLangGet() did not
|
||||
always reflect the default character set of a given
|
||||
locale (STR #1983)
|
||||
- Older Lexmark and Tektronix printers did not work with
|
||||
IPP (STR #1980)
|
||||
- Failsafe printing did not work (PR #6328)
|
||||
- Some web interface redirects did not work (STR #1978)
|
||||
- The web interface change settings button could
|
||||
introduce a "Port 0" line in cupsd.conf if there was no
|
||||
loopback connection available (STR #1979)
|
||||
- The web interface change settings and edit
|
||||
configuration file buttons would truncate the
|
||||
cupsd.conf file (STR #1976)
|
||||
- The German web interface used the wrong printer icon
|
||||
images (STR #1973)
|
||||
- The "All Documents" link in the on-line help was
|
||||
missing a trailing slash (STR #1971)
|
||||
- The Polish web interface translation used the wrong
|
||||
URLs for the job history (STR #1963)
|
||||
- The "reprint job" button did not work (STR #1956)
|
||||
- The scheduler did not always report printer or job
|
||||
events properly (STR #1955)
|
||||
- The scheduler always stopped the queue on error,
|
||||
regardless of the exit code, if the error policy was
|
||||
set to "stop-printer" (STR #1959)
|
||||
- ppdEmitJCL() included UTF-8 characters in the JCL job
|
||||
name, which caused problems on some printers (STR
|
||||
#1959)
|
||||
- Fixed a buffering problem that cause high CPU usage
|
||||
(STR #1968)
|
||||
- The command-line applications did not convert
|
||||
command-line strings to UTF-8 as needed (STR #1958)
|
||||
- cupsDirRead() incorrectly aborted when reading a
|
||||
symbolic link that pointed to a file/directory that did
|
||||
not exist (STR #1953)
|
||||
- The cupsInterpretRasterPPD() function did not handle
|
||||
custom page sizes properly.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.3
|
||||
|
||||
- The scheduler did not send job-state or
|
||||
job-config-changed events when a job was held,
|
||||
released, or changed (STR #1947)
|
||||
- The scheduler now aborts if the configuration file and
|
||||
directory checks fail (STR #1941)
|
||||
- Fixed a problem with ippPort() not using the port
|
||||
number that was set via the client.conf file or
|
||||
CUPS_SERVER environment variable (STR #1945)
|
||||
- HTTP headers were not buffered (STR #1899)
|
||||
- Some IPP printers (HP) did not like UTF-8 job names
|
||||
(STR #1837)
|
||||
- The CUPS desktop icon is now localized for Polish (STR
|
||||
#1920)
|
||||
- Printer options were not always honored when printing
|
||||
from Windows clients (STR #1839)
|
||||
- The openssl command would lock up the scheduler when
|
||||
generating an encryption certificate on some platforms
|
||||
due to a lack of entropy for the random number
|
||||
generator (STR #1876)
|
||||
- The web admin page did not recognize that "Listen 631"
|
||||
enabled remote access (STR #1908)
|
||||
- The web admin page did not check whether changes were
|
||||
made to the Basic Server Settings check boxes (STR
|
||||
#1908)
|
||||
- The IPP backend could generate N*N copies in certain
|
||||
edge cases.
|
||||
- The scheduler did not restore remote printers properly
|
||||
when BrowseShortNames was enabled (STR #1893)
|
||||
- Polling did not handle changes to the network
|
||||
environment on Mac OS X (STR #1896)
|
||||
- The "make test" subscription tests used invalid
|
||||
notify-recipient-uri values (STR #1910)
|
||||
- Printers could be left in an undefined state on system
|
||||
sleep (STR #1905)
|
||||
- The Berkeley and System V commands did not always use
|
||||
the expected character set (STR #1915)
|
||||
- Remote printing fixes (STR #1881)
|
||||
- The cupstestppd utility did not validate translation
|
||||
strings for custom options properly.
|
||||
- Multi-language PPD files were not properly localized in
|
||||
the web interface (STR #1913)
|
||||
- The admin page's simple settings options did not check
|
||||
for local domain socket or IPv6 addresses and did not
|
||||
use "localhost" as the listen address.
|
||||
- An empty BrowseProtocols, BrowseLocalProtocols, or
|
||||
BrowseRemoteProtocols line would crash the scheduler
|
||||
instead of disabling the corresponding browsing options.
|
||||
- The scheduler now logs IPP operation status as debug
|
||||
messages instead of info or error.
|
||||
- cupsFileRewind() didn't clear the end-of-file state.
|
||||
- cupstestppd didn't report the actual misspelling of the
|
||||
1284DeviceID attribute (STR #1849)
|
||||
- BrowseRelay didn't work on Debian (STR #1887)
|
||||
- configure --without-languages didn't work (STR #1879)
|
||||
- Manually added remote printers did not work (STR #1881)
|
||||
- The <cups/backend.h> header was not installed.
|
||||
- Updated the build files for Autoconf 2.60 (STR #1853)
|
||||
- The scheduler incorrectly terminated the polling
|
||||
processes after receiving a partial log line.
|
||||
- The cups-lpd mini-daemon reported "No printer-state
|
||||
attribute found" errors when reporting the queue status
|
||||
(PR #6250, STR #1821)
|
||||
- SNMP backend improvements (STR #1737, STR #1742, STR
|
||||
#1790, STR #1835, STR #1880)
|
||||
- The scheduler erroneously reported an error with the
|
||||
CGI pipe (STR #1860)
|
||||
- Fixed HP-UX compile problems (STR #1858, STR #1859)
|
||||
- cupstestppd crashed with some PPD files (STR #1864)
|
||||
- The <cups/dir.h> and <cups/file.h> header files did not
|
||||
work with C++.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.2.2
|
||||
|
||||
- Documentation updates (STR #1765, STR #1780)
|
||||
|
||||
+2
-5
@@ -1,4 +1,4 @@
|
||||
CREDITS.txt - 2007-02-05
|
||||
CREDITS.txt - 2006-04-17
|
||||
------------------------
|
||||
|
||||
Few projects are completed by one person, and CUPS is no exception. We'd
|
||||
@@ -6,7 +6,6 @@ like to thank the following individuals for their contributions:
|
||||
|
||||
Nathaniel Barbour - Lots of testing and feedback.
|
||||
N. Becker - setsid().
|
||||
Philippe Combes - French localization.
|
||||
Jean-Eric Cuendet - GhostScript filters for CUPS.
|
||||
Van Dang - HTTP and IPP policeman.
|
||||
L. Peter Deutsch - MD5 code.
|
||||
@@ -21,7 +20,6 @@ like to thank the following individuals for their contributions:
|
||||
testing.
|
||||
Kiko - Bug fixes.
|
||||
Sergey V. Kovalyov - ESP Print Pro and CUPS beta tester.
|
||||
Marek Laane - Estonian translation.
|
||||
Mark Lawrence - Microsoft interoperability testing.
|
||||
Jeff Licquia - Bug fixes, beta testing, evangelism.
|
||||
Jason McMullan - Original CUPS RPM distributions.
|
||||
@@ -30,9 +28,8 @@ like to thank the following individuals for their contributions:
|
||||
Giulio Orsero - Bug fixes and testing.
|
||||
Michal Osowiecki - Polish localization.
|
||||
Kurt Pfeifle - Bug fixes, beta testing, evangelism.
|
||||
Vincenzo Reale - Italian localization.
|
||||
Petter Reinholdtsen - HP-UX compiler stuff.
|
||||
Juan Pablo González Riopedre - Spanish localization.
|
||||
Juan Pablo González Riopedre - Spanish localization
|
||||
Stuart Stevens - HP JetDirect IPP information.
|
||||
Andrea Suatoni - IRIX desktop integration and testing.
|
||||
Tomohiro Kato - Japanese localization.
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
INSTALL - CUPS v1.2.10 - 2007-03-19
|
||||
-----------------------------------
|
||||
INSTALL - CUPS v1.2.0 - 2006-05-08
|
||||
----------------------------------
|
||||
|
||||
This file describes how to compile and install CUPS from source
|
||||
code. For more information on CUPS see the file called
|
||||
|
||||
+21
-18
@@ -1,6 +1,6 @@
|
||||
Common UNIX Printing System License Agreement
|
||||
|
||||
Copyright 1997-2007 by Easy Software Products
|
||||
Copyright 1997-2006 by Easy Software Products
|
||||
44141 AIRPORT VIEW DR STE 204
|
||||
HOLLYWOOD, MARYLAND 20636 USA
|
||||
|
||||
@@ -17,12 +17,12 @@ 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 and CUPS Imaging libraries
|
||||
located in the "cups" and "filter" subdirectories 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.
|
||||
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:
|
||||
@@ -32,19 +32,22 @@ allows you to:
|
||||
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 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.
|
||||
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 and CUPS Imaging libraries
|
||||
under other licenses and/or conditions as appropriate for your
|
||||
application, driver, or filter.
|
||||
develop applications that use the CUPS API library under other
|
||||
licenses and/or conditions as appropriate for your application.
|
||||
|
||||
|
||||
LICENSE EXCEPTIONS
|
||||
@@ -116,9 +119,9 @@ 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 additions and modifications to
|
||||
CUPS under the GNU GPL and LGPL. For information please contact
|
||||
us at the address shown above.
|
||||
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
|
||||
|
||||
@@ -174,16 +174,12 @@ UNINSTALL64 = @UNINSTALL64@
|
||||
# We have to define these first because autoconf uses ${prefix}
|
||||
# and ${exec_prefix} for most of the other directories...
|
||||
#
|
||||
# The "datarootdir" variable may not get defined if you are using
|
||||
# a version of autoconf prior to 2.60.
|
||||
#
|
||||
# This is immediately followed by definition in ALL CAPS for the
|
||||
# needed directories...
|
||||
#
|
||||
|
||||
bindir = @bindir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
@@ -214,9 +210,6 @@ LOCALEDIR = $(BUILDROOT)@CUPS_LOCALEDIR@
|
||||
LOGDIR = $(BUILDROOT)@CUPS_LOGDIR@
|
||||
MANDIR = $(BUILDROOT)@mandir@
|
||||
PMANDIR = $(BUILDROOT)@PMANDIR@
|
||||
RCLEVELS = @RCLEVELS@
|
||||
RCSTART = @RCSTART@
|
||||
RCSTOP = @RCSTOP@
|
||||
REQUESTS = $(BUILDROOT)@CUPS_REQUESTS@
|
||||
SBINDIR = $(BUILDROOT)@sbindir@
|
||||
SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@
|
||||
|
||||
+12
-39
@@ -103,17 +103,14 @@ install: installhdrs
|
||||
echo Installing init scripts...; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/init.d/cups; \
|
||||
for level in $(RCLEVELS); do \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc$${level}.d; \
|
||||
$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/S$(RCSTART)cups; \
|
||||
if test `uname` = HP-UX; then \
|
||||
level=`expr $$level - 1`; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc$${level}.d; \
|
||||
fi; \
|
||||
$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/K$(RCSTOP)cups; \
|
||||
done; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc0.d; \
|
||||
$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc0.d/K$(RCSTOP)cups; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/rc0.d/K00cups; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc2.d; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/rc2.d/S99cups; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc3.d; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/rc3.d/S99cups; \
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc5.d; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \
|
||||
fi
|
||||
if test "x$(INITDIR)" = x -a "x$(INITDDIR)" != x; then \
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(INITDDIR); \
|
||||
@@ -124,9 +121,8 @@ install: installhdrs
|
||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
|
||||
$(INSTALL_DATA) init/Localizable.strings $(BUILDROOT)$(INITDDIR)/Resources/English.lproj/Localizable.strings; \
|
||||
elif test "$(INITDDIR)" = "/System/Library/LaunchDaemons"; then \
|
||||
echo Installing LaunchDaemons configuration files...; \
|
||||
echo Installing LaunchDaemons configuration file...; \
|
||||
$(INSTALL_DATA) init/org.cups.cupsd.plist $(BUILDROOT)$(DEFAULT_LAUNCHD_CONF); \
|
||||
$(INSTALL_DATA) init/org.cups.cups-lpd.plist $(BUILDROOT)/System/Library/LaunchDaemons; \
|
||||
else \
|
||||
echo Installing RC script...; \
|
||||
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
|
||||
@@ -224,45 +220,22 @@ uninstall:
|
||||
# Run the test suite...
|
||||
#
|
||||
|
||||
test: all
|
||||
check test: all
|
||||
echo Running CUPS test suite...
|
||||
cd test; ./run-stp-tests.sh
|
||||
|
||||
|
||||
check: all
|
||||
echo Running CUPS test suite with defaults...
|
||||
cd test; ./run-stp-tests.sh 1 0 n
|
||||
|
||||
|
||||
#
|
||||
# Make software distributions using EPM (http://www.easysw.com/epm/)...
|
||||
#
|
||||
|
||||
EPMFLAGS = -v --output-dir dist $(EPMARCH)
|
||||
EPMFLAGS = -v
|
||||
|
||||
aix bsd deb depot inst pkg setld slackware swinstall tardist:
|
||||
aix bsd deb depot inst osx pkg rpm setld slackware swinstall tardist:
|
||||
epm $(EPMFLAGS) -f $@ cups packaging/cups.list
|
||||
|
||||
epm:
|
||||
epm $(EPMFLAGS) -s packaging/installer.gif cups packaging/cups.list
|
||||
|
||||
osx:
|
||||
epm $(EPMFLAGS) -f osx -s packaging/installer.tif cups packaging/cups.list
|
||||
|
||||
rpm:
|
||||
epm $(EPMFLAGS) -f rpm -s packaging/installer.gif cups packaging/cups.list
|
||||
|
||||
.PHONEY: dist
|
||||
dist: all
|
||||
$(RM) -r dist
|
||||
$(MAKE) $(MFLAGS) epm
|
||||
case `uname` in \
|
||||
*BSD*) $(MAKE) $(MFLAGS) bsd;; \
|
||||
Darwin*) $(MAKE) $(MFLAGS) osx;; \
|
||||
IRIX*) $(MAKE) $(MFLAGS) tardist;; \
|
||||
Linux*) $(MAKE) $(MFLAGS) rpm;; \
|
||||
SunOS*) $(MAKE) $(MFLAGS) pkg;; \
|
||||
esac
|
||||
epm $(EPMFLAGS) cups packaging/cups.list
|
||||
|
||||
|
||||
#
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
README - CUPS v1.2.10 - 2007-03-19
|
||||
----------------------------------
|
||||
README - CUPS v1.2.0 - 2006-05-08
|
||||
---------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt"
|
||||
instead...
|
||||
@@ -170,7 +170,7 @@ PRINTING FILES
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 1993-2007 by Easy Software Products. CUPS,
|
||||
CUPS is Copyright 1993-2006 by Easy Software Products. CUPS,
|
||||
the CUPS logo, and the Common UNIX Printing System are the
|
||||
trademark property of Easy Software Products.
|
||||
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ all: $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS) $(TARGETS) $(LIBOBJS) http
|
||||
$(RM) $(OBJS) $(TARGETS) http
|
||||
|
||||
|
||||
#
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
@@ -62,9 +62,9 @@ extern int backendGetMakeModel(const char *device_id, char *make_model,
|
||||
extern ssize_t backendRunLoop(int print_fd, int device_fd, int use_bc);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
#endif /* !_CUPS_BACKEND_PRIVATE_H_ */
|
||||
|
||||
|
||||
|
||||
@@ -233,8 +233,6 @@ backendGetDeviceID(
|
||||
|
||||
if (!strcasecmp(manufacturer, "Hewlett-Packard"))
|
||||
strcpy(manufacturer, "HP");
|
||||
else if (!strcasecmp(manufacturer, "Lexmark International"))
|
||||
strcpy(manufacturer, "Lexmark");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -401,8 +399,6 @@ backendGetMakeModel(
|
||||
{
|
||||
if (!strncasecmp(mfg, "Hewlett-Packard", 15))
|
||||
strlcpy(make_model, "HP", make_model_size);
|
||||
else if (!strncasecmp(mfg, "Lexmark International", 21))
|
||||
strlcpy(make_model, "Lexmark", make_model_size);
|
||||
else
|
||||
strlcpy(make_model, mfg, make_model_size);
|
||||
|
||||
|
||||
+20
-64
@@ -107,7 +107,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info */
|
||||
resource[1024], /* Resource info (printer name) */
|
||||
addrname[256], /* Address name */
|
||||
*optptr, /* Pointer to URI options */
|
||||
name[255], /* Name of option */
|
||||
value[255], /* Value of option */
|
||||
@@ -133,13 +132,13 @@ main(int argc, /* I - Number of command-line args */
|
||||
ipp_attribute_t *format_sup; /* document-format-supported */
|
||||
ipp_attribute_t *printer_state; /* printer-state attribute */
|
||||
ipp_attribute_t *printer_accepting; /* printer-is-accepting-jobs */
|
||||
int copies, /* Number of copies for job */
|
||||
copies_remaining; /* Number of copies remaining */
|
||||
int copies; /* Number of copies remaining */
|
||||
const char *content_type; /* CONTENT_TYPE environment variable */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
int version; /* IPP version */
|
||||
int reasons; /* Number of printer-state-reasons */
|
||||
static const char * const pattrs[] =
|
||||
{ /* Printer attributes we want */
|
||||
"copies-supported",
|
||||
@@ -215,9 +214,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
if ((content_type = getenv("CONTENT_TYPE")) == NULL)
|
||||
content_type = "application/octet-stream";
|
||||
|
||||
if (!strncmp(content_type, "printer/", 8))
|
||||
content_type = "application/vnd.cups-raw";
|
||||
|
||||
/*
|
||||
* Extract the hostname and printer name from the URI...
|
||||
*/
|
||||
@@ -575,18 +571,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
fputs("STATE: -connecting-to-device\n", stderr);
|
||||
fprintf(stderr, "INFO: Connected to %s...\n", hostname);
|
||||
|
||||
#ifdef AF_INET6
|
||||
if (http->hostaddr->addr.sa_family == AF_INET6)
|
||||
fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6)...\n",
|
||||
httpAddrString(http->hostaddr, addrname, sizeof(addrname)),
|
||||
ntohs(http->hostaddr->ipv6.sin6_port));
|
||||
else
|
||||
#endif /* AF_INET6 */
|
||||
if (http->hostaddr->addr.sa_family == AF_INET)
|
||||
fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4)...\n",
|
||||
httpAddrString(http->hostaddr, addrname, sizeof(addrname)),
|
||||
ntohs(http->hostaddr->ipv4.sin_port));
|
||||
|
||||
/*
|
||||
* Build a URI for the printer and fill the standard IPP attributes for
|
||||
* an IPP_PRINT_FILE request. We can't use the URI in argv[0] because it
|
||||
@@ -752,25 +736,19 @@ main(int argc, /* I - Number of command-line args */
|
||||
* See if the printer supports multiple copies...
|
||||
*/
|
||||
|
||||
copies = atoi(argv[4]);
|
||||
|
||||
if (copies_sup || argc < 7)
|
||||
{
|
||||
copies_remaining = 1;
|
||||
|
||||
if (argc < 7)
|
||||
copies = 1;
|
||||
}
|
||||
copies = 1;
|
||||
else
|
||||
copies_remaining = copies;
|
||||
copies = atoi(argv[4]);
|
||||
|
||||
/*
|
||||
* Then issue the print-job request...
|
||||
*/
|
||||
|
||||
reasons = 0;
|
||||
job_id = 0;
|
||||
|
||||
while (copies_remaining > 0)
|
||||
while (copies > 0)
|
||||
{
|
||||
/*
|
||||
* Build the IPP request...
|
||||
@@ -797,13 +775,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
fprintf(stderr, "DEBUG: requesting-user-name = \"%s\"\n", argv[2]);
|
||||
|
||||
/*
|
||||
* Only add a "job-name" attribute if the remote server supports
|
||||
* copy generation - some IPP implementations like HP's don't seem
|
||||
* to like UTF-8 job names (STR #1837)...
|
||||
*/
|
||||
|
||||
if (argv[3][0] && copies_sup)
|
||||
if (argv[3][0])
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
|
||||
argv[3]);
|
||||
|
||||
@@ -850,9 +822,8 @@ main(int argc, /* I - Number of command-line args */
|
||||
* number of copies to 1...
|
||||
*/
|
||||
|
||||
content_type = "application/postscript";
|
||||
copies = 1;
|
||||
copies_remaining = 1;
|
||||
content_type = "application/postscript";
|
||||
copies = 1;
|
||||
}
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
@@ -868,21 +839,20 @@ main(int argc, /* I - Number of command-line args */
|
||||
num_options, &options);
|
||||
}
|
||||
|
||||
if (copies_sup && version > 0)
|
||||
if (copies_sup)
|
||||
{
|
||||
/*
|
||||
* Only send options if the destination printer supports the copies
|
||||
* attribute and IPP/1.1. This is a hack for the HP and Lexmark
|
||||
* implementations of IPP, which do not accept extension attributes
|
||||
* and incorrectly report a client-error-bad-request error instead of
|
||||
* the successful-ok-unsupported-attributes status. In short, at least
|
||||
* some HP and Lexmark implementations of IPP are non-compliant.
|
||||
* attribute. This is a hack for the HP JetDirect implementation of
|
||||
* IPP, which does not accept extension attributes and incorrectly
|
||||
* reports a client-error-bad-request error instead of the
|
||||
* successful-ok-unsupported-attributes status. In short, at least
|
||||
* some HP implementations of IPP are non-compliant.
|
||||
*/
|
||||
|
||||
cupsEncodeOptions(request, num_options, options);
|
||||
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies",
|
||||
copies);
|
||||
atoi(argv[4]));
|
||||
}
|
||||
|
||||
cupsFreeOptions(num_options, options);
|
||||
@@ -890,7 +860,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
/*
|
||||
* If copies aren't supported, then we are likely dealing with an HP
|
||||
* JetDirect. The HP IPP implementation seems to close the connection
|
||||
* after every request - that is, it does *not* implement HTTP Keep-
|
||||
* after every request (that is, it does *not* implement HTTP Keep-
|
||||
* Alive, which is REQUIRED by HTTP/1.1...
|
||||
*/
|
||||
|
||||
@@ -921,18 +891,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
fputs("INFO: Printer is busy; retrying print job...\n", stderr);
|
||||
sleep(10);
|
||||
}
|
||||
else if ((ipp_status == IPP_BAD_REQUEST ||
|
||||
ipp_status == IPP_VERSION_NOT_SUPPORTED) && version == 1)
|
||||
{
|
||||
/*
|
||||
* Switch to IPP/1.0...
|
||||
*/
|
||||
|
||||
fputs("INFO: Printer does not support IPP/1.1, trying IPP/1.0...\n",
|
||||
stderr);
|
||||
version = 0;
|
||||
httpReconnect(http);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ERROR: Print file was not accepted (%s)!\n",
|
||||
cupsLastErrorString());
|
||||
@@ -994,13 +952,13 @@ main(int argc, /* I - Number of command-line args */
|
||||
if (ipp_status <= IPP_OK_CONFLICT && argc > 6)
|
||||
{
|
||||
fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1);
|
||||
copies_remaining --;
|
||||
copies --;
|
||||
}
|
||||
else if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
|
||||
ipp_status == IPP_PRINTER_BUSY)
|
||||
break;
|
||||
else
|
||||
copies_remaining --;
|
||||
copies --;
|
||||
|
||||
/*
|
||||
* Wait for the job to complete...
|
||||
@@ -1342,8 +1300,6 @@ password_cb(const char *prompt) /* I - Prompt (not used) */
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
exit(CUPS_BACKEND_AUTH_REQUIRED);
|
||||
|
||||
return (NULL); /* Eliminate compiler warning */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1380,7 +1336,7 @@ report_printer_state(ipp_t *ipp) /* I - IPP response */
|
||||
strlcat(state, reason, sizeof(state));
|
||||
|
||||
prefix = ",";
|
||||
message = "";
|
||||
message = NULL;
|
||||
|
||||
if (!strncmp(reason, "media-needed", 12))
|
||||
message = "Media tray needs to be filled.";
|
||||
|
||||
+2
-14
@@ -261,7 +261,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
/* We want to pass utf-8 characters, not re-map them (3071945) */
|
||||
sanitize_title = 0;
|
||||
|
||||
/* Get the default timeout from a system preference... */
|
||||
{
|
||||
CFPropertyListRef pvalue; /* Preference value */
|
||||
SInt32 toval; /* Timeout value */
|
||||
@@ -582,7 +581,6 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
*cptr; /* Pointer into control file string */
|
||||
char status; /* Status byte from command */
|
||||
char portname[255]; /* Port name */
|
||||
char addrname[256]; /* Address name */
|
||||
http_addrlist_t *addrlist, /* Address list */
|
||||
*addr; /* Socket address */
|
||||
int copy; /* Copies written */
|
||||
@@ -821,18 +819,8 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
|
||||
fputs("STATE: -connecting-to-device\n", stderr);
|
||||
fprintf(stderr, "INFO: Connected to %s...\n", hostname);
|
||||
|
||||
#ifdef AF_INET6
|
||||
if (addr->addr.addr.sa_family == AF_INET6)
|
||||
fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6) (local port %d)...\n",
|
||||
httpAddrString(&addr->addr, addrname, sizeof(addrname)),
|
||||
ntohs(addr->addr.ipv6.sin6_port), lport);
|
||||
else
|
||||
#endif /* AF_INET6 */
|
||||
if (addr->addr.addr.sa_family == AF_INET)
|
||||
fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4) (local port %d)...\n",
|
||||
httpAddrString(&addr->addr, addrname, sizeof(addrname)),
|
||||
ntohs(addr->addr.ipv4.sin_port), lport);
|
||||
fprintf(stderr, "DEBUG: Connected on ports %d (local %d)...\n", port,
|
||||
lport);
|
||||
|
||||
/*
|
||||
* Next, open the print file and figure out its size...
|
||||
|
||||
+168
-198
@@ -42,35 +42,31 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* This program implements the Printer Access Protocol (PAP) on top of AppleTalk
|
||||
* Transaction Protocol (ATP). If it were to use the blocking pap functions of
|
||||
* the AppleTalk library it would need seperate threads for reading, writing
|
||||
* and status.
|
||||
* This program implements the Printer Access Protocol (PAP) on top of AppleTalk Transaction
|
||||
* Protocol (ATP). If it were to use the blocking pap functions of the AppleTalk library it
|
||||
* would need seperate threads for reading, writing and status.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the specified Appletalk printer.
|
||||
* listDevices() - List all LaserWriter printers in the local zone.
|
||||
* printFile() - Print file.
|
||||
* printFile() - Print from a file descriptor to an NBP specified printer.
|
||||
* papOpen() - Open a pap session to a printer.
|
||||
* papClose() - Close a pap session.
|
||||
* papClose() - Close a pap session after cleaning up pending transactions.
|
||||
* papWrite() - Write bytes to a printer.
|
||||
* papCloseResp() - Send a pap close response.
|
||||
* papCloseResp() - Send a pap close response in the rare case we receive a close connection request.
|
||||
* papSendRequest() - Fomrat and send a pap packet.
|
||||
* papCancelRequest() - Cancel a pending pap request.
|
||||
* statusUpdate() - Print printer status to stderr.
|
||||
* parseUri() - Extract the print name and zone from a uri.
|
||||
* addPercentEscapes() - Encode a string with percent escapes.
|
||||
* removePercentEscapes - Remove percent escape sequences from a string.
|
||||
* removePercentEscapes - Returns a string with any percent escape sequences replaced with their equivalent.
|
||||
* nbptuple_compare() - Compare routine for qsort.
|
||||
* okayToUseAppleTalk() - Returns true if AppleTalk is available and enabled.
|
||||
* packet_name() - Returns packet name string.
|
||||
* connectTimeout() - Returns the connect timeout preference value.
|
||||
* signalHandler() - handle SIGINT to close the session before quiting.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
@@ -90,8 +86,7 @@
|
||||
#include <netat/nbp.h>
|
||||
#include <netat/pap.h>
|
||||
|
||||
#include <cups/cups.h>
|
||||
#include <cups/backend.h>
|
||||
#include <cups/http.h>
|
||||
|
||||
#include <libkern/OSByteOrder.h>
|
||||
|
||||
@@ -100,25 +95,19 @@
|
||||
#else
|
||||
/* These definitions come from at_proto.h... */
|
||||
# define ZIP_DEF_INTERFACE NULL
|
||||
enum { RUNNING, NOTLOADED, LOADED, OTHERERROR };
|
||||
enum { RUNNING, NOTLOADED, LOADED, OTHERERROR }; /* Appletalk Stack status Function. */
|
||||
|
||||
extern int atp_abort(int fd, at_inet_t *dest, u_short tid);
|
||||
extern int atp_close(int fd);
|
||||
extern int atp_getreq(int fd, at_inet_t *src, char *buf, int *len, int *userdata,
|
||||
int *xo, u_short *tid, u_char *bitmap, int nowait);
|
||||
extern int atp_getreq(int fd, at_inet_t *src, char *buf, int *len, int *userdata, int *xo, u_short *tid, u_char *bitmap, int nowait);
|
||||
extern int atp_getresp(int fd, u_short *tid, at_resp_t *resp);
|
||||
extern int atp_look(int fd);
|
||||
extern int atp_open(at_socket *sock);
|
||||
extern int atp_sendreq(int fd, at_inet_t *dest, char *buf, int len,
|
||||
int userdata, int xo, int xo_relt, u_short *tid,
|
||||
at_resp_t *resp, at_retry_t *retry, int nowait);
|
||||
extern int atp_sendrsp(int fd, at_inet_t *dest, int xo, u_short tid,
|
||||
at_resp_t *resp);
|
||||
extern int atp_sendreq(int fd, at_inet_t *dest, char *buf, int len, int userdata, int xo, int xo_relt, u_short *tid, at_resp_t *resp, at_retry_t *retry, int nowait);
|
||||
extern int atp_sendrsp(int fd, at_inet_t *dest, int xo, u_short tid, at_resp_t *resp);
|
||||
extern int checkATStack();
|
||||
extern int nbp_lookup(at_entity_t *entity, at_nbptuple_t *buf, int max,
|
||||
at_retry_t *retry);
|
||||
extern int nbp_make_entity(at_entity_t *entity, char *obj, char *type,
|
||||
char *zone);
|
||||
extern int nbp_lookup(at_entity_t *entity, at_nbptuple_t *buf, int max, at_retry_t *retry);
|
||||
extern int nbp_make_entity(at_entity_t *entity, char *obj, char *type, char *zone);
|
||||
extern int zip_getmyzone(char *ifName, at_nvestr_t *zone);
|
||||
#endif /* HAVE_APPLETALK_AT_PROTO_H */
|
||||
|
||||
@@ -127,7 +116,7 @@ extern int zip_getmyzone(char *ifName, at_nvestr_t *zone);
|
||||
#include <CoreFoundation/CFPreferences.h>
|
||||
|
||||
/* Defines */
|
||||
#define MAX_PRINTERS 500 /* Max number of printers we can lookup */
|
||||
#define MAX_PRINTERS 500 /* Max number of printers we can lookup in listDevices */
|
||||
#define PAP_CONNID 0
|
||||
#define PAP_TYPE 1
|
||||
#define PAP_EOF 2
|
||||
@@ -137,35 +126,43 @@ extern int zip_getmyzone(char *ifName, at_nvestr_t *zone);
|
||||
#define SEQUENCE_NUM(p) (((u_char *)&p)[2])
|
||||
#define IS_PAP_EOF(p) (((u_char *)&p)[2])
|
||||
|
||||
#define PAPPacketStr(x) \
|
||||
((x) == AT_PAP_TYPE_OPEN_CONN) ? "PAP_OPEN_CONN" : \
|
||||
((x) == AT_PAP_TYPE_OPEN_CONN_REPLY) ? "PAP_OPEN_CONN_REPLY" : \
|
||||
((x) == AT_PAP_TYPE_SEND_DATA) ? "PAP_SEND_DATA" : \
|
||||
((x) == AT_PAP_TYPE_DATA) ? "PAP_DATA" : \
|
||||
((x) == AT_PAP_TYPE_TICKLE) ? "PAP_TICKLE" : \
|
||||
((x) == AT_PAP_TYPE_CLOSE_CONN) ? "PAP_CLOSE_CONN" : \
|
||||
((x) == AT_PAP_TYPE_CLOSE_CONN_REPLY) ? "PAP_CLOSE_CONN_REPLY" : \
|
||||
((x) == AT_PAP_TYPE_SEND_STATUS) ? "PAP_SEND_STATUS" : \
|
||||
((x) == AT_PAP_TYPE_SEND_STS_REPLY) ? "PAP_SEND_STS_REPLY" : \
|
||||
((x) == AT_PAP_TYPE_READ_LW) ? "PAP_READ_LW" : \
|
||||
"<Unknown>"
|
||||
|
||||
#ifndef true
|
||||
#define true 1
|
||||
#define false 0
|
||||
#endif
|
||||
|
||||
/* Globals */
|
||||
int gSockfd = 0; /* Socket descriptor */
|
||||
at_inet_t gSessionAddr = { 0 }; /* Address of the session responding socket */
|
||||
u_char gConnID = 0; /* PAP session connection id */
|
||||
u_short gSendDataID = 0; /* Transaction id of pending send-data request */
|
||||
u_short gTickleID = 0; /* Transaction id of outstanding tickle request*/
|
||||
int gWaitEOF = false; /* Option: wait for a remote's EOF */
|
||||
int gSockfd = 0; /* Socket descriptor */
|
||||
at_inet_t gSessionAddr = { 0 }; /* Address of the session responding socket */
|
||||
u_char gConnID = 0; /* PAP session connection id */
|
||||
u_short gSendDataID = 0; /* Transaction id of our pending send-data request */
|
||||
u_short gTickleID = 0; /* Transaction id of our outstanding tickle request*/
|
||||
int gWaitEOF = false; /* Option: causes us to wait for a remote's EOF */
|
||||
int gStatusInterval= 5; /* Option: 0=off else seconds between status requests*/
|
||||
int gErrorlogged = false; /* If an error was logged don't send any more INFO messages */
|
||||
int gDebug = 0; /* Option: emit debugging info */
|
||||
int gDebug = 0; /* Option: causes us to emit debugging info */
|
||||
|
||||
/* Local functions */
|
||||
static int listDevices(void);
|
||||
static int printFile(char* name, char* type, char* zone, int fdin, int fdout,
|
||||
int fderr, int copies, int argc);
|
||||
static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd,
|
||||
at_inet_t* pap_to, u_char* flowQuantum);
|
||||
static int papClose();
|
||||
static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID,
|
||||
u_char flowQuantum, char* data, int len, int eof);
|
||||
static int papCloseResp(int sockfd, at_inet_t* dest, int xo, u_short tid,
|
||||
u_char connID);
|
||||
static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID,
|
||||
int function, u_char bitmap, int xo, int seqno);
|
||||
static int printFile(char* name, char* type, char* zone, int fdin, int fdout, int fderr, int copies, int argc);
|
||||
static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, at_inet_t* pap_to, u_char* flowQuantum);
|
||||
static int papClose(int abortflag);
|
||||
static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_char flowQuantum, char* data, int len, int eof);
|
||||
static int papCloseResp(int sockfd, at_inet_t* dest, int xo, u_short tid, u_char connID);
|
||||
static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID, int function, u_char bitmap, int xo, int seqno);
|
||||
static int papCancelRequest(int sockfd, u_short tid);
|
||||
static void statusUpdate(char* status, u_char statusLen);
|
||||
static int parseUri(const char* argv0, char* name, char* type, char* zone);
|
||||
@@ -173,7 +170,6 @@ static int addPercentEscapes(const char* src, char* dst, int dstMax);
|
||||
static int removePercentEscapes(const char* src, char* dst, int dstMax);
|
||||
static int nbptuple_compare(const void *p1, const void *p2);
|
||||
static int okayToUseAppleTalk(void);
|
||||
static const char *packet_name(u_char x);
|
||||
static int connectTimeout(void);
|
||||
static void signalHandler(int sigraised);
|
||||
|
||||
@@ -203,13 +199,10 @@ int main (int argc, const char * argv[])
|
||||
|
||||
if (argc == 1 || (argc == 2 && strcmp(argv[1], "-discover") == 0))
|
||||
{
|
||||
/* If listDevices() didn't find any devices or returns an error output a
|
||||
* legacy style announcement.
|
||||
*
|
||||
/* Ignore errors returned by listDevices - they may be transitory
|
||||
* and we don't want cupsd to think that pap is forever unusable.
|
||||
*/
|
||||
if (listDevices() <= 0)
|
||||
puts("network pap \"Unknown\" \"AppleTalk Printer Access Protocol (pap)\"");
|
||||
|
||||
listDevices();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -246,9 +239,9 @@ int main (int argc, const char * argv[])
|
||||
}
|
||||
|
||||
/* Extract the device name and options from the URI... */
|
||||
parseUri(cupsBackendDeviceURI((char **)argv), name, type, zone);
|
||||
parseUri(argv[0], name, type, zone);
|
||||
|
||||
err = printFile(name, type, zone, fileno(fp), STDOUT_FILENO, STDERR_FILENO, copies, argc);
|
||||
err = printFile(name, type, zone, fileno(fp), 3, STDERR_FILENO, copies, argc);
|
||||
|
||||
if (fp != stdin)
|
||||
fclose(fp);
|
||||
@@ -270,7 +263,7 @@ int main (int argc, const char * argv[])
|
||||
static int listDevices(void)
|
||||
{
|
||||
int err = noErr;
|
||||
int i;
|
||||
int ind;
|
||||
int numberFound;
|
||||
|
||||
at_nvestr_t at_zone;
|
||||
@@ -294,13 +287,10 @@ static int listDevices(void)
|
||||
perror("ERROR: Unable to get default AppleTalk zone");
|
||||
return -2;
|
||||
}
|
||||
|
||||
memcpy(zone, at_zone.str, MIN(at_zone.len, sizeof(zone)-1));
|
||||
zone[MIN(at_zone.len, sizeof(zone)-1)] = '\0';
|
||||
|
||||
fprintf(stderr, "INFO: Using default AppleTalk zone \"%s\"\n", zone);
|
||||
|
||||
addPercentEscapes(zone, encodedZone, sizeof(encodedZone));
|
||||
err = addPercentEscapes(zone, encodedZone, sizeof(encodedZone));
|
||||
|
||||
/* Look up all the printers in our zone */
|
||||
nbp_make_entity(&entity, "=", "LaserWriter", zone);
|
||||
@@ -320,10 +310,10 @@ static int listDevices(void)
|
||||
/* Not required but sort them so they look nice */
|
||||
qsort(buf, numberFound, sizeof(at_nbptuple_t), nbptuple_compare);
|
||||
|
||||
for (i = 0; i < numberFound; i++)
|
||||
for (ind = 0; ind < numberFound; ind++)
|
||||
{
|
||||
memcpy(name, buf[i].enu_entity.object.str, MIN(buf[i].enu_entity.object.len, sizeof(name)-1));
|
||||
name[MIN(buf[i].enu_entity.object.len, sizeof(name)-1)] = '\0';
|
||||
memcpy(name, buf[ind].enu_entity.object.str, MIN(buf[ind].enu_entity.object.len, sizeof(name)-1));
|
||||
name[MIN(buf[ind].enu_entity.object.len, sizeof(name)-1)] = '\0';
|
||||
|
||||
if (addPercentEscapes(name, encodedName, sizeof(encodedName)) == 0)
|
||||
{
|
||||
@@ -381,7 +371,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
int err;
|
||||
int rc;
|
||||
int val;
|
||||
int len, i;
|
||||
int len, ind;
|
||||
|
||||
char fileBuffer[4096]; /* File buffer */
|
||||
int fileBufferNbytes;
|
||||
@@ -400,19 +390,20 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
int userdata, xo, reqlen;
|
||||
u_short tid;
|
||||
u_char bitmap;
|
||||
int maxfdp1,
|
||||
nbp_failures = 0;
|
||||
int maxfdp1;
|
||||
struct timeval timeout, *timeoutPtr;
|
||||
u_char flowQuantum = 1;
|
||||
u_short recvSequence = 0;
|
||||
time_t now,
|
||||
start_time,
|
||||
connect_time,
|
||||
elasped_time,
|
||||
sleep_time,
|
||||
connect_timeout = -1,
|
||||
nextStatusTime = 0;
|
||||
at_entity_t entity;
|
||||
at_retry_t retry;
|
||||
Boolean recoverableErrShown = false;
|
||||
|
||||
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
@@ -429,60 +420,51 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
* Remember when we started looking for the printer.
|
||||
*/
|
||||
|
||||
start_time = time(NULL);
|
||||
connect_time = time(NULL);
|
||||
|
||||
retry.interval = 1;
|
||||
retry.retries = 5;
|
||||
retry.backoff = 0;
|
||||
|
||||
fprintf(stderr, "STATE: +connecting-to-device\n");
|
||||
|
||||
/* Loop forever trying to get an open session with the printer. */
|
||||
for (;;)
|
||||
{
|
||||
/* Make sure it's okay to use appletalk */
|
||||
if (okayToUseAppleTalk())
|
||||
{
|
||||
/* Clear this printer-state-reason in case we've set it */
|
||||
fprintf(stderr, "STATE: -apple-appletalk-disabled-warning\n");
|
||||
|
||||
/* Resolve the name into an address. Returns the number found or an error */
|
||||
if ((err = nbp_lookup(&entity, &tuple, 1, &retry)) > 0)
|
||||
{
|
||||
if (err > 1)
|
||||
fprintf(stderr, "DEBUG: Found more than one printer with the name \"%s\"\n", name);
|
||||
|
||||
if (nbp_failures)
|
||||
{
|
||||
fprintf(stderr, "STATE: -apple-nbp-lookup-warning\n");
|
||||
nbp_failures = 0;
|
||||
if (recoverableErrShown)
|
||||
{
|
||||
fprintf(stderr, "INFO: recovered: \n");
|
||||
sleep(5);
|
||||
recoverableErrShown = false;
|
||||
}
|
||||
|
||||
/* Open a connection to the device */
|
||||
if ((err = papOpen(&tuple, &gConnID, &gSockfd, &gSessionAddr, &flowQuantum)) == 0)
|
||||
break;
|
||||
|
||||
fprintf(stderr, "WARNING: Unable to open \"%s:%s\": %s\n", name, zone, strerror(err));
|
||||
fprintf(stderr, "WARNING: Unable to open \"%s:%s\": %s\n", name, zone, strerror(errno));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* It's not unusual to have to call nbp_lookup() twice before it's sucessful... */
|
||||
if (++nbp_failures > 2)
|
||||
{
|
||||
retry.interval = 2;
|
||||
retry.retries = 3;
|
||||
fprintf(stderr, "STATE: +apple-nbp-lookup-warning\n");
|
||||
fprintf(stderr, "WARNING: Printer not responding\n");
|
||||
}
|
||||
fprintf(stderr, "WARNING: recoverable: Printer not responding\n");
|
||||
recoverableErrShown = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "STATE: +apple-appletalk-disabled-warning\n");
|
||||
fprintf(stderr, "INFO: AppleTalk disabled in System Preferences.\n");
|
||||
fprintf(stderr, "WARNING: recoverable: AppleTalk disabled in System Preferences.\n");
|
||||
recoverableErrShown = true;
|
||||
}
|
||||
|
||||
elasped_time = time(NULL) - start_time;
|
||||
retry.retries = 3;
|
||||
elasped_time = time(NULL) - connect_time;
|
||||
|
||||
if (connect_timeout == -1)
|
||||
connect_timeout = connectTimeout();
|
||||
@@ -493,9 +475,9 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
err = ETIMEDOUT;
|
||||
goto Exit; /* Waiting too long... */
|
||||
}
|
||||
else if (elasped_time < (30 * 60))
|
||||
else if (elasped_time < 30 /*(30 * 60)*/)
|
||||
sleep_time = 10; /* Waiting < 30 minutes */
|
||||
else if (elasped_time < (24 * 60 * 60))
|
||||
else if (elasped_time < 60 /*(24 * 60 * 60)*/)
|
||||
sleep_time = 30; /* Waiting < 24 hours */
|
||||
else
|
||||
sleep_time = 60; /* Waiting > 24 hours */
|
||||
@@ -504,8 +486,6 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
sleep(sleep_time);
|
||||
}
|
||||
|
||||
fprintf(stderr, "STATE: -connecting-to-device\n");
|
||||
|
||||
/*
|
||||
* Now that we are connected to the printer ignore SIGTERM so that we
|
||||
* can finish out any page data the driver sends (e.g. to eject the
|
||||
@@ -556,6 +536,21 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
val = fcntl(fdin, F_GETFL, 0);
|
||||
fcntl(fdin, F_SETFL, val | O_NONBLOCK);
|
||||
|
||||
/* Set non-blocking mode on our data destination descriptor */
|
||||
val = fcntl(fdout, F_GETFL, 0);
|
||||
if (val < 0)
|
||||
{
|
||||
/*
|
||||
* Map output to stdout if we don't have the backchannel pipe
|
||||
* available on file descriptor 3...
|
||||
*/
|
||||
|
||||
if (fdout == 3 && errno == EBADF)
|
||||
fdout = 1;
|
||||
}
|
||||
else
|
||||
fcntl(fdout, F_SETFL, val | O_NONBLOCK);
|
||||
|
||||
fileBufferNbytes = 0;
|
||||
fileTbytes = 0;
|
||||
fileEOFRead = fileEOFSent = false;
|
||||
@@ -671,7 +666,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG: <- %s\n", packet_name(TYPE_OF(userdata)));
|
||||
fprintf(stderr, "DEBUG: <- %s\n", PAPPacketStr(TYPE_OF(userdata)));
|
||||
|
||||
switch (TYPE_OF(userdata))
|
||||
{
|
||||
@@ -712,10 +707,10 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
break;
|
||||
|
||||
case AT_PAP_TYPE_DATA: /* Data packet */
|
||||
for (len=0, i=0; i < ATP_TRESP_MAX; i++)
|
||||
for (len=0, ind=0; ind < ATP_TRESP_MAX; ind++)
|
||||
{
|
||||
if (resp.bitmap & (1 << i))
|
||||
len += resp.resp[i].iov_len;
|
||||
if (resp.bitmap & (1 << ind))
|
||||
len += resp.resp[ind].iov_len;
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG: <- PAP_DATA %d bytes %s\n", len, IS_PAP_EOF(userdata) ? "with EOF" : "");
|
||||
@@ -727,7 +722,7 @@ static int printFile(char* name, char* type, char* zone, int fdin, int fdout, in
|
||||
char logstr[512];
|
||||
int logstrlen;
|
||||
|
||||
cupsBackChannelWrite(sockBuffer, len, 1.0);
|
||||
write(fdout, sockBuffer, len);
|
||||
|
||||
sockBuffer[len] = '\0'; /* We always reserve room for the nul so we can use strstr() below*/
|
||||
pLineBegin = sockBuffer;
|
||||
@@ -840,7 +835,7 @@ Exit:
|
||||
/*
|
||||
* Close the socket and return...
|
||||
*/
|
||||
papClose();
|
||||
papClose(false);
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -859,35 +854,37 @@ Exit:
|
||||
*
|
||||
* @result A non-zero return value for errors
|
||||
*/
|
||||
static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd,
|
||||
at_inet_t* sessionAddr, u_char* flowQuantum)
|
||||
static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd, at_inet_t* sessionAddr, u_char* flowQuantum)
|
||||
{
|
||||
int result,
|
||||
open_result,
|
||||
userdata,
|
||||
atp_err;
|
||||
time_t tm,
|
||||
waitTime;
|
||||
char data[10],
|
||||
rdata[ATP_DATA_SIZE];
|
||||
u_char *puserdata;
|
||||
at_socket socketfd;
|
||||
openResult;
|
||||
long tm;
|
||||
char data[10], rdata[ATP_DATA_SIZE];
|
||||
int userdata;
|
||||
u_char *puserdata = (u_char *)&userdata;
|
||||
at_socket sock = 0;
|
||||
u_short waitTime;
|
||||
int status;
|
||||
at_resp_t resp;
|
||||
at_retry_t retry;
|
||||
|
||||
result = 0;
|
||||
socketfd = 0;
|
||||
puserdata = (u_char *)&userdata;
|
||||
if (tuple == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fprintf(stderr, "INFO: Opening connection\n");
|
||||
|
||||
if ((*fd = atp_open(&socketfd)) < 0)
|
||||
errno = 0;
|
||||
result = 0;
|
||||
|
||||
*fd = atp_open(&sock);
|
||||
if (*fd < 0)
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* Build the open connection request packet.
|
||||
/* Build the open connection request packet.
|
||||
*/
|
||||
|
||||
tm = time(NULL);
|
||||
srand(tm);
|
||||
|
||||
@@ -904,67 +901,64 @@ static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd,
|
||||
resp.resp[0].iov_base = rdata;
|
||||
resp.resp[0].iov_len = sizeof(rdata);
|
||||
|
||||
data[0] = socketfd;
|
||||
data[0] = sock;
|
||||
data[1] = 8;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
waitTime = time(NULL) - tm;
|
||||
OSWriteBigInt16(&data[2], 0, (u_short)waitTime);
|
||||
waitTime = (u_short)(time(NULL) - tm);
|
||||
OSWriteBigInt16(&data[2], 0, waitTime);
|
||||
|
||||
fprintf(stderr, "DEBUG: -> %s\n", packet_name(AT_PAP_TYPE_OPEN_CONN));
|
||||
fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(AT_PAP_TYPE_OPEN_CONN));
|
||||
|
||||
if ((atp_err = atp_sendreq(*fd, &tuple->enu_addr, data, 4, userdata, 1, 0,
|
||||
0, &resp, &retry, 0)) < 0)
|
||||
status = atp_sendreq(*fd, &tuple->enu_addr, data, 4, userdata, 1, 0, 0, &resp, &retry, 0);
|
||||
|
||||
if (status < 0)
|
||||
{
|
||||
statusUpdate("Destination unreachable", 23);
|
||||
result = EHOSTUNREACH;
|
||||
break;
|
||||
errno = EHOSTUNREACH;
|
||||
sleep(1);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
puserdata = (u_char *)&resp.userdata[0];
|
||||
open_result = OSReadBigInt16(&rdata[2], 0);
|
||||
|
||||
fprintf(stderr, "DEBUG: <- %s, status %d\n", packet_name(puserdata[1]),
|
||||
open_result);
|
||||
|
||||
/*
|
||||
* Just for the sake of our sanity check the other fields in the packet
|
||||
*/
|
||||
|
||||
if (puserdata[1] != AT_PAP_TYPE_OPEN_CONN_REPLY ||
|
||||
(open_result == 0 && (puserdata[0] & 0xff) != *connID))
|
||||
else
|
||||
{
|
||||
result = EINVAL;
|
||||
break;
|
||||
puserdata = (u_char *)&resp.userdata[0];
|
||||
openResult = OSReadBigInt16(&rdata[2], 0);
|
||||
|
||||
fprintf(stderr, "DEBUG: <- %s, status %d\n", PAPPacketStr(puserdata[1]), openResult);
|
||||
|
||||
/* Just for the sake of our sanity check the other fields in the packet
|
||||
*/
|
||||
if (puserdata[1] != AT_PAP_TYPE_OPEN_CONN_REPLY ||
|
||||
(openResult == 0 && (puserdata[0] & 0xff) != *connID))
|
||||
{
|
||||
result = EINVAL;
|
||||
errno = EINVAL;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
statusUpdate(&rdata[5], rdata[4] & 0xff);
|
||||
|
||||
if (openResult == 0)
|
||||
break; /* Connection established okay, exit from the loop */
|
||||
}
|
||||
|
||||
statusUpdate(&rdata[5], rdata[4] & 0xff);
|
||||
|
||||
/*
|
||||
* if the connection established okay exit from the loop
|
||||
*/
|
||||
|
||||
if (open_result == 0)
|
||||
break;
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
if (result == 0)
|
||||
{
|
||||
/* Update the session address
|
||||
*/
|
||||
sessionAddr->net = tuple->enu_addr.net;
|
||||
sessionAddr->node = tuple->enu_addr.node;
|
||||
sessionAddr->socket = rdata[0];
|
||||
*flowQuantum = rdata[1];
|
||||
}
|
||||
else
|
||||
/* Update the session address
|
||||
*/
|
||||
sessionAddr->net = tuple->enu_addr.net;
|
||||
sessionAddr->node = tuple->enu_addr.node;
|
||||
sessionAddr->socket = rdata[0];
|
||||
*flowQuantum = rdata[1];
|
||||
|
||||
Exit:
|
||||
if (result != 0)
|
||||
{
|
||||
atp_close(*fd);
|
||||
*fd = 0;
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -976,9 +970,12 @@ static int papOpen(at_nbptuple_t* tuple, u_char* connID, int* fd,
|
||||
* @abstract End a PAP session by canceling outstanding send-data & tickle
|
||||
* transactions and sending a PAP close request.
|
||||
*
|
||||
* @param abort If we're aborting then send the close request
|
||||
* with 0 retries (not yet implemented)
|
||||
*
|
||||
* @result A non-zero return value for errors
|
||||
*/
|
||||
static int papClose()
|
||||
static int papClose(int abortflag)
|
||||
{
|
||||
int fd;
|
||||
u_short tmpID;
|
||||
@@ -1021,7 +1018,7 @@ static int papClose()
|
||||
if (gWaitEOF == false)
|
||||
sleep(2);
|
||||
|
||||
fprintf(stderr, "DEBUG: -> %s\n", packet_name(AT_PAP_TYPE_CLOSE_CONN));
|
||||
fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(AT_PAP_TYPE_CLOSE_CONN));
|
||||
|
||||
puserdata[0] = gConnID;
|
||||
puserdata[1] = AT_PAP_TYPE_CLOSE_CONN;
|
||||
@@ -1061,7 +1058,7 @@ static int papClose()
|
||||
static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_char flowQuantum, char* data, int len, int eof)
|
||||
{
|
||||
int result;
|
||||
int i;
|
||||
int ind;
|
||||
u_char* puserdata;
|
||||
at_resp_t resp;
|
||||
|
||||
@@ -1079,26 +1076,26 @@ static int papWrite(int sockfd, at_inet_t* dest, u_short tid, u_char connID, u_c
|
||||
* response packets to reply to an incoming
|
||||
* PAP 'SENDDATA' request
|
||||
*/
|
||||
for (i = 0; i < flowQuantum; i++)
|
||||
for (ind = 0; ind < flowQuantum; ind++)
|
||||
{
|
||||
resp.userdata[i] = 0;
|
||||
puserdata = (u_char *)&resp.userdata[i];
|
||||
resp.userdata[ind] = 0;
|
||||
puserdata = (u_char *)&resp.userdata[ind];
|
||||
|
||||
puserdata[PAP_CONNID] = connID;
|
||||
puserdata[PAP_TYPE] = AT_PAP_TYPE_DATA;
|
||||
puserdata[PAP_EOF] = eof ? 1 : 0;
|
||||
|
||||
resp.resp[i].iov_base = (caddr_t)data;
|
||||
resp.resp[ind].iov_base = (caddr_t)data;
|
||||
|
||||
if (data)
|
||||
data += AT_PAP_DATA_SIZE;
|
||||
|
||||
resp.resp[i].iov_len = MIN((int)len, (int)AT_PAP_DATA_SIZE);
|
||||
len -= resp.resp[i].iov_len;
|
||||
resp.resp[ind].iov_len = MIN((int)len, (int)AT_PAP_DATA_SIZE);
|
||||
len -= resp.resp[ind].iov_len;
|
||||
if (len == 0)
|
||||
break;
|
||||
}
|
||||
resp.bitmap = (1 << (i + 1)) - 1;
|
||||
resp.bitmap = (1 << (ind + 1)) - 1;
|
||||
|
||||
/*
|
||||
* Write out the data as a PAP 'DATA' response
|
||||
@@ -1171,7 +1168,7 @@ static int papSendRequest(int sockfd, at_inet_t* dest, u_char connID, int functi
|
||||
at_resp_t resp;
|
||||
static u_short pap_send_count = 0;
|
||||
|
||||
fprintf(stderr, "DEBUG: -> %s\n", packet_name(function));
|
||||
fprintf(stderr, "DEBUG: -> %s\n", PAPPacketStr(function));
|
||||
|
||||
puserdata[0] = connID;
|
||||
puserdata[1] = function;
|
||||
@@ -1277,7 +1274,7 @@ void statusUpdate(char* status, u_char statusLen)
|
||||
*/
|
||||
static int parseUri(const char* argv0, char* name, char* type, char* zone)
|
||||
{
|
||||
char method[255], /* Method in URI */
|
||||
char scheme[255], /* Scheme in URI */
|
||||
hostname[1024], /* Hostname */
|
||||
username[255], /* Username info (not used) */
|
||||
resource[1024], /* Resource info (device and options) */
|
||||
@@ -1293,10 +1290,8 @@ static int parseUri(const char* argv0, char* name, char* type, char* zone)
|
||||
/*
|
||||
* Extract the device name and options from the URI...
|
||||
*/
|
||||
method[0] = username[0] = hostname[0] = resource[0] = '\0';
|
||||
port = 0;
|
||||
|
||||
httpSeparateURI(HTTP_URI_CODING_NONE, argv0, method, sizeof(method),
|
||||
httpSeparateURI(HTTP_URI_CODING_NONE, argv0, scheme, sizeof(scheme),
|
||||
username, sizeof(username),
|
||||
hostname, sizeof(hostname), &port,
|
||||
resource, sizeof(resource));
|
||||
@@ -1532,31 +1527,6 @@ static int okayToUseAppleTalk()
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @function packet_name
|
||||
* @abstract Returns packet name string.
|
||||
*
|
||||
* @result A string
|
||||
*/
|
||||
static const char *packet_name(u_char x)
|
||||
{
|
||||
switch (x)
|
||||
{
|
||||
case AT_PAP_TYPE_OPEN_CONN: return "PAP_OPEN_CONN";
|
||||
case AT_PAP_TYPE_OPEN_CONN_REPLY: return "PAP_OPEN_CONN_REPLY";
|
||||
case AT_PAP_TYPE_SEND_DATA: return "PAP_SEND_DATA";
|
||||
case AT_PAP_TYPE_DATA: return "PAP_DATA";
|
||||
case AT_PAP_TYPE_TICKLE: return "PAP_TICKLE";
|
||||
case AT_PAP_TYPE_CLOSE_CONN: return "PAP_CLOSE_CONN";
|
||||
case AT_PAP_TYPE_CLOSE_CONN_REPLY: return "PAP_CLOSE_CONN_REPLY";
|
||||
case AT_PAP_TYPE_SEND_STATUS: return "PAP_SEND_STATUS";
|
||||
case AT_PAP_TYPE_SEND_STS_REPLY: return "PAP_SEND_STS_REPLY";
|
||||
case AT_PAP_TYPE_READ_LW: return "PAP_READ_LW";
|
||||
}
|
||||
return "<Unknown>";
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* @function connectTimeout
|
||||
* @abstract Returns the connect timeout preference value.
|
||||
@@ -1592,7 +1562,7 @@ static void signalHandler(int sigraised)
|
||||
{
|
||||
fprintf(stderr, "ERROR: There was a timeout error while sending data to the printer\n");
|
||||
|
||||
papClose();
|
||||
papClose(true);
|
||||
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
+3
-23
@@ -88,8 +88,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
*options; /* Pointer to options */
|
||||
int port; /* Port number (not used) */
|
||||
int print_fd, /* Print file */
|
||||
device_fd, /* Parallel device */
|
||||
use_bc; /* Read back-channel data? */
|
||||
device_fd; /* Parallel device */
|
||||
int copies; /* Number of copies to print */
|
||||
size_t tbytes; /* Total number of bytes written */
|
||||
struct termios opts; /* Parallel port options */
|
||||
@@ -189,26 +188,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
do
|
||||
{
|
||||
#if defined(__linux) || defined(__FreeBSD__)
|
||||
/*
|
||||
* The Linux and FreeBSD parallel port drivers currently are broken WRT
|
||||
* select() and bidirection I/O...
|
||||
*/
|
||||
|
||||
device_fd = open(resource, O_WRONLY | O_EXCL);
|
||||
use_bc = 0;
|
||||
|
||||
#else
|
||||
if ((device_fd = open(resource, O_RDWR | O_EXCL)) < 0)
|
||||
{
|
||||
device_fd = open(resource, O_WRONLY | O_EXCL);
|
||||
use_bc = 0;
|
||||
}
|
||||
else
|
||||
use_bc = 1;
|
||||
#endif /* __linux || __FreeBSD__ */
|
||||
|
||||
if (device_fd == -1)
|
||||
if ((device_fd = open(resource, O_WRONLY | O_EXCL)) == -1)
|
||||
{
|
||||
if (getenv("CLASS") != NULL)
|
||||
{
|
||||
@@ -284,7 +264,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
lseek(print_fd, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
tbytes = backendRunLoop(print_fd, device_fd, use_bc);
|
||||
tbytes = backendRunLoop(print_fd, device_fd, 1);
|
||||
|
||||
if (print_fd != 0 && tbytes >= 0)
|
||||
fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
|
||||
|
||||
+3
-7
@@ -33,11 +33,7 @@
|
||||
*/
|
||||
|
||||
#include "backend-private.h"
|
||||
#ifdef __hpux
|
||||
# include <sys/time.h>
|
||||
#else
|
||||
# include <sys/select.h>
|
||||
#endif /* __hpux */
|
||||
#include <sys/select.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -206,7 +202,7 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
|
||||
if (!paperout)
|
||||
{
|
||||
fputs("ERROR: Out of paper!\n", stderr);
|
||||
fputs("STATE: +media-empty-error\n", stderr);
|
||||
fputs("STATUS: +media-tray-empty-error\n", stderr);
|
||||
paperout = 1;
|
||||
}
|
||||
}
|
||||
@@ -229,7 +225,7 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
|
||||
{
|
||||
if (paperout)
|
||||
{
|
||||
fputs("STATE: -media-empty-error\n", stderr);
|
||||
fputs("STATUS: -media-tray-empty-error\n", stderr);
|
||||
paperout = 0;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -80,7 +80,7 @@ void list_devices(void);
|
||||
int print_device(const char *resource, int fd, int copies);
|
||||
|
||||
|
||||
#if defined(__linux__) && defined(HAVE_SCSI_SG_H)
|
||||
#ifdef __linux__
|
||||
# include "scsi-linux.c"
|
||||
#elif defined(__sgi)
|
||||
# include "scsi-irix.c"
|
||||
@@ -90,7 +90,7 @@ int print_device(const char *resource, int fd, int copies);
|
||||
*/
|
||||
void list_devices(void) {}
|
||||
int print_device(const char *resource, int fd, int copies) { return (CUPS_BACKEND_FAILED); }
|
||||
#endif /* __linux && HAVE_SCSI_SG_H */
|
||||
#endif /* __linux */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -778,14 +778,6 @@ list_devices(void)
|
||||
printf("serial serial:%s?baud=230400 \"Unknown\" \"USB Serial Port #%d\"\n",
|
||||
device, i + 1);
|
||||
}
|
||||
|
||||
sprintf(device, "/dev/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);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 64; i ++)
|
||||
|
||||
+36
-280
@@ -52,7 +52,6 @@
|
||||
* packed integer value.
|
||||
* compare_cache() - Compare two cache entries.
|
||||
* debug_printf() - Display some debugging information.
|
||||
* do_request() - Do a non-blocking IPP request.
|
||||
* fix_make_model() - Fix common problems in the make-and-model
|
||||
* string.
|
||||
* free_array() - Free an array of strings.
|
||||
@@ -60,7 +59,7 @@
|
||||
* get_interface_addresses() - Get the broadcast address(es) associated
|
||||
* with an interface.
|
||||
* hex_debug() - Output hex debugging data...
|
||||
* list_device() - List a device we found...
|
||||
* list_devices() - List all of the devices we found...
|
||||
* open_snmp_socket() - Open the SNMP broadcast socket.
|
||||
* password_cb() - Handle authentication requests.
|
||||
* probe_device() - Probe a device to discover whether it is a
|
||||
@@ -194,13 +193,6 @@ typedef struct snmp_packet_s /**** SNMP packet ****/
|
||||
} snmp_packet_t;
|
||||
|
||||
|
||||
/*
|
||||
* Private CUPS API to set the last error...
|
||||
*/
|
||||
|
||||
extern void _cupsSetError(ipp_status_t status, const char *message);
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
@@ -246,8 +238,6 @@ static int asn1_size_oid(const int *oid);
|
||||
static int asn1_size_packed(int integer);
|
||||
static int compare_cache(snmp_cache_t *a, snmp_cache_t *b);
|
||||
static void debug_printf(const char *format, ...);
|
||||
static ipp_t *do_request(http_t *http, ipp_t *request,
|
||||
const char *resource);
|
||||
static void fix_make_model(char *make_model,
|
||||
const char *old_make_model,
|
||||
int make_model_size);
|
||||
@@ -255,7 +245,7 @@ static void free_array(cups_array_t *a);
|
||||
static void free_cache(void);
|
||||
static http_addrlist_t *get_interface_addresses(const char *ifname);
|
||||
static void hex_debug(unsigned char *buffer, size_t len);
|
||||
static void list_device(snmp_cache_t *cache);
|
||||
static void list_devices(void);
|
||||
static int open_snmp_socket(void);
|
||||
static const char *password_cb(const char *prompt);
|
||||
static void probe_device(snmp_cache_t *device);
|
||||
@@ -288,7 +278,6 @@ static int DeviceDescOID[] = { 1, 3, 6, 1, 2, 1, 25, 3,
|
||||
static unsigned DeviceTypeRequest;
|
||||
static unsigned DeviceDescRequest;
|
||||
static int HostNameLookups = 0;
|
||||
static int MaxRunTime = 10;
|
||||
static struct timeval StartTime;
|
||||
|
||||
|
||||
@@ -301,9 +290,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int fd; /* SNMP socket */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
/*
|
||||
@@ -322,23 +308,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
cupsSetPasswordCB(password_cb);
|
||||
|
||||
/*
|
||||
* Catch SIGALRM signals...
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SIGSET
|
||||
sigset(SIGALRM, alarm_handler);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
sigaddset(&action.sa_mask, SIGALRM);
|
||||
action.sa_handler = alarm_handler;
|
||||
sigaction(SIGALRM, &action, NULL);
|
||||
#else
|
||||
signal(SIGALRM, alarm_handler);
|
||||
#endif /* HAVE_SIGSET */
|
||||
|
||||
/*
|
||||
* Open the SNMP socket...
|
||||
*/
|
||||
@@ -360,6 +329,12 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
scan_devices(fd);
|
||||
|
||||
/*
|
||||
* Display the results...
|
||||
*/
|
||||
|
||||
list_devices();
|
||||
|
||||
/*
|
||||
* Close, free, and return with no errors...
|
||||
*/
|
||||
@@ -409,7 +384,7 @@ add_cache(http_addr_t *addr, /* I - Device IP address */
|
||||
|
||||
debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", "
|
||||
"id=\"%s\", make_and_model=\"%s\")\n",
|
||||
addr, addrname, uri ? uri : "(null)", id ? id : "(null)",
|
||||
addr, addrname, uri ? uri : "(null)", id ? id : "(null)",
|
||||
make_and_model ? make_and_model : "(null)");
|
||||
|
||||
temp = calloc(1, sizeof(snmp_cache_t));
|
||||
@@ -427,9 +402,6 @@ add_cache(http_addr_t *addr, /* I - Device IP address */
|
||||
temp->make_and_model = strdup(make_and_model);
|
||||
|
||||
cupsArrayAdd(Devices, temp);
|
||||
|
||||
if (uri)
|
||||
list_device(temp);
|
||||
}
|
||||
|
||||
|
||||
@@ -446,10 +418,6 @@ alarm_handler(int sig) /* I - Signal number */
|
||||
|
||||
(void)sig;
|
||||
|
||||
#if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION)
|
||||
signal(SIGALRM, alarm_handler);
|
||||
#endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
|
||||
|
||||
if (DebugLevel)
|
||||
write(2, "DEBUG: ALARM!\n", 14);
|
||||
}
|
||||
@@ -1126,7 +1094,7 @@ asn1_set_packed(unsigned char **buffer, /* IO - Pointer in buffer */
|
||||
{
|
||||
if (integer > 0xfffffff)
|
||||
{
|
||||
**buffer = (integer >> 28) & 0x7f;
|
||||
**buffer = (integer >> 14) & 0x7f;
|
||||
(*buffer) ++;
|
||||
}
|
||||
|
||||
@@ -1259,173 +1227,6 @@ debug_printf(const char *format, /* I - Printf-style format string */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'do_request()' - Do a non-blocking IPP request.
|
||||
*/
|
||||
|
||||
static ipp_t * /* O - Response data or NULL */
|
||||
do_request(http_t *http, /* I - HTTP connection to server */
|
||||
ipp_t *request, /* I - IPP request */
|
||||
const char *resource) /* I - HTTP resource for POST */
|
||||
{
|
||||
ipp_t *response; /* IPP response data */
|
||||
http_status_t status; /* Status of HTTP request */
|
||||
ipp_state_t state; /* State of IPP processing */
|
||||
|
||||
|
||||
/*
|
||||
* Setup the HTTP variables needed...
|
||||
*/
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetLength(http, ippLength(request));
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
|
||||
|
||||
/*
|
||||
* Do the POST request...
|
||||
*/
|
||||
|
||||
debug_printf("DEBUG: %.3f POST %s...\n", run_time(), resource);
|
||||
|
||||
if (httpPost(http, resource))
|
||||
{
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
_cupsSetError(IPP_DEVICE_ERROR, "Unable to reconnect");
|
||||
return (NULL);
|
||||
}
|
||||
else if (httpPost(http, resource))
|
||||
{
|
||||
_cupsSetError(IPP_GONE, "Unable to POST");
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Send the IPP data...
|
||||
*/
|
||||
|
||||
request->state = IPP_IDLE;
|
||||
status = HTTP_CONTINUE;
|
||||
|
||||
while ((state = ippWrite(http, request)) != IPP_DATA)
|
||||
if (state == IPP_ERROR)
|
||||
{
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
else if (httpCheck(http))
|
||||
{
|
||||
if ((status = httpUpdate(http)) != HTTP_CONTINUE)
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the server's return status...
|
||||
*/
|
||||
|
||||
debug_printf("DEBUG: %.3f Getting response...\n", run_time());
|
||||
|
||||
while (status == HTTP_CONTINUE)
|
||||
if (httpWait(http, 1000))
|
||||
status = httpUpdate(http);
|
||||
else
|
||||
{
|
||||
status = HTTP_ERROR;
|
||||
http->error = ETIMEDOUT;
|
||||
}
|
||||
|
||||
if (status != HTTP_OK)
|
||||
{
|
||||
/*
|
||||
* Flush any error message...
|
||||
*/
|
||||
|
||||
httpFlush(http);
|
||||
response = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Read the response...
|
||||
*/
|
||||
|
||||
response = ippNew();
|
||||
|
||||
while ((state = ippRead(http, response)) != IPP_DATA)
|
||||
if (state == IPP_ERROR)
|
||||
{
|
||||
/*
|
||||
* Delete the response...
|
||||
*/
|
||||
|
||||
ippDelete(response);
|
||||
response = NULL;
|
||||
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, strerror(errno));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete the original request and return the response...
|
||||
*/
|
||||
|
||||
ippDelete(request);
|
||||
|
||||
if (response)
|
||||
{
|
||||
ipp_attribute_t *attr; /* status-message attribute */
|
||||
|
||||
|
||||
attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
|
||||
|
||||
_cupsSetError(response->request.status.status_code,
|
||||
attr ? attr->values[0].string.text :
|
||||
ippErrorString(response->request.status.status_code));
|
||||
}
|
||||
else if (status != HTTP_OK)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case HTTP_NOT_FOUND :
|
||||
_cupsSetError(IPP_NOT_FOUND, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_UNAUTHORIZED :
|
||||
_cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_FORBIDDEN :
|
||||
_cupsSetError(IPP_FORBIDDEN, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_BAD_REQUEST :
|
||||
_cupsSetError(IPP_BAD_REQUEST, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_REQUEST_TOO_LARGE :
|
||||
_cupsSetError(IPP_REQUEST_VALUE, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_NOT_IMPLEMENTED :
|
||||
_cupsSetError(IPP_OPERATION_NOT_SUPPORTED, httpStatus(status));
|
||||
break;
|
||||
|
||||
case HTTP_NOT_SUPPORTED :
|
||||
_cupsSetError(IPP_VERSION_NOT_SUPPORTED, httpStatus(status));
|
||||
break;
|
||||
|
||||
default :
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, httpStatus(status));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (response);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'fix_make_model()' - Fix common problems in the make-and-model string.
|
||||
*/
|
||||
@@ -1471,8 +1272,6 @@ fix_make_model(
|
||||
}
|
||||
else if (!strncasecmp(old_make_model, "deskjet", 7))
|
||||
snprintf(make_model, make_model_size, "HP DeskJet%s", old_make_model + 7);
|
||||
else if (!strncasecmp(old_make_model, "officejet", 9))
|
||||
snprintf(make_model, make_model_size, "HP OfficeJet%s", old_make_model + 9);
|
||||
else if (!strncasecmp(old_make_model, "stylus_pro_", 11))
|
||||
snprintf(make_model, make_model_size, "EPSON Stylus Pro %s",
|
||||
old_make_model + 11);
|
||||
@@ -1489,16 +1288,6 @@ fix_make_model(
|
||||
_cups_strcpy(mmptr, mmptr + 7);
|
||||
}
|
||||
|
||||
if ((mmptr = strstr(make_model, " Network")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Drop unnecessary informational text, e.g. "Xerox DocuPrint N2025
|
||||
* Network LaserJet - 2.12" becomes "Xerox DocuPrint N2025"...
|
||||
*/
|
||||
|
||||
*mmptr = '\0';
|
||||
}
|
||||
|
||||
if ((mmptr = strchr(make_model, ',')) != NULL)
|
||||
{
|
||||
/*
|
||||
@@ -1633,18 +1422,24 @@ hex_debug(unsigned char *buffer, /* I - Buffer */
|
||||
|
||||
|
||||
/*
|
||||
* 'list_device()' - List a device we found...
|
||||
* 'list_devices()' - List all of the devices we found...
|
||||
*/
|
||||
|
||||
static void
|
||||
list_device(snmp_cache_t *cache) /* I - Cached device */
|
||||
list_devices(void)
|
||||
{
|
||||
if (cache->uri)
|
||||
printf("network %s \"%s\" \"%s %s\" \"%s\"\n",
|
||||
cache->uri,
|
||||
cache->make_and_model ? cache->make_and_model : "Unknown",
|
||||
cache->make_and_model ? cache->make_and_model : "Unknown",
|
||||
cache->addrname, cache->id ? cache->id : "");
|
||||
snmp_cache_t *cache; /* Cached device */
|
||||
|
||||
|
||||
for (cache = (snmp_cache_t *)cupsArrayFirst(Devices);
|
||||
cache;
|
||||
cache = (snmp_cache_t *)cupsArrayNext(Devices))
|
||||
if (cache->uri)
|
||||
printf("network %s \"%s\" \"%s %s\" \"%s\"\n",
|
||||
cache->uri,
|
||||
cache->make_and_model ? cache->make_and_model : "Unknown",
|
||||
cache->make_and_model ? cache->make_and_model : "Unknown",
|
||||
cache->addrname, cache->id ? cache->id : "");
|
||||
}
|
||||
|
||||
|
||||
@@ -1729,34 +1524,7 @@ probe_device(snmp_cache_t *device) /* I - Device */
|
||||
|
||||
debug_printf("DEBUG: %.3f Probing %s...\n", run_time(), device->addrname);
|
||||
|
||||
if (device->make_and_model &&
|
||||
(!strncasecmp(device->make_and_model, "Epson", 5) ||
|
||||
!strncasecmp(device->make_and_model, "HP ", 3) ||
|
||||
!strncasecmp(device->make_and_model, "Hewlett", 7) ||
|
||||
!strncasecmp(device->make_and_model, "Kyocera", 7) ||
|
||||
!strncasecmp(device->make_and_model, "Lexmark", 7) ||
|
||||
!strncasecmp(device->make_and_model, "Tektronix", 9) ||
|
||||
!strncasecmp(device->make_and_model, "Xerox", 5)))
|
||||
{
|
||||
/*
|
||||
* Epson, HP, Kyocera, Lexmark, Tektronix, and Xerox printers often lock
|
||||
* up on IPP probes, so exclude them from the IPP connection test...
|
||||
*/
|
||||
|
||||
http = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Otherwise, try connecting for up to 1 second...
|
||||
*/
|
||||
|
||||
alarm(1);
|
||||
http = httpConnect(device->addrname, 631);
|
||||
alarm(0);
|
||||
}
|
||||
|
||||
if (http)
|
||||
if ((http = httpConnect(device->addrname, 631)) != NULL)
|
||||
{
|
||||
/*
|
||||
* IPP is supported...
|
||||
@@ -1773,9 +1541,9 @@ probe_device(snmp_cache_t *device) /* I - Device */
|
||||
static const char * const resources[] =
|
||||
{ /* Common resource paths for IPP */
|
||||
"/ipp",
|
||||
/*"/ipp/port2",*/
|
||||
/*"/ipp/port3",*/
|
||||
/*"/EPSON_IPP_Printer",*/
|
||||
"/ipp/port2",
|
||||
"/ipp/port3",
|
||||
"/EPSON_IPP_Printer",
|
||||
"/LPT1",
|
||||
"/LPT2",
|
||||
"/COM1",
|
||||
@@ -1783,6 +1551,8 @@ probe_device(snmp_cache_t *device) /* I - Device */
|
||||
};
|
||||
|
||||
|
||||
debug_printf("DEBUG: %s supports IPP!\n", device->addrname);
|
||||
|
||||
/*
|
||||
* Use non-blocking IO...
|
||||
*/
|
||||
@@ -1798,13 +1568,6 @@ probe_device(snmp_cache_t *device) /* I - Device */
|
||||
i < (int)(sizeof(resources) / sizeof(resources[0]));
|
||||
i ++)
|
||||
{
|
||||
/*
|
||||
* Stop early if we are out of time...
|
||||
*/
|
||||
|
||||
if (MaxRunTime > 0 && run_time() >= MaxRunTime)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Don't look past /ipp if we have found a working URI...
|
||||
*/
|
||||
@@ -1815,14 +1578,16 @@ probe_device(snmp_cache_t *device) /* I - Device */
|
||||
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
|
||||
device->addrname, 631, resources[i]);
|
||||
|
||||
debug_printf("DEBUG: Trying %s (num_uris=%d)\n", uri, num_uris);
|
||||
|
||||
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
response = do_request(http, request, resources[i]);
|
||||
response = cupsDoRequest(http, request, resources[i]);
|
||||
|
||||
debug_printf("DEBUG: %.3f %s %s (%s)\n", run_time(), uri,
|
||||
debug_printf("DEBUG: %s %s (%s)\n", uri,
|
||||
ippErrorString(cupsLastError()), cupsLastErrorString());
|
||||
|
||||
if (response && response->request.status.status_code == IPP_OK)
|
||||
@@ -1961,7 +1726,6 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
|
||||
int linenum; /* Line number */
|
||||
const char *cups_serverroot; /* CUPS_SERVERROOT env var */
|
||||
const char *debug; /* CUPS_DEBUG_LEVEL env var */
|
||||
const char *runtime; /* CUPS_MAX_RUN_TIME env var */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1977,9 +1741,6 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
|
||||
if ((debug = getenv("CUPS_DEBUG_LEVEL")) != NULL)
|
||||
DebugLevel = atoi(debug);
|
||||
|
||||
if ((runtime = getenv("CUPS_MAX_RUN_TIME")) != NULL)
|
||||
MaxRunTime = atoi(runtime);
|
||||
|
||||
/*
|
||||
* Find the snmp.conf file...
|
||||
*/
|
||||
@@ -2016,8 +1777,6 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
|
||||
!strcasecmp(value, "yes") ||
|
||||
!strcasecmp(value, "true") ||
|
||||
!strcasecmp(value, "double");
|
||||
else if (!strcasecmp(line, "MaxRunTime"))
|
||||
MaxRunTime = atoi(value);
|
||||
else
|
||||
fprintf(stderr, "ERROR: Unknown directive %s on line %d of %s!\n",
|
||||
line, linenum, filename);
|
||||
@@ -2316,9 +2075,7 @@ scan_devices(int fd) /* I - SNMP socket */
|
||||
for (device = (snmp_cache_t *)cupsArrayFirst(Devices);
|
||||
device;
|
||||
device = (snmp_cache_t *)cupsArrayNext(Devices))
|
||||
if (MaxRunTime > 0 && run_time() >= MaxRunTime)
|
||||
break;
|
||||
else if (!device->uri)
|
||||
if (!device->uri)
|
||||
probe_device(device);
|
||||
|
||||
debug_printf("DEBUG: %.3f Scan complete!\n", run_time());
|
||||
@@ -2412,6 +2169,7 @@ try_connect(http_addr_t *addr, /* I - Socket address */
|
||||
|
||||
addr->ipv4.sin_port = htons(port);
|
||||
|
||||
signal(SIGALRM, alarm_handler);
|
||||
alarm(1);
|
||||
|
||||
status = connect(fd, (void *)addr, httpAddrLength(addr));
|
||||
@@ -2453,8 +2211,6 @@ update_cache(snmp_cache_t *device, /* I - Device */
|
||||
|
||||
device->make_and_model = strdup(make_model);
|
||||
}
|
||||
|
||||
list_device(device);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+6
-17
@@ -78,9 +78,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
int delay; /* Delay for retries... */
|
||||
int device_fd; /* AppSocket */
|
||||
int error; /* Error code (if any) */
|
||||
http_addrlist_t *addrlist, /* Address list */
|
||||
*addr; /* Connected address */
|
||||
char addrname[256]; /* Address name */
|
||||
http_addrlist_t *addrlist; /* Address list */
|
||||
ssize_t tbytes; /* Total number of bytes written */
|
||||
struct timeval timeout; /* Timeout for select() */
|
||||
fd_set input; /* Input set for select() */
|
||||
@@ -247,7 +245,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
for (delay = 5;;)
|
||||
{
|
||||
if ((addr = httpAddrConnect(addrlist, &device_fd)) == NULL)
|
||||
if (!httpAddrConnect(addrlist, &device_fd))
|
||||
{
|
||||
error = errno;
|
||||
device_fd = -1;
|
||||
@@ -295,19 +293,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
}
|
||||
|
||||
fputs("STATE: -connecting-to-device\n", stderr);
|
||||
fprintf(stderr, "INFO: Connected to %s...\n", hostname);
|
||||
|
||||
#ifdef AF_INET6
|
||||
if (addr->addr.addr.sa_family == AF_INET6)
|
||||
fprintf(stderr, "DEBUG: Connected to [%s]:%d (IPv6)...\n",
|
||||
httpAddrString(&addr->addr, addrname, sizeof(addrname)),
|
||||
ntohs(addr->addr.ipv6.sin6_port));
|
||||
else
|
||||
#endif /* AF_INET6 */
|
||||
if (addr->addr.addr.sa_family == AF_INET)
|
||||
fprintf(stderr, "DEBUG: Connected to %s:%d (IPv4)...\n",
|
||||
httpAddrString(&addr->addr, addrname, sizeof(addrname)),
|
||||
ntohs(addr->addr.ipv4.sin_port));
|
||||
|
||||
/*
|
||||
* Print everything...
|
||||
@@ -355,7 +340,11 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
FD_ZERO(&input);
|
||||
FD_SET(device_fd, &input);
|
||||
|
||||
#ifdef __hpux
|
||||
if (select(device_fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
|
||||
#else
|
||||
if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0)
|
||||
#endif /* __hpux */
|
||||
{
|
||||
/*
|
||||
* Grab the data coming back and spit it out to stderr...
|
||||
|
||||
+19
-76
@@ -198,13 +198,12 @@ static void copy_deviceinfo(CFStringRef deviceIDString, CFStringRef *make, CFStr
|
||||
static void release_deviceinfo(CFStringRef *make, CFStringRef *model, CFStringRef *serial);
|
||||
static kern_return_t load_classdriver(CFStringRef driverPath, printer_interface_t intf, classdriver_context_t ***driver);
|
||||
static kern_return_t unload_classdriver(classdriver_context_t ***classDriver);
|
||||
static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *driverBundlePath);
|
||||
static kern_return_t registry_open(printer_data_t *printer, CFStringRef *driverBundlePath);
|
||||
static kern_return_t load_printerdriver(printer_data_t *printer);
|
||||
static kern_return_t registry_open(printer_data_t *printer);
|
||||
static kern_return_t registry_close(printer_data_t *printer);
|
||||
static OSStatus copy_deviceid(classdriver_context_t **printer, CFStringRef *deviceID);
|
||||
static void copy_devicestring(io_service_t usbInterface, CFStringRef *deviceID, UInt32 *deviceLocation);
|
||||
static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys);
|
||||
static CFStringRef cfstr_create_and_trim(const char *cstr);
|
||||
static void parse_options(const char *options, char *serial, UInt32 *location, Boolean *waitEOF);
|
||||
static void setup_cfLanguage(void);
|
||||
static void *read_thread(void *reference);
|
||||
@@ -256,7 +255,6 @@ print_device(const char *uri, /* I - Device URI */
|
||||
int countdown = INITIAL_LOG_INTERVAL; /* Logging interval */
|
||||
pthread_cond_t *readCompleteConditionPtr = NULL; /* Read complete condition */
|
||||
pthread_mutex_t *readMutexPtr = NULL; /* Read mutex */
|
||||
CFStringRef driverBundlePath; /* Class driver path */
|
||||
|
||||
setup_cfLanguage();
|
||||
parse_options(options, serial, &printer_data.location, &printer_data.waitEOF);
|
||||
@@ -265,10 +263,9 @@ print_device(const char *uri, /* I - Device URI */
|
||||
resource++;
|
||||
|
||||
printer_data.uri = uri;
|
||||
|
||||
printer_data.make = cfstr_create_and_trim(hostname);
|
||||
printer_data.model = cfstr_create_and_trim(resource);
|
||||
printer_data.serial = cfstr_create_and_trim(serial);
|
||||
printer_data.make = CFStringCreateWithCString(NULL, hostname, kCFStringEncodingUTF8);
|
||||
printer_data.model = CFStringCreateWithCString(NULL, resource, kCFStringEncodingUTF8);
|
||||
printer_data.serial = CFStringCreateWithCString(NULL, serial, kCFStringEncodingUTF8);
|
||||
|
||||
fputs("STATE: +connecting-to-device\n", stderr);
|
||||
|
||||
@@ -284,9 +281,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
iterate_printers(find_device_callback, &printer_data);
|
||||
|
||||
fprintf(stderr, "INFO: Opening Connection\n");
|
||||
|
||||
driverBundlePath = NULL;
|
||||
status = registry_open(&printer_data, &driverBundlePath);
|
||||
status = registry_open(&printer_data);
|
||||
#if defined(__i386__)
|
||||
/*
|
||||
* If we were unable to load the class drivers for this printer it's probably because they're ppc-only.
|
||||
@@ -297,26 +292,6 @@ print_device(const char *uri, /* I - Device URI */
|
||||
/* Never returns here */
|
||||
}
|
||||
#endif /* __i386__ */
|
||||
if (status == -2) {
|
||||
/*
|
||||
* If we still were unable to load the class drivers for this printer log
|
||||
* the error and stop the queue...
|
||||
*/
|
||||
|
||||
if (driverBundlePath == NULL || !CFStringGetCString(driverBundlePath, buffer, sizeof(buffer), kCFStringEncodingUTF8))
|
||||
strlcpy(buffer, "USB class driver", sizeof(buffer));
|
||||
|
||||
fprintf(stderr, "STATE: +apple-missing-usbclassdriver-error\n" \
|
||||
"FATAL: Could not load %s\n", buffer);
|
||||
|
||||
if (driverBundlePath)
|
||||
CFRelease(driverBundlePath);
|
||||
|
||||
return CUPS_BACKEND_STOP;
|
||||
}
|
||||
|
||||
if (driverBundlePath)
|
||||
CFRelease(driverBundlePath);
|
||||
|
||||
if (status != noErr) {
|
||||
sleep( PRINTER_POLLING_INTERVAL );
|
||||
@@ -465,27 +440,16 @@ static Boolean list_device_callback(void *refcon, io_service_t obj)
|
||||
copy_devicestring(obj, &deviceIDString, &deviceLocation);
|
||||
if (deviceIDString != NULL) {
|
||||
CFStringRef make = NULL, model = NULL, serial = NULL;
|
||||
char uristr[1024], makestr[1024], modelstr[1024], serialstr[1024];
|
||||
char optionsstr[1024], idstr[1024];
|
||||
char uristr[1024], makestr[1024], modelstr[1024], serialstr[1024], optionsstr[1024];
|
||||
char idstr[1024];
|
||||
|
||||
copy_deviceinfo(deviceIDString, &make, &model, &serial);
|
||||
|
||||
modelstr[0] = '/';
|
||||
|
||||
CFStringGetCString(deviceIDString, idstr, sizeof(idstr),
|
||||
kCFStringEncodingUTF8);
|
||||
|
||||
if (make)
|
||||
CFStringGetCString(make, makestr, sizeof(makestr),
|
||||
kCFStringEncodingUTF8);
|
||||
else
|
||||
strcpy(makestr, "Unknown");
|
||||
|
||||
if (model)
|
||||
CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1,
|
||||
kCFStringEncodingUTF8);
|
||||
else
|
||||
strcpy(modelstr + 1, "Printer");
|
||||
CFStringGetCString(deviceIDString, idstr, sizeof(idstr), kCFStringEncodingUTF8);
|
||||
CFStringGetCString(make, makestr, sizeof(makestr), kCFStringEncodingUTF8);
|
||||
CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1, kCFStringEncodingUTF8);
|
||||
|
||||
/*
|
||||
* Fix common HP 1284 bug...
|
||||
@@ -544,7 +508,7 @@ static Boolean find_device_callback(void *refcon, io_service_t obj)
|
||||
if (CFStringCompare(make, userData->make, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
|
||||
if (CFStringCompare(model, userData->model, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
|
||||
if (userData->serial != NULL) {
|
||||
if (serial != NULL && CFStringCompare(serial, userData->serial, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
|
||||
if (serial != NULL && CFStringCompare(model, userData->model, kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
|
||||
IOObjectRetain(obj);
|
||||
userData->printerObj = obj;
|
||||
keepLooking = false;
|
||||
@@ -764,11 +728,9 @@ static kern_return_t unload_classdriver(classdriver_context_t ***classDriver)
|
||||
|
||||
/*
|
||||
* 'load_printerdriver()' - Load a vendor's (or generic) classdriver.
|
||||
*
|
||||
* If driverBundlePath is not NULL on return it is the callers responsbility to release it!
|
||||
*/
|
||||
|
||||
static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *driverBundlePath)
|
||||
static kern_return_t load_printerdriver(printer_data_t *printer)
|
||||
{
|
||||
IOCFPlugInInterface **iodev = NULL;
|
||||
SInt32 score;
|
||||
@@ -782,10 +744,11 @@ static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *dr
|
||||
|
||||
kr = IORegistryEntryCreateCFProperties(printer->printerObj, &properties, NULL, kNilOptions);
|
||||
if (kr == kIOReturnSuccess) {
|
||||
CFStringRef driverBundlePath = NULL;
|
||||
if (properties != NULL) {
|
||||
*driverBundlePath = (CFStringRef) CFDictionaryGetValue(properties, kUSBClassDriverProperty);
|
||||
driverBundlePath = (CFStringRef) CFDictionaryGetValue(properties, kUSBClassDriverProperty);
|
||||
}
|
||||
kr = load_classdriver(*driverBundlePath, intf, &printer->printerDriver);
|
||||
kr = load_classdriver(driverBundlePath, intf, &printer->printerDriver);
|
||||
}
|
||||
|
||||
if (kr != kIOReturnSuccess)
|
||||
@@ -801,9 +764,9 @@ static kern_return_t load_printerdriver(printer_data_t *printer, CFStringRef *dr
|
||||
* 'registry_open()' - Open a connection to the printer.
|
||||
*/
|
||||
|
||||
static kern_return_t registry_open(printer_data_t *printer, CFStringRef *driverBundlePath)
|
||||
static kern_return_t registry_open(printer_data_t *printer)
|
||||
{
|
||||
kern_return_t kr = load_printerdriver(printer, driverBundlePath);
|
||||
kern_return_t kr = load_printerdriver(printer);
|
||||
if (kr != kIOReturnSuccess) {
|
||||
kr = -2;
|
||||
}
|
||||
@@ -1012,27 +975,6 @@ static CFStringRef copy_value_for_key(CFStringRef deviceID, CFStringRef *keys)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cfstr_create_and_trim()' - Create a CFString from a c-string and
|
||||
* trim it's whitespace characters.
|
||||
*/
|
||||
|
||||
CFStringRef cfstr_create_and_trim(const char *cstr)
|
||||
{
|
||||
CFStringRef cfstr;
|
||||
CFMutableStringRef cfmutablestr = NULL;
|
||||
|
||||
if ((cfstr = CFStringCreateWithCString(NULL, cstr, kCFStringEncodingUTF8)) != NULL)
|
||||
{
|
||||
if ((cfmutablestr = CFStringCreateMutableCopy(NULL, 1024, cfstr)) != NULL)
|
||||
CFStringTrimWhitespace(cfmutablestr);
|
||||
|
||||
CFRelease(cfstr);
|
||||
}
|
||||
return (CFStringRef) cfmutablestr;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
/*
|
||||
* 'parse_options()' - Parse uri options.
|
||||
@@ -1402,6 +1344,7 @@ static void *read_thread(void *reference)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+48
-66
@@ -79,16 +79,12 @@ print_device(const char *uri, /* I - Device URI */
|
||||
do
|
||||
{
|
||||
/*
|
||||
* Disable backchannel data when printing to Brother, Canon, or
|
||||
* Minolta USB printers - apparently these printers will return
|
||||
* the IEEE-1284 device ID over and over and over when they get
|
||||
* a read request...
|
||||
* Disable backchannel data when printing to Canon USB printers - apparently
|
||||
* Canon printers will return the IEEE-1284 device ID over and over and over
|
||||
* when they get a read request...
|
||||
*/
|
||||
|
||||
use_bc = strcasecmp(hostname, "Brother") &&
|
||||
strcasecmp(hostname, "Canon") &&
|
||||
strcasecmp(hostname, "Konica Minolta") &&
|
||||
strcasecmp(hostname, "Minolta");
|
||||
use_bc = strcasecmp(hostname, "Canon") != 0;
|
||||
|
||||
if ((device_fd = open_device(uri, &use_bc)) == -1)
|
||||
{
|
||||
@@ -189,52 +185,44 @@ void
|
||||
list_devices(void)
|
||||
{
|
||||
#ifdef __linux
|
||||
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 */
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
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 */
|
||||
|
||||
|
||||
/*
|
||||
* Try to open each USB device...
|
||||
* First figure out which USB printer filename to use...
|
||||
*/
|
||||
|
||||
if (!access("/dev/usblp0", 0))
|
||||
strcpy(format, "/dev/usblp%d");
|
||||
else if (!access("/dev/usb/usblp0", 0))
|
||||
strcpy(format, "/dev/usb/usblp%d");
|
||||
else
|
||||
strcpy(format, "/dev/usb/lp%d");
|
||||
|
||||
/*
|
||||
* Then open each USB device...
|
||||
*/
|
||||
|
||||
for (i = 0; i < 16; i ++)
|
||||
{
|
||||
/*
|
||||
* Linux has a long history of changing the standard filenames used
|
||||
* for USB printer devices. We get the honor of trying them all...
|
||||
*/
|
||||
sprintf(device, format, i);
|
||||
|
||||
sprintf(device, "/dev/usblp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
if (errno != ENOENT)
|
||||
continue;
|
||||
if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
|
||||
make_model, sizeof(make_model),
|
||||
"usb", device_uri, sizeof(device_uri)))
|
||||
printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
|
||||
make_model, make_model, i + 1, device_id);
|
||||
|
||||
sprintf(device, "/dev/usb/lp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
|
||||
{
|
||||
if (errno != ENOENT)
|
||||
continue;
|
||||
|
||||
sprintf(device, "/dev/usb/usblp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
|
||||
continue;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
|
||||
if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
|
||||
make_model, sizeof(make_model),
|
||||
"usb", device_uri, sizeof(device_uri)))
|
||||
printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
|
||||
make_model, make_model, i + 1, device_id);
|
||||
|
||||
close(fd);
|
||||
}
|
||||
#elif defined(__sgi)
|
||||
#elif defined(__sun) && defined(ECPPIOC_GETDEVID)
|
||||
@@ -321,41 +309,35 @@ open_device(const char *uri, /* I - Device URI */
|
||||
|
||||
int i; /* Looping var */
|
||||
int busy; /* Are any ports busy? */
|
||||
char device[255], /* Device filename */
|
||||
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 */
|
||||
|
||||
|
||||
/*
|
||||
* Find the correct USB device...
|
||||
* First figure out which USB printer filename to use...
|
||||
*/
|
||||
|
||||
if (!access("/dev/usblp0", 0))
|
||||
strcpy(format, "/dev/usblp%d");
|
||||
else if (!access("/dev/usb/usblp0", 0))
|
||||
strcpy(format, "/dev/usb/usblp%d");
|
||||
else
|
||||
strcpy(format, "/dev/usb/lp%d");
|
||||
|
||||
/*
|
||||
* Then find the correct USB device...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
for (busy = 0, i = 0; i < 16; i ++)
|
||||
{
|
||||
/*
|
||||
* Linux has a long history of changing the standard filenames used
|
||||
* for USB printer devices. We get the honor of trying them all...
|
||||
*/
|
||||
sprintf(device, format, i);
|
||||
|
||||
sprintf(device, "/dev/usblp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
|
||||
{
|
||||
sprintf(device, "/dev/usb/lp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
|
||||
{
|
||||
sprintf(device, "/dev/usb/usblp%d", i);
|
||||
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (fd >= 0)
|
||||
if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
|
||||
{
|
||||
backendGetDeviceID(fd, device_id, sizeof(device_id),
|
||||
make_model, sizeof(make_model),
|
||||
|
||||
@@ -2,15 +2,13 @@
|
||||
|
||||
lpc.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
lpc.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
|
||||
lpc.o: ../cups/i18n.h ../cups/transcode.h ../cups/debug.h ../cups/string.h
|
||||
lpc.o: ../config.h
|
||||
lpc.o: ../cups/i18n.h ../cups/debug.h ../cups/string.h ../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/array.h
|
||||
lpq.o: ../cups/file.h ../cups/language.h ../cups/i18n.h ../cups/transcode.h
|
||||
lpq.o: ../cups/debug.h
|
||||
lpq.o: ../cups/file.h ../cups/language.h ../cups/i18n.h ../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 ../cups/array.h
|
||||
lpr.o: ../cups/file.h ../cups/language.h ../cups/i18n.h ../cups/transcode.h
|
||||
lpr.o: ../cups/file.h ../cups/language.h ../cups/i18n.h
|
||||
lprm.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
lprm.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
|
||||
lprm.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
lprm.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
|
||||
+67
-20
@@ -65,8 +65,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*params; /* Pointer to parameters */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
|
||||
/*
|
||||
* Connect to the scheduler...
|
||||
*/
|
||||
@@ -237,8 +235,10 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
const char *dests) /* I - Destinations */
|
||||
{
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
*response, /* IPP Response */
|
||||
*jobs; /* IPP Get Jobs response */
|
||||
ipp_attribute_t *attr, /* Current attribute */
|
||||
*jattr; /* Current job attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
char *printer, /* Printer name */
|
||||
*device, /* Device URI */
|
||||
@@ -249,13 +249,14 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
const char *dptr, /* Pointer into destination list */
|
||||
*ptr; /* Pointer into printer name */
|
||||
int match; /* Non-zero if this job matches */
|
||||
char printer_uri[HTTP_MAX_URI];
|
||||
/* Printer URI */
|
||||
static const char *requested[] = /* Requested attributes */
|
||||
{
|
||||
"device-uri",
|
||||
"printer-is-accepting-jobs",
|
||||
"printer-name",
|
||||
"device-uri",
|
||||
"printer-state",
|
||||
"queued-job-count"
|
||||
"printer-is-accepting-jobs"
|
||||
};
|
||||
|
||||
|
||||
@@ -326,21 +327,21 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
|
||||
{
|
||||
if (!strcmp(attr->name, "printer-name") &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
printer = attr->values[0].string.text;
|
||||
|
||||
if (!strcmp(attr->name, "device-uri") &&
|
||||
attr->value_tag == IPP_TAG_URI)
|
||||
device = attr->values[0].string.text;
|
||||
else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
|
||||
attr->value_tag == IPP_TAG_BOOLEAN)
|
||||
accepting = attr->values[0].boolean;
|
||||
else if (!strcmp(attr->name, "printer-name") &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
printer = attr->values[0].string.text;
|
||||
else if (!strcmp(attr->name, "printer-state") &&
|
||||
attr->value_tag == IPP_TAG_ENUM)
|
||||
|
||||
if (!strcmp(attr->name, "printer-state") &&
|
||||
attr->value_tag == IPP_TAG_ENUM)
|
||||
pstate = (ipp_pstate_t)attr->values[0].integer;
|
||||
else if (!strcmp(attr->name, "queued-job-count") &&
|
||||
attr->value_tag == IPP_TAG_INTEGER)
|
||||
jobcount = attr->values[0].integer;
|
||||
|
||||
if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
|
||||
attr->value_tag == IPP_TAG_BOOLEAN)
|
||||
accepting = attr->values[0].boolean;
|
||||
|
||||
attr = attr->next;
|
||||
}
|
||||
@@ -392,8 +393,7 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
*ptr != '\0' && *dptr != '\0' && *ptr == *dptr;
|
||||
ptr ++, dptr ++);
|
||||
|
||||
if (*ptr == '\0' && (*dptr == '\0' || *dptr == ',' ||
|
||||
isspace(*dptr & 255)))
|
||||
if (*ptr == '\0' && (*dptr == '\0' || *dptr == ',' || isspace(*dptr & 255)))
|
||||
{
|
||||
match = 1;
|
||||
break;
|
||||
@@ -419,6 +419,53 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
if (match)
|
||||
{
|
||||
/*
|
||||
* Build an IPP_GET_JOBS request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
* limit
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = IPP_GET_JOBS;
|
||||
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);
|
||||
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri),
|
||||
"ipp", NULL, "localhost", 631, "/printers/%s",
|
||||
printer);
|
||||
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, "/")) != NULL)
|
||||
{
|
||||
/*
|
||||
* Grab the number of jobs for the printer.
|
||||
*/
|
||||
|
||||
for (jattr = jobs->attrs; jattr != NULL; jattr = jattr->next)
|
||||
if (jattr->name && !strcmp(jattr->name, "job-id"))
|
||||
jobcount ++;
|
||||
|
||||
ippDelete(jobs);
|
||||
}
|
||||
|
||||
/*
|
||||
* Display it...
|
||||
*/
|
||||
|
||||
+2
-3
@@ -76,10 +76,9 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
longstatus; /* Show file details */
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests; /* Destinations */
|
||||
cups_lang_t *language; /* Language */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
|
||||
/*
|
||||
* Check for command-line options...
|
||||
*/
|
||||
@@ -91,8 +90,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
interval = 0;
|
||||
longstatus = 0;
|
||||
all = 0;
|
||||
language = cupsLangDefault();
|
||||
num_dests = 0;
|
||||
dests = NULL;
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
if (argv[i][0] == '+')
|
||||
|
||||
+4
-4
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* "lpr" command for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -87,14 +87,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
ssize_t bytes; /* Bytes copied */
|
||||
off_t filesize; /* Size of temp file */
|
||||
int temp; /* Temporary file descriptor */
|
||||
cups_lang_t *language; /* Language information */
|
||||
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
|
||||
struct sigaction action; /* Signal action */
|
||||
struct sigaction oldaction; /* Old signal action */
|
||||
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
|
||||
deletefile = 0;
|
||||
printer = NULL;
|
||||
num_dests = 0;
|
||||
@@ -103,6 +102,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
options = NULL;
|
||||
num_files = 0;
|
||||
title = NULL;
|
||||
language = cupsLangDefault();
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
if (argv[i][0] == '-')
|
||||
@@ -232,7 +232,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
snprintf(email, sizeof(email), "mailto:%s@%s", cupsUser(),
|
||||
httpGetHostname(NULL, buffer, sizeof(buffer)));
|
||||
num_options = cupsAddOption("notify-recipient-uri", email,
|
||||
num_options = cupsAddOption("notify-recipient", email,
|
||||
num_options, &options);
|
||||
}
|
||||
break;
|
||||
|
||||
+3
-3
@@ -55,14 +55,13 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
ipp_t *request; /* IPP request */
|
||||
ipp_t *response; /* IPP response */
|
||||
ipp_op_t op; /* Operation */
|
||||
cups_lang_t *language; /* Language */
|
||||
int num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests, /* Destinations */
|
||||
*defdest; /* Default destination */
|
||||
http_encryption_t encryption; /* Encryption? */
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
|
||||
/*
|
||||
* Setup to cancel individual print jobs...
|
||||
*/
|
||||
@@ -73,6 +72,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
response = NULL;
|
||||
http = NULL;
|
||||
encryption = cupsEncryption();
|
||||
language = cupsLangDefault();
|
||||
|
||||
/*
|
||||
* Open a connection to the server...
|
||||
@@ -273,7 +273,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
}
|
||||
|
||||
/*
|
||||
* If nothing has been canceled yet, cancel the current job on the specified
|
||||
* If nothing has been cancelled yet, cancel the current job on the specified
|
||||
* (or default) printer...
|
||||
*/
|
||||
|
||||
|
||||
+11
-13
@@ -3,49 +3,47 @@
|
||||
help-index.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
help-index.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
help-index.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
help-index.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
help-index.o: ../cups/dir.h
|
||||
help-index.o: ../cups/i18n.h ../cups/string.h ../config.h ../cups/dir.h
|
||||
html.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
html.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
html.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
html.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
html.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
ipp-var.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
ipp-var.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
ipp-var.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
ipp-var.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
ipp-var.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
search.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
search.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
search.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
search.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
search.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
template.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
template.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
template.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
template.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
template.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
var.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
var.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
var.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
var.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
var.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
admin.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
admin.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
admin.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
admin.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
admin.o: ../cups/adminutil.h ../cups/cups.h ../cups/file.h
|
||||
admin.o: ../cups/i18n.h ../cups/string.h ../config.h ../cups/file.h
|
||||
classes.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
classes.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
classes.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
classes.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
classes.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
help.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
help.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
help.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
help.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
help.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
jobs.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
jobs.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
jobs.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
jobs.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
jobs.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
printers.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
|
||||
printers.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
|
||||
printers.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
|
||||
printers.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
|
||||
printers.o: ../cups/i18n.h ../cups/string.h ../config.h
|
||||
testcgi.o: cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
|
||||
testcgi.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
|
||||
testcgi.o: ../cups/array.h help-index.h
|
||||
|
||||
+18
-76
@@ -1597,97 +1597,39 @@ do_config_server(http_t *http) /* I - HTTP connection */
|
||||
|
||||
int num_settings; /* Number of server settings */
|
||||
cups_option_t *settings; /* Server settings */
|
||||
const char *debug_logging, /* DEBUG_LOGGING value */
|
||||
*remote_admin, /* REMOTE_ADMIN value */
|
||||
*remote_printers,
|
||||
/* REMOTE_PRINTERS value */
|
||||
*share_printers,/* SHARE_PRINTERS value */
|
||||
*user_cancel_any;
|
||||
/* USER_CANCEL_ANY value */
|
||||
|
||||
|
||||
/*
|
||||
* Get the checkbox values from the form...
|
||||
*/
|
||||
num_settings = 0;
|
||||
num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
cgiGetVariable("DEBUG_LOGGING") ? "1" : "0",
|
||||
num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
cgiGetVariable("REMOTE_ADMIN") ? "1" : "0",
|
||||
num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0",
|
||||
num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
cgiGetVariable("SHARE_PRINTERS") ? "1" : "0",
|
||||
num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0",
|
||||
num_settings, &settings);
|
||||
|
||||
debug_logging = cgiGetVariable("DEBUG_LOGGING") ? "1" : "0";
|
||||
remote_admin = cgiGetVariable("REMOTE_ADMIN") ? "1" : "0";
|
||||
remote_printers = cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0";
|
||||
share_printers = cgiGetVariable("SHARE_PRINTERS") ? "1" : "0";
|
||||
user_cancel_any = cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0";
|
||||
|
||||
/*
|
||||
* Get the current server settings...
|
||||
*/
|
||||
|
||||
if (!_cupsAdminGetServerSettings(http, &num_settings, &settings))
|
||||
if (!_cupsAdminSetServerSettings(http, num_settings, settings))
|
||||
{
|
||||
cgiStartHTML(cgiText(_("Change Settings")));
|
||||
cgiSetVariable("MESSAGE",
|
||||
cgiText(_("Unable to change server settings:")));
|
||||
cgiSetVariable("ERROR", cupsLastErrorString());
|
||||
cgiCopyTemplateLang("error.tmpl");
|
||||
cgiEndHTML();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* See if the settings have changed...
|
||||
*/
|
||||
|
||||
if (strcmp(debug_logging, cupsGetOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
num_settings, settings)) ||
|
||||
strcmp(remote_admin, cupsGetOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
num_settings, settings)) ||
|
||||
strcmp(remote_printers, cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
num_settings, settings)) ||
|
||||
strcmp(share_printers, cupsGetOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
num_settings, settings)) ||
|
||||
strcmp(user_cancel_any, cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
num_settings, settings)))
|
||||
{
|
||||
/*
|
||||
* Settings *have* changed, so save the changes...
|
||||
*/
|
||||
|
||||
cupsFreeOptions(num_settings, settings);
|
||||
|
||||
num_settings = 0;
|
||||
num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
debug_logging, num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
remote_admin, num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
remote_printers, num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
share_printers, num_settings, &settings);
|
||||
num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
user_cancel_any, num_settings, &settings);
|
||||
|
||||
if (!_cupsAdminSetServerSettings(http, num_settings, settings))
|
||||
{
|
||||
cgiStartHTML(cgiText(_("Change Settings")));
|
||||
cgiSetVariable("MESSAGE",
|
||||
cgiText(_("Unable to change server settings:")));
|
||||
cgiSetVariable("ERROR", cupsLastErrorString());
|
||||
cgiCopyTemplateLang("error.tmpl");
|
||||
}
|
||||
else
|
||||
{
|
||||
cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
|
||||
cgiStartHTML(cgiText(_("Change Settings")));
|
||||
cgiCopyTemplateLang("restart.tmpl");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* No changes...
|
||||
*/
|
||||
|
||||
cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
|
||||
cgiStartHTML(cgiText(_("Change Settings")));
|
||||
cgiCopyTemplateLang("norestart.tmpl");
|
||||
cgiCopyTemplateLang("restart.tmpl");
|
||||
}
|
||||
|
||||
cupsFreeOptions(num_settings, settings);
|
||||
|
||||
+1
-2
@@ -110,7 +110,6 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */
|
||||
*/
|
||||
|
||||
num_attrs = 0;
|
||||
attrs[0] = NULL; /* Eliminate compiler warning */
|
||||
|
||||
while ((ch = getc(in)) != EOF)
|
||||
if (ch == '\\')
|
||||
@@ -914,7 +913,7 @@ cgiSetIPPObjectVars(
|
||||
|
||||
snprintf(valptr, sizeof(value) - (valptr - value),
|
||||
"<A HREF=\"%s\">%s</A>", url,
|
||||
strrchr(attr->values[i].string.text, '/') + 1);
|
||||
strrchr(url, '/') + 1);
|
||||
}
|
||||
else
|
||||
cgiRewriteURL(attr->values[i].string.text, valptr,
|
||||
|
||||
+1
-3
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Search routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -225,8 +225,6 @@ cgiCompileSearch(const char *query) /* I - Query string */
|
||||
*sptr++ = *qptr++;
|
||||
}
|
||||
|
||||
*sptr = '\0';
|
||||
|
||||
/*
|
||||
* For "word1 AND word2", add reciprocal "word2 AND word1"...
|
||||
*/
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: mime.types 6003 2006-10-02 16:26:04Z mike $"
|
||||
# "$Id: mime.types 5402 2006-04-14 19:21:03Z mike $"
|
||||
#
|
||||
# MIME types file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
@@ -154,8 +154,8 @@ application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
|
||||
application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \
|
||||
string(0,<1B>@) \
|
||||
(contains(0,128,<1B>%-12345X) + \
|
||||
(contains(0,4096,"LANGUAGE=PCL") \
|
||||
contains(0,4096,"LANGUAGE = PCL")))
|
||||
(contains(0,1024,"LANGUAGE=PCL") \
|
||||
contains(0,1024,"LANGUAGE = PCL")))
|
||||
|
||||
########################################################################
|
||||
#
|
||||
@@ -167,5 +167,5 @@ application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \
|
||||
application/octet-stream
|
||||
|
||||
#
|
||||
# End of "$Id: mime.types 6003 2006-10-02 16:26:04Z mike $".
|
||||
# End of "$Id: mime.types 5402 2006-04-14 19:21:03Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl
|
||||
dnl 32/64-bit library support stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2006 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 USA
|
||||
dnl
|
||||
dnl Voice: (301) 373-9600
|
||||
dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Setup support for separate 32/64-bit library generation...
|
||||
AC_ARG_ENABLE(32bit, [ --enable-32bit generate 32-bit libraries on 32/64-bit systems, default=no])
|
||||
|
||||
INSTALL32=""
|
||||
LIB32CUPS=""
|
||||
LIB32CUPSIMAGE=""
|
||||
LIB32DIR=""
|
||||
UNINSTALL32=""
|
||||
|
||||
AC_SUBST(INSTALL32)
|
||||
AC_SUBST(LIB32CUPS)
|
||||
AC_SUBST(LIB32CUPSIMAGE)
|
||||
AC_SUBST(LIB32DIR)
|
||||
AC_SUBST(UNINSTALL32)
|
||||
|
||||
AC_ARG_ENABLE(64bit, [ --enable-64bit generate 64-bit libraries on 32/64-bit systems, default=no])
|
||||
|
||||
INSTALL64=""
|
||||
LIB64CUPS=""
|
||||
LIB64CUPSIMAGE=""
|
||||
LIB64DIR=""
|
||||
UNINSTALL64=""
|
||||
|
||||
AC_SUBST(INSTALL64)
|
||||
AC_SUBST(LIB64CUPS)
|
||||
AC_SUBST(LIB64CUPSIMAGE)
|
||||
AC_SUBST(LIB64DIR)
|
||||
AC_SUBST(UNINSTALL64)
|
||||
|
||||
case "$uname" in
|
||||
HP-UX*)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
# Build 32-bit libraries, 64-bit base...
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib/hpux32; then
|
||||
LIB32DIR="${LIB32DIR}/hpux32"
|
||||
fi
|
||||
UNINSTALL32="uninstall32bit"
|
||||
fi
|
||||
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries, 32-bit base...
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib/hpux64; then
|
||||
LIB64DIR="${LIB64DIR}/hpux64"
|
||||
fi
|
||||
UNINSTALL64="uninstall64bit"
|
||||
fi
|
||||
;;
|
||||
|
||||
IRIX)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$prefix/lib32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
fi
|
||||
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries, 32-bit base...
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$prefix/lib64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
fi
|
||||
;;
|
||||
|
||||
Linux*)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
# Build 32-bit libraries, 64-bit base...
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib32; then
|
||||
LIB32DIR="${LIB32DIR}32"
|
||||
fi
|
||||
UNINSTALL32="uninstall32bit"
|
||||
fi
|
||||
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries, 32-bit base...
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib64; then
|
||||
LIB64DIR="${LIB64DIR}64"
|
||||
fi
|
||||
UNINSTALL64="uninstall64bit"
|
||||
fi
|
||||
;;
|
||||
|
||||
SunOS*)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
# Build 32-bit libraries, 64-bit base...
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib/32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
fi
|
||||
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries, 32-bit base...
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib/64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 6346 2007-03-17 18:07:17Z mike $"
|
||||
dnl "$Id: cups-common.m4 5466 2006-04-26 19:52:27Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 1997-2006 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
|
||||
@@ -28,9 +28,12 @@ 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.2.10"
|
||||
dnl Versio number information...
|
||||
CUPS_VERSION="1.2svn"
|
||||
CUPS_REVISION=""
|
||||
if test -z "$CUPS_REVISION" -a -d .svn; then
|
||||
CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
|
||||
fi
|
||||
|
||||
AC_SUBST(CUPS_VERSION)
|
||||
AC_SUBST(CUPS_REVISION)
|
||||
@@ -129,7 +132,6 @@ 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))
|
||||
AC_CHECK_HEADER(scsi/sg.h,AC_DEFINE(HAVE_SCSI_SG_H))
|
||||
|
||||
dnl Checks for string functions.
|
||||
AC_CHECK_FUNCS(strdup strcasecmp strncasecmp strlcat strlcpy)
|
||||
@@ -229,13 +231,12 @@ case $uname in
|
||||
AC_MSG_CHECKING(for DBUS)
|
||||
if $PKGCONFIG --exists dbus-1; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_DBUS)
|
||||
CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
|
||||
CUPSDLIBS="`$PKGCONFIG --libs dbus-1`"
|
||||
DBUSDIR="/etc/dbus-1/system.d"
|
||||
AC_CHECK_LIB(dbus-1,
|
||||
dbus_message_iter_init_append,
|
||||
AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND))
|
||||
AC_DEFINE(HAVE_DBUS)
|
||||
CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
|
||||
CUPSDLIBS="`$PKGCONFIG --libs dbus-1`"
|
||||
DBUSDIR="/etc/dbus-1/system.d")
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
@@ -264,5 +265,5 @@ AC_SUBST(DEFAULT_IPP_PORT)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-common.m4 6346 2007-03-17 18:07:17Z mike $".
|
||||
dnl End of "$Id: cups-common.m4 5466 2006-04-26 19:52:27Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-compiler.m4 6145 2006-12-06 20:10:16Z mike $"
|
||||
dnl "$Id: cups-compiler.m4 5705 2006-06-30 01:07:29Z mike $"
|
||||
dnl
|
||||
dnl Compiler stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -46,15 +46,41 @@ fi
|
||||
AC_SUBST(ARCHFLAGS)
|
||||
|
||||
dnl Setup support for separate 32/64-bit library generation...
|
||||
AC_ARG_ENABLE(32bit, [ --enable-32bit generate 32-bit libraries on 32/64-bit systems, default=no])
|
||||
AC_ARG_WITH(arch32flags, [ --with-arch32flags="flags"
|
||||
specifies 32-bit architecture flags])
|
||||
ARCH32FLAGS=""
|
||||
AC_SUBST(ARCH32FLAGS)
|
||||
|
||||
ARCH32FLAGS=""
|
||||
INSTALL32=""
|
||||
LIB32CUPS=""
|
||||
LIB32CUPSIMAGE=""
|
||||
LIB32DIR=""
|
||||
UNINSTALL32=""
|
||||
|
||||
AC_SUBST(ARCH32FLAGS)
|
||||
AC_SUBST(INSTALL32)
|
||||
AC_SUBST(LIB32CUPS)
|
||||
AC_SUBST(LIB32CUPSIMAGE)
|
||||
AC_SUBST(LIB32DIR)
|
||||
AC_SUBST(UNINSTALL32)
|
||||
|
||||
AC_ARG_ENABLE(64bit, [ --enable-64bit generate 64-bit libraries on 32/64-bit systems, default=no])
|
||||
AC_ARG_WITH(arch64flags, [ --with-arch64flags="flags"
|
||||
specifies 64-bit architecture flags])
|
||||
|
||||
ARCH64FLAGS=""
|
||||
INSTALL64=""
|
||||
LIB64CUPS=""
|
||||
LIB64CUPSIMAGE=""
|
||||
LIB64DIR=""
|
||||
UNINSTALL64=""
|
||||
|
||||
AC_SUBST(ARCH64FLAGS)
|
||||
AC_SUBST(INSTALL64)
|
||||
AC_SUBST(LIB64CUPS)
|
||||
AC_SUBST(LIB64CUPSIMAGE)
|
||||
AC_SUBST(LIB64DIR)
|
||||
AC_SUBST(UNINSTALL64)
|
||||
|
||||
dnl Position-Independent Executable support on Linux and *BSD...
|
||||
AC_ARG_ENABLE(pie, [ --enable-pie use GCC -fPIE option, default=no])
|
||||
@@ -67,7 +93,6 @@ PIEFLAGS=""
|
||||
AC_SUBST(PIEFLAGS)
|
||||
|
||||
if test -n "$GCC"; then
|
||||
# Add GCC-specific compiler options...
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
# Default to optimize-for-size and debug
|
||||
@@ -103,42 +128,6 @@ if test -n "$GCC"; then
|
||||
fi
|
||||
|
||||
case "$uname" in
|
||||
HP-UX*)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
# Build 32-bit libraries, 64-bit base...
|
||||
if test -z "$with_arch32flags"; then
|
||||
ARCH32FLAGS="-milp32"
|
||||
else
|
||||
ARCH32FLAGS="$with_arch32flags"
|
||||
fi
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch64flags"; then
|
||||
ARCHFLAGS="-mlp64"
|
||||
else
|
||||
ARCHFLAGS="$with_arch64flags"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries, 32-bit base...
|
||||
if test -z "$with_arch64flags"; then
|
||||
ARCH64FLAGS="-mlp64"
|
||||
else
|
||||
ARCH64FLAGS="$with_arch64flags"
|
||||
fi
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch32flags"; then
|
||||
ARCHFLAGS="-milp32"
|
||||
else
|
||||
ARCHFLAGS="$with_arch32flags"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
IRIX)
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
# Build 32-bit libraries, 64-bit base...
|
||||
@@ -147,6 +136,11 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH32FLAGS="$with_arch32flags"
|
||||
fi
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$prefix/lib32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch64flags"; then
|
||||
@@ -164,6 +158,11 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH64FLAGS="$with_arch64flags"
|
||||
fi
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$prefix/lib64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch32flags"; then
|
||||
@@ -183,6 +182,14 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH32FLAGS="$with_arch32flags"
|
||||
fi
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib32; then
|
||||
LIB32DIR="${LIB32DIR}32"
|
||||
fi
|
||||
UNINSTALL32="uninstall32bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch64flags"; then
|
||||
@@ -200,6 +207,14 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH64FLAGS="$with_arch64flags"
|
||||
fi
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib"
|
||||
if test -d /usr/lib64; then
|
||||
LIB64DIR="${LIB64DIR}64"
|
||||
fi
|
||||
UNINSTALL64="uninstall64bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch32flags"; then
|
||||
@@ -219,6 +234,11 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH32FLAGS="$with_arch32flags"
|
||||
fi
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib/32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch64flags"; then
|
||||
@@ -236,6 +256,11 @@ if test -n "$GCC"; then
|
||||
else
|
||||
ARCH64FLAGS="$with_arch64flags"
|
||||
fi
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib/64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch32flags"; then
|
||||
@@ -248,7 +273,6 @@ if test -n "$GCC"; then
|
||||
;;
|
||||
esac
|
||||
else
|
||||
# Add vendor-specific compiler options...
|
||||
case $uname in
|
||||
AIX*)
|
||||
if test -z "$OPTIM"; then
|
||||
@@ -297,6 +321,11 @@ else
|
||||
else
|
||||
ARCH32FLAGS="$with_arch32flags"
|
||||
fi
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$prefix/lib32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch64flags"; then
|
||||
@@ -314,6 +343,11 @@ else
|
||||
else
|
||||
ARCH64FLAGS="$with_arch64flags"
|
||||
fi
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$prefix/lib64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
|
||||
if test -z "$with_archflags"; then
|
||||
if test -z "$with_arch32flags"; then
|
||||
@@ -324,16 +358,6 @@ else
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
OSF*)
|
||||
# Tru64 UNIX aka Digital UNIX aka OSF/1
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-O"
|
||||
else
|
||||
OPTIM="$with_optim"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
if test -z "$OPTIM"; then
|
||||
@@ -352,6 +376,11 @@ else
|
||||
# Compiling on a Solaris system, build 64-bit
|
||||
# binaries with separate 32-bit libraries...
|
||||
ARCH32FLAGS="-xarch=generic"
|
||||
INSTALL32="install32bit"
|
||||
LIB32CUPS="32bit/libcups.so.2"
|
||||
LIB32CUPSIMAGE="32bit/libcupsimage.so.2"
|
||||
LIB32DIR="$exec_prefix/lib/32"
|
||||
UNINSTALL32="uninstall32bit"
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
# Suppress all of Sun's questionable
|
||||
@@ -371,6 +400,11 @@ else
|
||||
if test "x$enable_64bit" = xyes; then
|
||||
# Build 64-bit libraries...
|
||||
ARCH64FLAGS="-xarch=generic64"
|
||||
INSTALL64="install64bit"
|
||||
LIB64CUPS="64bit/libcups.so.2"
|
||||
LIB64CUPSIMAGE="64bit/libcupsimage.so.2"
|
||||
LIB64DIR="$exec_prefix/lib/64"
|
||||
UNINSTALL64="uninstall64bit"
|
||||
fi
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
@@ -415,25 +449,16 @@ else
|
||||
esac
|
||||
fi
|
||||
|
||||
# Add general compiler options per platform...
|
||||
case $uname in
|
||||
HP-UX*)
|
||||
# HP-UX 10.20 (at least) needs this definition to get the
|
||||
# h_errno global...
|
||||
OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED"
|
||||
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"
|
||||
;;
|
||||
|
||||
OSF*)
|
||||
# Tru64 UNIX aka Digital UNIX aka OSF/1 need to be told
|
||||
# to be POSIX-compliant...
|
||||
OPTIM="$OPTIM -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE"
|
||||
;;
|
||||
esac
|
||||
# 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 6145 2006-12-06 20:10:16Z mike $".
|
||||
dnl End of "$Id: cups-compiler.m4 5705 2006-06-30 01:07:29Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
dnl
|
||||
dnl "$Id: cups-defaults.m4 6234 2007-02-05 20:25:50Z mike $"
|
||||
dnl "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $"
|
||||
dnl
|
||||
dnl Default cupsd configuration settings for the Common UNIX Printing System
|
||||
dnl (CUPS).
|
||||
dnl
|
||||
dnl Copyright 2006-2007 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 2006 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
|
||||
@@ -24,11 +24,9 @@ dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Default langugages...
|
||||
AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es et fr it ja pl sv" ],
|
||||
if test "x$withval" != xno; then
|
||||
LANGUAGES="$withval"
|
||||
fi,
|
||||
LANGUAGES="de es et fr it ja pl sv")
|
||||
AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es ja pl sv" ],
|
||||
LANGUAGES="$withval",
|
||||
LANGUAGES="de es ja pl sv")
|
||||
AC_SUBST(LANGUAGES)
|
||||
|
||||
dnl Default ConfigFilePerm
|
||||
@@ -225,7 +223,7 @@ AC_ARG_WITH(printcap, [ --with-printcap set default printcap file],
|
||||
default_printcap="$withval",
|
||||
default_printcap="default")
|
||||
|
||||
if test x$default_printcap != xno; then
|
||||
if test x$enable_printcap != xno -a x$default_printcap != xno; then
|
||||
if test "x$default_printcap" = "xdefault"; then
|
||||
case $uname in
|
||||
Darwin*)
|
||||
@@ -242,8 +240,6 @@ if test x$default_printcap != xno; then
|
||||
CUPS_DEFAULT_PRINTCAP="/etc/printcap"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
CUPS_DEFAULT_PRINTCAP="$default_printcap"
|
||||
fi
|
||||
else
|
||||
CUPS_DEFAULT_PRINTCAP=""
|
||||
@@ -252,5 +248,5 @@ fi
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP")
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-defaults.m4 6234 2007-02-05 20:25:50Z mike $".
|
||||
dnl End of "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-directories.m4 6353 2007-03-19 06:04:35Z mike $"
|
||||
dnl "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $"
|
||||
dnl
|
||||
dnl Directory stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -57,15 +57,6 @@ if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then
|
||||
sharedstatedir="/usr/com"
|
||||
fi
|
||||
|
||||
dnl Fix "datarootdir" variable if it hasn't been specified...
|
||||
if test "$datarootdir" = "\${prefix}/share"; then
|
||||
if test "$prefix" = "/"; then
|
||||
datarootdir="/usr/share"
|
||||
else
|
||||
datarootdir="$prefix/share"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Fix "datadir" variable if it hasn't been specified...
|
||||
if test "$datadir" = "\${prefix}/share"; then
|
||||
if test "$prefix" = "/"; then
|
||||
@@ -73,8 +64,6 @@ if test "$datadir" = "\${prefix}/share"; then
|
||||
else
|
||||
datadir="$prefix/share"
|
||||
fi
|
||||
elif test "$datadir" = "\${datarootdir}"; then
|
||||
datadir="$datarootdir"
|
||||
fi
|
||||
|
||||
dnl Fix "includedir" variable if it hasn't been specified...
|
||||
@@ -123,24 +112,24 @@ fi
|
||||
|
||||
dnl Setup init.d locations...
|
||||
AC_ARG_WITH(rcdir, [ --with-rcdir set path for rc scripts],rcdir="$withval",rcdir="")
|
||||
AC_ARG_WITH(rclevels, [ --with-rclevels set run levels for rc scripts],rclevels="$withval",rclevels="2 3 5")
|
||||
AC_ARG_WITH(rcstart, [ --with-rcstart set start number for rc scripts],rcstart="$withval",rcstart="99")
|
||||
AC_ARG_WITH(rcstop, [ --with-rcstop set stop number for rc scripts],rcstop="$withval",rcstop="00")
|
||||
|
||||
INITDIR=""
|
||||
INITDDIR=""
|
||||
RCLEVELS="$rclevels"
|
||||
RCSTART="$rcstart"
|
||||
RCSTOP="$rcstop"
|
||||
|
||||
if test x$rcdir = x; then
|
||||
case "$uname" in
|
||||
AIX*)
|
||||
INITDIR="/etc/rc.d"
|
||||
FreeBSD* | OpenBSD* | MirBsD* | ekkoBSD*)
|
||||
# FreeBSD and OpenBSD
|
||||
INITDIR=""
|
||||
INITDDIR=""
|
||||
;;
|
||||
|
||||
NetBSD*)
|
||||
# NetBSD
|
||||
INITDIR=""
|
||||
INITDDIR="/etc/rc.d"
|
||||
;;
|
||||
|
||||
Darwin*)
|
||||
# Darwin and MacOS X...
|
||||
INITDIR=""
|
||||
if test -x /sbin/launchd; then
|
||||
INITDDIR="/System/Library/LaunchDaemons"
|
||||
else
|
||||
@@ -148,87 +137,57 @@ if test x$rcdir = x; then
|
||||
fi
|
||||
;;
|
||||
|
||||
FreeBSD* | OpenBSD* | MirBSD* | ekkoBSD*)
|
||||
# FreeBSD and OpenBSD
|
||||
;;
|
||||
|
||||
HP-UX*)
|
||||
INITDIR="/sbin"
|
||||
RCLEVELS="2"
|
||||
RCSTART="620"
|
||||
RCSTOP="380"
|
||||
;;
|
||||
|
||||
IRIX*)
|
||||
# IRIX
|
||||
INITDIR="/etc"
|
||||
RCSTART="60"
|
||||
RCSTOP="25"
|
||||
;;
|
||||
|
||||
Linux | GNU)
|
||||
# Linux/HURD 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/init.d; then
|
||||
# Others
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
else
|
||||
# RedHat
|
||||
INITDIR="/etc/rc.d"
|
||||
INITDDIR="../init.d"
|
||||
fi
|
||||
fi
|
||||
RCSTART="81"
|
||||
RCSTOP="36"
|
||||
;;
|
||||
|
||||
NetBSD*)
|
||||
# NetBSD
|
||||
INITDDIR="/etc/rc.d"
|
||||
;;
|
||||
|
||||
OSF1*)
|
||||
OSF1* | HP-UX*)
|
||||
INITDIR="/sbin"
|
||||
INITDDIR="../init.d"
|
||||
;;
|
||||
|
||||
SunOS*)
|
||||
# Solaris
|
||||
INITDIR="/etc"
|
||||
RCSTART="81"
|
||||
AIX*)
|
||||
INITDIR="/etc/rc.d"
|
||||
INITDDIR=".."
|
||||
;;
|
||||
|
||||
*)
|
||||
INITDIR="/etc"
|
||||
INITDDIR="../init.d"
|
||||
;;
|
||||
|
||||
esac
|
||||
else
|
||||
if test "x$rclevels" = x; then
|
||||
INITDDIR="$rcdir"
|
||||
else
|
||||
INITDIR="$rcdir"
|
||||
fi
|
||||
INITDIR=""
|
||||
INITDDIR="$rcdir"
|
||||
fi
|
||||
|
||||
AC_SUBST(INITDIR)
|
||||
AC_SUBST(INITDDIR)
|
||||
AC_SUBST(RCLEVELS)
|
||||
AC_SUBST(RCSTART)
|
||||
AC_SUBST(RCSTOP)
|
||||
|
||||
dnl Xinetd support...
|
||||
XINETD=""
|
||||
|
||||
if test ! -x /sbin/launchd; then
|
||||
for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do
|
||||
if test -d $dir; then
|
||||
XINETD="$dir"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do
|
||||
if test -d $dir; then
|
||||
XINETD="$dir"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
AC_SUBST(XINETD)
|
||||
|
||||
@@ -238,7 +197,7 @@ AC_ARG_WITH(cachedir, [ --with-cachedir set path for cache files],cache
|
||||
|
||||
if test x$cachedir = x; then
|
||||
if test "x$uname" = xDarwin; then
|
||||
CUPS_CACHEDIR="$localstatedir/spool/cups/cache"
|
||||
CUPS_CACHEDIR="$localstatedir/tmp/cups"
|
||||
else
|
||||
CUPS_CACHEDIR="$localstatedir/cache/cups"
|
||||
fi
|
||||
@@ -343,5 +302,5 @@ AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$localstatedir/run/cups")
|
||||
AC_SUBST(CUPS_STATEDIR)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-directories.m4 6353 2007-03-19 06:04:35Z mike $".
|
||||
dnl End of "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-largefile.m4 6333 2007-03-12 20:49:13Z mike $"
|
||||
dnl "$Id: cups-largefile.m4 4732 2005-09-30 23:23:25Z mike $"
|
||||
dnl
|
||||
dnl Large file support stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -30,11 +30,11 @@ LARGEFILE=""
|
||||
if test x$enable_largefile != xno; then
|
||||
LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
|
||||
|
||||
if test x$ac_cv_sys_large_files = x1; then
|
||||
if test $ac_cv_sys_large_files = 1; then
|
||||
LARGEFILE="$LARGEFILE -D_LARGE_FILES"
|
||||
fi
|
||||
|
||||
if test x$ac_cv_sys_file_offset_bits = x64; then
|
||||
if test $ac_cv_sys_file_offset_bits = 64; then
|
||||
LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64"
|
||||
fi
|
||||
fi
|
||||
@@ -57,5 +57,5 @@ fi
|
||||
AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL))
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-largefile.m4 6333 2007-03-12 20:49:13Z mike $".
|
||||
dnl End of "$Id: cups-largefile.m4 4732 2005-09-30 23:23:25Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-manpages.m4 5799 2006-08-03 00:54:38Z mike $"
|
||||
dnl "$Id: cups-manpages.m4 5466 2006-04-26 19:52:27Z mike $"
|
||||
dnl
|
||||
dnl Manpage stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 1997-2005 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,12 +23,6 @@ dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Fix "mandir" variable...
|
||||
if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then
|
||||
# New GNU "standards" break previous ones, so make sure we use
|
||||
# the right default location for the operating system...
|
||||
mandir="\${prefix}/man"
|
||||
fi
|
||||
|
||||
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
|
||||
case "$uname" in
|
||||
Darwin* | Linux | GNU | *BSD* | AIX*)
|
||||
@@ -109,5 +103,5 @@ AC_SUBST(MAN8EXT)
|
||||
AC_SUBST(MAN8DIR)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-manpages.m4 5799 2006-08-03 00:54:38Z mike $".
|
||||
dnl End of "$Id: cups-manpages.m4 5466 2006-04-26 19:52:27Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-network.m4 6049 2006-10-20 15:07:21Z mike $"
|
||||
dnl "$Id: cups-network.m4 5634 2006-06-06 17:48:27Z mike $"
|
||||
dnl
|
||||
dnl Networking stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -24,17 +24,12 @@ dnl
|
||||
|
||||
AC_SEARCH_LIBS(socket, socket)
|
||||
AC_SEARCH_LIBS(gethostbyaddr, nsl)
|
||||
AC_SEARCH_LIBS(getaddrinfo, nsl, AC_DEFINE(HAVE_GETADDRINFO))
|
||||
AC_SEARCH_LIBS(getifaddrs, nsl, AC_DEFINE(HAVE_GETIFADDRS))
|
||||
AC_SEARCH_LIBS(getnameinfo, nsl, AC_DEFINE(HAVE_GETNAMEINFO))
|
||||
AC_SEARCH_LIBS(hstrerror, nsl socket resolv, AC_DEFINE(HAVE_HSTRERROR))
|
||||
AC_SEARCH_LIBS(rresvport_af, nsl, AC_DEFINE(HAVE_RRESVPORT_AF))
|
||||
|
||||
# Tru64 5.1b leaks file descriptors with these functions; disable until
|
||||
# we can come up with a test for this...
|
||||
if test "$uname" != "OSF1"; then
|
||||
AC_SEARCH_LIBS(getaddrinfo, nsl, AC_DEFINE(HAVE_GETADDRINFO))
|
||||
AC_SEARCH_LIBS(getnameinfo, nsl, AC_DEFINE(HAVE_GETNAMEINFO))
|
||||
fi
|
||||
|
||||
AC_CHECK_MEMBER(struct sockaddr.sa_len,,, [#include <sys/socket.h>])
|
||||
AC_CHECK_HEADER(sys/sockio.h, AC_DEFINE(HAVE_SYS_SOCKIO_H))
|
||||
|
||||
@@ -90,5 +85,5 @@ AC_SUBST(CUPS_DEFAULT_DOMAINSOCKET)
|
||||
AC_SUBST(CUPS_LISTEN_DOMAINSOCKET)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-network.m4 6049 2006-10-20 15:07:21Z mike $".
|
||||
dnl End of "$Id: cups-network.m4 5634 2006-06-06 17:48:27Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-opsys.m4 6145 2006-12-06 20:10:16Z mike $"
|
||||
dnl "$Id: cups-opsys.m4 5466 2006-04-26 19:52:27Z mike $"
|
||||
dnl
|
||||
dnl Operating system stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -22,10 +22,9 @@ dnl EMail: cups-info@cups.org
|
||||
dnl WWW: http://www.cups.org
|
||||
dnl
|
||||
|
||||
dnl Get the operating system, version number, and architecture...
|
||||
dnl Get the operating system and version number...
|
||||
uname=`uname`
|
||||
uversion=`uname -r | sed -e '1,$s/^[[^0-9]]*\([[0-9]]*\)\.\([[0-9]]*\).*/\1\2/'`
|
||||
uarch=`uname -m`
|
||||
|
||||
case "$uname" in
|
||||
GNU* | GNU/*)
|
||||
@@ -40,5 +39,5 @@ case "$uname" in
|
||||
esac
|
||||
|
||||
dnl
|
||||
dnl "$Id: cups-opsys.m4 6145 2006-12-06 20:10:16Z mike $"
|
||||
dnl "$Id: cups-opsys.m4 5466 2006-04-26 19:52:27Z mike $"
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-sharedlibs.m4 6145 2006-12-06 20:10:16Z mike $"
|
||||
dnl "$Id: cups-sharedlibs.m4 5582 2006-05-24 01:00:35Z mike $"
|
||||
dnl
|
||||
dnl Shared library support for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -36,20 +36,10 @@ if test x$enable_shared != xno; then
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-h,\`basename \$@\` -G \$(OPTIM)"
|
||||
;;
|
||||
HP-UX*)
|
||||
case "$uarch" in
|
||||
ia64)
|
||||
LIBCUPS="libcups.so.2"
|
||||
LIBCUPSIMAGE="libcupsimage.so.2"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-b,-z,+h,\`basename \$@\`"
|
||||
;;
|
||||
*)
|
||||
LIBCUPS="libcups.sl.2"
|
||||
LIBCUPSIMAGE="libcupsimage.sl.2"
|
||||
DSO="\$(LD)"
|
||||
DSOFLAGS="$DSOFLAGS -b -z +h \`basename \$@\`"
|
||||
;;
|
||||
esac
|
||||
LIBCUPS="libcups.sl.2"
|
||||
LIBCUPSIMAGE="libcupsimage.sl.2"
|
||||
DSO="\$(LD)"
|
||||
DSOFLAGS="$DSOFLAGS -b -z +h \`basename \$@\`"
|
||||
;;
|
||||
IRIX)
|
||||
LIBCUPS="libcups.so.2"
|
||||
@@ -136,18 +126,9 @@ if test "$DSO" != ":"; then
|
||||
case $uname in
|
||||
HP-UX*)
|
||||
# HP-UX needs the path, even for /usr/lib...
|
||||
case "$uarch" in
|
||||
ia64)
|
||||
DSOFLAGS="-Wl,+s,+b,$libdir $DSOFLAGS"
|
||||
DSO32FLAGS="-Wl,+s,+b,$LIB32DIR $DSO32FLAGS"
|
||||
DSO64FLAGS="-Wl,+s,+b,$LIB64DIR $DSO64FLAGS"
|
||||
;;
|
||||
*)
|
||||
DSOFLAGS="+s +b $libdir $DSOFLAGS"
|
||||
DSO32FLAGS="+s +b $LIB32DIR $DSO32FLAGS"
|
||||
DSO64FLAGS="+s +b $LIB64DIR $DSO64FLAGS"
|
||||
;;
|
||||
esac
|
||||
DSOFLAGS="+s +b $libdir $DSOFLAGS"
|
||||
DSO32FLAGS="+s +b $LIB32DIR $DSO32FLAGS"
|
||||
DSO64FLAGS="+s +b $LIB64DIR $DSO64FLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,+s,+b,$libdir"
|
||||
EXPORT_LDFLAGS="-Wl,+s,+b,$libdir"
|
||||
;;
|
||||
@@ -192,5 +173,5 @@ AC_SUBST(IMGLIBS)
|
||||
AC_SUBST(EXPORT_LDFLAGS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-sharedlibs.m4 6145 2006-12-06 20:10:16Z mike $".
|
||||
dnl End of "$Id: cups-sharedlibs.m4 5582 2006-05-24 01:00:35Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-ssl.m4 6238 2007-02-06 16:04:25Z mike $"
|
||||
dnl "$Id: cups-ssl.m4 5630 2006-06-05 18:42:53Z mike $"
|
||||
dnl
|
||||
dnl OpenSSL/GNUTLS stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 1997-2006 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
|
||||
@@ -42,33 +42,15 @@ if test x$enable_ssl != xno; then
|
||||
dnl 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"
|
||||
# MacOS X doesn't (yet) come with pre-installed encryption
|
||||
# certificates for CUPS, so don't enable encryption on
|
||||
# /admin just yet...
|
||||
#ENCRYPTION_REQUIRED=" Encryption Required"
|
||||
AC_DEFINE(HAVE_SSL)
|
||||
AC_DEFINE(HAVE_CDSASSL)
|
||||
|
||||
dnl Check for the various security headers...
|
||||
AC_CHECK_HEADER(Security/SecPolicy.h,
|
||||
AC_DEFINE(HAVE_SECPOLICY_H))
|
||||
AC_CHECK_HEADER(Security/SecPolicyPriv.h,
|
||||
AC_DEFINE(HAVE_SECPOLICYPRIV_H))
|
||||
AC_CHECK_HEADER(Security/SecBasePriv.h,
|
||||
AC_DEFINE(HAVE_SECBASEPRIV_H))
|
||||
AC_CHECK_HEADER(Security/SecIdentitySearchPriv.h,
|
||||
AC_DEFINE(HAVE_SECIDENTITYSEARCHPRIV_H))
|
||||
|
||||
dnl Check for SecIdentitySearchCreateWithPolicy...
|
||||
AC_MSG_CHECKING(for SecIdentitySearchCreateWithPolicy)
|
||||
if test $uversion -ge 80; then
|
||||
AC_DEFINE(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi])
|
||||
AC_CHECK_HEADER(Security/SecureTransport.h,
|
||||
[SSLLIBS="-framework CoreFoundation -framework Security"
|
||||
# MacOS X doesn't (yet) come with pre-installed encryption
|
||||
# certificates for CUPS, so don't enable encryption on
|
||||
# /admin just yet...
|
||||
#ENCRYPTION_REQUIRED=" Encryption Required"
|
||||
AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
|
||||
AC_DEFINE(HAVE_SSL)
|
||||
AC_DEFINE(HAVE_CDSASSL)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -133,5 +115,5 @@ AC_SUBST(EXPORT_SSLLIBS)
|
||||
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-ssl.m4 6238 2007-02-06 16:04:25Z mike $".
|
||||
dnl End of "$Id: cups-ssl.m4 5630 2006-06-05 18:42:53Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-threads.m4 6061 2006-10-23 00:26:52Z mike $"
|
||||
dnl "$Id: cups-threads.m4 5466 2006-04-26 19:52:27Z mike $"
|
||||
dnl
|
||||
dnl Threading stuff for the Common UNIX Printing System (CUPS).
|
||||
dnl
|
||||
@@ -44,12 +44,6 @@ if test "x$enable_threads" != xno; then
|
||||
|
||||
if test $have_pthread = yes; then
|
||||
PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT"
|
||||
|
||||
# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
|
||||
# be POSIX-compliant... :(
|
||||
if test $uname = SunOS; then
|
||||
PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
@@ -59,5 +53,5 @@ fi
|
||||
AC_SUBST(PTHREAD_FLAGS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-threads.m4 6061 2006-10-23 00:26:52Z mike $".
|
||||
dnl End of "$Id: cups-threads.m4 5466 2006-04-26 19:52:27Z mike $".
|
||||
dnl
|
||||
|
||||
+2
-27
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Configuration file for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -147,13 +147,6 @@
|
||||
#undef HAVE_CRYPT_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <scsi/sg.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SCSI_SG_H
|
||||
|
||||
|
||||
/*
|
||||
* Use <string.h>, <strings.h>, and/or <bstring.h>?
|
||||
*/
|
||||
@@ -268,20 +261,10 @@
|
||||
|
||||
|
||||
/*
|
||||
* What Security framework headers do we have?
|
||||
* Do we have <Security/SecBasePriv.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECPOLICY_H
|
||||
#undef HAVE_SECPOLICYPRIV_H
|
||||
#undef HAVE_SECBASEPRIV_H
|
||||
#undef HAVE_SECIDENTITYSEARCHPRIV_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the SecIdentitySearchCreateWithPolicy function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY
|
||||
|
||||
|
||||
/*
|
||||
@@ -430,13 +413,6 @@
|
||||
#undef HAVE_CFBUNDLEPRIV_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have CFLocaleCreateCanonicalLocaleIdentifierFromString()?
|
||||
*/
|
||||
|
||||
#undef HAVE_CF_LOCALE_ID
|
||||
|
||||
|
||||
/*
|
||||
* Do we have MacOSX 10.4's mbr_XXX functions()?
|
||||
*/
|
||||
@@ -458,7 +434,6 @@
|
||||
*/
|
||||
|
||||
#undef HAVE_DBUS
|
||||
#undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND
|
||||
|
||||
|
||||
/*
|
||||
|
||||
+3
-12
@@ -29,7 +29,6 @@ sinclude(config-scripts/cups-common.m4)
|
||||
sinclude(config-scripts/cups-directories.m4)
|
||||
sinclude(config-scripts/cups-manpages.m4)
|
||||
|
||||
sinclude(config-scripts/cups-3264.m4)
|
||||
sinclude(config-scripts/cups-sharedlibs.m4)
|
||||
sinclude(config-scripts/cups-libtool.m4)
|
||||
sinclude(config-scripts/cups-compiler.m4)
|
||||
@@ -55,17 +54,9 @@ if test "x$LANGUAGES" != x; then
|
||||
INSTALL_LANGUAGES="install-languages"
|
||||
UNINSTALL_LANGUAGES="uninstall-languages"
|
||||
for lang in $LANGUAGES; do
|
||||
if test -f doc/$lang/index.html.in; then
|
||||
LANGFILES="$LANGFILES doc/$lang/index.html"
|
||||
fi
|
||||
|
||||
if test -f templates/$lang/edit-config.tmpl.in; then
|
||||
LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
|
||||
fi
|
||||
|
||||
if test -f templates/$lang/header.tmpl.in; then
|
||||
LANGFILES="$LANGFILES templates/$lang/header.tmpl"
|
||||
fi
|
||||
LANGFILES="$LANGFILES doc/$lang/index.html"
|
||||
LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
|
||||
LANGFILES="$LANGFILES templates/$lang/header.tmpl"
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ bindir=@bindir@
|
||||
includedir=@includedir@
|
||||
libdir=@libdir@
|
||||
imagelibdir=@libdir@
|
||||
datarootdir=@datadir@
|
||||
datadir=@datadir@
|
||||
sysconfdir=@sysconfdir@
|
||||
cups_datadir=@CUPS_DATADIR@
|
||||
|
||||
+3
-3
@@ -82,7 +82,7 @@ transcode.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
|
||||
transcode.o: i18n.h transcode.h debug.h
|
||||
usersys.o: http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
|
||||
usersys.o: globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
usersys.o: transcode.h debug.h
|
||||
usersys.o: transcode.h
|
||||
util.o: globals.h string.h ../config.h http-private.h http.h md5.h
|
||||
util.o: ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
util.o: transcode.h debug.h
|
||||
@@ -180,7 +180,7 @@ transcode.32.o: transcode.c ipp-private.h ipp.h cups.h ppd.h array.h file.h lan
|
||||
transcode.32.o: transcode.c i18n.h transcode.h debug.h
|
||||
usersys.32.o: usersys.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
|
||||
usersys.32.o: usersys.c globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
usersys.32.o: usersys.c transcode.h debug.h
|
||||
usersys.32.o: usersys.c transcode.h
|
||||
util.32.o: util.c globals.h string.h ../config.h http-private.h http.h md5.h
|
||||
util.32.o: util.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
util.32.o: util.c transcode.h debug.h
|
||||
@@ -278,7 +278,7 @@ transcode.64.o: transcode.c ipp-private.h ipp.h cups.h ppd.h array.h file.h lan
|
||||
transcode.64.o: transcode.c i18n.h transcode.h debug.h
|
||||
usersys.64.o: usersys.c http-private.h ../config.h http.h md5.h ipp-private.h ipp.h
|
||||
usersys.64.o: usersys.c globals.h string.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
usersys.64.o: usersys.c transcode.h debug.h
|
||||
usersys.64.o: usersys.c transcode.h
|
||||
util.64.o: util.c globals.h string.h ../config.h http-private.h http.h md5.h
|
||||
util.64.o: util.c ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h i18n.h
|
||||
util.64.o: util.c transcode.h debug.h
|
||||
|
||||
@@ -93,7 +93,6 @@ OBJS = \
|
||||
HEADERS = \
|
||||
adminutil.h \
|
||||
array.h \
|
||||
backend.h \
|
||||
cups.h \
|
||||
dir.h \
|
||||
file.h \
|
||||
|
||||
+88
-286
@@ -7,7 +7,7 @@
|
||||
* MANY OF THE FUNCTIONS IN THIS HEADER ARE PRIVATE AND SUBJECT TO
|
||||
* CHANGE AT ANY TIME. USE AT YOUR OWN RISK.
|
||||
*
|
||||
* Copyright 2001-2007 by Easy Software Products.
|
||||
* Copyright 2001-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -48,12 +48,9 @@
|
||||
#include "debug.h"
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#ifdef WIN32
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <sys/wait.h>
|
||||
#endif /* WIN32 */
|
||||
#include <sys/wait.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -106,7 +103,7 @@ cupsAdminCreateWindowsPPD(
|
||||
linenum; /* Current line number */
|
||||
time_t curtime; /* Current time */
|
||||
struct tm *curdate; /* Current date */
|
||||
static const char * const pattrs[] = /* Printer attributes we want */
|
||||
static const char *pattrs[] = /* Printer attributes we want */
|
||||
{
|
||||
"job-hold-until-supported",
|
||||
"job-hold-until-default",
|
||||
@@ -246,7 +243,7 @@ cupsAdminCreateWindowsPPD(
|
||||
if ((ptr = strchr(line, ':')) == NULL)
|
||||
{
|
||||
snprintf(line, sizeof(line),
|
||||
_cupsLangString(language, _("Missing value on line %d!")),
|
||||
_cupsLangString(language, _("Missing value on line %d!\n")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line);
|
||||
|
||||
@@ -265,7 +262,7 @@ cupsAdminCreateWindowsPPD(
|
||||
{
|
||||
snprintf(line, sizeof(line),
|
||||
_cupsLangString(language,
|
||||
_("Missing double quote on line %d!")),
|
||||
_("Missing double quote on line %d!\n")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line);
|
||||
|
||||
@@ -284,7 +281,7 @@ cupsAdminCreateWindowsPPD(
|
||||
{
|
||||
snprintf(line, sizeof(line),
|
||||
_cupsLangString(language,
|
||||
_("Bad option + choice on line %d!")),
|
||||
_("Bad option + choice on line %d!\n")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line);
|
||||
|
||||
@@ -327,21 +324,6 @@ cupsAdminCreateWindowsPPD(
|
||||
cupsFileClose(srcfp);
|
||||
unlink(src);
|
||||
|
||||
if (linenum == 0)
|
||||
{
|
||||
snprintf(line, sizeof(line),
|
||||
_cupsLangString(language, _("Empty PPD file!")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line);
|
||||
|
||||
cupsFileClose(dstfp);
|
||||
unlink(buffer);
|
||||
|
||||
*buffer = '\0';
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now add the CUPS-specific attributes and options...
|
||||
*/
|
||||
@@ -674,7 +656,7 @@ cupsAdminExportSamba(
|
||||
{
|
||||
snprintf(message, sizeof(message),
|
||||
_cupsLangString(language,
|
||||
_("Unable to set Windows printer driver (%d)!")),
|
||||
_("Unable to set Windows printer driver (%d)!\n")),
|
||||
status);
|
||||
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message);
|
||||
@@ -790,31 +772,19 @@ _cupsAdminGetServerSettings(
|
||||
if (!value)
|
||||
continue;
|
||||
|
||||
if (!strcasecmp(line, "Port") || !strcasecmp(line, "Listen"))
|
||||
if (!strcasecmp(line, "Port"))
|
||||
{
|
||||
remote_access = 1;
|
||||
}
|
||||
else if (!strcasecmp(line, "Listen"))
|
||||
{
|
||||
char *port; /* Pointer to port number, if any */
|
||||
|
||||
|
||||
if ((port = strrchr(value, ':')) != NULL)
|
||||
*port = '\0';
|
||||
else if (isdigit(*value & 255))
|
||||
{
|
||||
/*
|
||||
* Listen on a port number implies remote access...
|
||||
*/
|
||||
|
||||
remote_access = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcasecmp(value, "localhost") && strcmp(value, "127.0.0.1")
|
||||
#ifdef AF_LOCAL
|
||||
&& *value != '/'
|
||||
#endif /* AF_LOCAL */
|
||||
#ifdef AF_INET6
|
||||
&& strcmp(value, "::1")
|
||||
#endif /* AF_INET6 */
|
||||
)
|
||||
if (strcasecmp(value, "localhost") && strcmp(value, "127.0.0.1"))
|
||||
remote_access = 1;
|
||||
}
|
||||
else if (!strcasecmp(line, "Browsing"))
|
||||
@@ -890,14 +860,7 @@ _cupsAdminGetServerSettings(
|
||||
in_location = 0;
|
||||
}
|
||||
else if (!strcasecmp(line, "Allow") && in_admin_location &&
|
||||
strcasecmp(value, "localhost") && strcasecmp(value, "127.0.0.1")
|
||||
#ifdef AF_LOCAL
|
||||
&& *value != '/'
|
||||
#endif /* AF_LOCAL */
|
||||
#ifdef AF_INET6
|
||||
&& strcmp(value, "::1")
|
||||
#endif /* AF_INET6 */
|
||||
)
|
||||
strcasecmp(value, "localhost") && strcasecmp(value, "127.0.0.1"))
|
||||
{
|
||||
remote_admin = 1;
|
||||
}
|
||||
@@ -971,8 +934,6 @@ _cupsAdminSetServerSettings(
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_status_t status; /* GET/PUT status */
|
||||
const char *server_port_env; /* SERVER_PORT env var */
|
||||
int server_port; /* IPP port for server */
|
||||
cups_file_t *cupsd; /* cupsd.conf file */
|
||||
char cupsdconf[1024]; /* cupsd.conf filename */
|
||||
int remote; /* Remote cupsd.conf file? */
|
||||
@@ -1003,11 +964,6 @@ _cupsAdminSetServerSettings(
|
||||
wrote_root_location; /* Wrote the / location? */
|
||||
int indent; /* Indentation */
|
||||
int cupsd_num_settings; /* New number of settings */
|
||||
int old_remote_printers, /* Show remote printers */
|
||||
old_share_printers, /* Share local printers */
|
||||
old_remote_admin, /* Remote administration allowed? */
|
||||
old_user_cancel_any, /* Cancel-job policy set? */
|
||||
old_debug_logging; /* LogLevel debug set? */
|
||||
cups_option_t *cupsd_settings, /* New settings */
|
||||
*setting; /* Current setting */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
@@ -1040,134 +996,39 @@ _cupsAdminSetServerSettings(
|
||||
else
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Get current settings...
|
||||
*/
|
||||
|
||||
if (!_cupsAdminGetServerSettings(http, &cupsd_num_settings,
|
||||
&cupsd_settings))
|
||||
return (0);
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, cupsd_num_settings,
|
||||
cupsd_settings)) != NULL)
|
||||
old_debug_logging = atoi(val);
|
||||
else
|
||||
old_debug_logging = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, cupsd_num_settings,
|
||||
cupsd_settings)) != NULL)
|
||||
old_remote_admin = atoi(val);
|
||||
else
|
||||
old_remote_admin = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS, cupsd_num_settings,
|
||||
cupsd_settings)) != NULL)
|
||||
old_remote_printers = atoi(val);
|
||||
else
|
||||
old_remote_printers = 1;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, cupsd_num_settings,
|
||||
cupsd_settings)) != NULL)
|
||||
old_share_printers = atoi(val);
|
||||
else
|
||||
old_share_printers = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, cupsd_num_settings,
|
||||
cupsd_settings)) != NULL)
|
||||
old_user_cancel_any = atoi(val);
|
||||
else
|
||||
old_user_cancel_any = 0;
|
||||
|
||||
cupsFreeOptions(cupsd_num_settings, cupsd_settings);
|
||||
|
||||
/*
|
||||
* Get basic settings...
|
||||
*/
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_DEBUG_LOGGING, num_settings,
|
||||
settings)) != NULL)
|
||||
{
|
||||
debug_logging = atoi(val);
|
||||
|
||||
if (debug_logging == old_debug_logging)
|
||||
{
|
||||
/*
|
||||
* No change to this setting...
|
||||
*/
|
||||
|
||||
debug_logging = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
debug_logging = -1;
|
||||
debug_logging = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_REMOTE_ADMIN, num_settings,
|
||||
settings)) != NULL)
|
||||
{
|
||||
remote_admin = atoi(val);
|
||||
|
||||
if (remote_admin == old_remote_admin)
|
||||
{
|
||||
/*
|
||||
* No change to this setting...
|
||||
*/
|
||||
|
||||
remote_admin = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
remote_admin = -1;
|
||||
remote_admin = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS, num_settings,
|
||||
settings)) != NULL)
|
||||
{
|
||||
remote_printers = atoi(val);
|
||||
|
||||
if (remote_printers == old_remote_printers)
|
||||
{
|
||||
/*
|
||||
* No change to this setting...
|
||||
*/
|
||||
|
||||
remote_printers = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
remote_printers = -1;
|
||||
remote_printers = 1;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, num_settings,
|
||||
settings)) != NULL)
|
||||
{
|
||||
share_printers = atoi(val);
|
||||
|
||||
if (share_printers == old_share_printers)
|
||||
{
|
||||
/*
|
||||
* No change to this setting...
|
||||
*/
|
||||
|
||||
share_printers = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
share_printers = -1;
|
||||
share_printers = 0;
|
||||
|
||||
if ((val = cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY, num_settings,
|
||||
settings)) != NULL)
|
||||
{
|
||||
user_cancel_any = atoi(val);
|
||||
|
||||
if (user_cancel_any == old_user_cancel_any)
|
||||
{
|
||||
/*
|
||||
* No change to this setting...
|
||||
*/
|
||||
|
||||
user_cancel_any = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
user_cancel_any = -1;
|
||||
user_cancel_any = 0;
|
||||
|
||||
/*
|
||||
* Create a temporary file for the new cupsd.conf file...
|
||||
@@ -1206,68 +1067,48 @@ _cupsAdminSetServerSettings(
|
||||
wrote_root_location = 0;
|
||||
indent = 0;
|
||||
|
||||
if ((server_port_env = getenv("SERVER_PORT")) != NULL)
|
||||
{
|
||||
if ((server_port = atoi(server_port_env)) <= 0)
|
||||
server_port = ippPort();
|
||||
}
|
||||
else
|
||||
server_port = ippPort();
|
||||
|
||||
if (server_port <= 0)
|
||||
server_port = IPP_PORT;
|
||||
|
||||
while (cupsFileGetConf(cupsd, line, sizeof(line), &value, &linenum))
|
||||
{
|
||||
if ((!strcasecmp(line, "Port") || !strcasecmp(line, "Listen")) &&
|
||||
(share_printers >= 0 || remote_admin >= 0))
|
||||
if (!strcasecmp(line, "Port") || !strcasecmp(line, "Listen"))
|
||||
{
|
||||
if (!wrote_port_listen)
|
||||
{
|
||||
wrote_port_listen = 1;
|
||||
|
||||
if (share_printers > 0 || remote_admin > 0)
|
||||
if (share_printers || remote_admin)
|
||||
{
|
||||
cupsFilePuts(temp, "# Allow remote access\n");
|
||||
cupsFilePrintf(temp, "Port %d\n", server_port);
|
||||
cupsFilePrintf(temp, "Port %d\n", ippPort());
|
||||
}
|
||||
else
|
||||
{
|
||||
cupsFilePuts(temp, "# Only listen for connections from the local "
|
||||
"machine.\n");
|
||||
cupsFilePrintf(temp, "Listen localhost:%d\n", server_port);
|
||||
cupsFilePrintf(temp, "Listen 127.0.0.1:%d\n", ippPort());
|
||||
}
|
||||
|
||||
#ifdef CUPS_DEFAULT_DOMAINSOCKET
|
||||
if ((!value || strcmp(CUPS_DEFAULT_DOMAINSOCKET, value)) &&
|
||||
!access(CUPS_DEFAULT_DOMAINSOCKET, 0))
|
||||
if (!access(CUPS_DEFAULT_DOMAINSOCKET, 0))
|
||||
cupsFilePuts(temp, "Listen " CUPS_DEFAULT_DOMAINSOCKET "\n");
|
||||
#endif /* CUPS_DEFAULT_DOMAINSOCKET */
|
||||
}
|
||||
else if (value && value[0] == '/'
|
||||
#ifdef CUPS_DEFAULT_DOMAINSOCKET
|
||||
&& strcmp(CUPS_DEFAULT_DOMAINSOCKET, value)
|
||||
#endif /* CUPS_DEFAULT_DOMAINSOCKET */
|
||||
)
|
||||
cupsFilePrintf(temp, "Listen %s\n", value);
|
||||
}
|
||||
else if ((!strcasecmp(line, "Browsing") ||
|
||||
!strcasecmp(line, "BrowseAddress") ||
|
||||
!strcasecmp(line, "BrowseAllow") ||
|
||||
!strcasecmp(line, "BrowseDeny") ||
|
||||
!strcasecmp(line, "BrowseOrder")) &&
|
||||
(remote_printers >= 0 || share_printers >= 0))
|
||||
else if (!strcasecmp(line, "Browsing") ||
|
||||
!strcasecmp(line, "BrowseAddress") ||
|
||||
!strcasecmp(line, "BrowseAllow") ||
|
||||
!strcasecmp(line, "BrowseDeny") ||
|
||||
!strcasecmp(line, "BrowseOrder"))
|
||||
{
|
||||
if (!wrote_browsing)
|
||||
{
|
||||
wrote_browsing = 1;
|
||||
|
||||
if (remote_printers > 0 || share_printers > 0)
|
||||
if (remote_printers || share_printers)
|
||||
{
|
||||
if (remote_printers > 0 && share_printers > 0)
|
||||
if (remote_printers && share_printers)
|
||||
cupsFilePuts(temp,
|
||||
"# Enable printer sharing and shared printers.\n");
|
||||
else if (remote_printers > 0)
|
||||
else if (remote_printers)
|
||||
cupsFilePuts(temp,
|
||||
"# Show shared printers on the local network.\n");
|
||||
else
|
||||
@@ -1277,10 +1118,10 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "Browsing On\n");
|
||||
cupsFilePuts(temp, "BrowseOrder allow,deny\n");
|
||||
|
||||
if (remote_printers > 0)
|
||||
if (remote_printers)
|
||||
cupsFilePuts(temp, "BrowseAllow @LOCAL\n");
|
||||
|
||||
if (share_printers > 0)
|
||||
if (share_printers)
|
||||
cupsFilePuts(temp, "BrowseAddress @LOCAL\n");
|
||||
}
|
||||
else
|
||||
@@ -1291,7 +1132,7 @@ _cupsAdminSetServerSettings(
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!strcasecmp(line, "LogLevel") && debug_logging >= 0)
|
||||
else if (!strcasecmp(line, "LogLevel"))
|
||||
{
|
||||
wrote_loglevel = 1;
|
||||
|
||||
@@ -1354,13 +1195,13 @@ _cupsAdminSetServerSettings(
|
||||
{
|
||||
in_location = 0;
|
||||
indent -= 2;
|
||||
if (in_admin_location && remote_admin >= 0)
|
||||
if (in_admin_location)
|
||||
{
|
||||
wrote_admin_location = 1;
|
||||
|
||||
if (remote_admin)
|
||||
cupsFilePuts(temp, " # Allow remote administration...\n");
|
||||
else if (remote_admin == 0)
|
||||
else
|
||||
cupsFilePuts(temp, " # Restrict access to the admin pages...\n");
|
||||
|
||||
cupsFilePuts(temp, " Order allow,deny\n");
|
||||
@@ -1370,7 +1211,7 @@ _cupsAdminSetServerSettings(
|
||||
else
|
||||
cupsFilePuts(temp, " Allow localhost\n");
|
||||
}
|
||||
else if (in_conf_location && remote_admin >= 0)
|
||||
else if (in_conf_location)
|
||||
{
|
||||
wrote_conf_location = 1;
|
||||
|
||||
@@ -1388,23 +1229,23 @@ _cupsAdminSetServerSettings(
|
||||
else
|
||||
cupsFilePuts(temp, " Allow localhost\n");
|
||||
}
|
||||
else if (in_root_location && (remote_admin >= 0 || share_printers >= 0))
|
||||
else if (in_root_location)
|
||||
{
|
||||
wrote_root_location = 1;
|
||||
|
||||
if (remote_admin > 0 && share_printers > 0)
|
||||
if (remote_admin && share_printers)
|
||||
cupsFilePuts(temp, " # Allow shared printing and remote "
|
||||
"administration...\n");
|
||||
else if (remote_admin > 0)
|
||||
else if (remote_admin)
|
||||
cupsFilePuts(temp, " # Allow remote administration...\n");
|
||||
else if (share_printers > 0)
|
||||
else if (share_printers)
|
||||
cupsFilePuts(temp, " # Allow shared printing...\n");
|
||||
else
|
||||
cupsFilePuts(temp, " # Restrict access to the server...\n");
|
||||
|
||||
cupsFilePuts(temp, " Order allow,deny\n");
|
||||
|
||||
if (remote_admin > 0 || share_printers > 0)
|
||||
if (remote_admin || share_printers)
|
||||
cupsFilePuts(temp, " Allow @LOCAL\n");
|
||||
else
|
||||
cupsFilePuts(temp, " Allow localhost\n");
|
||||
@@ -1427,7 +1268,7 @@ _cupsAdminSetServerSettings(
|
||||
|
||||
indent += 2;
|
||||
|
||||
if (!strcasecmp(value, "cancel-job") && user_cancel_any >= 0)
|
||||
if (!strcasecmp(value, "cancel-job"))
|
||||
{
|
||||
/*
|
||||
* Don't write anything for this limit section...
|
||||
@@ -1446,7 +1287,7 @@ _cupsAdminSetServerSettings(
|
||||
if (*valptr)
|
||||
*valptr++ = '\0';
|
||||
|
||||
if (!strcasecmp(value, "cancel-job") && user_cancel_any >= 0)
|
||||
if (!strcasecmp(value, "cancel-job"))
|
||||
{
|
||||
/*
|
||||
* Write everything except for this definition...
|
||||
@@ -1482,9 +1323,7 @@ _cupsAdminSetServerSettings(
|
||||
|
||||
in_cancel_job = 0;
|
||||
}
|
||||
else if ((((in_admin_location || in_conf_location || in_root_location) &&
|
||||
remote_admin >= 0) ||
|
||||
(in_root_location && share_printers >= 0)) &&
|
||||
else if ((in_admin_location || in_conf_location || in_root_location) &&
|
||||
(!strcasecmp(line, "Allow") || !strcasecmp(line, "Deny") ||
|
||||
!strcasecmp(line, "Order")))
|
||||
continue;
|
||||
@@ -1508,13 +1347,14 @@ _cupsAdminSetServerSettings(
|
||||
}
|
||||
}
|
||||
else if (!in_policy && !in_location &&
|
||||
(val = cupsGetOption(line, num_settings, settings)) != NULL)
|
||||
(val = cupsGetOption(line, num_settings, settings)) != NULL &&
|
||||
!cupsGetOption(line, cupsd_num_settings, cupsd_settings))
|
||||
{
|
||||
/*
|
||||
* Replace this directive's value with the new one...
|
||||
* Add this directive to the list of directives we have written...
|
||||
*/
|
||||
|
||||
cupsd_num_settings = cupsAddOption(line, val, cupsd_num_settings,
|
||||
cupsd_num_settings = cupsAddOption(line, value, cupsd_num_settings,
|
||||
&cupsd_settings);
|
||||
|
||||
/*
|
||||
@@ -1522,7 +1362,7 @@ _cupsAdminSetServerSettings(
|
||||
* only support setting root directives, not in sections...
|
||||
*/
|
||||
|
||||
cupsFilePrintf(temp, "%s %s\n", line, val);
|
||||
cupsFilePrintf(temp, "%s %s\n", line, value);
|
||||
}
|
||||
else if (value)
|
||||
{
|
||||
@@ -1548,13 +1388,13 @@ _cupsAdminSetServerSettings(
|
||||
* Write any missing info...
|
||||
*/
|
||||
|
||||
if (!wrote_browsing && (remote_printers >= 0 || share_printers >= 0))
|
||||
if (!wrote_browsing)
|
||||
{
|
||||
if (remote_printers > 0 || share_printers > 0)
|
||||
if (remote_printers || share_printers)
|
||||
{
|
||||
if (remote_printers > 0 && share_printers > 0)
|
||||
if (remote_printers && share_printers)
|
||||
cupsFilePuts(temp, "# Enable printer sharing and shared printers.\n");
|
||||
else if (remote_printers > 0)
|
||||
else if (remote_printers)
|
||||
cupsFilePuts(temp, "# Show shared printers on the local network.\n");
|
||||
else
|
||||
cupsFilePuts(temp, "# Share local printers on the local network.\n");
|
||||
@@ -1562,10 +1402,10 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "Browsing On\n");
|
||||
cupsFilePuts(temp, "BrowseOrder allow,deny\n");
|
||||
|
||||
if (remote_printers > 0)
|
||||
if (remote_printers)
|
||||
cupsFilePuts(temp, "BrowseAllow @LOCAL\n");
|
||||
|
||||
if (share_printers > 0)
|
||||
if (share_printers)
|
||||
cupsFilePuts(temp, "BrowseAddress @LOCAL\n");
|
||||
}
|
||||
else
|
||||
@@ -1575,7 +1415,7 @@ _cupsAdminSetServerSettings(
|
||||
}
|
||||
}
|
||||
|
||||
if (!wrote_loglevel && debug_logging >= 0)
|
||||
if (!wrote_loglevel)
|
||||
{
|
||||
if (debug_logging)
|
||||
{
|
||||
@@ -1589,9 +1429,9 @@ _cupsAdminSetServerSettings(
|
||||
}
|
||||
}
|
||||
|
||||
if (!wrote_port_listen && (share_printers >= 0 || remote_admin >= 0))
|
||||
if (!wrote_port_listen)
|
||||
{
|
||||
if (share_printers > 0 || remote_admin > 0)
|
||||
if (share_printers || remote_admin)
|
||||
{
|
||||
cupsFilePuts(temp, "# Allow remote access\n");
|
||||
cupsFilePrintf(temp, "Port %d\n", ippPort());
|
||||
@@ -1600,7 +1440,7 @@ _cupsAdminSetServerSettings(
|
||||
{
|
||||
cupsFilePuts(temp,
|
||||
"# Only listen for connections from the local machine.\n");
|
||||
cupsFilePrintf(temp, "Listen localhost:%d\n", ippPort());
|
||||
cupsFilePrintf(temp, "Listen 127.0.0.1:%d\n", ippPort());
|
||||
}
|
||||
|
||||
#ifdef CUPS_DEFAULT_DOMAINSOCKET
|
||||
@@ -1609,14 +1449,14 @@ _cupsAdminSetServerSettings(
|
||||
#endif /* CUPS_DEFAULT_DOMAINSOCKET */
|
||||
}
|
||||
|
||||
if (!wrote_root_location && (remote_admin >= 0 || share_printers >= 0))
|
||||
if (!wrote_root_location)
|
||||
{
|
||||
if (remote_admin > 0 && share_printers > 0)
|
||||
if (remote_admin && share_printers)
|
||||
cupsFilePuts(temp,
|
||||
"# Allow shared printing and remote administration...\n");
|
||||
else if (remote_admin > 0)
|
||||
else if (remote_admin)
|
||||
cupsFilePuts(temp, "# Allow remote administration...\n");
|
||||
else if (share_printers > 0)
|
||||
else if (share_printers)
|
||||
cupsFilePuts(temp, "# Allow shared printing...\n");
|
||||
else
|
||||
cupsFilePuts(temp, "# Restrict access to the server...\n");
|
||||
@@ -1624,7 +1464,7 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "<Location />\n"
|
||||
" Order allow,deny\n");
|
||||
|
||||
if (remote_admin > 0 || share_printers > 0)
|
||||
if (remote_admin || share_printers)
|
||||
cupsFilePuts(temp, " Allow @LOCAL\n");
|
||||
else
|
||||
cupsFilePuts(temp, " Allow localhost\n");
|
||||
@@ -1632,7 +1472,7 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "</Location>\n");
|
||||
}
|
||||
|
||||
if (!wrote_admin_location && remote_admin >= 0)
|
||||
if (!wrote_admin_location)
|
||||
{
|
||||
if (remote_admin)
|
||||
cupsFilePuts(temp, "# Allow remote administration...\n");
|
||||
@@ -1650,7 +1490,7 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "</Location>\n");
|
||||
}
|
||||
|
||||
if (!wrote_conf_location && remote_admin >= 0)
|
||||
if (!wrote_conf_location)
|
||||
{
|
||||
if (remote_admin)
|
||||
cupsFilePuts(temp,
|
||||
@@ -1671,7 +1511,7 @@ _cupsAdminSetServerSettings(
|
||||
cupsFilePuts(temp, "</Location>\n");
|
||||
}
|
||||
|
||||
if (!wrote_policy && user_cancel_any >= 0)
|
||||
if (!wrote_policy)
|
||||
{
|
||||
cupsFilePuts(temp, "<Policy default>\n"
|
||||
" # Job-related operations must be done by the owner "
|
||||
@@ -1728,8 +1568,8 @@ _cupsAdminSetServerSettings(
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
/*
|
||||
* Write the new value, without indentation since we only support
|
||||
* setting root directives, not in sections...
|
||||
* Write the new value in its place, without indentation since we
|
||||
* only support setting root directives, not in sections...
|
||||
*/
|
||||
|
||||
cupsFilePrintf(temp, "%s %s\n", setting->name, setting->value);
|
||||
@@ -1750,50 +1590,21 @@ _cupsAdminSetServerSettings(
|
||||
* Updated OK, add the basic settings...
|
||||
*/
|
||||
|
||||
if (debug_logging >= 0)
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
debug_logging ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
else
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
old_debug_logging ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
if (remote_admin >= 0)
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
remote_admin ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
else
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
old_remote_admin ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
if (remote_printers >= 0)
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
remote_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
else
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
old_remote_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
if (share_printers >= 0)
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
share_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
else
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
old_share_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
if (user_cancel_any >= 0)
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
user_cancel_any ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
else
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
old_user_cancel_any ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
|
||||
debug_logging ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
|
||||
remote_admin ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
|
||||
remote_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
|
||||
share_printers ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
cupsd_num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
|
||||
user_cancel_any ? "1" : "0",
|
||||
cupsd_num_settings, &cupsd_settings);
|
||||
|
||||
/*
|
||||
* Save the new values...
|
||||
@@ -1834,10 +1645,6 @@ do_samba_command(const char *command, /* I - Command to run */
|
||||
const char *authfile, /* I - Samba authentication file */
|
||||
FILE *logfile) /* I - Optional log file */
|
||||
{
|
||||
#ifdef WIN32
|
||||
return (1); /* Always fail on Windows... */
|
||||
|
||||
#else
|
||||
int status; /* Status of command */
|
||||
int pid; /* Process ID of child */
|
||||
|
||||
@@ -1896,7 +1703,6 @@ do_samba_command(const char *command, /* I - Command to run */
|
||||
return (WEXITSTATUS(status));
|
||||
else
|
||||
return (-WTERMSIG(status));
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
@@ -1914,9 +1720,7 @@ get_cupsd_conf(
|
||||
int *remote) /* O - Remote file? */
|
||||
{
|
||||
int fd; /* Temporary file descriptor */
|
||||
#ifndef WIN32
|
||||
struct stat info; /* cupsd.conf file information */
|
||||
#endif /* WIN32 */
|
||||
http_status_t status; /* Status of getting cupsd.conf */
|
||||
char host[HTTP_MAX_HOST]; /* Hostname for connection */
|
||||
|
||||
@@ -1933,7 +1737,6 @@ get_cupsd_conf(
|
||||
snprintf(name, namesize, "%s/cupsd.conf", cg->cups_serverroot);
|
||||
*remote = 0;
|
||||
|
||||
#ifndef WIN32
|
||||
if (!strcasecmp(host, "localhost") && !access(name, R_OK))
|
||||
{
|
||||
/*
|
||||
@@ -1960,13 +1763,12 @@ get_cupsd_conf(
|
||||
status = HTTP_OK;
|
||||
}
|
||||
else
|
||||
#endif /* !WIN32 */
|
||||
{
|
||||
/*
|
||||
* Read cupsd.conf via a HTTP GET request...
|
||||
*/
|
||||
|
||||
if ((fd = cupsTempFd(name, namesize)) < 0)
|
||||
if ((fd = cupsTempFd(name, sizeof(name))) < 0)
|
||||
{
|
||||
*name = '\0';
|
||||
|
||||
|
||||
+6
-40
@@ -44,19 +44,14 @@
|
||||
* @since CUPS 1.1.19@
|
||||
*/
|
||||
|
||||
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 * /* 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 */
|
||||
*attr; /* Current attribute */
|
||||
int diff; /* Current difference */
|
||||
ppd_attr_t key; /* Search key */
|
||||
|
||||
|
||||
DEBUG_printf(("ppdFindAttr(ppd=%p, name=\"%s\", spec=\"%s\")\n", ppd,
|
||||
name ? name : "(null)", spec ? spec : "(null)"));
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
@@ -77,36 +72,7 @@ ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */
|
||||
* Return the first matching attribute, if any...
|
||||
*/
|
||||
|
||||
if ((attr = (ppd_attr_t *)cupsArrayFind(ppd->sorted_attrs, &key)) != NULL)
|
||||
return (attr);
|
||||
else if (spec)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* No match found, loop through the sorted attributes to see if we can
|
||||
* find a "wildcard" match for the attribute...
|
||||
*/
|
||||
|
||||
for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs);
|
||||
attr;
|
||||
attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs))
|
||||
{
|
||||
if ((diff = strcasecmp(attr->name, name)) == 0)
|
||||
break;
|
||||
|
||||
if (diff > 0)
|
||||
{
|
||||
/*
|
||||
* All remaining attributes are > than the one we are trying to find...
|
||||
*/
|
||||
|
||||
cupsArrayIndex(ppd->sorted_attrs, cupsArrayCount(ppd->sorted_attrs));
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return (attr);
|
||||
return ((ppd_attr_t *)cupsArrayFind(ppd->sorted_attrs, &key));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+4
-14
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Authentication functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -75,15 +75,12 @@ cupsDoAuthentication(http_t *http, /* I - HTTP connection to server */
|
||||
realm[HTTP_MAX_VALUE], /* realm="xyz" string */
|
||||
nonce[HTTP_MAX_VALUE], /* nonce="xyz" string */
|
||||
encode[512]; /* Encoded username:password */
|
||||
_cups_globals_t *cg; /* Global data */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsDoAuthentication(http=%p, method=\"%s\", resource=\"%s\")\n",
|
||||
http, method, resource));
|
||||
DEBUG_printf(("cupsDoAuthentication: digest_tries=%d, userpass=\"%s\"\n",
|
||||
http->digest_tries, http->userpass));
|
||||
DEBUG_printf(("cupsDoAuthentication: WWW-Authenticate=\"%s\"\n",
|
||||
httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE)));
|
||||
|
||||
/*
|
||||
* Clear the current authentication string...
|
||||
@@ -115,15 +112,8 @@ cupsDoAuthentication(http_t *http, /* I - HTTP connection to server */
|
||||
* Nope - get a new password from the user...
|
||||
*/
|
||||
|
||||
cg = _cupsGlobals();
|
||||
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
snprintf(prompt, sizeof(prompt),
|
||||
_cupsLangString(cg->lang_default, _("Password for %s on %s? ")),
|
||||
cupsUser(),
|
||||
http->hostname[0] == '/' ? "localhost" : http->hostname);
|
||||
snprintf(prompt, sizeof(prompt), _("Password for %s on %s? "), cupsUser(),
|
||||
http->hostname[0] == '/' ? "localhost" : http->hostname);
|
||||
|
||||
http->digest_tries = strncasecmp(http->fields[HTTP_FIELD_WWW_AUTHENTICATE],
|
||||
"Digest", 5) != 0;
|
||||
@@ -152,7 +142,7 @@ cupsDoAuthentication(http_t *http, /* I - HTTP connection to server */
|
||||
*/
|
||||
|
||||
httpEncode64_2(encode, sizeof(encode), http->userpass,
|
||||
(int)strlen(http->userpass));
|
||||
strlen(http->userpass));
|
||||
snprintf(http->authstring, sizeof(http->authstring), "Basic %s", encode);
|
||||
}
|
||||
else
|
||||
|
||||
+2
-10
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Backchannel functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -95,11 +95,7 @@ cupsBackChannelRead(char *buffer, /* I - Buffer to read */
|
||||
* Read bytes from the pipe...
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
return ((ssize_t)read(3, buffer, (unsigned)bytes));
|
||||
#else
|
||||
return (read(3, buffer, bytes));
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
@@ -157,11 +153,7 @@ cupsBackChannelWrite(
|
||||
* Write bytes to the pipe...
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
count = (ssize_t)write(3, buffer, (unsigned)(bytes - total));
|
||||
#else
|
||||
count = write(3, buffer, bytes - total);
|
||||
#endif /* WIN32 */
|
||||
|
||||
if (count < 0)
|
||||
{
|
||||
@@ -183,7 +175,7 @@ cupsBackChannelWrite(
|
||||
}
|
||||
}
|
||||
|
||||
return ((ssize_t)bytes);
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-10
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* API definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -31,13 +31,6 @@
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <sys/types.h>
|
||||
# if defined(WIN32) && !defined(__CUPS_SSIZE_T_DEFINED)
|
||||
# define __CUPS_SSIZE_T_DEFINED
|
||||
/* Windows does not support the ssize_t type, so map it to off_t... */
|
||||
typedef off_t ssize_t; /* @private@ */
|
||||
# endif /* WIN32 && !__CUPS_SSIZE_T_DEFINED */
|
||||
|
||||
# include "ipp.h"
|
||||
# include "ppd.h"
|
||||
# include "language.h"
|
||||
@@ -68,10 +61,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0210
|
||||
# define CUPS_VERSION 1.0200
|
||||
# define CUPS_VERSION_MAJOR 1
|
||||
# define CUPS_VERSION_MINOR 2
|
||||
# define CUPS_VERSION_PATCH 10
|
||||
# define CUPS_VERSION_PATCH 0
|
||||
# define CUPS_DATE_ANY -1
|
||||
|
||||
|
||||
|
||||
+14
-58
@@ -4,7 +4,7 @@
|
||||
* User-defined destination (and option) support for the Common UNIX
|
||||
* Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -64,31 +64,21 @@ static int cups_get_sdests(http_t *http, ipp_op_t op, int num_dests,
|
||||
/*
|
||||
* 'cupsAddDest()' - Add a destination to the list of destinations.
|
||||
*
|
||||
* This function cannot be used to add a new class or printer queue,
|
||||
* it only adds a new container of saved options for the named
|
||||
* destination or instance.
|
||||
*
|
||||
* If the named destination already exists, the destination list is
|
||||
* returned unchanged. Adding a new instance of a destination creates
|
||||
* a copy of that destination's options.
|
||||
*
|
||||
* Use the cupsSaveDests() function to save the updated list of
|
||||
* destinations to the user's lpoptions file.
|
||||
* Use the cupsSaveDests() function to save the updated list of destinations
|
||||
* to the user's lpoptions file.
|
||||
*/
|
||||
|
||||
int /* O - New number of destinations */
|
||||
cupsAddDest(const char *name, /* I - Destination name */
|
||||
const char *instance, /* I - Instance name or NULL for none/primary */
|
||||
cupsAddDest(const char *name, /* I - Name of destination */
|
||||
const char *instance, /* I - Instance of destination or NULL for none/primary */
|
||||
int num_dests, /* I - Number of destinations */
|
||||
cups_dest_t **dests) /* IO - Destinations */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
cups_dest_t *dest; /* Destination pointer */
|
||||
cups_dest_t *parent; /* Parent destination */
|
||||
cups_option_t *option; /* Current option */
|
||||
|
||||
|
||||
if (!name || !dests)
|
||||
if (name == NULL || dests == NULL)
|
||||
return (0);
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, num_dests, *dests)) != NULL)
|
||||
@@ -108,53 +98,27 @@ cupsAddDest(const char *name, /* I - Destination name */
|
||||
|
||||
*dests = dest;
|
||||
|
||||
/*
|
||||
* Find where to insert the destination...
|
||||
*/
|
||||
|
||||
for (i = num_dests; i > 0; i --, dest ++)
|
||||
if (strcasecmp(name, dest->name) < 0)
|
||||
break;
|
||||
else if (!instance && dest->instance)
|
||||
break;
|
||||
else if (!strcasecmp(name, dest->name) &&
|
||||
instance && dest->instance &&
|
||||
instance != NULL && dest->instance != NULL &&
|
||||
strcasecmp(instance, dest->instance) < 0)
|
||||
break;
|
||||
|
||||
if (i > 0)
|
||||
memmove(dest + 1, dest, i * sizeof(cups_dest_t));
|
||||
|
||||
/*
|
||||
* Initialize the destination...
|
||||
*/
|
||||
|
||||
dest->name = strdup(name);
|
||||
dest->is_default = 0;
|
||||
dest->num_options = 0;
|
||||
dest->options = (cups_option_t *)0;
|
||||
|
||||
if (!instance)
|
||||
if (instance == NULL)
|
||||
dest->instance = NULL;
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Copy options from the primary instance...
|
||||
*/
|
||||
|
||||
dest->instance = strdup(instance);
|
||||
|
||||
if ((parent = cupsGetDest(name, NULL, num_dests + 1, *dests)) != NULL)
|
||||
{
|
||||
for (i = parent->num_options, option = parent->options;
|
||||
i > 0;
|
||||
i --, option ++)
|
||||
dest->num_options = cupsAddOption(option->name, option->value,
|
||||
dest->num_options,
|
||||
&(dest->options));
|
||||
}
|
||||
}
|
||||
|
||||
return (num_dests + 1);
|
||||
}
|
||||
|
||||
@@ -196,18 +160,18 @@ cupsFreeDests(int num_dests, /* I - Number of destinations */
|
||||
*/
|
||||
|
||||
cups_dest_t * /* O - Destination pointer or NULL */
|
||||
cupsGetDest(const char *name, /* I - Destination name or NULL for the default destination */
|
||||
const char *instance, /* I - Instance name or NULL */
|
||||
cupsGetDest(const char *name, /* I - Name of destination */
|
||||
const char *instance, /* I - Instance of destination */
|
||||
int num_dests, /* I - Number of destinations */
|
||||
cups_dest_t *dests) /* I - Destinations */
|
||||
{
|
||||
int comp; /* Result of comparison */
|
||||
|
||||
|
||||
if (num_dests <= 0 || !dests)
|
||||
if (num_dests == 0 || dests == NULL)
|
||||
return (NULL);
|
||||
|
||||
if (!name)
|
||||
if (name == NULL)
|
||||
{
|
||||
/*
|
||||
* NULL name for default printer.
|
||||
@@ -234,9 +198,9 @@ cupsGetDest(const char *name, /* I - Destination name or NULL for the default
|
||||
return (NULL);
|
||||
else if (comp == 0)
|
||||
{
|
||||
if ((!instance && !dests->instance) ||
|
||||
if ((instance == NULL && dests->instance == NULL) ||
|
||||
(instance != NULL && dests->instance != NULL &&
|
||||
!strcasecmp(instance, dests->instance)))
|
||||
strcasecmp(instance, dests->instance) == 0))
|
||||
return (dests);
|
||||
}
|
||||
|
||||
@@ -256,9 +220,6 @@ cupsGetDest(const char *name, /* I - Destination name or NULL for the default
|
||||
* printer-info, printer-is-accepting-jobs, printer-is-shared,
|
||||
* printer-make-and-model, printer-state, printer-state-change-time,
|
||||
* printer-state-reasons, and printer-type attributes as options.
|
||||
*
|
||||
* Use the cupsFreeDests() function to free the destination list and
|
||||
* the cupsGetDest() function to find a particular destination.
|
||||
*/
|
||||
|
||||
int /* O - Number of destinations */
|
||||
@@ -291,9 +252,6 @@ cupsGetDests(cups_dest_t **dests) /* O - Destinations */
|
||||
* printer-make-and-model, printer-state, printer-state-change-time,
|
||||
* printer-state-reasons, and printer-type attributes as options.
|
||||
*
|
||||
* Use the cupsFreeDests() function to free the destination list and
|
||||
* the cupsGetDest() function to find a particular destination.
|
||||
*
|
||||
* @since CUPS 1.1.21@
|
||||
*/
|
||||
|
||||
@@ -500,9 +458,7 @@ cupsSetDests2(http_t *http, /* I - HTTP connection */
|
||||
cups_option_t *option; /* Current option */
|
||||
_ipp_option_t *match; /* Matching attribute for option */
|
||||
FILE *fp; /* File pointer */
|
||||
#ifndef WIN32
|
||||
const char *home; /* HOME environment variable */
|
||||
#endif /* WIN32 */
|
||||
char filename[1024]; /* lpoptions file */
|
||||
int num_temps; /* Number of temporary destinations */
|
||||
cups_dest_t *temps, /* Temporary destinations */
|
||||
|
||||
+24
-53
@@ -347,12 +347,10 @@ cupsDirOpen(const char *directory) /* I - Directory name */
|
||||
cups_dentry_t * /* O - Directory entry */
|
||||
cupsDirRead(cups_dir_t *dp) /* I - Directory */
|
||||
{
|
||||
struct dirent *entry; /* Pointer to entry */
|
||||
char filename[1024]; /* Full filename */
|
||||
# ifdef HAVE_PTHREAD_H
|
||||
char buffer[sizeof(struct dirent) + 1024];
|
||||
/* Directory entry buffer */
|
||||
# endif /* HAVE_PTHREAD_H */
|
||||
struct dirent *entry; /* Pointer to entry */
|
||||
char filename[1024]; /* Full filename */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsDirRead(dp=%p)\n", dp));
|
||||
@@ -368,13 +366,8 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory */
|
||||
* Try reading an entry that is not "." or ".."...
|
||||
*/
|
||||
|
||||
for (;;)
|
||||
do
|
||||
{
|
||||
# ifdef HAVE_PTHREAD_H
|
||||
/*
|
||||
* Read the next entry using the reentrant version of readdir...
|
||||
*/
|
||||
|
||||
if (readdir_r(dp->dir, (struct dirent *)buffer, &entry))
|
||||
{
|
||||
DEBUG_printf((" readdir_r() failed - %s\n", strerror(errno)));
|
||||
@@ -388,50 +381,28 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory */
|
||||
}
|
||||
|
||||
DEBUG_printf((" readdir_r() returned \"%s\"...\n", entry->d_name));
|
||||
|
||||
# else
|
||||
/*
|
||||
* Read the next entry using the original version of readdir...
|
||||
*/
|
||||
|
||||
if ((entry = readdir(dp->dir)) == NULL)
|
||||
{
|
||||
DEBUG_puts(" readdir() returned a NULL pointer!");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
DEBUG_printf((" readdir() returned \"%s\"...\n", entry->d_name));
|
||||
|
||||
# endif /* HAVE_PTHREAD_H */
|
||||
|
||||
/*
|
||||
* Skip "." and ".."...
|
||||
*/
|
||||
|
||||
if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, ".."))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Copy the name over and get the file information...
|
||||
*/
|
||||
|
||||
strlcpy(dp->entry.filename, entry->d_name, sizeof(dp->entry.filename));
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/%s", dp->directory, entry->d_name);
|
||||
|
||||
if (stat(filename, &(dp->entry.fileinfo)))
|
||||
{
|
||||
DEBUG_printf((" stat() failed for \"%s\" - %s...\n", filename,
|
||||
strerror(errno)));
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the entry...
|
||||
*/
|
||||
|
||||
return (&(dp->entry));
|
||||
}
|
||||
while (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, ".."));
|
||||
|
||||
/*
|
||||
* Copy the name over and get the file information...
|
||||
*/
|
||||
|
||||
strlcpy(dp->entry.filename, entry->d_name, sizeof(dp->entry.filename));
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/%s", dp->directory, entry->d_name);
|
||||
if (stat(filename, &(dp->entry.fileinfo)))
|
||||
{
|
||||
DEBUG_printf((" stat() failed for \"%s\" - %s...\n", filename,
|
||||
strerror(errno)));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the entry...
|
||||
*/
|
||||
|
||||
return (&(dp->entry));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+5
-5
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* This set of APIs abstracts enumeration of directory entries.
|
||||
*
|
||||
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2005 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
|
||||
@@ -39,9 +39,9 @@
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
@@ -67,9 +67,9 @@ extern cups_dentry_t *cupsDirRead(cups_dir_t *dp);
|
||||
extern void cupsDirRewind(cups_dir_t *dp);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
#endif /* !_CUPS_DIR_H_ */
|
||||
|
||||
/*
|
||||
|
||||
+5
-11
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD code emission routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -291,11 +291,7 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
|
||||
while (buflength > 0)
|
||||
{
|
||||
#ifdef WIN32
|
||||
if ((bytes = (ssize_t)write(fd, bufptr, (unsigned)buflength)) < 0)
|
||||
#else
|
||||
if ((bytes = write(fd, bufptr, buflength)) < 0)
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
if (errno == EAGAIN || errno == EINTR)
|
||||
continue;
|
||||
@@ -395,8 +391,8 @@ ppdEmitJCL(ppd_file_t *ppd, /* I - PPD file record */
|
||||
title = ptr + 1;
|
||||
|
||||
/*
|
||||
* Replace double quotes with single quotes and 8-bit characters with
|
||||
* question marks so that the title does not cause a PJL syntax error.
|
||||
* Replace double quotes with single quotes so that the title
|
||||
* does not cause a PJL syntax error.
|
||||
*/
|
||||
|
||||
strlcpy(temp, title, sizeof(temp));
|
||||
@@ -404,8 +400,6 @@ ppdEmitJCL(ppd_file_t *ppd, /* I - PPD file record */
|
||||
for (ptr = temp; *ptr; ptr ++)
|
||||
if (*ptr == '\"')
|
||||
*ptr = '\'';
|
||||
else if (*ptr & 128)
|
||||
*ptr = '?';
|
||||
|
||||
/*
|
||||
* Send PJL JOB and PJL RDYMSG commands before we enter PostScript mode...
|
||||
@@ -729,7 +723,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
else
|
||||
pos = 4;
|
||||
|
||||
values[pos] = (float)orientation;
|
||||
values[pos] = orientation;
|
||||
|
||||
for (pos = 0; pos < 5; pos ++)
|
||||
{
|
||||
@@ -815,7 +809,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
|
||||
|
||||
if (choices[i]->code && choices[i]->code[0])
|
||||
{
|
||||
j = (int)strlen(choices[i]->code);
|
||||
j = strlen(choices[i]->code);
|
||||
memcpy(bufptr, choices[i]->code, j);
|
||||
bufptr += j;
|
||||
|
||||
|
||||
+5
-5
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Option encoding routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -82,10 +82,10 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ "natural-scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ "notify-charset", IPP_TAG_CHARSET, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-events", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-lease-duration", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-lease-time", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-pull-method", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-recipient-uri", IPP_TAG_URI, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-recipient", IPP_TAG_URI, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-time-interval", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION },
|
||||
{ "notify-user-data", IPP_TAG_STRING, IPP_TAG_SUBSCRIPTION },
|
||||
{ "number-up", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
@@ -265,7 +265,7 @@ cupsEncodeOptions2(
|
||||
int namelen; /* Length of name */
|
||||
|
||||
|
||||
namelen = (int)strlen(option->name);
|
||||
namelen = strlen(option->name);
|
||||
|
||||
if (namelen < 9 || strcmp(option->name + namelen - 8, "-default"))
|
||||
{
|
||||
@@ -500,7 +500,7 @@ cupsEncodeOptions2(
|
||||
* octet-string
|
||||
*/
|
||||
|
||||
attr->values[j].unknown.length = (int)strlen(val);
|
||||
attr->values[j].unknown.length = strlen(val);
|
||||
attr->values[j].unknown.data = _cupsStrAlloc(val);
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions2: Added octet-string value \"%s\"...\n",
|
||||
|
||||
+33
-88
@@ -8,7 +8,7 @@
|
||||
* our own file functions allows us to provide transparent support of
|
||||
* gzip'd print files, PPD files, etc.
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -94,16 +94,6 @@
|
||||
#endif /* !O_LARGEFILE */
|
||||
|
||||
|
||||
/*
|
||||
* Some operating systems don't define O_BINARY, which is used by Microsoft
|
||||
* and IBM to flag binary files...
|
||||
*/
|
||||
|
||||
#ifndef O_BINARY
|
||||
# define O_BINARY 0
|
||||
#endif /* !O_BINARY */
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
@@ -342,11 +332,7 @@ cupsFileFind(const char *filename, /* I - File to find */
|
||||
|
||||
while (*path)
|
||||
{
|
||||
#ifdef WIN32
|
||||
if (*path == ';' || (*path == ':' && ((bufptr - buffer) > 1 || !isalpha(buffer[0] & 255))))
|
||||
#else
|
||||
if (*path == ';' || *path == ':')
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
if (bufptr > buffer && bufptr[-1] != '/' && bufptr < bufend)
|
||||
*bufptr++ = '/';
|
||||
@@ -358,10 +344,7 @@ cupsFileFind(const char *filename, /* I - File to find */
|
||||
#else
|
||||
if (!access(buffer, executable ? X_OK : 0))
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
DEBUG_printf(("cupsFileFind: Returning \"%s\"\n", buffer));
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
bufptr = buffer;
|
||||
}
|
||||
@@ -381,15 +364,9 @@ cupsFileFind(const char *filename, /* I - File to find */
|
||||
strlcpy(bufptr, filename, bufend - bufptr);
|
||||
|
||||
if (!access(buffer, 0))
|
||||
{
|
||||
DEBUG_printf(("cupsFileFind: Returning \"%s\"\n", buffer));
|
||||
return (buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("cupsFileFind: Returning NULL");
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -400,7 +377,7 @@ cupsFileFind(const char *filename, /* I - File to find */
|
||||
int /* O - 0 on success, -1 on error */
|
||||
cupsFileFlush(cups_file_t *fp) /* I - CUPS file */
|
||||
{
|
||||
ssize_t bytes; /* Bytes to write */
|
||||
size_t bytes; /* Bytes to write */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsFileFlush(fp=%p)\n", fp));
|
||||
@@ -415,7 +392,7 @@ cupsFileFlush(cups_file_t *fp) /* I - CUPS file */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
bytes = (ssize_t)(fp->ptr - fp->buf);
|
||||
bytes = fp->ptr - fp->buf;
|
||||
|
||||
DEBUG_printf((" Flushing %ld bytes...\n", (long)bytes));
|
||||
|
||||
@@ -450,10 +427,7 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */
|
||||
*/
|
||||
|
||||
if (!fp || (fp->mode != 'r' && fp->mode != 's'))
|
||||
{
|
||||
DEBUG_puts("cupsFileGetChar: Bad arguments!");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the input buffer is empty, try to read more data...
|
||||
@@ -461,17 +435,12 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */
|
||||
|
||||
if (fp->ptr >= fp->end)
|
||||
if (cups_fill(fp) < 0)
|
||||
{
|
||||
DEBUG_puts("cupsFileGetChar: Unable to fill buffer!");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the next character in the buffer...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("cupsFileGetChar: Returning %d...\n", *(fp->ptr) & 255));
|
||||
|
||||
return (*(fp->ptr)++ & 255);
|
||||
}
|
||||
|
||||
@@ -508,7 +477,7 @@ cupsFileGetConf(cups_file_t *fp, /* I - CUPS file */
|
||||
*/
|
||||
|
||||
*value = NULL;
|
||||
|
||||
|
||||
while (cupsFileGets(fp, buf, buflen))
|
||||
{
|
||||
(*linenum) ++;
|
||||
@@ -519,24 +488,15 @@ cupsFileGetConf(cups_file_t *fp, /* I - CUPS file */
|
||||
|
||||
if ((ptr = strchr(buf, '#')) != NULL)
|
||||
{
|
||||
if (ptr > buf && ptr[-1] == '\\')
|
||||
while (ptr > buf)
|
||||
{
|
||||
// Unquote the #...
|
||||
_cups_strcpy(ptr - 1, ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Strip the comment and any trailing whitespace...
|
||||
while (ptr > buf)
|
||||
{
|
||||
if (!isspace(ptr[-1] & 255))
|
||||
break;
|
||||
if (!isspace(ptr[-1] & 255))
|
||||
break;
|
||||
|
||||
ptr --;
|
||||
}
|
||||
|
||||
*ptr = '\0';
|
||||
ptr --;
|
||||
}
|
||||
|
||||
*ptr = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -820,15 +780,15 @@ cupsFileOpen(const char *filename, /* I - Name of file */
|
||||
switch (*mode)
|
||||
{
|
||||
case 'a' : /* Append file */
|
||||
fd = open(filename, O_RDWR | O_CREAT | O_APPEND | O_LARGEFILE | O_BINARY, 0666);
|
||||
fd = open(filename, O_RDWR | O_CREAT | O_APPEND | O_LARGEFILE, 0666);
|
||||
break;
|
||||
|
||||
case 'r' : /* Read file */
|
||||
fd = open(filename, O_RDONLY | O_LARGEFILE | O_BINARY, 0);
|
||||
fd = open(filename, O_RDONLY | O_LARGEFILE, 0);
|
||||
break;
|
||||
|
||||
case 'w' : /* Write file */
|
||||
fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT | O_LARGEFILE | O_BINARY, 0666);
|
||||
fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT | O_LARGEFILE, 0666);
|
||||
break;
|
||||
|
||||
case 's' : /* Read/write socket */
|
||||
@@ -1031,7 +991,7 @@ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */
|
||||
...) /* I - Additional args as necessary */
|
||||
{
|
||||
va_list ap; /* Argument list */
|
||||
ssize_t bytes; /* Formatted size */
|
||||
size_t bytes; /* Formatted size */
|
||||
char buf[8192]; /* Formatted text */
|
||||
|
||||
|
||||
@@ -1130,7 +1090,7 @@ int /* O - Number of bytes written or -1 */
|
||||
cupsFilePuts(cups_file_t *fp, /* I - CUPS file */
|
||||
const char *s) /* I - String to write */
|
||||
{
|
||||
ssize_t bytes; /* Bytes to write */
|
||||
size_t bytes; /* Bytes to write */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1144,7 +1104,7 @@ cupsFilePuts(cups_file_t *fp, /* I - CUPS file */
|
||||
* Write the string...
|
||||
*/
|
||||
|
||||
bytes = (int)strlen(s);
|
||||
bytes = strlen(s);
|
||||
|
||||
if (fp->mode == 's')
|
||||
{
|
||||
@@ -1189,8 +1149,8 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */
|
||||
char *buf, /* O - Buffer */
|
||||
size_t bytes) /* I - Number of bytes to read */
|
||||
{
|
||||
size_t total; /* Total bytes read */
|
||||
ssize_t count; /* Bytes read */
|
||||
size_t total, /* Total bytes read */
|
||||
count; /* Bytes read */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsFileRead(fp=%p, buf=%p, bytes=%ld)\n", fp, buf,
|
||||
@@ -1219,14 +1179,14 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */
|
||||
DEBUG_printf((" cups_fill() returned -1, total=%d\n", total));
|
||||
|
||||
if (total > 0)
|
||||
return ((ssize_t)total);
|
||||
return (total);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
count = (ssize_t)(fp->end - fp->ptr);
|
||||
if (count > (ssize_t)bytes)
|
||||
count = (ssize_t)bytes;
|
||||
count = fp->end - fp->ptr;
|
||||
if (count > bytes)
|
||||
count = bytes;
|
||||
|
||||
memcpy(buf, fp->ptr, count);
|
||||
fp->ptr += count;
|
||||
@@ -1246,7 +1206,7 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */
|
||||
|
||||
DEBUG_printf((" total=%d\n", total));
|
||||
|
||||
return ((ssize_t)total);
|
||||
return (total);
|
||||
}
|
||||
|
||||
|
||||
@@ -1300,7 +1260,6 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */
|
||||
fp->pos = 0;
|
||||
fp->ptr = NULL;
|
||||
fp->end = NULL;
|
||||
fp->eof = 0;
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -1314,7 +1273,7 @@ off_t /* O - New file position or -1 */
|
||||
cupsFileSeek(cups_file_t *fp, /* I - CUPS file */
|
||||
off_t pos) /* I - Position in file */
|
||||
{
|
||||
ssize_t bytes; /* Number bytes in buffer */
|
||||
size_t bytes; /* Number bytes in buffer */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsFileSeek(fp=%p, pos=" CUPS_LLFMT ")\n", fp, pos));
|
||||
@@ -1368,7 +1327,7 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */
|
||||
*/
|
||||
|
||||
if (fp->ptr)
|
||||
bytes = (ssize_t)(fp->end - fp->buf);
|
||||
bytes = fp->end - fp->buf;
|
||||
else
|
||||
bytes = 0;
|
||||
|
||||
@@ -1622,16 +1581,16 @@ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */
|
||||
if (cups_write(fp, buf, bytes) < 0)
|
||||
return (-1);
|
||||
|
||||
fp->pos += (off_t)bytes;
|
||||
fp->pos += bytes;
|
||||
|
||||
return ((ssize_t)bytes);
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
if ((fp->ptr + bytes) > fp->end)
|
||||
if (cupsFileFlush(fp))
|
||||
return (-1);
|
||||
|
||||
fp->pos += (off_t)bytes;
|
||||
fp->pos += bytes;
|
||||
|
||||
if (bytes > sizeof(fp->buf))
|
||||
{
|
||||
@@ -1646,7 +1605,7 @@ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */
|
||||
{
|
||||
memcpy(fp->ptr, buf, bytes);
|
||||
fp->ptr += bytes;
|
||||
return ((ssize_t)bytes);
|
||||
return (bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1727,7 +1686,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */
|
||||
*/
|
||||
|
||||
if (fp->ptr && fp->end)
|
||||
fp->pos += (off_t)(fp->end - fp->buf);
|
||||
fp->pos += fp->end - fp->buf;
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
DEBUG_printf((" fp->compressed=%d\n", fp->compressed));
|
||||
@@ -2035,17 +1994,10 @@ cups_read(cups_file_t *fp, /* I - CUPS file */
|
||||
|
||||
for (;;)
|
||||
{
|
||||
#ifdef WIN32
|
||||
if (fp->mode == 's')
|
||||
total = (ssize_t)recv(fp->fd, buf, (unsigned)bytes, 0);
|
||||
else
|
||||
total = (ssize_t)read(fp->fd, buf, (unsigned)bytes);
|
||||
#else
|
||||
if (fp->mode == 's')
|
||||
total = recv(fp->fd, buf, bytes, 0);
|
||||
else
|
||||
total = read(fp->fd, buf, bytes);
|
||||
#endif /* WIN32 */
|
||||
|
||||
if (total >= 0)
|
||||
break;
|
||||
@@ -2077,8 +2029,8 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
|
||||
const char *buf, /* I - Buffer */
|
||||
size_t bytes) /* I - Number bytes */
|
||||
{
|
||||
size_t total; /* Total bytes written */
|
||||
ssize_t count; /* Count this time */
|
||||
size_t total, /* Total bytes written */
|
||||
count; /* Count this time */
|
||||
|
||||
|
||||
DEBUG_printf(("cups_write(fp=%p, buf=%p, bytes=%ld)\n", fp, buf,
|
||||
@@ -2091,17 +2043,10 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
|
||||
total = 0;
|
||||
while (bytes > 0)
|
||||
{
|
||||
#ifdef WIN32
|
||||
if (fp->mode == 's')
|
||||
count = (ssize_t)send(fp->fd, buf, (unsigned)bytes, 0);
|
||||
else
|
||||
count = (ssize_t)write(fp->fd, buf, (unsigned)bytes);
|
||||
#else
|
||||
if (fp->mode == 's')
|
||||
count = send(fp->fd, buf, bytes, 0);
|
||||
else
|
||||
count = write(fp->fd, buf, bytes);
|
||||
#endif /* WIN32 */
|
||||
|
||||
if (count < 0)
|
||||
{
|
||||
@@ -2130,7 +2075,7 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
|
||||
* Return the total number of bytes written...
|
||||
*/
|
||||
|
||||
return ((ssize_t)total);
|
||||
return (total);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+8
-8
@@ -8,7 +8,7 @@
|
||||
* our own file functions allows us to provide transparent support of
|
||||
* gzip'd print files, PPD files, etc.
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2005 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
|
||||
@@ -36,20 +36,20 @@
|
||||
*/
|
||||
|
||||
# include <sys/types.h>
|
||||
# if defined(WIN32) && !defined(__CUPS_SSIZE_T_DEFINED)
|
||||
# define __CUPS_SSIZE_T_DEFINED
|
||||
|
||||
# ifdef WIN32
|
||||
/* Windows does not support the ssize_t type, so map it to off_t... */
|
||||
typedef off_t ssize_t; /* @private@ */
|
||||
# endif /* WIN32 && !__CUPS_SSIZE_T_DEFINED */
|
||||
# endif /* WIN32 */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
@@ -103,9 +103,9 @@ extern int cupsFileUnlock(cups_file_t *fp);
|
||||
extern ssize_t cupsFileWrite(cups_file_t *fp, const char *buf, size_t bytes);
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
# ifdef _cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
# endif /* _cplusplus */
|
||||
#endif /* !_CUPS_FILE_H_ */
|
||||
|
||||
/*
|
||||
|
||||
@@ -98,7 +98,11 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
/* language.c */
|
||||
cups_lang_t *lang_default; /* Default language */
|
||||
# ifdef __APPLE__
|
||||
# ifdef HAVE_CF_LOCALE_ID
|
||||
char language[32]; /* Cached language */
|
||||
# else
|
||||
const char *language; /* Cached language */
|
||||
# endif /* HAVE_CF_LOCALE_ID */
|
||||
# endif /* __APPLE__ */
|
||||
|
||||
/* ppd.c */
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP address list routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -62,7 +62,7 @@ httpAddrConnect(
|
||||
* Create the socket...
|
||||
*/
|
||||
|
||||
if ((*sock = (int)socket(addrlist->addr.addr.sa_family, SOCK_STREAM, 0)) < 0)
|
||||
if ((*sock = socket(addrlist->addr.addr.sa_family, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
/*
|
||||
* Don't abort yet, as this could just be an issue with the local
|
||||
@@ -248,7 +248,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
*/
|
||||
|
||||
strlcpy(ipv6, hostname + 4, sizeof(ipv6));
|
||||
if ((ipv6len = (int)strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
|
||||
if ((ipv6len = strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
|
||||
{
|
||||
ipv6[ipv6len] = '\0';
|
||||
hostname = ipv6;
|
||||
@@ -268,7 +268,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
*/
|
||||
|
||||
strlcpy(ipv6, hostname + 1, sizeof(ipv6));
|
||||
if ((ipv6len = (int)strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
|
||||
if ((ipv6len = strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
|
||||
{
|
||||
ipv6[ipv6len] = '\0';
|
||||
hostname = ipv6;
|
||||
|
||||
+34
-35
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Private HTTP definitions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2005 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
|
||||
@@ -70,8 +70,7 @@ typedef int socklen_t;
|
||||
# if defined HAVE_LIBSSL
|
||||
/*
|
||||
* The OpenSSL library provides its own SSL/TLS context structure for its
|
||||
* IO and protocol management. However, we need to provide our own BIO
|
||||
* (basic IO) implementation to do timeouts...
|
||||
* IO and protocol management...
|
||||
*/
|
||||
|
||||
# include <openssl/err.h>
|
||||
@@ -80,8 +79,6 @@ typedef int socklen_t;
|
||||
|
||||
typedef SSL http_tls_t;
|
||||
|
||||
extern BIO_METHOD *_httpBIOMethods(void);
|
||||
|
||||
# elif defined HAVE_GNUTLS
|
||||
/*
|
||||
* The GNU TLS library is more of a "bare metal" SSL/TLS library...
|
||||
@@ -94,11 +91,6 @@ typedef struct
|
||||
void *credentials; /* GNU TLS credentials object */
|
||||
} http_tls_t;
|
||||
|
||||
extern ssize_t _httpReadGNUTLS(gnutls_transport_ptr ptr, void *data,
|
||||
size_t length);
|
||||
extern ssize_t _httpWriteGNUTLS(gnutls_transport_ptr ptr, const void *data,
|
||||
size_t length);
|
||||
|
||||
# elif defined(HAVE_CDSASSL)
|
||||
/*
|
||||
* Darwin's Security framework provides its own SSL/TLS context structure
|
||||
@@ -113,6 +105,15 @@ typedef struct /**** CDSA connection information ****/
|
||||
CFArrayRef certsArray; /* Certificates array */
|
||||
} http_tls_t;
|
||||
|
||||
typedef union _cdsa_conn_ref_u /**** CDSA Connection reference union
|
||||
**** used to resolve 64-bit casting
|
||||
**** warnings.
|
||||
****/
|
||||
{
|
||||
SSLConnectionRef connection; /* SSL connection pointer */
|
||||
int sock; /* Socket */
|
||||
} cdsa_conn_ref_t;
|
||||
|
||||
extern OSStatus _httpReadCDSA(SSLConnectionRef connection, void *data,
|
||||
size_t *dataLength);
|
||||
extern OSStatus _httpWriteCDSA(SSLConnectionRef connection, const void *data,
|
||||
@@ -138,22 +139,21 @@ extern const char *hstrerror(int error);
|
||||
* Some OS's don't have getifaddrs() and freeifaddrs()...
|
||||
*/
|
||||
|
||||
# ifndef WIN32
|
||||
# include <net/if.h>
|
||||
# ifdef HAVE_GETIFADDRS
|
||||
# include <ifaddrs.h>
|
||||
# else
|
||||
# include <sys/ioctl.h>
|
||||
# ifdef HAVE_SYS_SOCKIO_H
|
||||
# include <sys/sockio.h>
|
||||
# endif /* HAVE_SYS_SOCKIO_H */
|
||||
# include <net/if.h>
|
||||
# ifdef HAVE_GETIFADDRS
|
||||
# include <ifaddrs.h>
|
||||
# else
|
||||
# include <sys/ioctl.h>
|
||||
# ifdef HAVE_SYS_SOCKIO_H
|
||||
# include <sys/sockio.h>
|
||||
# endif /* HAVE_SYS_SOCKIO_H */
|
||||
|
||||
# ifdef ifa_dstaddr
|
||||
# undef ifa_dstaddr
|
||||
# endif /* ifa_dstaddr */
|
||||
# ifndef ifr_netmask
|
||||
# define ifr_netmask ifr_addr
|
||||
# endif /* !ifr_netmask */
|
||||
# ifdef ifa_dstaddr
|
||||
# undef ifa_dstaddr
|
||||
# endif /* ifa_dstaddr */
|
||||
# ifndef ifr_netmask
|
||||
# define ifr_netmask ifr_addr
|
||||
# endif /* !ifr_netmask */
|
||||
|
||||
struct ifaddrs /**** Interface Structure ****/
|
||||
{
|
||||
@@ -171,19 +171,18 @@ struct ifaddrs /**** Interface Structure ****/
|
||||
void *ifa_data; /* Interface statistics */
|
||||
};
|
||||
|
||||
# ifndef ifa_broadaddr
|
||||
# define ifa_broadaddr ifa_ifu.ifu_broadaddr
|
||||
# endif /* !ifa_broadaddr */
|
||||
# ifndef ifa_dstaddr
|
||||
# define ifa_dstaddr ifa_ifu.ifu_dstaddr
|
||||
# endif /* !ifa_dstaddr */
|
||||
# ifndef ifa_broadaddr
|
||||
# define ifa_broadaddr ifa_ifu.ifu_broadaddr
|
||||
# endif /* !ifa_broadaddr */
|
||||
# ifndef ifa_dstaddr
|
||||
# define ifa_dstaddr ifa_ifu.ifu_dstaddr
|
||||
# endif /* !ifa_dstaddr */
|
||||
|
||||
extern int _cups_getifaddrs(struct ifaddrs **addrs);
|
||||
# define getifaddrs _cups_getifaddrs
|
||||
# define getifaddrs _cups_getifaddrs
|
||||
extern void _cups_freeifaddrs(struct ifaddrs *addrs);
|
||||
# define freeifaddrs _cups_freeifaddrs
|
||||
# endif /* HAVE_GETIFADDRS */
|
||||
# endif /* !WIN32 */
|
||||
# define freeifaddrs _cups_freeifaddrs
|
||||
# endif /* HAVE_GETIFADDRS */
|
||||
|
||||
#endif /* !_CUPS_HTTP_PRIVATE_H_ */
|
||||
|
||||
|
||||
+5
-16
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP support routines for the Common UNIX Printing System (CUPS) scheduler.
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -549,7 +549,7 @@ char * /* O - Encoded string */
|
||||
httpEncode64(char *out, /* I - String to write to */
|
||||
const char *in) /* I - String to read from */
|
||||
{
|
||||
return (httpEncode64_2(out, 512, in, (int)strlen(in)));
|
||||
return (httpEncode64_2(out, 512, in, strlen(in)));
|
||||
}
|
||||
|
||||
|
||||
@@ -595,14 +595,8 @@ httpEncode64_2(char *out, /* I - String to write to */
|
||||
|
||||
if (outptr < outend)
|
||||
*outptr ++ = base64[(in[0] & 255) >> 2];
|
||||
|
||||
if (outptr < outend)
|
||||
{
|
||||
if (inlen > 1)
|
||||
*outptr ++ = base64[(((in[0] & 255) << 4) | ((in[1] & 255) >> 4)) & 63];
|
||||
else
|
||||
*outptr ++ = base64[((in[0] & 255) << 4) & 63];
|
||||
}
|
||||
*outptr ++ = base64[(((in[0] & 255) << 4) | ((in[1] & 255) >> 4)) & 63];
|
||||
|
||||
in ++;
|
||||
inlen --;
|
||||
@@ -616,12 +610,7 @@ httpEncode64_2(char *out, /* I - String to write to */
|
||||
}
|
||||
|
||||
if (outptr < outend)
|
||||
{
|
||||
if (inlen > 1)
|
||||
*outptr ++ = base64[(((in[0] & 255) << 2) | ((in[1] & 255) >> 6)) & 63];
|
||||
else
|
||||
*outptr ++ = base64[((in[0] & 255) << 2) & 63];
|
||||
}
|
||||
*outptr ++ = base64[(((in[0] & 255) << 2) | ((in[1] & 255) >> 6)) & 63];
|
||||
|
||||
in ++;
|
||||
inlen --;
|
||||
@@ -1112,7 +1101,7 @@ httpSeparateURI(
|
||||
|
||||
char *resptr = resource + strlen(resource);
|
||||
|
||||
uri = http_copy_decode(resptr, uri, resourcelen - (int)(resptr - resource),
|
||||
uri = http_copy_decode(resptr, uri, resourcelen - (resptr - resource),
|
||||
NULL, decoding & HTTP_URI_CODING_QUERY);
|
||||
}
|
||||
}
|
||||
|
||||
+77
-368
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -25,7 +25,6 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* _httpBIOMethods() - Get the OpenSSL BIO methods for HTTP connections.
|
||||
* httpBlocking() - Set blocking/non-blocking behavior on a connection.
|
||||
* httpCheck() - Check to see if there is a pending response from
|
||||
* the server.
|
||||
@@ -61,8 +60,7 @@
|
||||
* httpPut() - Send a PUT request to the server.
|
||||
* httpRead() - Read data from a HTTP connection.
|
||||
* httpRead2() - Read data from a HTTP connection.
|
||||
* _httpReadCDSA() - Read function for the CDSA library.
|
||||
* _httpReadGNUTLS() - Read function for the GNU TLS library.
|
||||
* _httpReadCDSA() - Read function for CDSA decryption code.
|
||||
* httpReconnect() - Reconnect to a HTTP server...
|
||||
* httpSetCookie() - Set the cookie value(s)...
|
||||
* httpSetExpect() - Set the Expect: header in a request.
|
||||
@@ -73,14 +71,7 @@
|
||||
* httpWait() - Wait for data available on a connection.
|
||||
* httpWrite() - Write data to a HTTP connection.
|
||||
* httpWrite2() - Write data to a HTTP connection.
|
||||
* _httpWriteCDSA() - Write function for the CDSA library.
|
||||
* _httpWriteGNUTLS() - Write function for the GNU TLS library.
|
||||
* http_bio_ctrl() - Control the HTTP connection.
|
||||
* http_bio_free() - Free OpenSSL data.
|
||||
* http_bio_new() - Initialize an OpenSSL BIO structure.
|
||||
* http_bio_puts() - Send a string for OpenSSL.
|
||||
* http_bio_read() - Read data for OpenSSL.
|
||||
* http_bio_write() - Write data for OpenSSL.
|
||||
* _httpWriteCDSA() - Write function for CDSA encryption code.
|
||||
* http_field() - Return the field index for a field name.
|
||||
* http_read_ssl() - Read from a SSL/TLS connection.
|
||||
* http_send() - Send a request with all fields and the trailing
|
||||
@@ -127,7 +118,7 @@
|
||||
static http_field_t http_field(const char *name);
|
||||
static int http_send(http_t *http, http_state_t request,
|
||||
const char *uri);
|
||||
static int http_wait(http_t *http, int msec, int usessl);
|
||||
static int http_wait(http_t *http, int msec);
|
||||
static int http_write(http_t *http, const char *buffer,
|
||||
int length);
|
||||
static int http_write_chunk(http_t *http, const char *buffer,
|
||||
@@ -177,45 +168,6 @@ static const char * const http_fields[] =
|
||||
};
|
||||
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
|
||||
/*
|
||||
* BIO methods for OpenSSL...
|
||||
*/
|
||||
|
||||
static int http_bio_write(BIO *h, const char *buf, int num);
|
||||
static int http_bio_read(BIO *h, char *buf, int size);
|
||||
static int http_bio_puts(BIO *h, const char *str);
|
||||
static long http_bio_ctrl(BIO *h, int cmd, long arg1, void *arg2);
|
||||
static int http_bio_new(BIO *h);
|
||||
static int http_bio_free(BIO *data);
|
||||
|
||||
static BIO_METHOD http_bio_methods =
|
||||
{
|
||||
BIO_TYPE_SOCKET,
|
||||
"http",
|
||||
http_bio_write,
|
||||
http_bio_read,
|
||||
http_bio_puts,
|
||||
NULL, /* http_bio_gets, */
|
||||
http_bio_ctrl,
|
||||
http_bio_new,
|
||||
http_bio_free,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* '_httpBIOMethods()' - Get the OpenSSL BIO methods for HTTP connections.
|
||||
*/
|
||||
|
||||
BIO_METHOD * /* O - BIO methods for OpenSSL */
|
||||
_httpBIOMethods(void)
|
||||
{
|
||||
return (&http_bio_methods);
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_LIBSSL */
|
||||
|
||||
|
||||
/*
|
||||
* 'httpBlocking()' - Set blocking/non-blocking behavior on a connection.
|
||||
*/
|
||||
@@ -270,10 +222,7 @@ httpClearFields(http_t *http) /* I - HTTP connection */
|
||||
if (http)
|
||||
{
|
||||
memset(http->fields, 0, sizeof(http->fields));
|
||||
if (http->hostname[0] == '/')
|
||||
httpSetField(http, HTTP_FIELD_HOST, "localhost");
|
||||
else
|
||||
httpSetField(http, HTTP_FIELD_HOST, http->hostname);
|
||||
httpSetField(http, HTTP_FIELD_HOST, http->hostname);
|
||||
|
||||
http->expect = (http_status_t)0;
|
||||
}
|
||||
@@ -694,18 +643,8 @@ httpGetLength2(http_t *http) /* I - HTTP connection */
|
||||
* after the transfer is complete...
|
||||
*/
|
||||
|
||||
if (!http->fields[HTTP_FIELD_CONTENT_LENGTH][0])
|
||||
{
|
||||
/*
|
||||
* Default content length is 0 for errors and 2^31-1 for other
|
||||
* successful requests...
|
||||
*/
|
||||
|
||||
if (http->status >= HTTP_MULTIPLE_CHOICES)
|
||||
http->data_remaining = 0;
|
||||
else
|
||||
http->data_remaining = 2147483647;
|
||||
}
|
||||
if (http->fields[HTTP_FIELD_CONTENT_LENGTH][0] == '\0')
|
||||
http->data_remaining = 2147483647;
|
||||
else
|
||||
http->data_remaining = strtoll(http->fields[HTTP_FIELD_CONTENT_LENGTH],
|
||||
NULL, 10);
|
||||
@@ -927,14 +866,10 @@ httpGets(char *line, /* I - Line to read into */
|
||||
* No newline; see if there is more data to be read...
|
||||
*/
|
||||
|
||||
if (!http->blocking && !http_wait(http, 10000, 1))
|
||||
if (!http->blocking && !http_wait(http, 10000))
|
||||
{
|
||||
DEBUG_puts("httpGets: Timed out!");
|
||||
#ifdef WIN32
|
||||
http->error = WSAETIMEDOUT;
|
||||
#else
|
||||
http->error = ETIMEDOUT;
|
||||
#endif /* WIN32 */
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -1010,7 +945,7 @@ httpGets(char *line, /* I - Line to read into */
|
||||
*lineptr++ = *bufptr++;
|
||||
}
|
||||
|
||||
http->used -= (int)(bufptr - http->buffer);
|
||||
http->used -= bufptr - http->buffer;
|
||||
if (http->used > 0)
|
||||
memmove(http->buffer, bufptr, http->used);
|
||||
|
||||
@@ -1165,20 +1100,15 @@ httpPrintf(http_t *http, /* I - HTTP connection */
|
||||
|
||||
DEBUG_printf(("httpPrintf: %s", buf));
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_FIELDS)
|
||||
return (httpWrite2(http, buf, bytes));
|
||||
else
|
||||
if (http->wused)
|
||||
{
|
||||
if (http->wused)
|
||||
{
|
||||
DEBUG_puts(" flushing existing data...");
|
||||
DEBUG_puts(" flushing existing data...");
|
||||
|
||||
if (httpFlushWrite(http) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (http_write(http, buf, bytes));
|
||||
if (httpFlushWrite(http) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (http_write(http, buf, bytes));
|
||||
}
|
||||
|
||||
|
||||
@@ -1283,8 +1213,8 @@ httpRead2(http_t *http, /* I - HTTP connection */
|
||||
|
||||
return (0);
|
||||
}
|
||||
else if (length > (size_t)http->data_remaining)
|
||||
length = (size_t)http->data_remaining;
|
||||
else if (length > http->data_remaining)
|
||||
length = http->data_remaining;
|
||||
|
||||
if (http->used == 0 && length <= 256)
|
||||
{
|
||||
@@ -1339,15 +1269,15 @@ httpRead2(http_t *http, /* I - HTTP connection */
|
||||
|
||||
if (http->used > 0)
|
||||
{
|
||||
if (length > (size_t)http->used)
|
||||
length = (size_t)http->used;
|
||||
if (length > http->used)
|
||||
length = http->used;
|
||||
|
||||
bytes = (ssize_t)length;
|
||||
bytes = length;
|
||||
|
||||
DEBUG_printf(("httpRead2: grabbing %d bytes from input buffer...\n", bytes));
|
||||
|
||||
memcpy(buffer, http->buffer, length);
|
||||
http->used -= (int)length;
|
||||
http->used -= length;
|
||||
|
||||
if (http->used > 0)
|
||||
memmove(http->buffer, http->buffer + length, http->used);
|
||||
@@ -1358,7 +1288,7 @@ httpRead2(http_t *http, /* I - HTTP connection */
|
||||
if (!http->blocking && !httpWait(http, 10000))
|
||||
return (0);
|
||||
|
||||
bytes = (ssize_t)http_read_ssl(http, buffer, (int)length);
|
||||
bytes = http_read_ssl(http, buffer, length);
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
else
|
||||
@@ -1368,13 +1298,9 @@ httpRead2(http_t *http, /* I - HTTP connection */
|
||||
|
||||
DEBUG_printf(("httpRead2: reading %d bytes from socket...\n", length));
|
||||
|
||||
#ifdef WIN32
|
||||
bytes = (ssize_t)recv(http->fd, buffer, (int)length, 0);
|
||||
#else
|
||||
while ((bytes = recv(http->fd, buffer, length, 0)) < 0)
|
||||
if (errno != EINTR)
|
||||
break;
|
||||
#endif /* WIN32 */
|
||||
|
||||
DEBUG_printf(("httpRead2: read %d bytes from socket...\n", bytes));
|
||||
}
|
||||
@@ -1457,7 +1383,7 @@ httpRead2(http_t *http, /* I - HTTP connection */
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_CDSASSL)
|
||||
/*
|
||||
* '_httpReadCDSA()' - Read function for the CDSA library.
|
||||
* '_httpReadCDSA()' - Read function for CDSA decryption code.
|
||||
*/
|
||||
|
||||
OSStatus /* O - -1 on error, 0 on success */
|
||||
@@ -1466,36 +1392,19 @@ _httpReadCDSA(
|
||||
void *data, /* I - Data buffer */
|
||||
size_t *dataLength) /* IO - Number of bytes */
|
||||
{
|
||||
OSStatus result; /* Return value */
|
||||
ssize_t bytes; /* Number of bytes read */
|
||||
http_t *http; /* HTTP connection */
|
||||
OSStatus result; /* Return value */
|
||||
ssize_t bytes; /* Number of bytes read */
|
||||
cdsa_conn_ref_t u; /* Connection reference union */
|
||||
|
||||
|
||||
http = (http_t *)connection;
|
||||
|
||||
if (!http->blocking)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
*/
|
||||
|
||||
if (!http_wait(http, 10000, 0))
|
||||
{
|
||||
http->error = ETIMEDOUT;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
u.connection = connection;
|
||||
|
||||
do
|
||||
{
|
||||
bytes = recv(http->fd, data, *dataLength, 0);
|
||||
}
|
||||
bytes = recv(u.sock, data, *dataLength, 0);
|
||||
while (bytes == -1 && errno == EINTR);
|
||||
|
||||
if (bytes == *dataLength)
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
else if (bytes > 0)
|
||||
{
|
||||
*dataLength = bytes;
|
||||
@@ -1513,45 +1422,11 @@ _httpReadCDSA(
|
||||
result = errSSLClosedAbort;
|
||||
}
|
||||
|
||||
return (result);
|
||||
return result;
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_CDSASSL */
|
||||
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_GNUTLS)
|
||||
/*
|
||||
* '_httpReadGNUTLS()' - Read function for the GNU TLS library.
|
||||
*/
|
||||
|
||||
ssize_t /* O - Number of bytes read or -1 on error */
|
||||
_httpReadGNUTLS(
|
||||
gnutls_transport_ptr ptr, /* I - HTTP connection */
|
||||
void *data, /* I - Buffer */
|
||||
size_t length) /* I - Number of bytes to read */
|
||||
{
|
||||
http_t *http; /* HTTP connection */
|
||||
|
||||
|
||||
http = (http_t *)ptr;
|
||||
|
||||
if (!http->blocking)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
*/
|
||||
|
||||
if (!http_wait(http, 10000, 0))
|
||||
{
|
||||
http->error = ETIMEDOUT;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
return (recv(http->fd, data, length, 0));
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_GNUTLS */
|
||||
|
||||
|
||||
/*
|
||||
* 'httpReconnect()' - Reconnect to a HTTP server.
|
||||
*/
|
||||
@@ -1947,7 +1822,7 @@ httpWait(http_t *http, /* I - HTTP connection */
|
||||
* If not, check the SSL/TLS buffers and do a select() on the connection...
|
||||
*/
|
||||
|
||||
return (http_wait(http, msec, 1));
|
||||
return (http_wait(http, msec));
|
||||
}
|
||||
|
||||
|
||||
@@ -2022,8 +1897,8 @@ httpWrite2(http_t *http, /* I - HTTP connection */
|
||||
DEBUG_printf((" copying %d bytes to wbuffer...\n", length));
|
||||
|
||||
memcpy(http->wbuffer + http->wused, buffer, length);
|
||||
http->wused += (int)length;
|
||||
bytes = (ssize_t)length;
|
||||
http->wused += length;
|
||||
bytes = length;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2034,9 +1909,9 @@ httpWrite2(http_t *http, /* I - HTTP connection */
|
||||
DEBUG_printf((" writing %d bytes to socket...\n", length));
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
bytes = (ssize_t)http_write_chunk(http, buffer, (int)length);
|
||||
bytes = http_write_chunk(http, buffer, length);
|
||||
else
|
||||
bytes = (ssize_t)http_write(http, buffer, (int)length);
|
||||
bytes = http_write(http, buffer, length);
|
||||
|
||||
DEBUG_printf((" wrote %d bytes...\n", bytes));
|
||||
}
|
||||
@@ -2094,7 +1969,7 @@ httpWrite2(http_t *http, /* I - HTTP connection */
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_CDSASSL)
|
||||
/*
|
||||
* '_httpWriteCDSA()' - Write function for the CDSA library.
|
||||
* '_httpWriteCDSA()' - Write function for CDSA encryption code.
|
||||
*/
|
||||
|
||||
OSStatus /* O - -1 on error, 0 on success */
|
||||
@@ -2103,23 +1978,19 @@ _httpWriteCDSA(
|
||||
const void *data, /* I - Data buffer */
|
||||
size_t *dataLength) /* IO - Number of bytes */
|
||||
{
|
||||
OSStatus result; /* Return value */
|
||||
ssize_t bytes; /* Number of bytes read */
|
||||
http_t *http; /* HTTP connection */
|
||||
OSStatus result; /* Return value */
|
||||
ssize_t bytes; /* Number of bytes read */
|
||||
cdsa_conn_ref_t u; /* Connection reference union */
|
||||
|
||||
|
||||
http = (http_t *)connection;
|
||||
u.connection = connection;
|
||||
|
||||
do
|
||||
{
|
||||
bytes = write(http->fd, data, *dataLength);
|
||||
}
|
||||
bytes = write(u.sock, data, *dataLength);
|
||||
while (bytes == -1 && errno == EINTR);
|
||||
|
||||
if (bytes == *dataLength)
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
else if (bytes >= 0)
|
||||
{
|
||||
*dataLength = bytes;
|
||||
@@ -2135,173 +2006,11 @@ _httpWriteCDSA(
|
||||
result = errSSLClosedAbort;
|
||||
}
|
||||
|
||||
return (result);
|
||||
return result;
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_CDSASSL */
|
||||
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_GNUTLS)
|
||||
/*
|
||||
* '_httpWriteGNUTLS()' - Write function for the GNU TLS library.
|
||||
*/
|
||||
|
||||
ssize_t /* O - Number of bytes written or -1 on error */
|
||||
_httpWriteGNUTLS(
|
||||
gnutls_transport_ptr ptr, /* I - HTTP connection */
|
||||
const void *data, /* I - Data buffer */
|
||||
size_t length) /* I - Number of bytes to write */
|
||||
{
|
||||
return (send(((http_t *)ptr)->fd, data, length, 0));
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_GNUTLS */
|
||||
|
||||
|
||||
#if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
|
||||
/*
|
||||
* 'http_bio_ctrl()' - Control the HTTP connection.
|
||||
*/
|
||||
|
||||
static long /* O - Result/data */
|
||||
http_bio_ctrl(BIO *h, /* I - BIO data */
|
||||
int cmd, /* I - Control command */
|
||||
long arg1, /* I - First argument */
|
||||
void *arg2) /* I - Second argument */
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
default :
|
||||
return (0);
|
||||
|
||||
case BIO_CTRL_RESET :
|
||||
h->ptr = NULL;
|
||||
return (0);
|
||||
|
||||
case BIO_C_SET_FILE_PTR :
|
||||
h->ptr = arg2;
|
||||
h->init = 1;
|
||||
return (1);
|
||||
|
||||
case BIO_C_GET_FILE_PTR :
|
||||
if (arg2)
|
||||
{
|
||||
*((void **)arg2) = h->ptr;
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
return (0);
|
||||
|
||||
case BIO_CTRL_DUP :
|
||||
case BIO_CTRL_FLUSH :
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_bio_free()' - Free OpenSSL data.
|
||||
*/
|
||||
|
||||
static int /* O - 1 on success, 0 on failure */
|
||||
http_bio_free(BIO *h) /* I - BIO data */
|
||||
{
|
||||
if (!h)
|
||||
return (0);
|
||||
|
||||
if (h->shutdown)
|
||||
{
|
||||
h->init = 0;
|
||||
h->flags = 0;
|
||||
}
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_bio_new()' - Initialize an OpenSSL BIO structure.
|
||||
*/
|
||||
|
||||
static int /* O - 1 on success, 0 on failure */
|
||||
http_bio_new(BIO *h) /* I - BIO data */
|
||||
{
|
||||
if (!h)
|
||||
return (0);
|
||||
|
||||
h->init = 0;
|
||||
h->num = 0;
|
||||
h->ptr = NULL;
|
||||
h->flags = 0;
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_bio_puts()' - Send a string for OpenSSL.
|
||||
*/
|
||||
|
||||
static int /* O - Bytes written */
|
||||
http_bio_puts(BIO *h, /* I - BIO data */
|
||||
const char *str) /* I - String to write */
|
||||
{
|
||||
#ifdef WIN32
|
||||
return (send(((http_t *)h->ptr)->fd, str, (int)strlen(str), 0));
|
||||
#else
|
||||
return (send(((http_t *)h->ptr)->fd, str, strlen(str), 0));
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_bio_read()' - Read data for OpenSSL.
|
||||
*/
|
||||
|
||||
static int /* O - Bytes read */
|
||||
http_bio_read(BIO *h, /* I - BIO data */
|
||||
char *buf, /* I - Buffer */
|
||||
int size) /* I - Number of bytes to read */
|
||||
{
|
||||
http_t *http; /* HTTP connection */
|
||||
|
||||
|
||||
http = (http_t *)h->ptr;
|
||||
|
||||
if (!http->blocking)
|
||||
{
|
||||
/*
|
||||
* Make sure we have data before we read...
|
||||
*/
|
||||
|
||||
if (!http_wait(http, 10000, 0))
|
||||
{
|
||||
#ifdef WIN32
|
||||
http->error = WSAETIMEDOUT;
|
||||
#else
|
||||
http->error = ETIMEDOUT;
|
||||
#endif /* WIN32 */
|
||||
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
return (recv(http->fd, buf, size, 0));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'http_bio_write()' - Write data for OpenSSL.
|
||||
*/
|
||||
|
||||
static int /* O - Bytes written */
|
||||
http_bio_write(BIO *h, /* I - BIO data */
|
||||
const char *buf, /* I - Buffer to write */
|
||||
int num) /* I - Number of bytes to write */
|
||||
{
|
||||
return (send(((http_t *)h->ptr)->fd, buf, num, 0));
|
||||
}
|
||||
#endif /* HAVE_SSL && HAVE_LIBSSL */
|
||||
|
||||
|
||||
/*
|
||||
* 'http_field()' - Return the field index for a field name.
|
||||
*/
|
||||
@@ -2445,20 +2154,11 @@ http_send(http_t *http, /* I - HTTP connection */
|
||||
if (httpReconnect(http))
|
||||
return (-1);
|
||||
|
||||
/*
|
||||
* Flush any written data that is pending...
|
||||
*/
|
||||
|
||||
if (http->wused)
|
||||
httpFlushWrite(http);
|
||||
|
||||
/*
|
||||
* Send the request header...
|
||||
*/
|
||||
|
||||
http->state = request;
|
||||
http->data_encoding = HTTP_ENCODE_FIELDS;
|
||||
|
||||
http->state = request;
|
||||
if (request == HTTP_POST || request == HTTP_PUT)
|
||||
http->state ++;
|
||||
|
||||
@@ -2511,7 +2211,6 @@ http_send(http_t *http, /* I - HTTP connection */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
httpFlushWrite(http);
|
||||
httpGetLength2(http);
|
||||
httpClearFields(http);
|
||||
|
||||
@@ -2530,7 +2229,6 @@ http_setup_ssl(http_t *http) /* I - HTTP connection */
|
||||
# ifdef HAVE_LIBSSL
|
||||
SSL_CTX *context; /* Context for encryption */
|
||||
SSL *conn; /* Connection for encryption */
|
||||
BIO *bio; /* BIO data */
|
||||
# elif defined(HAVE_GNUTLS)
|
||||
http_tls_t *conn; /* TLS session object */
|
||||
gnutls_certificate_client_credentials *credentials;
|
||||
@@ -2538,6 +2236,7 @@ http_setup_ssl(http_t *http) /* I - HTTP connection */
|
||||
# elif defined(HAVE_CDSASSL)
|
||||
OSStatus error; /* Error code */
|
||||
http_tls_t *conn; /* CDSA connection information */
|
||||
cdsa_conn_ref_t u; /* Connection reference union */
|
||||
# endif /* HAVE_LIBSSL */
|
||||
|
||||
|
||||
@@ -2548,12 +2247,9 @@ http_setup_ssl(http_t *http) /* I - HTTP connection */
|
||||
|
||||
SSL_CTX_set_options(context, SSL_OP_NO_SSLv2); /* Only use SSLv3 or TLS */
|
||||
|
||||
bio = BIO_new(_httpBIOMethods());
|
||||
BIO_ctrl(bio, BIO_C_SET_FILE_PTR, 0, (char *)http);
|
||||
|
||||
conn = SSL_new(context);
|
||||
SSL_set_bio(conn, bio, bio);
|
||||
|
||||
SSL_set_fd(conn, http->fd);
|
||||
if (SSL_connect(conn) != 1)
|
||||
{
|
||||
# ifdef DEBUG
|
||||
@@ -2602,9 +2298,8 @@ http_setup_ssl(http_t *http) /* I - HTTP connection */
|
||||
gnutls_init(&(conn->session), GNUTLS_CLIENT);
|
||||
gnutls_set_default_priority(conn->session);
|
||||
gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials);
|
||||
gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)http);
|
||||
gnutls_transport_set_pull_function(conn->session, _httpReadGNUTLS);
|
||||
gnutls_transport_set_push_function(conn->session, _httpWriteGNUTLS);
|
||||
gnutls_transport_set_ptr(conn->session,
|
||||
(gnutls_transport_ptr)((long)http->fd));
|
||||
|
||||
if ((gnutls_handshake(conn->session)) != GNUTLS_E_SUCCESS)
|
||||
{
|
||||
@@ -2635,7 +2330,9 @@ http_setup_ssl(http_t *http) /* I - HTTP connection */
|
||||
* Use a union to resolve warnings about int/pointer size mismatches...
|
||||
*/
|
||||
|
||||
error = SSLSetConnection(conn->session, http);
|
||||
u.connection = NULL;
|
||||
u.sock = http->fd;
|
||||
error = SSLSetConnection(conn->session, u.connection);
|
||||
|
||||
if (!error)
|
||||
error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
|
||||
@@ -2757,30 +2454,43 @@ http_upgrade(http_t *http) /* I - HTTP connection */
|
||||
* encryption on the link...
|
||||
*/
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_CONNECTION, "upgrade");
|
||||
httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0");
|
||||
httpClearFields(&myhttp);
|
||||
httpSetField(&myhttp, HTTP_FIELD_CONNECTION, "upgrade");
|
||||
httpSetField(&myhttp, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0");
|
||||
|
||||
if ((ret = httpOptions(http, "*")) == 0)
|
||||
if ((ret = httpOptions(&myhttp, "*")) == 0)
|
||||
{
|
||||
/*
|
||||
* Wait for the secure connection...
|
||||
*/
|
||||
|
||||
while (httpUpdate(http) == HTTP_CONTINUE);
|
||||
while (httpUpdate(&myhttp) == HTTP_CONTINUE);
|
||||
}
|
||||
|
||||
httpFlush(http);
|
||||
httpFlush(&myhttp);
|
||||
|
||||
/*
|
||||
* Restore the HTTP request data...
|
||||
* Copy the HTTP data back over, if any...
|
||||
*/
|
||||
|
||||
memcpy(http->fields, myhttp.fields, sizeof(http->fields));
|
||||
http->data_encoding = myhttp.data_encoding;
|
||||
http->data_remaining = myhttp.data_remaining;
|
||||
http->_data_remaining = myhttp._data_remaining;
|
||||
http->expect = myhttp.expect;
|
||||
http->fd = myhttp.fd;
|
||||
http->error = myhttp.error;
|
||||
http->activity = myhttp.activity;
|
||||
http->status = myhttp.status;
|
||||
http->version = myhttp.version;
|
||||
http->keep_alive = myhttp.keep_alive;
|
||||
http->used = myhttp.used;
|
||||
|
||||
if (http->used)
|
||||
memcpy(http->buffer, myhttp.buffer, http->used);
|
||||
|
||||
http->auth_type = myhttp.auth_type;
|
||||
http->nonce_count = myhttp.nonce_count;
|
||||
|
||||
memcpy(http->nonce, myhttp.nonce, sizeof(http->nonce));
|
||||
|
||||
http->tls = myhttp.tls;
|
||||
http->encryption = myhttp.encryption;
|
||||
|
||||
/*
|
||||
* See if we actually went secure...
|
||||
@@ -2816,8 +2526,7 @@ http_upgrade(http_t *http) /* I - HTTP connection */
|
||||
|
||||
static int /* O - 1 if data is available, 0 otherwise */
|
||||
http_wait(http_t *http, /* I - HTTP connection */
|
||||
int msec, /* I - Milliseconds to wait */
|
||||
int usessl) /* I - Use SSL context? */
|
||||
int msec) /* I - Milliseconds to wait */
|
||||
{
|
||||
#ifndef WIN32
|
||||
struct rlimit limit; /* Runtime limit */
|
||||
@@ -2837,7 +2546,7 @@ http_wait(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
if (http->tls && usessl)
|
||||
if (http->tls)
|
||||
{
|
||||
# ifdef HAVE_LIBSSL
|
||||
if (SSL_pending((SSL *)(http->tls)))
|
||||
@@ -3027,7 +2736,7 @@ http_write_chunk(http_t *http, /* I - HTTP connection */
|
||||
*/
|
||||
|
||||
sprintf(header, "%x\r\n", length);
|
||||
if (http_write(http, header, (int)strlen(header)) < 0)
|
||||
if (http_write(http, header, strlen(header)) < 0)
|
||||
{
|
||||
DEBUG_puts(" http_write of length failed!");
|
||||
return (-1);
|
||||
|
||||
+4
-13
@@ -4,7 +4,7 @@
|
||||
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -36,16 +36,11 @@
|
||||
# include <time.h>
|
||||
# include <sys/types.h>
|
||||
# ifdef WIN32
|
||||
# ifndef __CUPS_SSIZE_T_DEFINED
|
||||
# define __CUPS_SSIZE_T_DEFINED
|
||||
/* Windows does not support the ssize_t type, so map it to off_t... */
|
||||
typedef off_t ssize_t; /* @private@ */
|
||||
# endif /* !__CUPS_SSIZE_T_DEFINED */
|
||||
# include <winsock2.h>
|
||||
# include <ws2tcpip.h>
|
||||
# else
|
||||
# ifdef __sgi
|
||||
# define INET6 /* IRIX IPv6 support... */
|
||||
# ifdef __sgi /* IRIX needs this for IPv6 support!?! */
|
||||
# define INET6
|
||||
# endif /* __sgi */
|
||||
# include <unistd.h>
|
||||
# include <sys/time.h>
|
||||
@@ -58,9 +53,6 @@ typedef off_t ssize_t; /* @private@ */
|
||||
# if !defined(__APPLE__) || !defined(TCP_NODELAY)
|
||||
# include <netinet/tcp.h>
|
||||
# endif /* !__APPLE__ || !TCP_NODELAY */
|
||||
# if defined(AF_UNIX) && !defined(AF_LOCAL)
|
||||
# define AF_LOCAL AF_UNIX /* Older UNIX's have old names... */
|
||||
# endif /* AF_UNIX && !AF_LOCAL */
|
||||
# ifdef AF_LOCAL
|
||||
# include <sys/un.h>
|
||||
# endif /* AF_LOCAL */
|
||||
@@ -147,8 +139,7 @@ typedef enum http_auth_e /**** HTTP authentication types ****/
|
||||
typedef enum http_encoding_e /**** HTTP transfer encoding values ****/
|
||||
{
|
||||
HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */
|
||||
HTTP_ENCODE_CHUNKED, /* Data is chunked */
|
||||
HTTP_ENCODE_FIELDS /* Sending HTTP fields */
|
||||
HTTP_ENCODE_CHUNKED /* Data is chunked */
|
||||
} http_encoding_t;
|
||||
|
||||
typedef enum http_encryption_e /**** HTTP encryption values ****/
|
||||
|
||||
@@ -105,7 +105,6 @@ extern const char *_cupsLangString(cups_lang_t *lang, const char *message);
|
||||
extern void _cupsMessageFree(cups_array_t *a);
|
||||
extern cups_array_t *_cupsMessageLoad(const char *filename);
|
||||
extern const char *_cupsMessageLookup(cups_array_t *a, const char *m);
|
||||
extern void _cupsSetLocale(char *argv[]);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -304,48 +304,19 @@ ippPort(void)
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
|
||||
|
||||
DEBUG_puts("ippPort()");
|
||||
|
||||
if (!cg->ipp_port)
|
||||
{
|
||||
/*
|
||||
* See if the server definition includes the port number...
|
||||
*/
|
||||
|
||||
DEBUG_puts("ippPort: Not initialized...");
|
||||
|
||||
cupsServer();
|
||||
|
||||
#ifdef DEBUG
|
||||
if (cg->ipp_port)
|
||||
puts("ippPort: Set via cupsServer()...");
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
if (!cg->ipp_port)
|
||||
{
|
||||
if ((ipp_port = getenv("IPP_PORT")) != NULL)
|
||||
{
|
||||
DEBUG_puts("ippPort: Set via IPP_PORT...");
|
||||
portnum = atoi(ipp_port);
|
||||
}
|
||||
else if ((port = getservbyname("ipp", NULL)) == NULL)
|
||||
{
|
||||
DEBUG_puts("ippPort: Set via CUPS_DEFAULT_IPP_PORT...");
|
||||
portnum = CUPS_DEFAULT_IPP_PORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("ippPort: Set via ipp service entry...");
|
||||
portnum = ntohs(port->s_port);
|
||||
}
|
||||
|
||||
if (portnum > 0)
|
||||
cg->ipp_port = portnum;
|
||||
}
|
||||
|
||||
DEBUG_printf(("ippPort: Returning %d...\n", cg->ipp_port));
|
||||
|
||||
return (cg->ipp_port);
|
||||
}
|
||||
|
||||
@@ -357,8 +328,6 @@ ippPort(void)
|
||||
void
|
||||
ippSetPort(int p) /* I - Port number to use */
|
||||
{
|
||||
DEBUG_printf(("ippSetPort(p=%d)\n", p));
|
||||
|
||||
_cupsGlobals()->ipp_port = p;
|
||||
}
|
||||
|
||||
|
||||
+13
-24
@@ -4,7 +4,7 @@
|
||||
* Internet Printing Protocol support functions for the Common UNIX
|
||||
* Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -1054,7 +1054,7 @@ ippReadIO(void *src, /* I - Data source */
|
||||
if ((n = (*cb)(src, buffer, 8)) < 8)
|
||||
{
|
||||
DEBUG_printf(("ippReadIO: Unable to read header (%d bytes read)!\n", n));
|
||||
return (IPP_ERROR);
|
||||
return (n == 0 ? IPP_IDLE : IPP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1098,11 +1098,8 @@ ippReadIO(void *src, /* I - Data source */
|
||||
break;
|
||||
|
||||
case IPP_ATTRIBUTE :
|
||||
for (;;)
|
||||
while ((*cb)(src, buffer, 1) > 0)
|
||||
{
|
||||
if ((*cb)(src, buffer, 1) < 1)
|
||||
return (IPP_ERROR);
|
||||
|
||||
DEBUG_printf(("ippReadIO: ipp->current=%p, ipp->prev=%p\n",
|
||||
ipp->current, ipp->prev));
|
||||
|
||||
@@ -2159,10 +2156,10 @@ ippWriteIO(void *dst, /* I - Destination */
|
||||
n = 4;
|
||||
|
||||
if (value->string.charset != NULL)
|
||||
n += (int)strlen(value->string.charset);
|
||||
n += strlen(value->string.charset);
|
||||
|
||||
if (value->string.text != NULL)
|
||||
n += (int)strlen(value->string.text);
|
||||
n += strlen(value->string.text);
|
||||
|
||||
if (n > (sizeof(buffer) - 2))
|
||||
return (IPP_ERROR);
|
||||
@@ -2565,7 +2562,7 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */
|
||||
DEBUG_printf(("attr->name = %s, attr->num_values = %d, bytes = %d\n",
|
||||
attr->name, attr->num_values, bytes));
|
||||
|
||||
bytes += (int)strlen(attr->name); /* Name */
|
||||
bytes += strlen(attr->name); /* Name */
|
||||
bytes += attr->num_values; /* Value tag for each value */
|
||||
bytes += 2 * attr->num_values; /* Name lengths */
|
||||
bytes += 2 * attr->num_values; /* Value lengths */
|
||||
@@ -2597,7 +2594,7 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */
|
||||
i < attr->num_values;
|
||||
i ++, value ++)
|
||||
if (value->string.text != NULL)
|
||||
bytes += (int)strlen(value->string.text);
|
||||
bytes += strlen(value->string.text);
|
||||
break;
|
||||
|
||||
case IPP_TAG_DATE :
|
||||
@@ -2621,10 +2618,10 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */
|
||||
i ++, value ++)
|
||||
{
|
||||
if (value->string.charset != NULL)
|
||||
bytes += (int)strlen(value->string.charset);
|
||||
bytes += strlen(value->string.charset);
|
||||
|
||||
if (value->string.text != NULL)
|
||||
bytes += (int)strlen(value->string.text);
|
||||
bytes += strlen(value->string.text);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2632,7 +2629,7 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */
|
||||
for (i = 0, value = attr->values;
|
||||
i < attr->num_values;
|
||||
i ++, value ++)
|
||||
bytes += (int)ipp_length(value->collection, 1);
|
||||
bytes += ipp_length(value->collection, 1);
|
||||
break;
|
||||
|
||||
default :
|
||||
@@ -2681,7 +2678,7 @@ ipp_read_http(http_t *http, /* I - Client connection */
|
||||
* Loop until all bytes are read...
|
||||
*/
|
||||
|
||||
for (tbytes = 0, bytes = 0; tbytes < (int)length; tbytes += bytes, buffer += bytes)
|
||||
for (tbytes = 0, bytes = 0; tbytes < length; tbytes += bytes, buffer += bytes)
|
||||
{
|
||||
DEBUG_printf(("tbytes = %d, http->state = %d\n", tbytes, http->state));
|
||||
|
||||
@@ -2694,8 +2691,8 @@ ipp_read_http(http_t *http, /* I - Client connection */
|
||||
* Do "fast read" from HTTP buffer directly...
|
||||
*/
|
||||
|
||||
if (http->used > (int)(length - tbytes))
|
||||
bytes = (int)(length - tbytes);
|
||||
if (http->used > (length - tbytes))
|
||||
bytes = length - tbytes;
|
||||
else
|
||||
bytes = http->used;
|
||||
|
||||
@@ -2786,11 +2783,7 @@ ipp_read_file(int *fd, /* I - File descriptor */
|
||||
ipp_uchar_t *buffer, /* O - Read buffer */
|
||||
size_t length) /* I - Number of bytes to read */
|
||||
{
|
||||
#ifdef WIN32
|
||||
return ((ssize_t)read(*fd, buffer, (unsigned)length));
|
||||
#else
|
||||
return (read(*fd, buffer, length));
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
@@ -2803,11 +2796,7 @@ ipp_write_file(int *fd, /* I - File descriptor */
|
||||
ipp_uchar_t *buffer, /* I - Data to write */
|
||||
size_t length) /* I - Number of bytes to write */
|
||||
{
|
||||
#ifdef WIN32
|
||||
return ((ssize_t)write(*fd, buffer, (unsigned)length));
|
||||
#else
|
||||
return (write(*fd, buffer, length));
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
|
||||
+2
-4
@@ -172,11 +172,10 @@ typedef enum ipp_jstate_e /**** Job States.... */
|
||||
IPP_JOB_HELD, /* Job is held for printing */
|
||||
IPP_JOB_PROCESSING, /* Job is currently printing */
|
||||
IPP_JOB_STOPPED, /* Job has been stopped */
|
||||
IPP_JOB_CANCELED, /* Job has been canceled */
|
||||
IPP_JOB_CANCELLED, /* Job has been cancelled */
|
||||
IPP_JOB_ABORTED, /* Job has aborted due to error */
|
||||
IPP_JOB_COMPLETED /* Job has completed successfully */
|
||||
} ipp_jstate_t;
|
||||
#define IPP_JOB_CANCELLED IPP_JOB_CANCELED
|
||||
|
||||
typedef enum ipp_pstate_e /**** Printer States.... */
|
||||
{
|
||||
@@ -305,11 +304,10 @@ typedef enum ipp_status_e /**** IPP status codes... ****/
|
||||
IPP_TEMPORARY_ERROR, /* server-error-temporary-error */
|
||||
IPP_NOT_ACCEPTING, /* server-error-not-accepting-jobs */
|
||||
IPP_PRINTER_BUSY, /* server-error-busy */
|
||||
IPP_ERROR_JOB_CANCELED, /* server-error-job-canceled */
|
||||
IPP_ERROR_JOB_CANCELLED, /* server-error-job-canceled */
|
||||
IPP_MULTIPLE_JOBS_NOT_SUPPORTED, /* server-error-multiple-document-jobs-not-supported */
|
||||
IPP_PRINTER_IS_DEACTIVATED /* server-error-printer-is-deactivated */
|
||||
} ipp_status_t;
|
||||
#define IPP_ERROR_JOB_CANCELLED IPP_ERROR_JOB_CANCELED
|
||||
|
||||
typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character ****/
|
||||
|
||||
|
||||
+3
-88
@@ -4,7 +4,7 @@
|
||||
* Localized printf/puts functions for the Common UNIX Printing
|
||||
* System (CUPS).
|
||||
*
|
||||
* Copyright 2002-2007 by Easy Software Products.
|
||||
* Copyright 2002-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -28,7 +28,6 @@
|
||||
*
|
||||
* _cupsLangPrintf() - Print a formatted message string to a file.
|
||||
* _cupsLangPuts() - Print a static message string to a file.
|
||||
* _cupsSetLocale() - Set the current locale and transcode the command-line.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -88,7 +87,7 @@ _cupsLangPrintf(FILE *fp, /* I - File to write to */
|
||||
*/
|
||||
|
||||
if (bytes > 0)
|
||||
return ((int)fwrite(output, 1, bytes, fp));
|
||||
return (fwrite(output, 1, bytes, fp));
|
||||
else
|
||||
return (bytes);
|
||||
}
|
||||
@@ -133,96 +132,12 @@ _cupsLangPuts(FILE *fp, /* I - File to write to */
|
||||
*/
|
||||
|
||||
if (bytes > 0)
|
||||
return ((int)fwrite(output, 1, bytes, fp));
|
||||
return (fwrite(output, 1, bytes, fp));
|
||||
else
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsSetLocale()' - Set the current locale and transcode the command-line.
|
||||
*/
|
||||
|
||||
void
|
||||
_cupsSetLocale(char *argv[]) /* IO - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
char buffer[8192]; /* Command-line argument buffer */
|
||||
_cups_globals_t *cg; /* Global data */
|
||||
#ifdef LC_TIME
|
||||
const char *lc_time; /* Current LC_TIME value */
|
||||
char new_lc_time[255], /* New LC_TIME value */
|
||||
*charset; /* Pointer to character set */
|
||||
#endif /* LC_TIME */
|
||||
|
||||
|
||||
/*
|
||||
* Set the locale so that times, etc. are displayed properly.
|
||||
*
|
||||
* Unfortunately, while we need the localized time value, we *don't*
|
||||
* want to use the localized charset for the time value, so we need
|
||||
* to set LC_TIME to the locale name with .UTF-8 on the end (if
|
||||
* the locale includes a character set specifier...)
|
||||
*/
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
#ifdef LC_TIME
|
||||
if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
|
||||
lc_time = setlocale(LC_ALL, NULL);
|
||||
|
||||
if (lc_time)
|
||||
{
|
||||
strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
|
||||
if ((charset = strchr(new_lc_time, '.')) == NULL)
|
||||
charset = new_lc_time + strlen(new_lc_time);
|
||||
|
||||
strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
|
||||
}
|
||||
else
|
||||
strcpy(new_lc_time, "C");
|
||||
|
||||
setlocale(LC_TIME, new_lc_time);
|
||||
#endif /* LC_TIME */
|
||||
|
||||
/*
|
||||
* Initialize the default language info...
|
||||
*/
|
||||
|
||||
cg = _cupsGlobals();
|
||||
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
/*
|
||||
* Transcode the command-line arguments from the locale charset to
|
||||
* UTF-8...
|
||||
*/
|
||||
|
||||
if (cg->lang_default->encoding != CUPS_US_ASCII &&
|
||||
cg->lang_default->encoding != CUPS_UTF8)
|
||||
{
|
||||
for (i = 1; argv[i]; i ++)
|
||||
{
|
||||
/*
|
||||
* Try converting from the locale charset to UTF-8...
|
||||
*/
|
||||
|
||||
if (cupsCharsetToUTF8((cups_utf8_t *)buffer, argv[i], sizeof(buffer),
|
||||
cg->lang_default->encoding) < 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Save the new string if it differs from the original...
|
||||
*/
|
||||
|
||||
if (strcmp(buffer, argv[i]))
|
||||
argv[i] = strdup(buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+63
-77
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* I18N/language support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -406,6 +406,14 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
|
||||
*ptr = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Default to UTF-8...
|
||||
*/
|
||||
|
||||
strcpy(charset, "UTF8");
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the locale for messages from the LC_MESSAGES locale setting...
|
||||
@@ -465,13 +473,6 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
}
|
||||
#endif /* CODESET */
|
||||
|
||||
/*
|
||||
* If we don't have a character set by now, default to UTF-8...
|
||||
*/
|
||||
|
||||
if (!charset[0])
|
||||
strcpy(charset, "UTF8");
|
||||
|
||||
/*
|
||||
* Parse the language string passed in to a locale string. "C" is the
|
||||
* standard POSIX locale and is copied unchanged. Otherwise the
|
||||
@@ -887,7 +888,7 @@ _cupsMessageLoad(const char *filename) /* I - Message catalog to load */
|
||||
* Append to current string...
|
||||
*/
|
||||
|
||||
length = (int)strlen(m->str ? m->str : m->id);
|
||||
length = strlen(m->str ? m->str : m->id);
|
||||
|
||||
if ((temp = realloc(m->str ? m->str : m->id,
|
||||
length + strlen(ptr) + 1)) == NULL)
|
||||
@@ -995,7 +996,6 @@ appleLangDefault(void)
|
||||
/* List of localization data */
|
||||
CFStringRef languageName; /* Current name */
|
||||
CFStringRef localeName; /* Canonical from of name */
|
||||
char *lang; /* LANG environment variable */
|
||||
_cups_globals_t *cg = _cupsGlobals();
|
||||
/* Pointer to library globals */
|
||||
|
||||
@@ -1006,43 +1006,38 @@ appleLangDefault(void)
|
||||
|
||||
if (!cg->language[0])
|
||||
{
|
||||
if ((lang = getenv("LANG")))
|
||||
strlcpy(cg->language, lang, sizeof(cg->language));
|
||||
else
|
||||
localizationList =
|
||||
CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
|
||||
if (localizationList != NULL)
|
||||
{
|
||||
localizationList =
|
||||
CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
|
||||
if (localizationList != NULL)
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
{
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
{
|
||||
languageName = CFArrayGetValueAtIndex(localizationList, 0);
|
||||
languageName = CFArrayGetValueAtIndex(localizationList, 0);
|
||||
|
||||
if (languageName != NULL &&
|
||||
CFGetTypeID(languageName) == CFStringGetTypeID())
|
||||
{
|
||||
localeName = CFLocaleCreateCanonicalLocaleIdentifierFromString(
|
||||
kCFAllocatorDefault, languageName);
|
||||
if (languageName != NULL &&
|
||||
CFGetTypeID(languageName) == CFStringGetTypeID())
|
||||
{
|
||||
localeName = CFLocaleCreateCanonicalLocaleIdentifierFromString(
|
||||
kCFAllocatorDefault, languageName);
|
||||
|
||||
if (localeName != NULL)
|
||||
{
|
||||
CFStringGetCString(localeName, cg->language, sizeof(cg->language),
|
||||
kCFStringEncodingASCII);
|
||||
CFRelease(localeName);
|
||||
if (localeName != NULL)
|
||||
{
|
||||
CFStringGetCString(localeName, cg->language, sizeof(cg->language),
|
||||
kCFStringEncodingASCII);
|
||||
CFRelease(localeName);
|
||||
|
||||
if (!strcmp(cg->language, "en"))
|
||||
strlcpy(cg->language, "en_US.UTF-8", sizeof(cg->language));
|
||||
else if (strchr(cg->language, '.') == NULL)
|
||||
strlcat(cg->language, ".UTF-8", sizeof(cg->language));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(localizationList);
|
||||
if (!strcmp(cg->language, "en"))
|
||||
strlcpy(cg->language, "en_US.UTF-8", sizeof(cg->language));
|
||||
else if (strchr(cg->language, '.') == NULL)
|
||||
strlcat(cg->language, ".UTF-8", sizeof(cg->language));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(localizationList);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1150,66 +1145,59 @@ appleLangDefault(void)
|
||||
char buff[256]; /* Temporary buffer */
|
||||
_cups_globals_t *cg = _cupsGlobals();
|
||||
/* Pointer to library globals */
|
||||
char *lang; /* LANG environment variable */
|
||||
|
||||
|
||||
/*
|
||||
* Only do the lookup and translation the first time.
|
||||
*/
|
||||
|
||||
if (!cg->language[0])
|
||||
if (cg->language == NULL)
|
||||
{
|
||||
if ((lang = getenv("LANG")))
|
||||
strlcpy(cg->language, lang, sizeof(cg->language));
|
||||
else
|
||||
localizationList =
|
||||
CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
|
||||
if (localizationList != NULL)
|
||||
{
|
||||
localizationList =
|
||||
CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
|
||||
if (localizationList != NULL)
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
{
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
localizationName = CFArrayGetValueAtIndex(localizationList, 0);
|
||||
|
||||
if (localizationName != NULL &&
|
||||
CFGetTypeID(localizationName) == CFStringGetTypeID())
|
||||
{
|
||||
localizationName = CFArrayGetValueAtIndex(localizationList, 0);
|
||||
CFIndex length = CFStringGetLength(localizationName);
|
||||
|
||||
if (localizationName != NULL &&
|
||||
CFGetTypeID(localizationName) == CFStringGetTypeID())
|
||||
if (length <= sizeof(buff) &&
|
||||
CFStringGetCString(localizationName, buff, sizeof(buff),
|
||||
kCFStringEncodingASCII))
|
||||
{
|
||||
CFIndex length = CFStringGetLength(localizationName);
|
||||
buff[sizeof(buff) - 1] = '\0';
|
||||
|
||||
if (length <= sizeof(buff) &&
|
||||
CFStringGetCString(localizationName, buff, sizeof(buff),
|
||||
kCFStringEncodingASCII))
|
||||
for (i = 0;
|
||||
i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]);
|
||||
i++)
|
||||
{
|
||||
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))
|
||||
{
|
||||
if (!strcasecmp(buff, apple_name_locale[i].name))
|
||||
{
|
||||
strlcpy(cg->language, apple_name_locale[i].locale,
|
||||
sizeof(cg->language));
|
||||
break;
|
||||
}
|
||||
cg->language = apple_name_locale[i].locale;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(localizationList);
|
||||
}
|
||||
|
||||
CFRelease(localizationList);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we didn't find the language, default to en_US...
|
||||
*/
|
||||
|
||||
if (!cg->language[0])
|
||||
strlcpy(cg->language, apple_name_locale[0].locale, sizeof(cg->language));
|
||||
if (cg->language == NULL)
|
||||
cg->language = apple_name_locale[0].locale;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1300,8 +1288,6 @@ cups_unquote(char *d, /* O - Unquoted string */
|
||||
*d = *d * 8 + *s - '0';
|
||||
s ++;
|
||||
}
|
||||
|
||||
d ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -16,7 +16,6 @@ _cupsMessageFree
|
||||
_cupsMessageLoad
|
||||
_cupsMessageLookup
|
||||
_cupsSetError
|
||||
_cupsSetLocale
|
||||
_cupsStrAlloc
|
||||
_cupsStrFlush
|
||||
_cupsStrFormatd
|
||||
@@ -28,7 +27,6 @@ _cups_freeifaddrs
|
||||
_cups_strcpy
|
||||
_cups_strlcat
|
||||
_cups_strlcpy
|
||||
_httpBIOMethods
|
||||
_ippAddAttr
|
||||
_ippFreeAttr
|
||||
_ppdGetEncoding
|
||||
|
||||
+3
-33
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD custom option routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -80,8 +80,6 @@ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("ppdLocalize(ppd=%p)\n", ppd));
|
||||
|
||||
if (!ppd)
|
||||
return (-1);
|
||||
|
||||
@@ -95,9 +93,6 @@ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */
|
||||
strlcpy(ll_CC, lang->language, sizeof(ll_CC));
|
||||
strlcpy(ll, lang->language, sizeof(ll));
|
||||
|
||||
DEBUG_printf((" lang->language=\"%s\", ll=\"%s\", ll_CC=\"%s\"...\n",
|
||||
lang->language, ll, ll_CC));
|
||||
|
||||
/*
|
||||
* Now lookup all of the groups, options, choices, etc.
|
||||
*/
|
||||
@@ -170,42 +165,17 @@ ppd_text(ppd_file_t *ppd, /* I - PPD file */
|
||||
ppd_attr_t *attr; /* Current attribute */
|
||||
|
||||
|
||||
DEBUG_printf(("ppd_text(ppd=%p, keyword=\"%s\", spec=\"%s\", "
|
||||
"ll_CC=\"%s\", ll=\"%s\")\n",
|
||||
ppd, keyword, spec, ll_CC, ll));
|
||||
|
||||
/*
|
||||
* Look for Keyword.ll_CC, then Keyword.ll...
|
||||
*/
|
||||
|
||||
snprintf(lkeyword, sizeof(lkeyword), "%s.%s", ll_CC, keyword);
|
||||
snprintf(lkeyword, sizeof(lkeyword), "%s.%s", keyword, ll_CC);
|
||||
if ((attr = ppdFindAttr(ppd, lkeyword, spec)) == NULL)
|
||||
{
|
||||
snprintf(lkeyword, sizeof(lkeyword), "%s.%s", ll, keyword);
|
||||
snprintf(lkeyword, sizeof(lkeyword), "%s.%s", keyword, ll);
|
||||
attr = ppdFindAttr(ppd, lkeyword, spec);
|
||||
|
||||
if (!attr && !strcmp(ll, "ja"))
|
||||
{
|
||||
/*
|
||||
* Due to a bug in the CUPS DDK 1.1.0 ppdmerge program, Japanese
|
||||
* PPD files were incorrectly assigned "jp" as the locale name
|
||||
* instead of "ja". Support both the old (incorrect) and new
|
||||
* locale names for Japanese...
|
||||
*/
|
||||
|
||||
snprintf(lkeyword, sizeof(lkeyword), "jp.%s", keyword);
|
||||
attr = ppdFindAttr(ppd, lkeyword, spec);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
if (attr)
|
||||
printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec, attr->text,
|
||||
attr->value ? attr->value : "");
|
||||
else
|
||||
puts(" NOT FOUND");
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Return text if we find it...
|
||||
*/
|
||||
|
||||
+45
-38
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Option marking routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -62,14 +62,15 @@ static void ppd_defaults(ppd_file_t *ppd, ppd_group_t *g);
|
||||
int /* O - Number of conflicts found */
|
||||
ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
{
|
||||
int i, j, /* Looping variables */
|
||||
int i, j, k, /* Looping variables */
|
||||
conflicts; /* Number of conflicts */
|
||||
ppd_const_t *c; /* Current constraint */
|
||||
ppd_group_t *g, *sg; /* Groups */
|
||||
ppd_option_t *o1, *o2; /* Options */
|
||||
ppd_choice_t *c1, *c2; /* Choices */
|
||||
|
||||
|
||||
if (!ppd)
|
||||
if (ppd == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@@ -78,8 +79,15 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
|
||||
conflicts = 0;
|
||||
|
||||
for (o1 = ppdFirstOption(ppd); o1; o1 = ppdNextOption(ppd))
|
||||
o1->conflicted = 0;
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
{
|
||||
for (j = g->num_options, o1 = g->options; j > 0; j --, o1 ++)
|
||||
o1->conflicted = 0;
|
||||
|
||||
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
|
||||
for (k = sg->num_options, o1 = sg->options; k > 0; k --, o1 ++)
|
||||
o1->conflicted = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop through all of the UI constraints and flag any options
|
||||
@@ -94,9 +102,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
|
||||
o1 = ppdFindOption(ppd, c->option1);
|
||||
|
||||
if (!o1)
|
||||
if (o1 == NULL)
|
||||
continue;
|
||||
else if (c->choice1[0])
|
||||
else if (c->choice1[0] != '\0')
|
||||
{
|
||||
/*
|
||||
* This constraint maps to a specific choice.
|
||||
@@ -114,10 +122,10 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c1->marked)
|
||||
break;
|
||||
|
||||
if (!j ||
|
||||
!strcasecmp(c1->choice, "None") ||
|
||||
!strcasecmp(c1->choice, "Off") ||
|
||||
!strcasecmp(c1->choice, "False"))
|
||||
if (j == 0 ||
|
||||
strcasecmp(c1->choice, "None") == 0 ||
|
||||
strcasecmp(c1->choice, "Off") == 0 ||
|
||||
strcasecmp(c1->choice, "False") == 0)
|
||||
c1 = NULL;
|
||||
}
|
||||
|
||||
@@ -127,9 +135,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
|
||||
o2 = ppdFindOption(ppd, c->option2);
|
||||
|
||||
if (!o2)
|
||||
if (o2 == NULL)
|
||||
continue;
|
||||
else if (c->choice2[0])
|
||||
else if (c->choice2[0] != '\0')
|
||||
{
|
||||
/*
|
||||
* This constraint maps to a specific choice.
|
||||
@@ -147,10 +155,10 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
if (c2->marked)
|
||||
break;
|
||||
|
||||
if (!j ||
|
||||
!strcasecmp(c2->choice, "None") ||
|
||||
!strcasecmp(c2->choice, "Off") ||
|
||||
!strcasecmp(c2->choice, "False"))
|
||||
if (j == 0 ||
|
||||
strcasecmp(c2->choice, "None") == 0 ||
|
||||
strcasecmp(c2->choice, "Off") == 0 ||
|
||||
strcasecmp(c2->choice, "False") == 0)
|
||||
c2 = NULL;
|
||||
}
|
||||
|
||||
@@ -158,7 +166,8 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
* If both options are marked then there is a conflict...
|
||||
*/
|
||||
|
||||
if (c1 && c1->marked && c2 && c2->marked)
|
||||
if (c1 != NULL && c1->marked &&
|
||||
c2 != NULL && c2->marked)
|
||||
{
|
||||
DEBUG_printf(("%s->%s conflicts with %s->%s (%s %s %s %s)\n",
|
||||
o1->keyword, c1->choice, o2->keyword, c2->choice,
|
||||
@@ -409,27 +418,26 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
cparam->current.custom_real = (float)_cupsStrScand(choice + 7,
|
||||
NULL, loc);
|
||||
cparam->current.custom_real = _cupsStrScand(choice + 7, NULL,
|
||||
loc);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_POINTS :
|
||||
cparam->current.custom_points = (float)_cupsStrScand(choice + 7,
|
||||
&units,
|
||||
loc);
|
||||
cparam->current.custom_points = _cupsStrScand(choice + 7,
|
||||
&units, loc);
|
||||
|
||||
if (units)
|
||||
{
|
||||
if (!strcasecmp(units, "cm"))
|
||||
cparam->current.custom_points *= 72.0f / 2.54f;
|
||||
cparam->current.custom_points *= 72.0 / 2.54;
|
||||
else if (!strcasecmp(units, "mm"))
|
||||
cparam->current.custom_points *= 72.0f / 25.4f;
|
||||
cparam->current.custom_points *= 72.0 / 25.4;
|
||||
else if (!strcasecmp(units, "m"))
|
||||
cparam->current.custom_points *= 72.0f / 0.0254f;
|
||||
cparam->current.custom_points *= 72.0 / 0.0254;
|
||||
else if (!strcasecmp(units, "in"))
|
||||
cparam->current.custom_points *= 72.0f;
|
||||
cparam->current.custom_points *= 72.0;
|
||||
else if (!strcasecmp(units, "ft"))
|
||||
cparam->current.custom_points *= 12.0f * 72.0f;
|
||||
cparam->current.custom_points *= 12 * 72.0;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -486,27 +494,26 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
case PPD_CUSTOM_CURVE :
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
case PPD_CUSTOM_REAL :
|
||||
cparam->current.custom_real = (float)_cupsStrScand(val->value,
|
||||
NULL, loc);
|
||||
cparam->current.custom_real = _cupsStrScand(val->value, NULL,
|
||||
loc);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_POINTS :
|
||||
cparam->current.custom_points = (float)_cupsStrScand(val->value,
|
||||
&units,
|
||||
loc);
|
||||
cparam->current.custom_points = _cupsStrScand(val->value, &units,
|
||||
loc);
|
||||
|
||||
if (units)
|
||||
{
|
||||
if (!strcasecmp(units, "cm"))
|
||||
cparam->current.custom_points *= 72.0f / 2.54f;
|
||||
cparam->current.custom_points *= 72.0 / 2.54;
|
||||
else if (!strcasecmp(units, "mm"))
|
||||
cparam->current.custom_points *= 72.0f / 25.4f;
|
||||
cparam->current.custom_points *= 72.0 / 25.4;
|
||||
else if (!strcasecmp(units, "m"))
|
||||
cparam->current.custom_points *= 72.0f / 0.0254f;
|
||||
cparam->current.custom_points *= 72.0 / 0.0254;
|
||||
else if (!strcasecmp(units, "in"))
|
||||
cparam->current.custom_points *= 72.0f;
|
||||
cparam->current.custom_points *= 72.0;
|
||||
else if (!strcasecmp(units, "ft"))
|
||||
cparam->current.custom_points *= 12.0f * 72.0f;
|
||||
cparam->current.custom_points *= 12 * 72.0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
|
||||
case IPP_JOB_STOPPED :
|
||||
state = _cupsLangString(lang, _("stopped"));
|
||||
break;
|
||||
case IPP_JOB_CANCELED :
|
||||
case IPP_JOB_CANCELLED :
|
||||
state = _cupsLangString(lang, _("canceled"));
|
||||
break;
|
||||
case IPP_JOB_ABORTED :
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Option routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -578,7 +578,7 @@ cupsParseOptions(
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRemoveOption()' - Remove an option from an option array.
|
||||
* 'cupsRemoveOptions()' - Remove an option from an option array.
|
||||
*
|
||||
* @since CUPS 1.2@
|
||||
*/
|
||||
@@ -622,7 +622,7 @@ cupsRemoveOption(
|
||||
free(option->value);
|
||||
|
||||
if (i > 0)
|
||||
memmove(option, option + 1, i * sizeof(cups_option_t));
|
||||
memmove(option, option + 1, i * sizeof(cups_option_t *));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+39
-55
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Page size functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2005 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
|
||||
@@ -50,12 +50,9 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
const char *name) /* I - Size name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_size_t *size; /* Current page size */
|
||||
float w, l; /* Width and length of page */
|
||||
char *nameptr; /* Pointer into name */
|
||||
struct lconv *loc; /* Locale data */
|
||||
ppd_coption_t *coption; /* Custom option for page size */
|
||||
ppd_cparam_t *cparam; /* Custom option parameter */
|
||||
|
||||
|
||||
if (!ppd)
|
||||
@@ -69,11 +66,11 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Find the custom page size...
|
||||
*/
|
||||
|
||||
for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
|
||||
if (!strcmp("Custom", size->name))
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
if (!strcmp("Custom", ppd->sizes[i].name))
|
||||
break;
|
||||
|
||||
if (!i)
|
||||
if (i == ppd->num_sizes)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
@@ -86,65 +83,52 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
*/
|
||||
|
||||
loc = localeconv();
|
||||
w = (float)_cupsStrScand(name + 7, &nameptr, loc);
|
||||
w = _cupsStrScand(name + 7, &nameptr, loc);
|
||||
if (!nameptr || *nameptr != 'x')
|
||||
return (NULL);
|
||||
|
||||
l = (float)_cupsStrScand(nameptr + 1, &nameptr, loc);
|
||||
l = _cupsStrScand(nameptr + 1, &nameptr, loc);
|
||||
if (!nameptr)
|
||||
return (NULL);
|
||||
|
||||
if (!strcasecmp(nameptr, "in"))
|
||||
{
|
||||
w *= 72.0f;
|
||||
l *= 72.0f;
|
||||
}
|
||||
else if (!strcasecmp(nameptr, "ft"))
|
||||
{
|
||||
w *= 12.0f * 72.0f;
|
||||
l *= 12.0f * 72.0f;
|
||||
}
|
||||
else if (!strcasecmp(nameptr, "mm"))
|
||||
{
|
||||
w *= 72.0f / 25.4f;
|
||||
l *= 72.0f / 25.4f;
|
||||
ppd->sizes[i].width = w * 72.0f;
|
||||
ppd->sizes[i].length = l * 72.0f;
|
||||
ppd->sizes[i].left = ppd->custom_margins[0];
|
||||
ppd->sizes[i].bottom = ppd->custom_margins[1];
|
||||
ppd->sizes[i].right = w * 72.0f - ppd->custom_margins[2];
|
||||
ppd->sizes[i].top = l * 72.0f - ppd->custom_margins[3];
|
||||
}
|
||||
else if (!strcasecmp(nameptr, "cm"))
|
||||
{
|
||||
w *= 72.0f / 2.54f;
|
||||
l *= 72.0f / 2.54f;
|
||||
ppd->sizes[i].width = w / 2.54f * 72.0f;
|
||||
ppd->sizes[i].length = l / 2.54f * 72.0f;
|
||||
ppd->sizes[i].left = ppd->custom_margins[0];
|
||||
ppd->sizes[i].bottom = ppd->custom_margins[1];
|
||||
ppd->sizes[i].right = w / 2.54f * 72.0f - ppd->custom_margins[2];
|
||||
ppd->sizes[i].top = l / 2.54f * 72.0f - ppd->custom_margins[3];
|
||||
}
|
||||
else if (!strcasecmp(nameptr, "m"))
|
||||
else if (!strcasecmp(nameptr, "mm"))
|
||||
{
|
||||
w *= 72.0f / 0.0254f;
|
||||
l *= 72.0f / 0.0254f;
|
||||
ppd->sizes[i].width = w / 25.4f * 72.0f;
|
||||
ppd->sizes[i].length = l / 25.4f * 72.0f;
|
||||
ppd->sizes[i].left = ppd->custom_margins[0];
|
||||
ppd->sizes[i].bottom = ppd->custom_margins[1];
|
||||
ppd->sizes[i].right = w / 25.4f * 72.0f - ppd->custom_margins[2];
|
||||
ppd->sizes[i].top = l / 25.4f * 72.0f - ppd->custom_margins[3];
|
||||
}
|
||||
|
||||
size->width = w;
|
||||
size->length = l;
|
||||
size->left = ppd->custom_margins[0];
|
||||
size->bottom = ppd->custom_margins[1];
|
||||
size->right = w - ppd->custom_margins[2];
|
||||
size->top = l - ppd->custom_margins[3];
|
||||
|
||||
/*
|
||||
* Update the custom option records for the page size, too...
|
||||
*/
|
||||
|
||||
if ((coption = ppdFindCustomOption(ppd, "PageSize")) != NULL)
|
||||
else
|
||||
{
|
||||
if ((cparam = ppdFindCustomParam(coption, "Width")) != NULL)
|
||||
cparam->current.custom_points = w;
|
||||
|
||||
if ((cparam = ppdFindCustomParam(coption, "Height")) != NULL)
|
||||
cparam->current.custom_points = l;
|
||||
ppd->sizes[i].width = w;
|
||||
ppd->sizes[i].length = l;
|
||||
ppd->sizes[i].left = ppd->custom_margins[0];
|
||||
ppd->sizes[i].bottom = ppd->custom_margins[1];
|
||||
ppd->sizes[i].right = w - ppd->custom_margins[2];
|
||||
ppd->sizes[i].top = l - ppd->custom_margins[3];
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the page size...
|
||||
*/
|
||||
|
||||
return (size);
|
||||
return (ppd->sizes + i);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -152,9 +136,9 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Lookup by name...
|
||||
*/
|
||||
|
||||
for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
|
||||
if (!strcmp(name, size->name))
|
||||
return (size);
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
if (!strcasecmp(name, ppd->sizes[i].name))
|
||||
return (ppd->sizes + i);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -163,9 +147,9 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
* Find default...
|
||||
*/
|
||||
|
||||
for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
|
||||
if (size->marked)
|
||||
return (size);
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
if (ppd->sizes[i].marked)
|
||||
return (ppd->sizes + i);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
|
||||
+34
-142
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD file routines for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 1997-2006 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
|
||||
@@ -819,17 +819,17 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
strlcpy(profile->resolution, name, sizeof(profile->resolution));
|
||||
strlcpy(profile->media_type, text, sizeof(profile->media_type));
|
||||
|
||||
profile->density = (float)_cupsStrScand(string, &sptr, loc);
|
||||
profile->gamma = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][0] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][1] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][2] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][0] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][1] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][2] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][0] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][1] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][2] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
profile->density = _cupsStrScand(string, &sptr, loc);
|
||||
profile->gamma = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][0] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][1] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[0][2] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][0] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][1] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[1][2] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][0] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][1] = _cupsStrScand(sptr, &sptr, loc);
|
||||
profile->matrix[2][2] = _cupsStrScand(sptr, &sptr, loc);
|
||||
}
|
||||
else if (!strcmp(keyword, "cupsFilter"))
|
||||
{
|
||||
@@ -928,8 +928,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
if (!strcmp(ctype, "curve"))
|
||||
{
|
||||
cparam->type = PPD_CUSTOM_CURVE;
|
||||
cparam->minimum.custom_curve = (float)_cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_curve = (float)_cupsStrScand(cmaximum, NULL, loc);
|
||||
cparam->minimum.custom_curve = _cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_curve = _cupsStrScand(cmaximum, NULL, loc);
|
||||
}
|
||||
else if (!strcmp(ctype, "int"))
|
||||
{
|
||||
@@ -940,8 +940,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
else if (!strcmp(ctype, "invcurve"))
|
||||
{
|
||||
cparam->type = PPD_CUSTOM_INVCURVE;
|
||||
cparam->minimum.custom_invcurve = (float)_cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_invcurve = (float)_cupsStrScand(cmaximum, NULL, loc);
|
||||
cparam->minimum.custom_invcurve = _cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_invcurve = _cupsStrScand(cmaximum, NULL, loc);
|
||||
}
|
||||
else if (!strcmp(ctype, "passcode"))
|
||||
{
|
||||
@@ -958,14 +958,14 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
else if (!strcmp(ctype, "points"))
|
||||
{
|
||||
cparam->type = PPD_CUSTOM_POINTS;
|
||||
cparam->minimum.custom_points = (float)_cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_points = (float)_cupsStrScand(cmaximum, NULL, loc);
|
||||
cparam->minimum.custom_points = _cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_points = _cupsStrScand(cmaximum, NULL, loc);
|
||||
}
|
||||
else if (!strcmp(ctype, "real"))
|
||||
{
|
||||
cparam->type = PPD_CUSTOM_REAL;
|
||||
cparam->minimum.custom_real = (float)_cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_real = (float)_cupsStrScand(cmaximum, NULL, loc);
|
||||
cparam->minimum.custom_real = _cupsStrScand(cminimum, NULL, loc);
|
||||
cparam->maximum.custom_real = _cupsStrScand(cmaximum, NULL, loc);
|
||||
}
|
||||
else if (!strcmp(ctype, "string"))
|
||||
{
|
||||
@@ -1001,7 +1001,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
else if (!strcmp(keyword, "HWMargins"))
|
||||
{
|
||||
for (i = 0, sptr = string; i < 4; i ++)
|
||||
ppd->custom_margins[i] = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
ppd->custom_margins[i] = _cupsStrScand(sptr, &sptr, loc);
|
||||
}
|
||||
else if (!strncmp(keyword, "Custom", 6) && !strcmp(name, "True"))
|
||||
{
|
||||
@@ -1400,7 +1400,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
else if (!strcmp(keyword, "OrderDependency") ||
|
||||
!strcmp(keyword, "NonUIOrderDependency"))
|
||||
{
|
||||
order = (float)_cupsStrScand(string, &sptr, loc);
|
||||
order = _cupsStrScand(string, &sptr, loc);
|
||||
|
||||
if (!sptr || sscanf(sptr, "%40s%40s", name, keyword) != 2)
|
||||
{
|
||||
@@ -1549,18 +1549,6 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
goto error;
|
||||
|
||||
case 2 : /* Two options... */
|
||||
/*
|
||||
* Check for broken constraints like "* Option"...
|
||||
*/
|
||||
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
(!strcmp(constraint->option1, "*") ||
|
||||
!strcmp(constraint->choice1, "*")))
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following strcpy's are safe, as optionN and
|
||||
* choiceN are all the same size (size defined by PPD spec...)
|
||||
@@ -1568,38 +1556,17 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
|
||||
if (constraint->option1[0] == '*')
|
||||
_cups_strcpy(constraint->option1, constraint->option1 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (constraint->choice1[0] == '*')
|
||||
_cups_strcpy(constraint->option2, constraint->choice1 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
else
|
||||
_cups_strcpy(constraint->option2, constraint->choice1);
|
||||
|
||||
constraint->choice1[0] = '\0';
|
||||
constraint->choice2[0] = '\0';
|
||||
break;
|
||||
|
||||
case 3 : /* Two options, one choice... */
|
||||
/*
|
||||
* Check for broken constraints like "* Option"...
|
||||
*/
|
||||
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
(!strcmp(constraint->option1, "*") ||
|
||||
!strcmp(constraint->choice1, "*") ||
|
||||
!strcmp(constraint->option2, "*")))
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following _cups_strcpy's are safe, as optionN and
|
||||
* choiceN are all the same size (size defined by PPD spec...)
|
||||
@@ -1607,21 +1574,9 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
|
||||
if (constraint->option1[0] == '*')
|
||||
_cups_strcpy(constraint->option1, constraint->option1 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (constraint->choice1[0] == '*')
|
||||
{
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
constraint->option2[0] == '*')
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
_cups_strcpy(constraint->choice2, constraint->option2);
|
||||
_cups_strcpy(constraint->option2, constraint->choice1 + 1);
|
||||
constraint->choice1[0] = '\0';
|
||||
@@ -1630,85 +1585,20 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
{
|
||||
if (constraint->option2[0] == '*')
|
||||
_cups_strcpy(constraint->option2, constraint->option2 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
constraint->choice2[0] = '\0';
|
||||
}
|
||||
break;
|
||||
|
||||
case 4 : /* Two options, two choices... */
|
||||
/*
|
||||
* Check for broken constraints like "* Option"...
|
||||
*/
|
||||
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
(!strcmp(constraint->option1, "*") ||
|
||||
!strcmp(constraint->choice1, "*") ||
|
||||
!strcmp(constraint->option2, "*") ||
|
||||
!strcmp(constraint->choice2, "*")))
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (constraint->option1[0] == '*')
|
||||
_cups_strcpy(constraint->option1, constraint->option1 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
constraint->choice1[0] == '*')
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (constraint->option2[0] == '*')
|
||||
_cups_strcpy(constraint->option2, constraint->option2 + 1);
|
||||
else if (cg->ppd_conform == PPD_CONFORM_STRICT)
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (cg->ppd_conform == PPD_CONFORM_STRICT &&
|
||||
constraint->choice2[0] == '*')
|
||||
{
|
||||
cg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
|
||||
goto error;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle CustomFoo option constraints...
|
||||
*/
|
||||
|
||||
if (!strncasecmp(constraint->option1, "Custom", 6) &&
|
||||
!strcasecmp(constraint->choice1, "True"))
|
||||
{
|
||||
_cups_strcpy(constraint->option1, constraint->option1 + 6);
|
||||
strcpy(constraint->choice1, "Custom");
|
||||
}
|
||||
|
||||
if (!strncasecmp(constraint->option2, "Custom", 6) &&
|
||||
!strcasecmp(constraint->choice2, "True"))
|
||||
{
|
||||
_cups_strcpy(constraint->option2, constraint->option2 + 6);
|
||||
strcpy(constraint->choice2, "Custom");
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't add this one as an attribute...
|
||||
*/
|
||||
|
||||
ppd_free(string);
|
||||
string = NULL;
|
||||
}
|
||||
@@ -1728,8 +1618,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
goto error;
|
||||
}
|
||||
|
||||
size->width = (float)_cupsStrScand(string, &sptr, loc);
|
||||
size->length = (float)_cupsStrScand(sptr, NULL, loc);
|
||||
size->width = _cupsStrScand(string, &sptr, loc);
|
||||
size->length = _cupsStrScand(sptr, NULL, loc);
|
||||
|
||||
ppd_free(string);
|
||||
string = NULL;
|
||||
@@ -1750,10 +1640,10 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
|
||||
goto error;
|
||||
}
|
||||
|
||||
size->left = (float)_cupsStrScand(string, &sptr, loc);
|
||||
size->bottom = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
size->right = (float)_cupsStrScand(sptr, &sptr, loc);
|
||||
size->top = (float)_cupsStrScand(sptr, NULL, loc);
|
||||
size->left = _cupsStrScand(string, &sptr, loc);
|
||||
size->bottom = _cupsStrScand(sptr, &sptr, loc);
|
||||
size->right = _cupsStrScand(sptr, &sptr, loc);
|
||||
size->top = _cupsStrScand(sptr, NULL, loc);
|
||||
|
||||
ppd_free(string);
|
||||
string = NULL;
|
||||
@@ -2147,8 +2037,10 @@ ppd_compare_attrs(ppd_attr_t *a, /* I - First attribute */
|
||||
|
||||
if ((ret = strcasecmp(a->name, b->name)) != 0)
|
||||
return (ret);
|
||||
else
|
||||
else if (a->spec[0] && b->spec[0])
|
||||
return (strcasecmp(a->spec, b->spec));
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -2370,7 +2262,7 @@ ppd_get_cparam(ppd_coption_t *opt, /* I - PPD file */
|
||||
return (NULL);
|
||||
|
||||
strlcpy(cparam->name, param, sizeof(cparam->name));
|
||||
strlcpy(cparam->text, text[0] ? text : param, sizeof(cparam->text));
|
||||
strlcpy(cparam->text, text, sizeof(cparam->text));
|
||||
|
||||
/*
|
||||
* Add this record to the array...
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP utilities for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -285,7 +285,7 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
#ifdef WIN32
|
||||
if (http->error != WSAENETDOWN && http->error != WSAENETUNREACH &&
|
||||
http->error != WSAETIMEDOUT)
|
||||
http->error != ETIMEDOUT)
|
||||
#else
|
||||
if (http->error != ENETDOWN && http->error != ENETUNREACH &&
|
||||
http->error != ETIMEDOUT)
|
||||
|
||||
+7
-7
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* snprintf functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -195,7 +195,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, double));
|
||||
|
||||
bytes += (int)strlen(temp);
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
@@ -225,7 +225,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
|
||||
bytes += (int)strlen(temp);
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
@@ -248,7 +248,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, void *));
|
||||
|
||||
bytes += (int)strlen(temp);
|
||||
bytes += strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
@@ -275,7 +275,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
else
|
||||
{
|
||||
if ((bufptr + width) > bufend)
|
||||
width = (int)(bufend - bufptr);
|
||||
width = bufend - bufptr;
|
||||
|
||||
memcpy(bufptr, va_arg(ap, char *), (size_t)width);
|
||||
bufptr += width;
|
||||
@@ -287,7 +287,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
if ((s = va_arg(ap, char *)) == NULL)
|
||||
s = "(null)";
|
||||
|
||||
slen = (int)strlen(s);
|
||||
slen = strlen(s);
|
||||
if (slen > width && prec != width)
|
||||
width = slen;
|
||||
|
||||
@@ -296,7 +296,7 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + width) > bufend)
|
||||
width = (int)(bufend - bufptr);
|
||||
width = bufend - bufptr;
|
||||
|
||||
if (slen > width)
|
||||
slen = width;
|
||||
|
||||
+4
-45
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* String functions for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -243,7 +243,7 @@ _cupsStrFormatd(char *buf, /* I - String */
|
||||
if (loc && loc->decimal_point)
|
||||
{
|
||||
dec = loc->decimal_point;
|
||||
declen = (int)strlen(dec);
|
||||
declen = strlen(dec);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -266,9 +266,9 @@ _cupsStrFormatd(char *buf, /* I - String */
|
||||
tempptr < tempdec && bufptr < bufend;
|
||||
*bufptr++ = *tempptr++);
|
||||
|
||||
tempptr += declen;
|
||||
tempdec += declen;
|
||||
|
||||
if (*tempptr && bufptr < bufend)
|
||||
if (*tempdec && bufptr < bufend)
|
||||
{
|
||||
*bufptr++ = '.';
|
||||
|
||||
@@ -439,47 +439,6 @@ _cupsStrScand(const char *buf, /* I - Pointer to number */
|
||||
}
|
||||
}
|
||||
|
||||
if (*buf == 'e' || *buf == 'E')
|
||||
{
|
||||
/*
|
||||
* Read exponent...
|
||||
*/
|
||||
|
||||
if (tempptr < (temp + sizeof(temp) - 1))
|
||||
*tempptr++ = *buf++;
|
||||
else
|
||||
{
|
||||
if (bufptr)
|
||||
*bufptr = NULL;
|
||||
|
||||
return (0.0);
|
||||
}
|
||||
|
||||
if (*buf == '+' || *buf == '-')
|
||||
{
|
||||
if (tempptr < (temp + sizeof(temp) - 1))
|
||||
*tempptr++ = *buf++;
|
||||
else
|
||||
{
|
||||
if (bufptr)
|
||||
*bufptr = NULL;
|
||||
|
||||
return (0.0);
|
||||
}
|
||||
}
|
||||
|
||||
while (isdigit(*buf & 255))
|
||||
if (tempptr < (temp + sizeof(temp) - 1))
|
||||
*tempptr++ = *buf++;
|
||||
else
|
||||
{
|
||||
if (bufptr)
|
||||
*bufptr = NULL;
|
||||
|
||||
return (0.0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Nul-terminate the temporary string and return the value...
|
||||
*/
|
||||
|
||||
+12
-14
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Temp file utilities for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -25,9 +25,9 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsTempFd() - Creates a temporary file.
|
||||
* cupsTempFile() - Generates a temporary filename.
|
||||
* cupsTempFile2() - Creates a temporary CUPS file.
|
||||
* cupsTempFd() - Create a temporary file.
|
||||
* cupsTempFile() - Generate a temporary filename.
|
||||
* cupsTempFile2() - Create a temporary CUPS file.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -48,13 +48,12 @@
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsTempFd()' - Creates a temporary file.
|
||||
* 'cupsTempFd()' - Create a temporary file.
|
||||
*
|
||||
* The temporary filename is returned in the filename buffer.
|
||||
* The temporary file is opened for reading and writing.
|
||||
* The temporary filename is stored in the filename buffer.
|
||||
*/
|
||||
|
||||
int /* O - New file descriptor or -1 on error */
|
||||
int /* O - New file descriptor */
|
||||
cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
int len) /* I - Size of buffer */
|
||||
{
|
||||
@@ -159,16 +158,16 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsTempFile()' - Generates a temporary filename.
|
||||
* 'cupsTempFile()' - Generate a temporary filename.
|
||||
*
|
||||
* The temporary filename is returned in the filename buffer.
|
||||
* The temporary filename is stored in the filename buffer.
|
||||
* This function is deprecated - use cupsTempFd() or cupsTempFile2()
|
||||
* instead.
|
||||
*
|
||||
* @deprecated@
|
||||
*/
|
||||
|
||||
char * /* O - Filename or NULL on error */
|
||||
char * /* O - Filename */
|
||||
cupsTempFile(char *filename, /* I - Pointer to buffer */
|
||||
int len) /* I - Size of buffer */
|
||||
{
|
||||
@@ -208,10 +207,9 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsTempFile2()' - Creates a temporary CUPS file.
|
||||
* 'cupsTempFile2()' - Create a temporary CUPS file.
|
||||
*
|
||||
* The temporary filename is returned in the filename buffer.
|
||||
* The temporary file is opened for writing.
|
||||
* The temporary filename is stored in the filename buffer.
|
||||
*
|
||||
* @since CUPS 1.2@
|
||||
*/
|
||||
|
||||
+3
-27
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* File test program for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Easy Software Products and are protected by Federal
|
||||
@@ -86,13 +86,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
*/
|
||||
|
||||
fputs("cupsFileFind: ", stdout);
|
||||
#ifdef WIN32
|
||||
if (cupsFileFind("notepad.exe", "C:/WINDOWS", 1, filename, sizeof(filename)) &&
|
||||
cupsFileFind("notepad.exe", "C:/WINDOWS;C:/WINDOWS/SYSTEM32", 1, filename, sizeof(filename)))
|
||||
#else
|
||||
if (cupsFileFind("cat", "/bin", 1, filename, sizeof(filename)) &&
|
||||
cupsFileFind("cat", "/bin:/usr/bin", 1, filename, sizeof(filename)))
|
||||
#endif /* WIN32 */
|
||||
printf("PASS (%s)\n", filename);
|
||||
else
|
||||
{
|
||||
@@ -170,12 +165,7 @@ read_write_tests(int compression) /* I - Use compression? */
|
||||
* Initialize the write buffer with random data...
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
srand((unsigned)time(NULL));
|
||||
#else
|
||||
srand(time(NULL));
|
||||
#endif /* WIN32 */
|
||||
|
||||
for (i = 0; i < (int)sizeof(writebuf); i ++)
|
||||
writebuf[i] = rand();
|
||||
|
||||
@@ -372,28 +362,14 @@ read_write_tests(int compression) /* I - Use compression? */
|
||||
}
|
||||
|
||||
/*
|
||||
* cupsFileGetChar()
|
||||
* cupsGetChar()
|
||||
*/
|
||||
|
||||
fputs("cupsFileGetChar(): ", stdout);
|
||||
fputs("cupsGetChar(): ", stdout);
|
||||
|
||||
#ifdef DEBUG
|
||||
puts("\ni byte\n----- -----");
|
||||
|
||||
for (i = 0; i < 256; i ++)
|
||||
{
|
||||
byte = cupsFileGetChar(fp);
|
||||
|
||||
printf("%-5d %-5d\n", i, byte);
|
||||
|
||||
if (byte != i)
|
||||
break;
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < 256; i ++)
|
||||
if ((byte = cupsFileGetChar(fp)) != i)
|
||||
break;
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (i >= 256)
|
||||
puts("PASS");
|
||||
|
||||
@@ -84,8 +84,6 @@ static uri_test_t uri_tests[] = /* URI test data */
|
||||
"http", "username:password", "server", "/", 8080, 8080 },
|
||||
{ HTTP_URI_OK, "http://username:passwor%64@server:8080/directory/filename",
|
||||
"http", "username:password", "server", "/directory/filename", 8080, 8080 },
|
||||
{ HTTP_URI_OK, "http://[2000::10:100]:631/ipp",
|
||||
"http", "", "2000::10:100", "/ipp", 631, 631 },
|
||||
{ HTTP_URI_OK, "https://username:passwor%64@server/directory/filename",
|
||||
"https", "username:password", "server", "/directory/filename", 443, 0 },
|
||||
{ HTTP_URI_OK, "ipp://username:passwor%64@[::1]/ipp",
|
||||
|
||||
+3
-2
@@ -82,6 +82,7 @@ main(int argc, /* I - Argument Count */
|
||||
/* "A != <CJK U+4E42>." - use Windows 950 (Big5) or EUC-TW */
|
||||
cups_utf8_t utf8dest[1024]; /* UTF-8 destination string */
|
||||
cups_utf32_t utf32dest[1024]; /* UTF-32 destination string */
|
||||
_cups_vmap_t *vmap; /* VBCS charmap pointer */
|
||||
|
||||
|
||||
/*
|
||||
@@ -189,7 +190,7 @@ main(int argc, /* I - Argument Count */
|
||||
|
||||
fputs("_cupsCharmapGet(CUPS_EUC_JP): ", stdout);
|
||||
|
||||
if (!_cupsCharmapGet(CUPS_EUC_JP))
|
||||
if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_JP)) == NULL)
|
||||
{
|
||||
errors ++;
|
||||
puts("FAIL");
|
||||
@@ -203,7 +204,7 @@ main(int argc, /* I - Argument Count */
|
||||
|
||||
fputs("_cupsCharmapGet(CUPS_EUC_TW): ", stdout);
|
||||
|
||||
if (!_cupsCharmapGet(CUPS_EUC_TW))
|
||||
if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_TW)) == NULL)
|
||||
{
|
||||
errors ++;
|
||||
puts("FAIL");
|
||||
|
||||
+1
-37
@@ -34,7 +34,6 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include "i18n.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -45,24 +44,10 @@ int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int errors = 0; /* Number of errors */
|
||||
cups_lang_t *language; /* Message catalog */
|
||||
cups_lang_t *language2; /* Message catalog */
|
||||
struct lconv *loc; /* Locale data */
|
||||
char buffer[1024]; /* String buffer */
|
||||
double number; /* Number */
|
||||
static const char * const tests[] = /* Test strings */
|
||||
{
|
||||
"1",
|
||||
"-1",
|
||||
"3",
|
||||
"5.125"
|
||||
};
|
||||
|
||||
|
||||
_cupsSetLocale(argv);
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
language = cupsLangDefault();
|
||||
@@ -76,8 +61,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (language != language2)
|
||||
{
|
||||
errors ++;
|
||||
|
||||
puts("**** ERROR: Language cache did not work! ****");
|
||||
puts("First result from cupsLangGet:");
|
||||
}
|
||||
@@ -97,26 +80,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
printf("Yes = \"%s\"\n", _cupsLangString(language2, "Yes"));
|
||||
}
|
||||
|
||||
loc = localeconv();
|
||||
|
||||
for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i ++)
|
||||
{
|
||||
number = _cupsStrScand(tests[i], NULL, loc);
|
||||
|
||||
printf("_cupsStrScand(\"%s\") number=%f\n", tests[i], number);
|
||||
|
||||
_cupsStrFormatd(buffer, buffer + sizeof(buffer), number, loc);
|
||||
|
||||
printf("_cupsStrFormatd(%f) buffer=\"%s\"\n", number, buffer);
|
||||
|
||||
if (strcmp(buffer, tests[i]))
|
||||
{
|
||||
errors ++;
|
||||
puts("**** ERROR: Bad formatted number! ****");
|
||||
}
|
||||
}
|
||||
|
||||
return (errors > 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-86
@@ -192,20 +192,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
else
|
||||
{
|
||||
int i, j, k; /* Looping vars */
|
||||
ppd_attr_t *attr; /* Current attribute */
|
||||
ppd_group_t *group; /* Option group */
|
||||
ppd_option_t *option; /* Option */
|
||||
ppd_coption_t *coption; /* Custom option */
|
||||
ppd_cparam_t *cparam; /* Custom parameter */
|
||||
char lang[255]; /* LANG environment variable */
|
||||
|
||||
|
||||
if (argc > 2)
|
||||
{
|
||||
snprintf(lang, sizeof(lang), "LANG=%s", argv[2]);
|
||||
putenv(lang);
|
||||
}
|
||||
|
||||
ppdLocalize(ppd);
|
||||
|
||||
for (i = ppd->num_groups, group = ppd->groups;
|
||||
@@ -213,7 +203,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
i --, group ++)
|
||||
{
|
||||
printf("%s (%s):\n", group->name, group->text);
|
||||
|
||||
|
||||
for (j = group->num_options, option = group->options;
|
||||
j > 0;
|
||||
j --, option ++)
|
||||
@@ -223,83 +213,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
for (k = 0; k < option->num_choices; k ++)
|
||||
printf(" - %s (%s)\n", option->choices[k].choice,
|
||||
option->choices[k].text);
|
||||
|
||||
if ((coption = ppdFindCustomOption(ppd, option->keyword)) != NULL)
|
||||
{
|
||||
for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params);
|
||||
cparam;
|
||||
cparam = (ppd_cparam_t *)cupsArrayNext(coption->params))
|
||||
{
|
||||
switch (cparam->type)
|
||||
{
|
||||
case PPD_CUSTOM_CURVE :
|
||||
printf(" %s(%s): PPD_CUSTOM_CURVE (%g to %g)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_curve,
|
||||
cparam->maximum.custom_curve);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_INT :
|
||||
printf(" %s(%s): PPD_CUSTOM_INT (%d to %d)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_int,
|
||||
cparam->maximum.custom_int);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_INVCURVE :
|
||||
printf(" %s(%s): PPD_CUSTOM_INVCURVE (%g to %g)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_invcurve,
|
||||
cparam->maximum.custom_invcurve);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_PASSCODE :
|
||||
printf(" %s(%s): PPD_CUSTOM_PASSCODE (%d to %d)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_passcode,
|
||||
cparam->maximum.custom_passcode);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_PASSWORD :
|
||||
printf(" %s(%s): PPD_CUSTOM_PASSWORD (%d to %d)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_password,
|
||||
cparam->maximum.custom_password);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_POINTS :
|
||||
printf(" %s(%s): PPD_CUSTOM_POINTS (%g to %g)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_points,
|
||||
cparam->maximum.custom_points);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_REAL :
|
||||
printf(" %s(%s): PPD_CUSTOM_REAL (%g to %g)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_real,
|
||||
cparam->maximum.custom_real);
|
||||
break;
|
||||
|
||||
case PPD_CUSTOM_STRING :
|
||||
printf(" %s(%s): PPD_CUSTOM_STRING (%d to %d)\n",
|
||||
cparam->name, cparam->text,
|
||||
cparam->minimum.custom_string,
|
||||
cparam->maximum.custom_string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
puts("Attributes:");
|
||||
|
||||
for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs);
|
||||
attr;
|
||||
attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs))
|
||||
printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec,
|
||||
attr->text, attr->value ? attr->value : "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-78
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Transcoding support for the Common UNIX Printing System (CUPS).
|
||||
*
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are
|
||||
* the property of Easy Software Products and are protected by Federal
|
||||
@@ -292,39 +292,7 @@ cupsCharsetToUTF8(
|
||||
encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END)
|
||||
{
|
||||
strlcpy((char *)dest, src, maxout);
|
||||
return ((int)strlen((char *)dest));
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle ISO-8859-1 to UTF-8 directly...
|
||||
*/
|
||||
|
||||
if (encoding == CUPS_ISO8859_1)
|
||||
{
|
||||
int ch; /* Character from string */
|
||||
cups_utf8_t *destptr, /* Pointer into UTF-8 buffer */
|
||||
*destend; /* End of UTF-8 buffer */
|
||||
|
||||
|
||||
destptr = dest;
|
||||
destend = dest + maxout - 2;
|
||||
|
||||
while (*src && destptr < destend)
|
||||
{
|
||||
ch = *src++ & 255;
|
||||
|
||||
if (ch & 128)
|
||||
{
|
||||
*destptr++ = 0xc0 | (ch >> 6);
|
||||
*destptr++ = 0x80 | (ch & 0x3f);
|
||||
}
|
||||
else
|
||||
*destptr++ = ch;
|
||||
}
|
||||
|
||||
*destptr = '\0';
|
||||
|
||||
return ((int)(destptr - dest));
|
||||
return (strlen((char *)dest));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -392,46 +360,7 @@ cupsUTF8ToCharset(
|
||||
encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END)
|
||||
{
|
||||
strlcpy(dest, (char *)src, maxout);
|
||||
return ((int)strlen(dest));
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle UTF-8 to ISO-8859-1 directly...
|
||||
*/
|
||||
|
||||
if (encoding == CUPS_ISO8859_1)
|
||||
{
|
||||
int ch; /* Character from string */
|
||||
char *destptr, /* Pointer into ISO-8859-1 buffer */
|
||||
*destend; /* End of ISO-8859-1 buffer */
|
||||
|
||||
|
||||
destptr = dest;
|
||||
destend = dest + maxout - 1;
|
||||
|
||||
while (*src && destptr < destend)
|
||||
{
|
||||
ch = *src++;
|
||||
|
||||
if ((ch & 0xe0) == 0xc0)
|
||||
{
|
||||
ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f);
|
||||
|
||||
if (ch < 256)
|
||||
*destptr++ = ch;
|
||||
else
|
||||
*destptr++ = '?';
|
||||
}
|
||||
else if ((ch & 0xf0) == 0xe0 ||
|
||||
(ch & 0xf8) == 0xf0)
|
||||
*destptr++ = '?';
|
||||
else if (!(ch & 0x80))
|
||||
*destptr++ = ch;
|
||||
}
|
||||
|
||||
*destptr = '\0';
|
||||
|
||||
return ((int)(destptr - dest));
|
||||
return (strlen(dest));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -479,6 +408,7 @@ cupsUTF8ToUTF32(
|
||||
const cups_utf8_t *src, /* I - Source string */
|
||||
const int maxout) /* I - Max output */
|
||||
{
|
||||
size_t srclen; /* Source string length */
|
||||
int i; /* Looping variable */
|
||||
cups_utf8_t ch; /* Character value */
|
||||
cups_utf8_t next; /* Next character value */
|
||||
@@ -500,6 +430,7 @@ cupsUTF8ToUTF32(
|
||||
*/
|
||||
|
||||
*dest++ = 0xfeff;
|
||||
srclen = strlen((char *)src);
|
||||
|
||||
for (i = maxout - 1; *src && i > 0; i --)
|
||||
{
|
||||
@@ -516,7 +447,6 @@ cupsUTF8ToUTF32(
|
||||
*/
|
||||
|
||||
*dest++ = ch;
|
||||
continue;
|
||||
}
|
||||
else if ((ch & 0xe0) == 0xc0)
|
||||
{
|
||||
@@ -612,7 +542,7 @@ cupsUTF8ToUTF32(
|
||||
* Check for UTF-16 surrogate (illegal UTF-8)...
|
||||
*/
|
||||
|
||||
if (ch32 >= 0xd800 && ch32 <= 0xdfff)
|
||||
if (*dest >= 0xd800 && *dest <= 0xdfff)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -968,7 +898,7 @@ conv_utf8_to_vbcs(
|
||||
|
||||
if (unichar < 0x80)
|
||||
{
|
||||
*dest++ = (cups_sbcs_t)unichar;
|
||||
*dest++ = (cups_vbcs_t)unichar;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1212,7 +1142,7 @@ free_vbcs_charmap(_cups_vmap_t *vmap) /* I - Character set */
|
||||
*/
|
||||
|
||||
|
||||
static void * /* O - Charset map pointer */
|
||||
void * /* O - Charset map pointer */
|
||||
get_charmap(
|
||||
const cups_encoding_t encoding) /* I - Encoding */
|
||||
{
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
#ifdef WIN32
|
||||
# include <windows.h>
|
||||
#endif /* WIN32 */
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -225,21 +224,15 @@ cupsServer(void)
|
||||
|
||||
linenum = 0;
|
||||
while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum) != NULL)
|
||||
{
|
||||
DEBUG_printf(("cupsServer: %d: %s %s\n", linenum, line,
|
||||
value ? value : "(null)"));
|
||||
|
||||
if (!strcasecmp(line, "ServerName") && value)
|
||||
{
|
||||
/*
|
||||
* Got it!
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsServer: Got a ServerName line!");
|
||||
server = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
@@ -249,8 +242,6 @@ cupsServer(void)
|
||||
* Copy the server name over and set the port number, if any...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("cupsServer: Using server \"%s\"...\n", server));
|
||||
|
||||
strlcpy(cg->server, server, sizeof(cg->server));
|
||||
|
||||
if (cg->server[0] != '/' && (port = strrchr(cg->server, ':')) != NULL &&
|
||||
@@ -258,7 +249,6 @@ cupsServer(void)
|
||||
{
|
||||
*port++ = '\0';
|
||||
|
||||
DEBUG_printf(("cupsServer: Using port %d...\n", atoi(port)));
|
||||
ippSetPort(atoi(port));
|
||||
}
|
||||
|
||||
@@ -481,17 +471,11 @@ cups_open_client_conf(void)
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home);
|
||||
if ((fp = cupsFileOpen(filename, "r")) != NULL)
|
||||
{
|
||||
DEBUG_printf(("cups_open_client_conf: Using \"%s\"...\n", filename));
|
||||
return (fp);
|
||||
}
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/.cupsrc", home);
|
||||
if ((fp = cupsFileOpen(filename, "r")) != NULL)
|
||||
{
|
||||
DEBUG_printf(("cups_open_client_conf: Using \"%s\"...\n", filename));
|
||||
return (fp);
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot);
|
||||
|
||||
+1
-2
@@ -1649,8 +1649,7 @@ cups_get_printer_uri(
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
if (cupsLastError() != IPP_NOT_FOUND)
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, "No printer-uri found!");
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, "No printer-uri found!");
|
||||
|
||||
*host = '\0';
|
||||
*resource = '\0';
|
||||
|
||||
+4
-5
@@ -6,7 +6,7 @@
|
||||
%%DocumentSuppliedResources: procset testprint/1.2
|
||||
%%DocumentNeededResources: font Helvetica Helvetica-Bold Times-Roman
|
||||
%%Creator: Michael Sweet, Easy Software Products
|
||||
%%CreationDate: D:20070220113000+0500
|
||||
%%CreationDate: D:20060114093000+0500
|
||||
%%Title: Test Page
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
@@ -14,7 +14,7 @@
|
||||
%
|
||||
% PostScript test page for the Common UNIX Printing System ("CUPS").
|
||||
%
|
||||
% Copyright 1993-2007 Easy Software Products
|
||||
% Copyright 1993-2006 Easy Software Products
|
||||
%
|
||||
% These coded instructions, statements, and computer programs are the
|
||||
% property of Easy Software Products and are protected by Federal
|
||||
@@ -198,8 +198,7 @@ gsave
|
||||
/CENTIMETER 72 2.54 div def
|
||||
/MILLIMETER 72 25.4 div def
|
||||
|
||||
/Times-Roman findfont % Font for ruler numbers
|
||||
11 scalefont setfont % 11 points
|
||||
smallFont setfont % Font
|
||||
|
||||
gsave % Left side inches
|
||||
pageLeft 72 mul 0 translate % Offset left edge
|
||||
@@ -632,6 +631,6 @@ gsave
|
||||
grestore
|
||||
showpage
|
||||
%
|
||||
% End of "$Id: testprint.ps 6296 2007-02-20 16:33:25Z mike $".
|
||||
% End of "$Id: testprint.ps 4930 2006-01-14 16:54:03Z mike $".
|
||||
%
|
||||
%%EOF
|
||||
|
||||
+4
-12
@@ -1,10 +1,14 @@
|
||||
[Desktop Entry]
|
||||
Categories=Application;System;X-Red-Hat-Base;
|
||||
Comment=CUPS Web Interface
|
||||
Comment[en_US]=CUPS Web Interface
|
||||
Encoding=UTF-8
|
||||
Exec=htmlview http://localhost:631/
|
||||
GenericName=
|
||||
GenericName[en_US]=
|
||||
Icon=cups
|
||||
MimeType=
|
||||
Name=Manage Printing
|
||||
Path=
|
||||
StartupNotify=false
|
||||
Terminal=false
|
||||
@@ -13,17 +17,5 @@ Type=Application
|
||||
X-DCOP-ServiceType=
|
||||
X-KDE-SubstituteUID=false
|
||||
X-KDE-Username=
|
||||
Name=Manage Printing
|
||||
Comment=CUPS Web Interface
|
||||
Name[en_US]=Manage Printing
|
||||
Comment[en_US]=CUPS Web Interface
|
||||
Name[es]=Administrar impresión
|
||||
Comment[es]=Interfaz Web de CUPS
|
||||
Name[et]=Trükkimise haldur
|
||||
Comment[et]=CUPS-i veebiliides
|
||||
Name[fr]=Gestionnaire d'impression
|
||||
Comment[fr]=Interface Web de CUPS
|
||||
Name[pl]=Zarządzanie drukowaniem
|
||||
Comment[pl]=Interfejs WWW CUPS
|
||||
Name[it]=Gestione stampa
|
||||
Comment[it]=Interfaccia web di CUPS
|
||||
|
||||
@@ -130,7 +130,7 @@ WIDTH="15" HEIGHT="15" ALT=""></TD>
|
||||
|
||||
<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
|
||||
Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
|
||||
Products</A>. CUPS ist urheberrechtlich geschützt 1997-2007 von Easy Software Products,
|
||||
Products</A>. CUPS ist urheberrechtlich geschützt 1997-2006 von Easy Software Products,
|
||||
Alle Rechte vorbehalten.</SMALL></P>
|
||||
|
||||
</TD>
|
||||
|
||||
@@ -133,7 +133,7 @@ WIDTH="15" HEIGHT="15" ALT=""></TD>
|
||||
|
||||
<P><SMALL>Common UNIX Printing System, CUPS, y el logo de CUPS son
|
||||
marcas registradas de <A HREF="http://www.easysw.com">Easy Software
|
||||
Products</A>. Los derechos de copia de CUPS 1997-2007 son de Easy Software Products.
|
||||
Products</A>. Los derechos de copia de CUPS 1997-2006 son de Easy Software Products.
|
||||
Todos los derechos reservados.</SMALL></P>
|
||||
|
||||
</TD>
|
||||
|
||||
Arquivo binário não exibido.
|
Antes Largura: | Altura: | Tamanho: 595 B |
Arquivo binário não exibido.
|
Antes Largura: | Altura: | Tamanho: 443 B |
Arquivo binário não exibido.
|
Antes Largura: | Altura: | Tamanho: 472 B |
Arquivo binário não exibido.
|
Antes Largura: | Altura: | Tamanho: 563 B |
Arquivo binário não exibido.
|
Antes Largura: | Altura: | Tamanho: 636 B |
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