Comparar commits

..

23 Commits

Autor SHA1 Mensagem Data
msweet 8406cae8ee Tag 1.6.3
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.6.3@11132 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-11 21:12:54 +00:00
msweet a0236fe7e7 Fix dates and versions in readme files.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11131 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-11 21:12:49 +00:00
msweet dbdd609a3a Mirror fix from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11114 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-10 14:08:55 +00:00
msweet 4abfc4313c Ignore generated files.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11112 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-09 13:32:31 +00:00
msweet 1a1f974d33 Update localization files.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11104 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-08 11:38:52 +00:00
msweet bfa5c91233 <rdar://problem/14290628> cups.org: cupsGetNamedDest returns the wrong default printer, lpr/lpq/lp/lpstat use different defaults!
Same fix for 1.6.x.


git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11103 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-08 11:30:28 +00:00
msweet fb70b28510 Fix up HTML, same as trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11088 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-07-03 15:04:32 +00:00
msweet 925ecfb9d7 Mirror change from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11079 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-27 19:03:30 +00:00
msweet 520ae4afbb httpStatus(HTTP_ERROR) did not return a useful error message
(<rdar://problem/14217326>)



git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11063 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-25 15:13:32 +00:00
msweet a6da1f6153 Mirror fix from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11061 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-25 15:03:34 +00:00
msweet 067101d02d Mirror fix from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11059 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-25 14:38:12 +00:00
msweet decb87a756 Mirror fix from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11054 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-25 01:43:22 +00:00
msweet b7f166da75 Fix svn:ignore and svn:keywords.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@11026 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-06-07 01:12:52 +00:00
msweet cadff87b26 Mirror changes from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@10993 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-25 01:37:11 +00:00
msweet 75c2a30654 Mirror fixes from trunk.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@10979 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-13 17:39:19 +00:00
msweet f3745d0088 Move 1.6.x import directory to new 1.6 cups.org branch.
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.6@4302 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 17:13:29 +00:00
msweet fc56c4d886 Merge changes from CUPS 1.6svn-r10972.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@4298 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 16:52:10 +00:00
msweet 292f831c7a Fix EOL style on test file.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@4186 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-02-20 02:21:23 +00:00
msweet ae7176a7a9 Merge changes from CUPS 1.6.2-r10873.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@4185 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-02-20 02:19:13 +00:00
msweet 422369925a Merge changes from CUPS 1.6.2-r10688.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@4016 a1ca3aef-8c08-0410-bb20-df032aa958be
2012-11-09 03:27:21 +00:00
msweet 6474d57e69 Merge changes from CUPS 1.6.2-r10651.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@3954 a1ca3aef-8c08-0410-bb20-df032aa958be
2012-10-17 16:42:37 +00:00
msweet 58acbe964e Fix EOL style for test file.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@3953 a1ca3aef-8c08-0410-bb20-df032aa958be
2012-10-17 16:14:59 +00:00
msweet 2f89228ff3 Create CUPS 1.6.x import branch.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current-1.6.x@3867 a1ca3aef-8c08-0410-bb20-df032aa958be
2012-07-10 19:40:43 +00:00
622 arquivos alterados com 14484 adições e 75510 exclusões
-244
Ver Arquivo
@@ -1,244 +0,0 @@
CHANGES-1.6.txt
---------------
CHANGES IN CUPS V1.6.4
- Removed some duplicate size definitions for some ISO sizes that were
causing problems (<rdar://problem/14722721>)
- The IPP backend did not add the "last-document" attribute
(<rdar://problem/114660379>)
- Added a SyncOnClose directive to cups-files.conf to force cupsd to
call fsync before closing any configuration/state files it writes
(<rdar://problem/14523043>)
- Added USB quirk rule for Lexmark E238 (<rdar://problem/14493054>)
- Closed server connections were still not always detected
(<rdar://problem/14484313>)
- The libusb-based USB backend now loads its list of quirks from files
in /usr/share/cups/usb instead of using a hardcoded table
(<rdar://problem/14442769>)
- The scheduler did not properly register ICC color profiles with
colord (<rdar://problem/14455625>)
CHANGES IN CUPS V1.6.3
- The configure script now prefers Clang over GCC.
- Fixed a compile problem on AIX (STR #4307)
- The default IPP version did not always get set before creating a new
IPP request message (<rdar://problem/14401718>)
- The lp, lpq, lpr, and lpstat now display an error message advising the
use of the /version=1.1 ServerName option (<rdar://problem/14290628>)
- Added documentation about the /version=1.1 option to ServerName in
client.conf (<rdar://problem/14216262>)
- httpStatus(HTTP_ERROR) did not return a useful error message
(<rdar://problem/14217326>)
- The lp, lpq, lpr, and lpstat commands incorrectly ignored the default
printer set in the lpoptions file (<rdar://problem/14216472>)
- Fixed a URI encoding issue for hostnames containing the ` (backquote)
character (<rdar://problem/14243133>)
- Added support for RFC 6874's IPv6 link local address format in URIs
(<rdar://problem/13979453>)
- The USB backend could crash on libusb-based systems if USB was
disabled in the BIOS (<rdar://problem/13875729>)
- Fixed a rounding error in the PWG media size mapping code
(<rdar://problem/13493241>)
- Fixed several ipptool test files that used old STATUS names.
- Kerberos credentials could get truncated when printing to a shared
printer.
- Printing using "ipps" URIs was not encrypted.
- Insecure ICC profiles prevented installation of user profiles for a
printer on OS X.
- Added more USB quirks for the libusb-based backend (STR #4311,
<rdar://problem/13736470>)
- The Russian web interface templates were broken (STR #4310)
- The scheduler no longer tries to do Kerberos authentication over the
loopback interface.
- The IPP backend could fail to pause a job for authentication
(STR #4298)
- Fixed a regression on the handling of auth keys on OS X if the
cups-files.conf was not present or did not contain a SystemAuthKey
value.
- The scheduler incorrectly did a reverse lookup of the server address
when HostNameLookups was turned off (STR #4302)
- The scheduler incorrectly computed the final content type value when
null filters were present.
CHANGES IN CUPS V1.6.2
- Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248,
STR #4259)
- Security: All file, directory, user, and group settings are now stored
in a separate cups-files.conf configuration file that cannot be set
through the CUPS web interface or APIs (STR #4223)
- Added a Czech localization (STR #4201)
- Added a French localization (STR #4247)
- Added a Russian localization (STR #4228, STR #4285)
- Updated the Catalan localization (STR #4202)
- Local certificate authentication did not guard against an empty
certification file (STR #4293)
- The scheduler did not reject device URIs with spaces.
- Added USB quirk rule for Epson Stylus Photo 750 (STR #4286)
- The IPP backend could crash if the printer disconnects early
(STR #4284)
- cupsGetPPD did not work with statically-configured CUPS shared
queues (STR #4178)
- The scheduler did not support long MIME media types (STR #4270)
- The cupsfilter command did not set the CHARSET environment variable
for the text filters (STR #4273)
- The lp command did not show errors for unknown "--foo" (STR #4261)
- Bad IPP responses could crash ipptool (STR #4262)
- Updated USB quirk rules for Canon and Xerox printers (STR #4217,
STR #4263)
- Added USB blacklisting for printers that require a custom backend
(STR #4218)
- The PPD compiler did not correctly JCL options (STR #4115, STR #4203)
- The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH
predicates for STATUS directives.
- Fixed a problem with local Kerberos authentication (STR #4140)
- Coverity scan: fixed some minor issues (STR #4242)
- The scheduler did not remove color profiles after deleting a printer
(STR #4232, STR #4276)
- The CUPS library did not always detect a timed out connection to the
server which could cause temporary loss of printing from applications
(STR #4187)
- The ipptool program now supports variable substitution in OPERATION
and DELAY directives (STR #4175)
- The IPP backend now stops queues when the server configuration
prevents successful job submission (STR #4125)
- The XML output of ipptool contained empty dictionaries (STR #4136)
- The scheduler did not delete job control backup files (STR #4244)
- cupsGetPPD3 could return a local PPD instead of the correct remote
PPD.
- The scheduler incorrectly advertised auth-info-required for local
queues needing local authentication (STR #4205)
- CUPS 1.6 clients using the ServerName directive in client.conf did not
work with CUPS 1.3.x or older servers (STR #4231, STR #4291)
- The SNMP backend now tries to work around broken printers that use a
newline to separate key/value pairs.
- The IPP backend did not send a cancel request to printers when a job
was canceled and the printer did not support Create-Job.
- Fixed EPM packaging files (STR #4199)
- OpenBSD build fix (STR #4195, STR #4196, STR #4197)
- The scheduler could crash when using Avahi (STR #4183, STR #4192,
STR #4200, STR #4213)
- The IPP backend could get stuck in an endless loop on certain network
errors (STR #4194)
- 32-bit builds failed on Debian (STR #4133)
- The scheduler no longer accepts or sends job description attributes.
- The IPP backend now works around some conformance issues for broken
printers (STR #4190)
- cupsBackendReport() now filters out all control characters from the
reported 1284 device IDs (STR #4124)
- The scheduler no longer allows job-name values that are not valid
network Unicode strings (STR #4072)
- The web interface did not preserve the order of classes, jobs, or
printers (STR #4170)
- The network backends now support disabling of SNMP supply level
queries via the "snmp" URI option (STR #4106)
- The IPP backend did not specify the compression used (STR #4181)
- ipptool did not support octetString values.
- The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared
queues (STR #4158)
- Applications could not get the PPD file for statically-configured
Bonjour-shared print queues (STR #4159)
- The cupsd.conf file included obsolete browsing directives (STR #4157)
- Fixed a USB backend compatibility issue on systems using libusb
(STR #4155, STR #4191)
- Some Bonjour features were not available on systems with Avahi
(STR #4156)
- CUPS now includes the port number in the Host: header for HTTP
requests.
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
out.
CHANGES IN CUPS V1.6.1
- Documentation fix (STR #4149)
- RPM packaging fixes (STR #4129, #4145)
- The Japanese and English web interface headers were swapped
(STR #4148)
CHANGES IN CUPS V1.6.0
- Document changes (STR #4131)
- Added new Catalan (STR #4107) and Spanish (STR #4137) localizations.
CHANGES IN CUPS V1.6rc1
- Added a new Japanese localization (STR #4122)
- The SNMP backend no longer exits if it is unable to obtain an IPv6
socket (STR #4109)
- The LPD backend incorrectly used "localhost" in the control file
instead of the current hostname.
CHANGES IN CUPS V1.6b1
- Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068)
- The scheduler now consolidates all PPD updates from filters at the
end of the job (STR #4075)
- CUPS now supports color management using colord (STR #3808)
- CUPS now supports Bonjour using Avahi (STR #3066)
- The PreserveJobFiles and PreserveJobHistory directives now support
specification of a time interval (STR #3143)
- PPD files can now be archived in (gzip'd) tar files to further reduce
the disk space used by PPD files (STR #3772)
- The network backends now deal with printers that report their levels
in percent but do not specify a maximum capacity of 100 (STR #3551)
- The network backends now report full/almost-full waste bins in
printers along with end-of-life for cleaning pads (STR #4017)
- Added a configure option to set the permissions of the installed
cupsd (STR #3459)
- Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates
(STR #3949)
- CUPS now supports a User directive in client.conf and the CUPS_USER
environment variable for overriding the default username (STR #3114)
- Now set the PJL USERNAME variable as needed (STR #3100)
- Added support for usernames and passwords longer than 32 characters
(STR #2856)
- Added a new MaxHoldTime directive to automatically cancel jobs that
have been held indefinitely after a specific number of seconds
(STR #2291)
- The LPD backend now uses the originating host name when it is not the
local system (STR #2053)
- CUPS now prefers the suffix "dpcm" when reporting resolution in dots-
per-centimeter (STR #4006)
- The configure script and build system no longer support building of
separate 32-bit and 64-bit libraries.
- The "brightness", "columns", "fitplot", "gamma", "hue",
"natural-scaling", "penwidth", "position", "ppi", "saturation", and
"scaling" options are not longer supported (STR #4010)
- The "page-bottom", "page-left", "page-right", "page-top",
"prettyprint", and "wrap" options have been deprecated (STR #4010)
- The scheduler now reports the standard "number-of-documents" attribute
instead of the CUPS-specific "document-count" attribute in
job objects.
- Added new destination connection and enumeration functions (STR #3924)
- Added new option, localization, and job submission functions that do
not depend on PPD files (STR #3925)
- Added a new MaxJobTime directive for cupsd that specifies the maximum
amount of time allowed for a job to complete before it is canceled.
- The default password callback now supports passwords up to 127
characters.
- The scheduler now supports a DefaultAuthType of "auto" to
automatically choose between Basic (username/password) and Negotiate
(Kerberos) authentication.
- cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in
length.
- CUPS no longer supports automatic remote printers or implicit classes
via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923)
- The PPD APIs are now deprecated and will be removed in a future
version of CUPS (STR #3927)
- The default IPP version for requests is now 2.0 (STR #3929)
- The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures
and instead provide accessor functions (STR #3928)
- The scheduler will no longer run programs with group write permission.
- The PHP module has been removed (STR #3932)
- The bannertops, commandtoescpx, commandtopclx, imagetops,
imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops
filters have been removed (STR #3930)
- The serial and parallel backends have been removed (STR 3935)
-167
Ver Arquivo
@@ -1,167 +0,0 @@
CHANGES-IPPTOOL.txt - 2014-03-28
--------------------------------
This file provides a list of changes to the ipptool binary distribution posted
on cups.org.
2014-03-28
- Fixed SSL support on Windows (STR #4358)
2013-07-15
- New ippfind tool now included with ipptool.
- Added support for automatically extending the timeout when all of the
request data has not yet been written (all platforms but Windows
which does not support it...)
- Fixed several ipptool test files that used old STATUS names.
2013-04-18
- Fixed some HTTP issues with authentication and compression.
- The IPP/1.1 test file did not allow for sufficient retries when
printing.
- The IPP/1.1 test file did not allow for empty printer-name values.
- The IPP Everywhere test file contained numerous errors.
- The color.jpg test file used a progressive mode instead of the
baseline JPEG mode.
- The IPP/1.1 test file referenced "color.jpeg" instead of "color.jpg".
2013-01-31
- Added support for DEFINE-MATCH and DEFINE-NO-MATCH as STATUS
predicates.
- Added support for WITH-VALUE and resolution values.
- Added support for SKIP-IF-MISSING (skip test if file is missing)
- Added support for octetString values.
- Added support for document compression in Print-Job and Send-Document
requests.
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
out.
- Fixed a bug where bad IPP responses would cause ipptool to crash.
2012-02-28
- Changed behavior of WITH-VALUES "/regex/" to not require all values to
match.
- Added WITH-ALL-VALUES directive for EXPECT predicates that require all
values to match.
- Updated test files to use WITH-ALL-VALUES where necessary.
- Updated test files to use new ABNF for media names from PWG Media
Names 2.0.
2012-02-06
- Fixed the packaging of ipptool on Windows (removed unnecessary DLLs)
- Fixed an crash in ipptool when mixing DISPLAY with -I and a failed
request.
- Added a Print-Job test file.
- Added a "setdebug" batch file for Windows
- Added support for a CUPS_DISABLE_ASYNC_CONNECT environment variable.
2012-01-10
- Fixed an issue with the IPP/1.1 test file where the "waiting for job
completion" test did not work.
- The attribute groups out of order error was not shown for the
operation-attributes-tag group.
2011-12-02
- Fixed a truncated XML output bug that would happen for certain errors.
- Fixed the order-of-groups tests.
- Fixed "WITH-VALUE >N" for rangeOfInteger attributes.
- The Windows installer was missing the get-printer-attributes.test
file.
- The Linux binaries are now compiled for all LSB 4.x-compliant Linux
distributions.
- The Linux binaries no longer support SSL or TLS.
2011-10-05
- Fixed a crasher bug that showed up on Windows.
- The IPP/1.1 test would hang if the initial Print-Job test failed.
- Fixed a typo in the IPP/2.0 test.
2011-10-03
- Using OF-TYPE with the "no-value" or "unknown" out-of-band value tags
now works without special WITH-VALUE strings.
- ipptool now shows an error when an attribute appears more than once
within the same attribute group.
- ipptool did not display attributes as specified by the DISPLAY
directive when a test error failed.
- Fixed one spot where DEFINE-VALUE was still treated as an error when
the EXPECT test failed.
- uriScheme values were not displayed properly.
- Updated the IPP/1.1 tests to properly validate support for
job-hold-until-default and job-hold-until-supported when the Hold-Job
operation is supported.
- Updated the IPP/1.1 tests to properly check for the various standard
media sizes for the printing tests.
- Updated the IPP/1.1 tests to accept "no-value" for media-default an
orientation-requested-default.
- Updated the IPP/1.1 tests to accept "unknown" for job-state.
- Updated the IPP/1.1 tests to not perform the bogus URI printing tests
unless the "document-uri" variable is defined.
- Updated the IPP/2.0 tests to properly validate media-col
"media-xxx-supported" attributes.
- Updated the IPP/2.2 tests to properly validate media-ready and
media-col-ready.
2011-09-28
- Test output now includes a summary and overall score at the end.
- The MATCH-VALUE predicate now correctly deals with a failed EXPECT
condition.
- The IPP/1.1 test suite now looks for legacy media names and uses them
if the corresponding PWG standard names are not present.
- The IPP/1.1 test suite now tests the Print-Job+Release-Job when the
printer supports the job-hold-until attribute, Hold-Job operation, and
Release-Job operation.
2011-09-21
- Fixes for HTTP chunking, timeout, and encryption issues reported by
various users.
- Greatly improved IPP tests with added IPP/2.2 tests.
- New test documents - 1-page and 4-page mixed A4/Letter PDF/PS and a
couple JPEGs.
- New REPEAT directives to programmatically repeat tests as needed.
2011-08-16
- The Windows version no longer requires Visual Studio to be installed.
- The Windows version now supports SSL.
- Added "ipps" URI support.
- Added a new "-T" option.
- Added support for fractional seconds for the -i option and DELAY
directive.
- Added support for authentication.
- Added DEFINE-MATCH, DEFINE-NO-MATCH, DEFINE-VALUE, IF-NOT-DEFINED,
IGNORE-ERRORS, SKIP-IF-DEFINED, SKIP-IF-NOT-DEFINED,
SKIP-PREVIOUS-ERROR directives.
- WITH-VALUE now supports variable expansion.
- Updated the IPP/1.1 conformance test to skip the "my-jobs different
user" test if the printer URI contains a username.
- Updated the IPP conformance tests to validate media, media-default,
and media-supported values.
- No longer error out if a Printer returns a different version number in
the response when the request contains the version 0.0.
2010-10-16
- Initial release of standalone binary.
+210 -171
Ver Arquivo
@@ -1,186 +1,225 @@
CHANGES.txt - 1.7.2 - 2014-04-10
CHANGES.txt - 1.6.3 - 2013-07-11
--------------------------------
CHANGES IN CUPS V1.7.2
CHANGES IN CUPS V1.6.3
- Security: The scheduler now blocks URLs containing embedded HTML
(STR #4356)
- Documentation fixes (STR #3259, STR #4346, STR #4355)
- Fixed the Japanese localization (STR #4385)
- Added a German localization (STR #4363)
- The cupsfilter command incorrectly read the cupsd.conf file; it now
reads the cups-files.conf file instead.
- Fixed OS X builds with Xcode 5.x (<rdar://problem/15914959>)
- Fixed SSL support on Windows (STR #4358)
- Fixed documentation and naming of Create-Job/Printer-Subscriptions
operations (STR #4389)
- Phone numbers in fax jobs were not properly filtered for IPP FaxOut
(<rdar://problem/16351701>)
- Fixed a memory leak in the label printer driver (STR #4393)
- Updated Linux "relro" support (STR #4349)
- cupsEnumDests did not set the "is_default" field (STR #4332)
- cupsDoIORequest could miss the server status, causing failed lpadmin
and other administrative commands (STR #4386)
- cupsEnumDests didn't always call the callback function (STR #4380)
- "lp -i job-id -H hold" did not work (STR #nnn)
- CUPS didn't compile on older platforms (STR #4338)
- Several libcups files did not have the Apple license exception
notice (STR #4361)
- Fixed a D-BUS threading issue that caused the scheduler to crash
(STR #4347)
- The scheduler now automatically reconnects to Avahi as needed
(STR #4370, STR #4373)
- The scheduler did not handle GET requests for the log files properly
(STR #3265)
- The dnssd backend did not always report all discovered printers using
Avahi (STR #4365)
- The Zebra printer driver did not properly handle negative "label top"
values (STR #4354)
- The scheduler did not always update the MakeModel value in
printers.conf after updating the driver (STR #4264)
- The LPD mini daemon did not support print jobs larger than 2GB
(STR #4351)
- Fixed a bug in the status reading code when sending a compressed data
stream to an IPP printer/server (<rdar://problem/16019623>)
- The IPP backend might not include all job attributes in Validate-Job
operations (<rdar://problem/16025435>)
- Fixed some clang-reported issues (<rdar://problem/15936066>)
- The configure script now prefers Clang over GCC.
- Fixed a compile problem on AIX (STR #4307)
- The default IPP version did not always get set before creating a new
IPP request message (<rdar://problem/14401718>)
- The lp, lpq, lpr, and lpstat now display an error message advising the
use of the /version=1.1 ServerName option (<rdar://problem/14290628>)
- Added documentation about the /version=1.1 option to ServerName in
client.conf (<rdar://problem/14216262>)
- httpStatus(HTTP_ERROR) did not return a useful error message
(<rdar://problem/14217326>)
- The lp, lpq, lpr, and lpstat commands incorrectly ignored the default
printer set in the lpoptions file (<rdar://problem/14216472>)
- Fixed a URI encoding issue for hostnames containing the ` (backquote)
character (<rdar://problem/14243133>)
- Added support for RFC 6874's IPv6 link local address format in URIs
(<rdar://problem/13979453>)
- The USB backend could crash on libusb-based systems if USB was
disabled in the BIOS (<rdar://problem/13875729>)
- Fixed a rounding error in the PWG media size mapping code
(<rdar://problem/13493241>)
- Fixed several ipptool test files that used old STATUS names.
- Kerberos credentials could get truncated when printing to a shared
printer.
- Printing using "ipps" URIs was not encrypted.
- Insecure ICC profiles prevented installation of user profiles for a
printer on OS X.
- Added more USB quirks for the libusb-based backend (STR #4311,
<rdar://problem/13736470>)
- The Russian web interface templates were broken (STR #4310)
- The scheduler no longer tries to do Kerberos authentication over the
loopback interface.
- The IPP backend could fail to pause a job for authentication
(STR #4298)
- Fixed a regression on the handling of auth keys on OS X if the
cups-files.conf was not present or did not contain a SystemAuthKey
value.
- The scheduler incorrectly did a reverse lookup of the server address
when HostNameLookups was turned off (STR #4302)
- The scheduler incorrectly computed the final content type value when
null filters were present.
CHANGES IN CUPS V1.7.1
CHANGES IN CUPS V1.6.2
- Security: the lppasswd program incorrectly used settings from
~/.cups/client.conf (STR #4319)
- Auto debug logging was broken in 1.7.0 (<rdar://problem/15331639>)
- Some gzip'd PPD files could not be used (<rdar://problem/15386424>)
- Cleaned up some job logging in the scheduler
(<rdar://problem/15332672>)
- ATTR messages could cause string pool memory corruption in the
scheduler (<rdar://problem/15382819>)
- The RPM spec file did not list the build requirements; this was on
purpose, but now we are listing the Red Hat package names
(<rdar://problem/15375760>, STR #4322)
- Printing to a raw queue could result in corrupt output due to
opportunistic compression (<rdar://problem/15008524>)
- The GNU TLS support code triggered many compiler warnings due to the
use of old GNU TLS compatibility type names
(<rdar://problem/15392966>)
- The "make check" test suite did not work on Linux without the
cups-filters package installed (<rdar://problem/14292998>)
- Japanese PPDs using with the Shift-JIS encoding did not work
(<rdar://problem/15427759>)
- "tel:" URIs incorrectly had slashes (<rdar://problem/15418463>)
- The libusb-based USB backend incorrectly used write timeouts
(<rdar://problem/15564888>)
- Shared printers could become inaccessible after a few days on OS X
(<rdar://problem/15426838>)
- The IPP backend did not wait for a busy printer to become available
before attempting to print (<rdar://problem/15465667>)
- CUPS did not support "auto-monochrome" or "process-monochrome" for the
"print-color-mode" option (<rdar://problem/15482520>)
- Using "@IF(name)" in an Allow or Deny rule did not work (STR #4328)
- lpq and lpstat did not list jobs in the correct order when priorities
were specified (STR #4326)
- The D-BUS notifier did not remove its lockfile (STR #4314)
- CUPS incorrectly used the USER environment variable when the name did
not match the user ID (STR #4327)
- Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248,
STR #4259)
- Security: All file, directory, user, and group settings are now stored
in a separate cups-files.conf configuration file that cannot be set
through the CUPS web interface or APIs (STR #4223)
- Added a Czech localization (STR #4201)
- Added a French localization (STR #4247)
- Added a Russian localization (STR #4228, STR #4285)
- Updated the Catalan localization (STR #4202)
- Local certificate authentication did not guard against an empty
certification file (STR #4293)
- The scheduler did not reject device URIs with spaces.
- Added USB quirk rule for Epson Stylus Photo 750 (STR #4286)
- The IPP backend could crash if the printer disconnects early
(STR #4284)
- cupsGetPPD did not work with statically-configured CUPS shared
queues (STR #4178)
- The scheduler did not support long MIME media types (STR #4270)
- The cupsfilter command did not set the CHARSET environment variable
for the text filters (STR #4273)
- The lp command did not show errors for unknown "--foo" (STR #4261)
- Bad IPP responses could crash ipptool (STR #4262)
- Updated USB quirk rules for Canon and Xerox printers (STR #4217,
STR #4263)
- Added USB blacklisting for printers that require a custom backend
(STR #4218)
- The PPD compiler did not correctly JCL options (STR #4115, STR #4203)
- The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH
predicates for STATUS directives.
- Fixed a problem with local Kerberos authentication (STR #4140)
- Coverity scan: fixed some minor issues (STR #4242)
- The scheduler did not remove color profiles after deleting a printer
(STR #4232, STR #4276)
- The CUPS library did not always detect a timed out connection to the
server which could cause temporary loss of printing from applications
(STR #4187)
- The ipptool program now supports variable substitution in OPERATION
and DELAY directives (STR #4175)
- The IPP backend now stops queues when the server configuration
prevents successful job submission (STR #4125)
- The XML output of ipptool contained empty dictionaries (STR #4136)
- The scheduler did not delete job control backup files (STR #4244)
- cupsGetPPD3 could return a local PPD instead of the correct remote
PPD.
- The scheduler incorrectly advertised auth-info-required for local
queues needing local authentication (STR #4205)
- CUPS 1.6 clients using the ServerName directive in client.conf did not
work with CUPS 1.3.x or older servers (STR #4231, STR #4291)
- The SNMP backend now tries to work around broken printers that use a
newline to separate key/value pairs.
- The IPP backend did not send a cancel request to printers when a job
was canceled and the printer did not support Create-Job.
- Fixed EPM packaging files (STR #4199)
- OpenBSD build fix (STR #4195, STR #4196, STR #4197)
- The scheduler could crash when using Avahi (STR #4183, STR #4192,
STR #4200, STR #4213)
- The IPP backend could get stuck in an endless loop on certain network
errors (STR #4194)
- 32-bit builds failed on Debian (STR #4133)
- The scheduler no longer accepts or sends job description attributes.
- The IPP backend now works around some conformance issues for broken
printers (STR #4190)
- cupsBackendReport() now filters out all control characters from the
reported 1284 device IDs (STR #4124)
- The scheduler no longer allows job-name values that are not valid
network Unicode strings (STR #4072)
- The web interface did not preserve the order of classes, jobs, or
printers (STR #4170)
- The network backends now support disabling of SNMP supply level
queries via the "snmp" URI option (STR #4106)
- The IPP backend did not specify the compression used (STR #4181)
- ipptool did not support octetString values.
- The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared
queues (STR #4158)
- Applications could not get the PPD file for statically-configured
Bonjour-shared print queues (STR #4159)
- The cupsd.conf file included obsolete browsing directives (STR #4157)
- Fixed a USB backend compatibility issue on systems using libusb
(STR #4155, STR #4191)
- Some Bonjour features were not available on systems with Avahi
(STR #4156)
- CUPS now includes the port number in the Host: header for HTTP
requests.
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
out.
CHANGES IN CUPS V1.7.0
CHANGES IN CUPS V1.6.1
- Updated Japanese localization.
- The lpadmin command did not send the PPD name from the "-m" option
(<rdar://problem/15264697>)
- Network backends now use the prtMarkerSuppliesClass property to
determine the direction of supply level values
(<rdar://problem/14302628>)
- The scheduler did not remove backup PPD files when a printer was
deleted (<rdar://problem/15065555>)
- The scheduler incorrectly responded to HEAD requests when the web
interface was disabled (<rdar://problem/15090332>)
- The scheduler did not respond using the hostname specified by the
client (<rdar://problem/14583574>)
- Fax queues did not work when shared via Bonjour
(<rdar://problem/14498310>)
- Error messages from the scheduler were not localized using the
language specified in the client's IPP request
(<rdar://problem/14128011>)
- Added an Italian localization (<rdar://problem/14481578>)
- Fixed a couple memory leaks in ippfind that were reported by Clang.
- Fixed a compile issue on 64-bit Linux with Clang - need to use the
-pie option instead of -Wl,-pie now (<rdar://problem/14480938>)
- The ippfind utility reported the wrong port numbers when compiled
against Avahi (<rdar://problem/14508324>)
- httpGetFd, httpGetFile, httpPutFd, and httpPutFile did not
automatically reconnect if the server closed the connecion after the
previous response.
- Fixed a compile error in libcups (<rdar://problem/14467141>)
- The scheduler incorrectly did not pass a FINAL_CONTENT_TYPE
environment variable to the filters or backend
(<rdar://problem/14355011>)
- The cups-exec helper program could fail randomly on OS X due to
sandbox violations when closing excess file descriptors
(<rdar://problem/14421943>)
- The scheduler incorrectly did not use the kqueue interface on OS X.
- Documentation fix (STR #4149)
- RPM packaging fixes (STR #4129, #4145)
- The Japanese and English web interface headers were swapped
(STR #4148)
CHANGES IN CUPS V1.7rc1
CHANGES IN CUPS V1.6.0
- Printer xxx-default values were not reported by Get-Printer-Attributes
or lpoptions (<rdar://problem/14401795>)
- Fixed deprecation warnings for many functions on OS X so they are tied
to the deployment version when building (<rdar://problem/14210079>)
- Fixed a build issue on ARM-based Linux systems - unable to validate
va_list arguments.
- Added a new ippfind tool for finding IPP printers and other Bonjour
services (<rdar://problem/13876199>)
- Fixed some issues with conversion of PWG media size names to
hundredths of millimeters (<rdar://problem/14065748>)
- The IPP backend could crash on OS X when printing to a Kerberized
printer (<rdar://problem/14040186>)
- The ipptool program now automatically extends timeouts when the
output buffer is filled (<rdar://problem/14016099>)
- The ipptool program now supports the --help and --version options.
- The ipptool program did not continue past include file errors by
default (<rdar://problem/13875803>)
- The ipptool program now supports FILE-ID and TEST-ID directives and
includes their values in its XML output (<rdar://problem/13876038>)
- The ipptool program now supports WITH-HOSTNAME, WITH-RESOURCE, and
WITH-SCHEME expect predicates to compare the corresponding URI
components (<rdar://problem/13876091>)
- Document changes (STR #4131)
- Added new Catalan (STR #4107) and Spanish (STR #4137) localizations.
CHANGES IN CUPS V1.7b1
CHANGES IN CUPS V1.6rc1
- The configure script now supports a --with-rundir option to change
the transient run-time state directory from the default to other
locations like /run/cups (STR #4306)
- The scheduler now supports PPD lookups for classes (STR #4296)
- The cupsfilter program did not set the FINAL_CONTENT_TYPE
environment variable for filters.
- Added a new "-x" option to the cancel command (STR #4103)
- Made the PWG media handling APIs public (STR #4267)
- Implemented ready media support for the cupsGetDestMediaXxx APIs
(STR #4289)
- Added new cupsFindDestDefault, cupsFindDestReady, and
cupsFindDestSupported APIs (STR #4289)
- Added new cupsGetDestMediaByIndex, cupsGetDestMediaCount, and
cupsGetDestMediaDefault APIs (STR #4289)
- Added new ippGet/SetOctetString APIs for getting and setting an
octetString value (STR #4289)
- Added new ippCreateRequestedArray API for generating a array of
attributes from the requested-attributes attribute.
- The ipptool utility now supports compression, conditional tests based
on the presence of files, and new DEFINE predicates for STATUS.
- Added new IPP APIs for checking values (STR #4167)
- Added new IPP APis for adding and setting formatted strings.
- Added new HTTP APIs to support basic server functionality via libcups.
- The dnssd backend now generates a 1284 device ID as needed (STR #3702)
- CUPS now supports compressing and decompressing streamed data
(STR #4168)
- CUPS now supports higher-level PIN printing, external accounting
systems, and "print here" printing environments (STR #4169)
- IRIX is no longer a supported operating system (STR #4092)
- The PPD compiler now supports JCL options properly (STR #4115)
- The web interface now checks whether the web browser has cookies
enabled and displays a suitable error message (STR #4141)
- Added a new Japanese localization (STR #4122)
- The SNMP backend no longer exits if it is unable to obtain an IPv6
socket (STR #4109)
- The LPD backend incorrectly used "localhost" in the control file
instead of the current hostname.
CHANGES IN CUPS V1.6b1
- Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068)
- The scheduler now consolidates all PPD updates from filters at the
end of the job (STR #4075)
- CUPS now supports color management using colord (STR #3808)
- CUPS now supports Bonjour using Avahi (STR #3066)
- The PreserveJobFiles and PreserveJobHistory directives now support
specification of a time interval (STR #3143)
- PPD files can now be archived in (gzip'd) tar files to further reduce
the disk space used by PPD files (STR #3772)
- The network backends now deal with printers that report their levels
in percent but do not specify a maximum capacity of 100 (STR #3551)
- The network backends now report full/almost-full waste bins in
printers along with end-of-life for cleaning pads (STR #4017)
- Added a configure option to set the permissions of the installed
cupsd (STR #3459)
- Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates
(STR #3949)
- CUPS now supports a User directive in client.conf and the CUPS_USER
environment variable for overriding the default username (STR #3114)
- Now set the PJL USERNAME variable as needed (STR #3100)
- Added support for usernames and passwords longer than 32 characters
(STR #2856)
- Added a new MaxHoldTime directive to automatically cancel jobs that
have been held indefinitely after a specific number of seconds
(STR #2291)
- The LPD backend now uses the originating host name when it is not the
local system (STR #2053)
- CUPS now prefers the suffix "dpcm" when reporting resolution in dots-
per-centimeter (STR #4006)
- The configure script and build system no longer support building of
separate 32-bit and 64-bit libraries.
- The "brightness", "columns", "fitplot", "gamma", "hue",
"natural-scaling", "penwidth", "position", "ppi", "saturation", and
"scaling" options are not longer supported (STR #4010)
- The "page-bottom", "page-left", "page-right", "page-top",
"prettyprint", and "wrap" options have been deprecated (STR #4010)
- The scheduler now reports the standard "number-of-documents" attribute
instead of the CUPS-specific "document-count" attribute in
job objects.
- Added new destination connection and enumeration functions (STR #3924)
- Added new option, localization, and job submission functions that do
not depend on PPD files (STR #3925)
- Added a new MaxJobTime directive for cupsd that specifies the maximum
amount of time allowed for a job to complete before it is canceled.
- The default password callback now supports passwords up to 127
characters.
- The scheduler now supports a DefaultAuthType of "auto" to
automatically choose between Basic (username/password) and Negotiate
(Kerberos) authentication.
- cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in
length.
- CUPS no longer supports automatic remote printers or implicit classes
via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923)
- The PPD APIs are now deprecated and will be removed in a future
version of CUPS (STR #3927)
- The default IPP version for requests is now 2.0 (STR #3929)
- The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures
and instead provide accessor functions (STR #3928)
- The scheduler will no longer run programs with group write permission.
- The PHP module has been removed (STR #3932)
- The bannertops, commandtoescpx, commandtopclx, imagetops,
imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops
filters have been removed (STR #3930)
- The serial and parallel backends have been removed (STR 3935)
+1 -2
Ver Arquivo
@@ -1,4 +1,4 @@
CREDITS.txt - 2013-07-23
CREDITS.txt - 2012-07-16
------------------------
Few projects are completed by one person, and CUPS is no exception. We'd
@@ -39,7 +39,6 @@ like to thank the following individuals for their contributions:
Vincenzo Reale - Italian localization.
Petter Reinholdtsen - HP-UX compiler stuff.
Juan Pablo González Riopedre - Spanish localization.
Giovanni Scafora - Italian localization.
Opher Shachar - Hebrew localization.
Stuart Stevens - HP JetDirect IPP information.
Andrea Suatoni - IRIX desktop integration and testing.
+16 -13
Ver Arquivo
@@ -1,4 +1,4 @@
INSTALL - CUPS v1.7.2 - 2014-04-10
INSTALL - CUPS v1.6.3 - 2013-07-11
----------------------------------
This file describes how to compile and install CUPS from source code. For more
@@ -29,16 +29,18 @@ BEFORE YOU BEGIN
Compaq, HP, SGI, and Sun. BSD users should use GNU make (gmake) since BSD
make does not support "include".
Besides these tools you'll want ZLIB library for compression support, the
CDSA, GNU TLS, or OpenSSL libraries for encryption support, and either MIT
(1.6.3 or higher) or Heimdal Kerberos for Kerberos support. CUPS will
compile and run without these, however you'll miss out on many of the
features provided by CUPS.
Besides these tools you'll want the JPEG, PNG, TIFF, and ZLIB libraries for
image support, the CDSA, GNU TLS, or OpenSSL libraries for encryption
support, the OpenLDAP and OpenSLP libraries for directory services support,
and either MIT (1.6.3 or higher) or Heimdal Kerberos for Kerberos support.
CUPS will compile and run without these, however you'll miss out on many of
the features provided by CUPS.
Also, please note that CUPS does not include print filters to support PDF
or raster printing. You *must* download GPL Ghostscript and/or the Open
Printing CUPS filters package separately to print on operating systems
other than OS X.
Also, please note that CUPS does not include the Ghostscript-based
PostScript filter needed by non-PostScript printers. You *must* download
GPL Ghostscript separately from the CUPS web site if you want to print
PostScript files to non-PostScript printers on operating systems other than
OS X.
COMPILING THE SUBVERSION REPOSITORY CODE
@@ -147,7 +149,7 @@ INSTALLING THE SOFTWARE
The EPM software is available at:
http://www.msweet.org/
http://www.epmhome.org/
CREATING BINARY DISTRIBUTIONS WITH EPM
@@ -197,9 +199,10 @@ GETTING DEBUG LOGGING FROM CUPS
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the documentation
does not solve your problems, please post a message on the users forum at:
does not solve your problems, please post a message on the "cups.general"
forum at:
http://www.cups.org/
http://www.cups.org/newsgroups.php
Include your operating system and version, compiler and version, and any
errors or problems you've run into. The "config.log" file and the output
+31 -77
Ver Arquivo
@@ -1,4 +1,4 @@
IPPTOOL.txt - 2014-04-10
IPPTOOL.txt - 2012-02-06
------------------------
See the file CHANGES-IPPTOOL.txt for a list of changes to this software.
@@ -6,46 +6,14 @@ See the file CHANGES-IPPTOOL.txt for a list of changes to this software.
INTRODUCTION
CUPS includes two user programs for IPP printers. The first is called
ipptool and can be used to send arbitrary IPP requests to a CUPS server or
IPP printer. This tool started life as part of the CUPS automated test
suite and has grown to support complex conformance tests and a simple way
to query printer, job, and subscription attributes.
The second program called ippfind that can be used to find IPP printers
that have registered themselves using Bonjour (DNS-SD, mDNS, and Zeroconf)
and run commands such as ipptool.
CUPS includes a user program called ipptool that can be used to send
arbitrary IPP requests to a CUPS server or IPP printer. This tool started
life as part of the CUPS automated test suite and has grown to support
complex conformance tests and a simple way to query printer, job, and
subscription attributes.
READING THE DOCUMENTATION
Full documentation on the ipptool command can be found in the
"man-ipptool.html" and "man-ipptoolfile.html" files; the latter describes
the test file format supported by ipptool.
Full documentation on the ippfind command can be found in the
"man-ippfind.html" file.
IPPFIND BASIC USAGE
The ippfind command can be used to discover IPP printers on your network.
For example, the following command prints the printer URI of registered IPP
printers:
ippfind
To find all color IPP printers, run:
ippfind --txt-color T
And to run the IPP Everywhere conformance test file on every registered IPP
printer, run the following command:
ippfind _ipp._tcp,_print --exec ipptool -t '{}' ipp-everywhere.test \;
IPPTOOL BASIC USAGE
BASIC USAGE
The ipptool command requires a printer URI and one or more "test" files that
describe the operations, attributes to display, and expected status and
@@ -86,29 +54,19 @@ STANDARD TEST FILES
state change notifications
get-completed-jobs.test Shows a list of completed jobs
get-jobs.test Shows a list of pending jobs
get-notifications.test Shows events for an ippget
subscription.
get-printer-attributes.test Shows printer attributes
get-subscriptions.test Shows a list of subscriptions
ipp-1.1.test IPP/1.1 conformance test suite
ipp-2.0.test IPP/2.0 conformance test suite
ipp-2.1.test IPP/2.1 conformance test suite
ipp-2.2.test IPP/2.2 conformance test suite
ipp-everywhere.test IPP Everywhere conformance test
suite
print-job.test Prints a file
print-job-deflate.test Prints a file, compressing with
deflate.
print-job-gzip.test Prints a file, compressing with gzip
validate-job.test Validates attributes for a job
submission.
CONFORMANCE TESTS
We provide basic IPP conformance tests for IPP/1.1, IPP/2.0, IPP/2.1,
IPP/2.2, and IPP Everywhere. For a given printer URI, the following
commands perform tests at each level:
We provide basic IPP conformance tests for IPP/1.1, IPP/2.0, IPP/2.1, and
IPP/2.2. For a given printer URI, the following commands perform tests at
each level:
ipptool -tf filename [options] -I printer-uri ipp-1.1.test
ipptool -tf filename [options] -I -V 2.0 printer-uri ipp-2.0.test
@@ -146,7 +104,6 @@ CONFORMANCE TESTS
-S Test IPP over HTTPS (default for ipps: URIs)
-T seconds Set a timeout for responses in seconds
-v Be verbose, showing all attributes sent and received
-X Produce XML (Apple plist) output
The printer-uri must be a URI supported by the printer using the "ipp" or
"ipps" scheme, for example:
@@ -155,7 +112,7 @@ CONFORMANCE TESTS
ipps://192.168.0.1/ipp/print
Print-by-reference (URL) printing can be tested by defining the document-uri
variable as a URL, for example:
variable to a URL, for example:
ipptool -tf filename -d document-uri=url -I printer-uri ipp-1.1.test
@@ -171,40 +128,37 @@ CONFORMANCE TESTS
printer.
IPP EVERYWHERE TESTING
READING THE DOCUMENTATION
The IPP Everywhere tests use sample PWG raster files available from:
ftp://ftp.pwg.org/pub/pwg/ipp/examples
Extract the corresponding ZIP archives into the current directory before
running the ipp-everywhere.test file. The test file will attempt to print
each PWG Raster file that is supported by the printer being tested - up to
372 pages including the 90 pages produced by the regular IPP test suite.
The command usage is described in the ipptest(1) man page, while the file
format is described in the ipptestfile(5) man page. Both are provided in
HTML format with the standalone releases of ipptool.
GETTING SUPPORT AND OTHER RESOURCES
If you have problems, READ THE DOCUMENTATION FIRST! We also provide
If you have problems, READ THE DOCUMENTATION FIRST! We also provide many
discussion forums which are available at:
http://www.cups.org/
http://www.cups.org/newsgroups.php
See the CUPS web site at "http://www.cups.org/" for other resources.
REPORTING BUGS
If you believe you have discovered a bug in ippfind or ipptool, please fill
out the bug form at:
If you believe you have discovered a bug in ipptool, please fill out the
bug form at:
http://www.cups.org/str.php
Be sure to identify the version of CUPS and ippfind/ipptool (if you
downloaded the standalone version) you are using, the printer (if any) and
firmware version, and include any files that apply.
Be sure to identify the version of CUPS and ipptool (if you downloaded the
standalone version) you are using, the printer (if any) and firmware
version, and include any files that apply.
If you downloaded the standalone version of ippfind/ipptool, please also
re-run the command with debug logging enabled. Run the following commands
on Windows to enable debug logging:
If you downloaded the standalone version of ipptool, please also re-run the
test with debug logging enabled. Run the following commands on Windows to
enable debug logging:
setdebug.bat
@@ -213,14 +167,14 @@ REPORTING BUGS
CUPS_DEBUG_LOG=ipptool.log; export CUPS_DEBUG_LOG
CUPS_DEBUG_LEVEL=6; export CUPS_DEBUG_LEVEL
Then when you run the ippfind or ipptool command a new "ipptool.log" file
will be created with detailed information - attach this file to the bug you
file as well.
Then when you run the ipptool command a new "ipptool.log" file will be
created with detailed information - attach this file to the bug you file
as well.
LEGAL STUFF
CUPS is Copyright 2007-2014 by Apple Inc. CUPS and the CUPS logo are
CUPS is Copyright 2007-2012 by Apple Inc. CUPS and the CUPS logo are
trademarks of Apple Inc.
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
+3 -6
Ver Arquivo
@@ -1,9 +1,9 @@
#
# "$Id: Makedefs.in 11154 2013-07-17 15:21:18Z msweet $"
# "$Id: Makedefs.in 7900 2008-09-03 13:47:57Z mike $"
#
# Common makefile definitions for CUPS.
#
# Copyright 2007-2013 by Apple Inc.
# Copyright 2007-2012 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -138,8 +138,6 @@ DNSSD_BACKEND = @DNSSD_BACKEND@
DSOFLAGS = -L../cups @DSOFLAGS@
DSOLIBS = @DSOLIBS@ $(COMMONLIBS)
DNSSDLIBS = @DNSSDLIBS@
IPPFIND_BIN = @IPPFIND_BIN@
IPPFIND_MAN = @IPPFIND_MAN@
LAUNCHDLIBS = @LAUNCHDLIBS@
LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \
-L../scheduler @LDARCHFLAGS@ \
@@ -218,7 +216,6 @@ SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@
SERVERROOT = $(BUILDROOT)@CUPS_SERVERROOT@
SMFMANIFESTDIR = @SMFMANIFESTDIR@
STATEDIR = $(BUILDROOT)@CUPS_STATEDIR@
USBQUIRKS = @USBQUIRKS@
XINETD = @XINETD@
MAN1EXT = @MAN1EXT@
@@ -261,5 +258,5 @@ DBUSDIR = @DBUSDIR@
#
# End of "$Id: Makedefs.in 11154 2013-07-17 15:21:18Z msweet $"
# End of "$Id: Makedefs.in 7900 2008-09-03 13:47:57Z mike $"
#
+12 -32
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: Makefile 11370 2013-10-30 15:08:29Z msweet $"
# "$Id: Makefile 9391 2010-11-30 21:53:04Z mike $"
#
# Top-level Makefile for CUPS.
#
@@ -99,8 +99,10 @@ clean:
distclean: clean
$(RM) Makedefs config.h config.log config.status
$(RM) cups-config
$(RM) conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf
$(RM) doc/help/ref-cupsd-conf.html doc/help/standard.html doc/index.html
$(RM) conf/cups-files.conf conf/cupsd.conf
$(RM) conf/mime.convs conf/pam.std conf/snmp.conf
$(RM) doc/help/ref-cups-files-conf.html doc/help/ref-cupsd-conf.html
$(RM) doc/help/standard.html doc/index.html
$(RM) man/client.conf.man
$(RM) man/cups-deviced.man man/cups-driverd.man
$(RM) man/cups-lpd.man man/cupsaddsmb.man man/cupsd.man
@@ -128,11 +130,8 @@ depend:
#
# Run the Clang static code analysis tool on the sources, available here:
#
# http://clang-analyzer.llvm.org
#
# At least checker-231 is required.
# Run the clang.llvm.org static code analysis tool on the C sources.
# (at least checker-231 is required for scan-build to work this way)
#
.PHONY: clang clang-changes
@@ -143,26 +142,6 @@ clang-changes:
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
#
# Run the STACK tool on the sources, available here:
#
# http://css.csail.mit.edu/stack/
#
# Do the following to pass options to configure:
#
# make CONFIGFLAGS="--foo --bar" stack
#
.PHONY: stack
stack:
stack-build ./configure $(CONFIGFLAGS)
stack-build $(MAKE) $(MFLAGS) clean all
poptck
$(MAKE) $(MFLAGS) distclean
$(RM) */*.ll
$(RM) */*.ll.out
#
# Generate a ctags file...
#
@@ -265,7 +244,7 @@ debugcheck: all unittests
#
# Create HTML documentation using Mini-XML's mxmldoc (http://www.msweet.org/)...
# Create HTML documentation...
#
apihelp:
@@ -282,7 +261,7 @@ framedhelp:
#
# Create an Xcode docset using Mini-XML's mxmldoc (http://www.msweet.org/)...
# Create an Xcode docset...
#
docset: apihelp
@@ -318,7 +297,7 @@ sloc:
#
# Make software distributions using EPM (http://www.msweet.org/)...
# Make software distributions using EPM (http://www.epmhome.org/)...
#
EPMFLAGS = -v --output-dir dist $(EPMARCH)
@@ -339,6 +318,7 @@ dist: all
case `uname` in \
*BSD*) $(MAKE) $(MFLAGS) bsd;; \
Darwin*) $(MAKE) $(MFLAGS) osx;; \
IRIX*) $(MAKE) $(MFLAGS) tardist;; \
Linux*) test ! -x /usr/bin/rpm || $(MAKE) $(MFLAGS) rpm;; \
SunOS*) $(MAKE) $(MFLAGS) pkg;; \
esac
@@ -352,5 +332,5 @@ dist: all
#
# End of "$Id: Makefile 11370 2013-10-30 15:08:29Z msweet $".
# End of "$Id: Makefile 9391 2010-11-30 21:53:04Z mike $".
#
+2 -2
Ver Arquivo
@@ -1,4 +1,4 @@
README - CUPS v1.7.2 - 2014-04-10
README - CUPS v1.6.3 - 2013-07-11
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt" instead...
@@ -149,7 +149,7 @@ PRINTING FILES
LEGAL STUFF
CUPS is Copyright 2007-2014 by Apple Inc. CUPS and the CUPS logo are
CUPS is Copyright 2007-2013 by Apple Inc. CUPS and the CUPS logo are
trademarks of Apple Inc.
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
+4 -10
Ver Arquivo
@@ -1,9 +1,9 @@
#
# "$Id: Makefile 11154 2013-07-17 15:21:18Z msweet $"
# "$Id: Makefile 7924 2008-09-10 17:36:13Z mike $"
#
# Backend makefile for CUPS.
#
# Copyright 2007-2013 by Apple Inc.
# Copyright 2007-2012 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -109,11 +109,6 @@ install: all install-data install-headers install-libs install-exec
#
install-data:
if test "x$(USBQUIRKS)" != x; then \
echo Installing USB quirks in $(USBQUIRKS); \
$(INSTALL_DIR) -m 755 $(USBQUIRKS); \
$(INSTALL_DATA) org.cups.usb-quirks $(USBQUIRKS); \
fi
#
@@ -139,9 +134,8 @@ install-exec: $(INSTALLXPC)
fi
if test "x$(SYMROOT)" != "x"; then \
$(INSTALL_DIR) $(SYMROOT); \
for file in $(RBACKENDS) $(UBACKENDS); do \
for file in $(TARGETS); do \
cp $$file $(SYMROOT); \
dsymutil $(SYMROOT)/$$file; \
done \
fi
@@ -301,5 +295,5 @@ include Dependencies
#
# End of "$Id: Makefile 11154 2013-07-17 15:21:18Z msweet $".
# End of "$Id: Makefile 7924 2008-09-10 17:36:13Z mike $".
#
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: backend-private.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: backend-private.h 7810 2008-07-29 01:11:15Z mike $"
*
* Backend support definitions for CUPS.
*
@@ -334,5 +334,5 @@ extern int backendWaitLoop(int snmp_fd, http_addr_t *addr,
/*
* End of "$Id: backend-private.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: backend-private.h 7810 2008-07-29 01:11:15Z mike $".
*/
+9 -62
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: dnssd.c 11623 2014-02-19 20:18:10Z msweet $"
* "$Id: dnssd.c 3833 2012-05-23 22:51:18Z msweet $"
*
* DNS-SD discovery backend for CUPS.
*
@@ -95,7 +95,6 @@ static int job_canceled = 0;
static AvahiSimplePoll *simple_poll = NULL;
/* Poll information */
static int got_data = 0; /* Got data from poll? */
static int browsers = 0; /* Number of running browsers */
#endif /* HAVE_AVAHI */
@@ -346,7 +345,6 @@ main(int argc, /* I - Number of command-line args */
return (1);
}
browsers = 6;
avahi_service_browser_new(client, AVAHI_IF_UNSPEC,
AVAHI_PROTO_UNSPEC,
"_fax-ipp._tcp", NULL, 0,
@@ -560,11 +558,7 @@ main(int argc, /* I - Number of command-line args */
fprintf(stderr, "DEBUG: sent=%d, count=%d\n", sent, count);
#ifdef HAVE_AVAHI
if (sent == cupsArrayCount(devices) && browsers == 0)
#else
if (sent == cupsArrayCount(devices))
#endif /* HAVE_AVAHI */
break;
}
}
@@ -716,12 +710,9 @@ browse_callback(
break;
case AVAHI_BROWSER_REMOVE:
case AVAHI_BROWSER_ALL_FOR_NOW:
case AVAHI_BROWSER_CACHE_EXHAUSTED:
break;
case AVAHI_BROWSER_ALL_FOR_NOW:
browsers--;
break;
}
}
@@ -1040,7 +1031,6 @@ query_callback(
value[256], /* Value string */
make_and_model[512], /* Manufacturer and model */
model[256], /* Model */
pdl[256], /* PDL */
device_id[2048]; /* 1284 device ID */
@@ -1089,9 +1079,8 @@ query_callback(
device_id[0] = '\0';
make_and_model[0] = '\0';
pdl[0] = '\0';
strlcpy(model, "Unknown", sizeof(model));
strcpy(model, "Unknown");
for (data = rdata, dataend = data + rdlen;
data < dataend;
@@ -1145,9 +1134,9 @@ query_callback(
if (!_cups_strcasecmp(key, "usb_MFG") || !_cups_strcasecmp(key, "usb_MANU") ||
!_cups_strcasecmp(key, "usb_MANUFACTURER"))
strlcpy(make_and_model, value, sizeof(make_and_model));
strcpy(make_and_model, value);
else if (!_cups_strcasecmp(key, "usb_MDL") || !_cups_strcasecmp(key, "usb_MODEL"))
strlcpy(model, value, sizeof(model));
strcpy(model, value);
else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript"))
{
if (value[0] == '(')
@@ -1159,20 +1148,18 @@ query_callback(
if ((ptr = value + strlen(value) - 1) > value && *ptr == ')')
*ptr = '\0';
strlcpy(model, value + 1, sizeof(model));
strcpy(model, value + 1);
}
else
strlcpy(model, value, sizeof(model));
strcpy(model, value);
}
else if (!_cups_strcasecmp(key, "ty"))
{
strlcpy(model, value, sizeof(model));
strcpy(model, value);
if ((ptr = strchr(model, ',')) != NULL)
*ptr = '\0';
}
else if (!_cups_strcasecmp(key, "pdl"))
strlcpy(pdl, value, sizeof(pdl));
else if (!_cups_strcasecmp(key, "priority"))
device->priority = atoi(value);
else if ((device->type == CUPS_DEVICE_IPP ||
@@ -1217,46 +1204,6 @@ query_callback(
}
}
if (device_id[0] &&
!strstr(device_id, "CMD:") &&
!strstr(device_id, "COMMAND SET:") &&
(strstr(pdl, "application/pdf") ||
strstr(pdl, "application/postscript") ||
strstr(pdl, "application/vnd.hp-PCL") ||
strstr(pdl, "image/")))
{
value[0] = '\0';
if (strstr(pdl, "application/pdf"))
strlcat(value, ",PDF", sizeof(value));
if (strstr(pdl, "application/postscript"))
strlcat(value, ",PS", sizeof(value));
if (strstr(pdl, "application/vnd.hp-PCL"))
strlcat(value, ",PCL", sizeof(value));
for (ptr = strstr(pdl, "image/"); ptr; ptr = strstr(ptr, "image/"))
{
char *valptr = value + strlen(value);
/* Pointer into value */
if (valptr < (value + sizeof(value) - 1))
*valptr++ = ',';
ptr += 6;
while (isalnum(*ptr & 255) || *ptr == '-' || *ptr == '.')
{
if (isalnum(*ptr & 255) && valptr < (value + sizeof(value) - 1))
*valptr++ = toupper(*ptr++ & 255);
else
break;
}
*valptr = '\0';
}
ptr = device_id + strlen(device_id);
snprintf(ptr, sizeof(device_id) - (ptr - device_id), "CMD:%s;",
value + 1);
}
if (device_id[0])
device->device_id = strdup(device_id);
else
@@ -1329,5 +1276,5 @@ unquote(char *dst, /* I - Destination buffer */
/*
* End of "$Id: dnssd.c 11623 2014-02-19 20:18:10Z msweet $".
* End of "$Id: dnssd.c 3833 2012-05-23 22:51:18Z msweet $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: ieee1284.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $"
*
* IEEE-1284 support functions for CUPS.
*
@@ -487,5 +487,5 @@ backendGetMakeModel(
/*
* End of "$Id: ieee1284.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $".
*/
+223 -534
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: lpd.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: lpd.c 7740 2008-07-14 23:58:05Z mike $"
*
* Line Printer Daemon backend for CUPS.
*
@@ -707,7 +707,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
*/
fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n", hostname,
httpAddrPort(&(addrlist->addr)), printer);
_httpAddrPort(&(addrlist->addr)), printer);
_cupsLangPrintFilter(stderr, "INFO", _("Connecting to printer."));
for (lport = reserve == RESERVE_RFC1179 ? 732 : 1024, addr = addrlist,
@@ -889,7 +889,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
fprintf(stderr, "DEBUG: Connected to %s:%d (local port %d)...\n",
httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
httpAddrPort(&(addr->addr)), lport);
_httpAddrPort(&(addr->addr)), lport);
/*
* See if the printer supports SNMP...
@@ -1331,5 +1331,5 @@ sigterm_handler(int sig) /* I - Signal */
/*
* End of "$Id: lpd.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: lpd.c 7740 2008-07-14 23:58:05Z mike $".
*/
-214
Ver Arquivo
@@ -1,214 +0,0 @@
# USB backend 'quirks' file.
#
# This file lists known issues with various vendors or printers. Each
# line contains either a comment (starting with #) or the USB vendor ID,
# product ID (omit for all vendor products), and a list of known issues:
#
# blacklist The printer is not functional with the USB backend.
# no-reattach Do no re-attach usblp kernel module after printing.
# soft-reset Do a soft reset after printing for cleanup.
# unidir Only supported unidirectional I/O
# usb-init Needs vendor USB initialization string.
# vendor-class Uses vendor-specific class or subclass.
# whitelist The printer is functional with the USB backend.
# HP DeskJet 895C
0x03f0 0x0004 unidir
# HP DeskJet 880C
0x03f0 0x0104 unidir
# HP DeskJet 815C
0x03f0 0x0204 unidir
# HP DeskJet 810C/812C
0x03f0 0x0304 unidir
# HP DeskJet 830C
0x03f0 0x0404 unidir
# HP DeskJet 885C
0x03f0 0x0504 unidir
# HP DeskJet 840C
0x03f0 0x0604 unidir
# HP DeskJet 816C
0x03f0 0x0804 unidir
# HP Deskjet 959C
0x03f0 0x1104 unidir
# NEC Picty900 (HP OEM)
0x0409 0xefbe unidir
# NEC Picty760 (HP OEM)
0x0409 0xbef4 unidir
# NEC Picty920 (HP OEM)
0x0409 0xf0be unidir
# NEC Picty800 (HP OEM)
0x0409 0xf1be unidir
# Lexmark International, Inc. (e250d), https://bugs.launchpad.net/bugs/1084164
0x043d 0x00f3 no-reattach
# Kyocera Mita FS 820, by zut <kernel@zut.de>
0x0482 0x0010 unidir
# Canon, Inc. PIXMA iP6000D Printer, https://bugs.launchpad.net/bugs/1160638
0x04a9 0x1095 unidir
# Canon, Inc. PIXMA iP4200 Printer, http://www.cups.org/str.php?L4155
0x04a9 0x10a2 unidir
# Canon, Inc. PIXMA iP4300 Printer, https://bugs.launchpad.net/bugs/1032385
0x04a9 0x10b6 unidir
# Canon, Inc. MP210 https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53
0x04a9 0x1721 unidir
# Canon, Inc. MP500 Printer, https://bugs.launchpad.net/bugs/1032456
0x04a9 0x170c unidir
# Canon, Inc. MP510 Printer, https://bugs.launchpad.net/bugs/1050009
0x04a9 0x1717 unidir
# Canon, Inc. MP550 Printer, http://www.cups.org/str.php?L4155
0x04a9 0x173d unidir
# Canon, Inc. MP560 Printer, http://www.cups.org/str.php?L4155
0x04a9 0x173e unidir
# Canon, Inc. MF4150 Printer, https://bugs.launchpad.net/bugs/1160638
0x04a9 0x26a3 no-reattach
# Brother Industries, Ltd HL-1430 Laser Printer, https://bugs.launchpad.net/bugs/1038695
0x04f9 0x001a no-reattach
# Brother Industries, Ltd HL-1440 Laser Printer, https://bugs.launchpad.net/bugs/1000253
0x04f9 0x000d no-reattach unidir
# Brother Industries, Ltd HL-1450 Laser Printer, https://bugs.launchpad.net/bugs/1000253
0x04f9 0x000e no-reattach unidir
# Oki Data Corp. Okipage 14ex Printer, https://bugs.launchpad.net/bugs/872483
0x06bc 0x000b no-reattach
# Oki Data Corp. B410d, https://bugs.launchpad.net/bugs/872483
0x06bc 0x01c7 no-reattach
# Seiko Epson Corp. Stylus Color 740 / Photo 750, http://bugs.debian.org/697970
0x04b8 0x0001 no-reattach unidir
# Seiko Epson Corp. Stylus Color 670, https://bugs.launchpad.net/bugs/872483
0x04b8 0x0005 no-reattach
# Seiko Epson Receipt Printer M129C
0x04b8 0x0202 vendor-class
# Prolific Technology, Inc. PL2305 Parallel Port (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485
0x067b 0x2305 no-reattach soft-reset unidir
# Xerox Phaser 3124 https://bugzilla.redhat.com/show_bug.cgi?id=867392
0x0924 0x3ce9 no-reattach
# Xerox WorkCentre 3210 https://bugs.launchpad.net/bugs/1102470
0x0924 0x4293 no-reattach
# QinHeng Electronics CH340S (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/1000253
0x1a86 0x7584 no-reattach
# All Samsung devices, https://bugs.launchpad.net/bugs/1032456
0x04e8 soft-reset
# All Zebra devices, https://bugs.launchpad.net/bugs/1001028
0x0a5f unidir
# Canon CP-10
0x04a9 0x304a blacklist
# Canon CP-100
0x04a9 0x3063 blacklist
# Canon CP-200
0x04a9 0x307c blacklist
# Canon CP-300
0x04a9 0x307d blacklist
# Canon CP-220
0x04a9 0x30bd blacklist
# Canon CP-330
0x04a9 0x30be blacklist
# Canon SELPHY CP400
0x04a9 0x30f6 blacklist
# Canon SELPHY CP600
0x04a9 0x310b blacklist
# Canon SELPHY CP710
0x04a9 0x3127 blacklist
# Canon SELPHY CP510
0x04a9 0x3128 blacklist
# Canon SELPHY ES1
0x04a9 0x3141 blacklist
# Canon SELPHY CP730
0x04a9 0x3142 blacklist
# Canon SELPHY CP720
0x04a9 0x3143 blacklist
# Canon SELPHY CP750
0x04a9 0x3170 blacklist
# Canon SELPHY CP740
0x04a9 0x3171 blacklist
# Canon SELPHY ES2
0x04a9 0x3185 blacklist
# Canon SELPHY ES20
0x04a9 0x3186 blacklist
# Canon SELPHY CP770
0x04a9 0x31aa blacklist
# Canon SELPHY CP760
0x04a9 0x31ab blacklist
# Canon SELPHY ES30
0x04a9 0x31b0 blacklist
# Canon SELPHY CP780
0x04a9 0x31dd blacklist
# Canon SELPHY ES40
0x04a9 0x31ee blacklist
# Canon SELPHY CP800
0x04a9 0x3214 blacklist
# Canon SELPHY CP900
0x04a9 0x3255 blacklist
# Canon SELPHY CP810
0x04a9 0x3256 blacklist
# Canon SELPHY CP500
0x04a9 0x30f5 blacklist
# Canon SELPHY ES3
0x04a9 0x31af blacklist
# Canon SELPHY CP780
0x04a9 0x31dd blacklist
# Lexmark E238 (<rdar://problem/14493054>)
0x043d 0x00d7 no-reattach
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: runloop.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: runloop.c 9565 2011-02-23 00:08:08Z mike $"
*
* Common run loop APIs for CUPS backends.
*
@@ -539,5 +539,5 @@ backendWaitLoop(
/*
* End of "$Id: runloop.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: runloop.c 9565 2011-02-23 00:08:08Z mike $".
*/
+35 -65
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: snmp-supplies.c 11319 2013-09-27 16:18:26Z msweet $"
* "$Id: snmp-supplies.c 4298 2013-05-10 16:52:10Z msweet $"
*
* SNMP supplies functions for CUPS.
*
@@ -62,7 +62,6 @@ typedef struct /**** Printer supply data ****/
char name[CUPS_SNMP_MAX_STRING], /* Name of supply */
color[8]; /* Color: "#RRGGBB" or "none" */
int colorant, /* Colorant index */
sclass, /* Supply class */
type, /* Supply type */
max_capacity, /* Maximum capacity */
level; /* Current level value */
@@ -149,13 +148,6 @@ static const int prtMarkerSuppliesMaxCapacity[] =
(sizeof(prtMarkerSuppliesMaxCapacity) /
sizeof(prtMarkerSuppliesMaxCapacity[0]));
/* Offset to supply index */
static const int prtMarkerSuppliesClass[] =
{ CUPS_OID_prtMarkerSuppliesClass, -1 },
/* Class OID */
prtMarkerSuppliesClassOffset =
(sizeof(prtMarkerSuppliesClass) /
sizeof(prtMarkerSuppliesClass[0]));
/* Offset to supply index */
static const int prtMarkerSuppliesType[] =
{ CUPS_OID_prtMarkerSuppliesType, -1 },
/* Type OID */
@@ -265,9 +257,6 @@ backendSNMPSupplies(
else
percent = 50;
if (supplies[i].sclass == CUPS_TC_receptacleThatIsFilled)
percent = 100 - percent;
if (percent <= 5)
{
switch (supplies[i].type)
@@ -329,9 +318,9 @@ backendSNMPSupplies(
if ((supplies[i].max_capacity > 0 || (quirks & CUPS_SNMP_CAPACITY)) &&
supplies[i].level >= 0)
snprintf(ptr, sizeof(value) - (ptr - value), "%d", percent);
sprintf(ptr, "%d", percent);
else
strlcpy(ptr, "-1", sizeof(value) - (ptr - value));
strcpy(ptr, "-1");
}
fprintf(stderr, "ATTR: marker-levels=%s\n", value);
@@ -469,34 +458,34 @@ backend_init_supplies(
"other",
"unknown",
"toner",
"waste-toner",
"wasteToner",
"ink",
"ink-cartridge",
"ink-ribbon",
"waste-ink",
"inkCartridge",
"inkRibbon",
"wasteInk",
"opc",
"developer",
"fuser-oil",
"solid-wax",
"ribbon-wax",
"waste-wax",
"fuserOil",
"solidWax",
"ribbonWax",
"wasteWax",
"fuser",
"corona-wire",
"fuser-oil-wick",
"cleaner-unit",
"fuser-cleaning-pad",
"transfer-unit",
"toner-cartridge",
"fuser-oiler",
"coronaWire",
"fuserOilWick",
"cleanerUnit",
"fuserCleaningPad",
"transferUnit",
"tonerCartridge",
"fuserOiler",
"water",
"waste-water",
"glue-water-additive",
"waste-paper",
"binding-supply",
"banding-supply",
"stitching-wire",
"shrink-wrap",
"paper-wrap",
"wasteWater",
"glueWaterAdditive",
"wastePaper",
"bindingSupply",
"bandingSupply",
"stitchingWire",
"shrinkWrap",
"paperWrap",
"staples",
"inserts",
"covers"
@@ -572,14 +561,14 @@ backend_init_supplies(
/*
* Yes, read the cache file:
*
* 3 num_supplies charset
* 2 num_supplies charset
* device description
* supply structures...
*/
if (cupsFileGets(cachefile, value, sizeof(value)))
{
if (sscanf(value, "3 %d%d", &num_supplies, &charset) == 2 &&
if (sscanf(value, "2 %d%d", &num_supplies, &charset) == 2 &&
num_supplies <= CUPS_MAX_SUPPLIES &&
cupsFileGets(cachefile, value, sizeof(value)))
{
@@ -675,7 +664,7 @@ backend_init_supplies(
if ((cachefile = cupsFileOpen(cachefilename, "w")) != NULL)
{
cupsFilePrintf(cachefile, "3 %d %d\n", num_supplies, charset);
cupsFilePrintf(cachefile, "2 %d %d\n", num_supplies, charset);
cupsFilePrintf(cachefile, "%s\n", description);
if (num_supplies > 0)
@@ -693,7 +682,7 @@ backend_init_supplies(
*/
for (i = 0; i < num_supplies; i ++)
strlcpy(supplies[i].color, "none", sizeof(supplies[i].color));
strcpy(supplies[i].color, "none");
_cupsSNMPWalk(snmp_fd, &current_addr, CUPS_SNMP_VERSION_1,
_cupsSNMPDefaultCommunity(), prtMarkerColorantValue,
@@ -708,7 +697,7 @@ backend_init_supplies(
if (i)
*ptr++ = ',';
strlcpy(ptr, supplies[i].color, sizeof(value) - (ptr - value));
strcpy(ptr, supplies[i].color);
}
fprintf(stderr, "ATTR: marker-colors=%s\n", value);
@@ -756,9 +745,9 @@ backend_init_supplies(
type = supplies[i].type;
if (type < CUPS_TC_other || type > CUPS_TC_covers)
strlcpy(ptr, "unknown", sizeof(value) - (ptr - value));
strcpy(ptr, "unknown");
else
strlcpy(ptr, types[type - CUPS_TC_other], sizeof(value) - (ptr - value));
strcpy(ptr, types[type - CUPS_TC_other]);
}
fprintf(stderr, "ATTR: marker-types=%s\n", value);
@@ -825,7 +814,7 @@ backend_walk_cb(cups_snmp_t *packet, /* I - SNMP packet */
if (!_cups_strcasecmp(colors[k][0],
(char *)packet->object_value.string.bytes))
{
strlcpy(supplies[j].color, colors[k][1], sizeof(supplies[j].color));
strcpy(supplies[j].color, colors[k][1]);
break;
}
}
@@ -980,25 +969,6 @@ backend_walk_cb(cups_snmp_t *packet, /* I - SNMP packet */
packet->object_value.integer > 0)
supplies[i - 1].max_capacity = packet->object_value.integer;
}
else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesClass))
{
/*
* Get marker class...
*/
i = packet->object_name[prtMarkerSuppliesClassOffset];
if (i < 1 || i > CUPS_MAX_SUPPLIES ||
packet->object_type != CUPS_ASN1_INTEGER)
return;
fprintf(stderr, "DEBUG2: prtMarkerSuppliesClass.1.%d = %d\n", i,
packet->object_value.integer);
if (i > num_supplies)
num_supplies = i;
supplies[i - 1].sclass = packet->object_value.integer;
}
else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesType))
{
/*
@@ -1103,5 +1073,5 @@ utf16_to_utf8(
/*
* End of "$Id: snmp-supplies.c 11319 2013-09-27 16:18:26Z msweet $".
* End of "$Id: snmp-supplies.c 4298 2013-05-10 16:52:10Z msweet $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: snmp.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $"
*
* SNMP discovery backend for CUPS.
*
@@ -1391,5 +1391,5 @@ update_cache(snmp_cache_t *device, /* I - Device */
/*
* End of "$Id: snmp.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $".
*/
+18 -3
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: socket.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: socket.c 7881 2008-08-28 20:21:56Z mike $"
*
* AppSocket backend for CUPS.
*
@@ -73,6 +73,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
int print_fd; /* Print file */
int copies; /* Number of copies to print */
time_t start_time; /* Time of first connect */
#ifdef __APPLE__
time_t current_time, /* Current time */
wait_time; /* Time to wait before shutting down socket */
#endif /* __APPLE__ */
int contimeout; /* Connection timeout */
int waiteof; /* Wait for end-of-file? */
int port; /* Port number */
@@ -406,7 +410,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
fprintf(stderr, "DEBUG: Connected to %s:%d...\n",
httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
httpAddrPort(&(addr->addr)));
_httpAddrPort(&(addr->addr)));
/*
* Print everything...
@@ -434,6 +438,17 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
_cupsLangPrintFilter(stderr, "INFO", _("Print file sent."));
}
#ifdef __APPLE__
/*
* Wait up to 5 seconds to get any pending back-channel data...
*/
wait_time = time(NULL) + 5;
while (wait_time >= time(&current_time))
if (wait_bc(device_fd, wait_time - current_time) <= 0)
break;
#endif /* __APPLE__ */
if (waiteof)
{
/*
@@ -520,5 +535,5 @@ wait_bc(int device_fd, /* I - Socket */
/*
* End of "$Id: socket.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: socket.c 7881 2008-08-28 20:21:56Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: test1284.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: test1284.c 7465 2008-04-18 16:20:11Z mike $"
*
* IEEE-1284 support functions test program for CUPS.
*
@@ -80,5 +80,5 @@ main(int argc, /* I - Number of command-line args */
/*
* End of "$Id: test1284.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: test1284.c 7465 2008-04-18 16:20:11Z mike $".
*/
+3 -15
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: testbackend.c 4297 2013-05-10 16:04:59Z msweet $"
* "$Id: testbackend.c 3755 2012-03-30 05:59:14Z msweet $"
*
* Backend test program for CUPS.
*
@@ -667,22 +667,10 @@ walk_cb(const char *oid, /* I - OID */
int datalen, /* I - Length of data */
void *context) /* I - Context (unused) */
{
char temp[80];
if (datalen > (sizeof(temp) - 1))
{
memcpy(temp, data, sizeof(temp) - 1);
temp[sizeof(temp) - 1] = '\0';
}
else
{
memcpy(temp, data, datalen);
temp[datalen] = '\0';
}
printf("CUPS_SC_CMD_SNMP_WALK %s, %d bytes (%s)\n", oid, datalen, temp);
printf("CUPS_SC_CMD_SNMP_WALK %s, %d bytes (%s)\n", oid, datalen, data);
}
/*
* End of "$Id: testbackend.c 4297 2013-05-10 16:04:59Z msweet $".
* End of "$Id: testbackend.c 3755 2012-03-30 05:59:14Z msweet $".
*/
+55 -136
Ver Arquivo
@@ -1,7 +1,7 @@
/*
* "$Id: usb-darwin.c 11670 2014-03-04 14:53:59Z msweet $"
* "$Id: usb-darwin.c 7953 2008-09-17 01:43:19Z mike $"
*
* Copyright 2005-2014 Apple Inc. All rights reserved.
* Copyright 2005-2012 Apple Inc. All rights reserved.
*
* IMPORTANT: This Apple software is supplied to you by Apple Computer,
* Inc. ("Apple") in consideration of your agreement to the following
@@ -40,6 +40,35 @@
* AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
* STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Contents:
*
* list_devices() - List all USB devices.
* print_device() - Print a file to a USB device.
* read_thread() - Thread to read the backchannel data on.
* sidechannel_thread() - Handle side-channel requests.
* iterate_printers() - Iterate over all the printers.
* device_added() - Device added notifier.
* list_device_cb() - list_device iterator callback.
* find_device_cb() - print_device iterator callback.
* status_timer_cb() - Status timer callback.
* copy_deviceinfo() - Copy strings from the 1284 device ID.
* release_deviceinfo() - Release deviceinfo strings.
* load_classdriver() - Load a classdriver.
* unload_classdriver() - Unload a classdriver.
* load_printerdriver() - Load vendor's classdriver.
* registry_open() - Open a connection to the printer.
* registry_close() - Close the connection to the printer.
* copy_deviceid() - Copy the 1284 device id string.
* copy_devicestring() - Copy the 1284 device id string.
* copy_value_for_key() - Copy value string associated with a key.
* cfstr_create_trim() - Create CFString and trim whitespace characters.
* parse_options() - Parse URI options.
* sigterm_handler() - SIGTERM handler.
* next_line() - Find the next line in a buffer.
* parse_pserror() - Scan the backchannel data for postscript errors.
* soft_reset() - Send a soft reset to the device.
* get_device_id() - Return IEEE-1284 device ID.
*/
/*
@@ -67,8 +96,7 @@
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/usb/IOUSBLib.h>
#include <IOKit/IOCFPlugIn.h>
#include <libproc.h>
#include <asl.h>
#include <spawn.h>
#include <pthread.h>
@@ -106,26 +134,6 @@ extern char **environ;
#define kUSBGenericTOPrinterClassDriver CFSTR("/System/Library/Printers/Libraries/USBGenericPrintingClass.plugin")
#define kUSBPrinterClassDeviceNotOpen -9664 /*kPMInvalidIOMContext*/
#define CRSetCrashLogMessage(m) _crc_make_setter(message, m)
#define _crc_make_setter(attr, arg) (gCRAnnotations.attr = (uint64_t)(unsigned long)(arg))
#define CRASH_REPORTER_CLIENT_HIDDEN __attribute__((visibility("hidden")))
#define CRASHREPORTER_ANNOTATIONS_VERSION 4
#define CRASHREPORTER_ANNOTATIONS_SECTION "__crash_info"
struct crashreporter_annotations_t {
uint64_t version; // unsigned long
uint64_t message; // char *
uint64_t signature_string; // char *
uint64_t backtrace; // char *
uint64_t message2; // char *
uint64_t thread; // uint64_t
uint64_t dialog_mode; // unsigned int
};
CRASH_REPORTER_CLIENT_HIDDEN
struct crashreporter_annotations_t gCRAnnotations
__attribute__((section("__DATA," CRASHREPORTER_ANNOTATIONS_SECTION)))
= { CRASHREPORTER_ANNOTATIONS_VERSION, 0, 0, 0, 0, 0, 0 };
/*
* Section 5.3 USB Printing Class spec
@@ -171,7 +179,7 @@ typedef struct classdriver_s /**** g.classdriver context ****/
UInt16 vendorID; /* Vendor id */
UInt16 productID; /* Product id */
printer_interface_t interface; /* identify the device to IOKit */
UInt8 outpipe; /* mandatory bulkOut pipe */
UInt8 outpipe; /* mandatory bulkOut pipe */
UInt8 inpipe; /* optional bulkIn pipe */
/* general class requests */
@@ -251,7 +259,6 @@ typedef struct globals_s
*/
globals_t g = { 0 }; /* Globals */
int Iterating = 0; /* Are we iterating the bus? */
/*
@@ -280,16 +287,12 @@ static void release_deviceinfo(CFStringRef *make, CFStringRef *model, CFStringRe
static void setup_cfLanguage(void);
static void soft_reset(void);
static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
static void log_usb_class_driver(int is_64bit);
#define IS_64BIT 1
#define IS_NOT_64BIT 0
#if defined(__i386__) || defined(__x86_64__)
static pid_t child_pid; /* Child PID */
static void run_legacy_backend(int argc, char *argv[], int fd); /* Starts child backend process running as a ppc executable */
#endif /* __i386__ || __x86_64__ */
static void sigterm_handler(int sig); /* SIGTERM handler */
static void sigquit_handler(int sig, siginfo_t *si, void *unused);
#ifdef PARSE_PS_ERRORS
static const char *next_line (const char *buffer);
@@ -341,20 +344,10 @@ print_device(const char *uri, /* I - Device URI */
struct timeval *timeout, /* Timeout pointer */
tv; /* Time value */
struct timespec cond_timeout; /* pthread condition timeout */
struct sigaction action; /* Actions for POSIX signals */
(void)uri;
/*
* Catch SIGQUIT to determine who is sending it...
*/
memset(&action, 0, sizeof(action));
action.sa_sigaction = sigquit_handler;
action.sa_flags = SA_SIGINFO;
sigaction(SIGQUIT, &action, NULL);
/*
* See if the side-channel descriptor is valid...
*/
@@ -451,11 +444,6 @@ print_device(const char *uri, /* I - Device URI */
return (CUPS_BACKEND_STOP);
}
#ifdef __x86_64__
if (status == noErr && driverBundlePath != NULL && CFStringCompare(driverBundlePath, kUSBGenericTOPrinterClassDriver, 0) != kCFCompareEqualTo)
log_usb_class_driver(IS_64BIT);
#endif /* __x86_64__ */
if (driverBundlePath)
CFRelease(driverBundlePath);
@@ -484,6 +472,9 @@ print_device(const char *uri, /* I - Device URI */
if (!print_fd)
{
struct sigaction action; /* POSIX signal action */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
@@ -693,7 +684,7 @@ print_device(const char *uri, /* I - Device URI */
/*
* Ignore timeout errors, but retain the number of bytes written to
* avoid sending duplicate data...
* avoid sending duplicate data (<rdar://problem/6254911>)...
*/
if (iostatus == kIOUSBTransactionTimeout)
@@ -716,7 +707,7 @@ print_device(const char *uri, /* I - Device URI */
/*
* Retry a write after an aborted write since we probably just got
* SIGTERM...
* SIGTERM (<rdar://problem/6860126>)...
*/
else if (iostatus == kIOReturnAborted)
@@ -1086,8 +1077,6 @@ sidechannel_thread(void *reference)
static void iterate_printers(iterator_callback_t callBack,
void *userdata)
{
Iterating = 1;
mach_port_t masterPort = 0x0;
kern_return_t kr = IOMasterPort (bootstrap_port, &masterPort);
@@ -1111,7 +1100,7 @@ static void iterate_printers(iterator_callback_t callBack,
CFRelease(usb_klass);
CFRelease(usb_subklass);
IOServiceAddMatchingNotification(addNotification, kIOMatchedNotification, usbPrinterMatchDictionary, &device_added, &reference, &addIterator);
kr = IOServiceAddMatchingNotification(addNotification, kIOMatchedNotification, usbPrinterMatchDictionary, &device_added, &reference, &addIterator);
if (addIterator != 0x0)
{
device_added (&reference, addIterator);
@@ -1125,8 +1114,6 @@ static void iterate_printers(iterator_callback_t callBack,
}
mach_port_deallocate(mach_task_self(), masterPort);
}
Iterating = 0;
}
@@ -1150,7 +1137,7 @@ static void device_added(void *userdata,
/* One last call to the call back now that we are not longer have printers left to iterate...
*/
if (reference->keepRunning && reference->callback)
if (reference->keepRunning)
reference->keepRunning = reference->callback(reference->userdata, 0x0);
if (!reference->keepRunning)
@@ -1193,12 +1180,12 @@ static Boolean list_device_cb(void *refcon,
if (!make ||
!CFStringGetCString(make, makestr, sizeof(makestr),
kCFStringEncodingUTF8))
strlcpy(makestr, "Unknown", sizeof(makestr));
strcpy(makestr, "Unknown");
if (!model ||
!CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1,
kCFStringEncodingUTF8))
strlcpy(modelstr + 1, "Printer", sizeof(modelstr) - 1);
strcpy(modelstr + 1, "Printer");
optionsstr[0] = '\0';
if (serial != NULL)
@@ -1415,7 +1402,7 @@ static kern_return_t load_classdriver(CFStringRef driverPath,
_cups_fc_result_t result = _cupsFileCheck(bundlestr,
_CUPS_FILE_CHECK_DIRECTORY, 1,
Iterating ? NULL : _cupsFileCheckFilter, NULL);
_cupsFileCheckFilter, NULL);
if (result && driverPath)
return (load_classdriver(NULL, interface, printerDriver));
@@ -1582,12 +1569,11 @@ static kern_return_t registry_close(void)
static OSStatus copy_deviceid(classdriver_t **classdriver,
CFStringRef *deviceID)
{
CFStringRef devID = NULL;
CFStringRef deviceMake = NULL;
CFStringRef deviceModel = NULL;
CFStringRef deviceSerial = NULL;
CFStringRef devID = NULL,
*deviceID = NULL;
deviceMake = NULL,
deviceModel = NULL,
deviceSerial = NULL;
OSStatus err = (*classdriver)->GetDeviceID(classdriver, &devID, DEFAULT_TIMEOUT);
@@ -1633,10 +1619,12 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
if (deviceSerial == NULL && desc.iSerialNumber != 0)
{
err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &deviceSerial);
if (deviceSerial != NULL)
CFStringRef data = NULL;
err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &data);
if (data != NULL)
{
CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), deviceSerial);
CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), data);
CFRelease(data);
}
}
@@ -1653,21 +1641,6 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
{
*deviceID = devID;
}
if (*deviceID == NULL)
return err;
/* Remove special characters from the serial number */
CFRange range = (deviceSerial != NULL ? CFStringFind(deviceSerial, CFSTR("+"), 0) : CFRangeMake(0, 0));
if (range.length == 1) {
range = CFStringFind(*deviceID, deviceSerial, 0);
CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, *deviceID);
CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
CFRelease(*deviceID);
*deviceID = deviceIDString;
}
release_deviceinfo(&deviceMake, &deviceModel, &deviceSerial);
return err;
@@ -1712,7 +1685,7 @@ static void copy_devicestring(io_service_t usbInterface,
kr = load_classdriver(NULL, interface, &klassDriver);
if (kr == kIOReturnSuccess && klassDriver != NULL)
copy_deviceid(klassDriver, deviceID);
kr = copy_deviceid(klassDriver, deviceID);
unload_classdriver(&klassDriver);
@@ -1955,8 +1928,6 @@ static void run_legacy_backend(int argc,
if (!usb_legacy_status)
{
log_usb_class_driver(IS_NOT_64BIT);
/*
* Setup a SIGTERM handler then block it before forking...
*/
@@ -2123,32 +2094,6 @@ sigterm_handler(int sig) /* I - Signal */
}
/*
* 'sigquit_handler()' - SIGQUIT handler.
*/
static void sigquit_handler(int sig, siginfo_t *si, void *unused)
{
char *path;
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
static char msgbuf[256] = "";
(void)sig;
(void)unused;
if (proc_pidpath(si->si_pid, pathbuf, sizeof(pathbuf)) > 0 &&
(path = basename(pathbuf)) != NULL)
snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by %s(%d)", path, (int)si->si_pid);
else
snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by PID %d", (int)si->si_pid);
CRSetCrashLogMessage(msgbuf);
abort();
}
#ifdef PARSE_PS_ERRORS
/*
* 'next_line()' - Find the next line in a buffer.
@@ -2219,7 +2164,7 @@ static void parse_pserror(char *sockBuffer,
}
/* move everything over... */
strlcpy(gErrorBuffer, pLineEnd, sizeof(gErrorBuffer));
strcpy(gErrorBuffer, pLineEnd);
gErrorBufferPtr = gErrorBuffer;
pLineEnd = (char *)next_line((const char *)gErrorBuffer);
}
@@ -2319,32 +2264,6 @@ static void get_device_id(cups_sc_status_t *status,
}
static void
log_usb_class_driver(int is_64bit) /* I - Is the USB class driver 64-bit? */
{
/*
* Report the usage of legacy USB class drivers to Apple if the user opts into providing
* feedback to Apple...
*/
aslmsg aslm = asl_new(ASL_TYPE_MSG);
if (aslm)
{
ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
const char *make_model = ppd ? ppd->nickname : NULL;
ppd_attr_t *version = ppdFindAttr(ppd, "FileVersion", "");
asl_set(aslm, "com.apple.message.domain", "com.apple.printing.usb.64bit");
asl_set(aslm, "com.apple.message.result", is_64bit ? "yes" : "no");
asl_set(aslm, "com.apple.message.signature", make_model ? make_model : "Unknown");
asl_set(aslm, "com.apple.message.signature2", version ? version->value : "?.?");
asl_set(aslm, "com.apple.message.summarize", "YES");
asl_log(NULL, aslm, ASL_LEVEL_NOTICE, "");
asl_free(aslm);
}
}
/*
* End of "$Id: usb-darwin.c 11670 2014-03-04 14:53:59Z msweet $".
* End of "$Id: usb-darwin.c 7953 2008-09-17 01:43:19Z mike $".
*/
+209 -248
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: usb-libusb.c 11456 2013-12-09 19:26:47Z msweet $"
* "$Id: usb-libusb.c 10979 2013-05-13 17:39:19Z msweet $"
*
* LIBUSB interface code for CUPS.
*
@@ -16,20 +16,18 @@
* list_devices() - List the available printers.
* print_device() - Print a file to a USB device.
* close_device() - Close the connection to the USB printer.
* compare_quirks() - Compare two quirks entries.
* find_device() - Find or enumerate USB printers.
* find_quirks() - Find the quirks for the given printer, if any.
* get_device_id() - Get the IEEE-1284 device ID for the printer.
* list_cb() - List USB printers for discovery.
* load_quirks() - Load all quirks files in the /usr/share/cups/usb
* directory.
* make_device_uri() - Create a device URI for a USB printer.
* open_device() - Open a connection to the USB printer.
* print_cb() - Find a USB printer for printing.
* printer_class_soft_reset()' - Do the soft reset request specific to
* printers
* quirks() - Get the known quirks of a given printer model
* read_thread() - Thread to read the backchannel data on.
* sidechannel_thread() - Handle side-channel requests.
* soft_reset() - Send a soft reset to the device.
* soft_reset_printer() - Do the soft reset request specific to printers
*/
/*
@@ -38,7 +36,6 @@
#include <libusb.h>
#include <cups/cups-private.h>
#include <cups/dir.h>
#include <pthread.h>
#include <sys/select.h>
#include <sys/types.h>
@@ -73,15 +70,15 @@ typedef struct usb_printer_s /**** USB Printer Data ****/
read_endp, /* Read endpoint */
protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */
usblp_attached, /* "usblp" kernel module attached? */
reset_after_job;/* Set to 1 by print_device() */
unsigned quirks; /* Quirks flags */
reset_after_job; /* Set to 1 by print_device() */
unsigned int quirks; /* Quirks flags */
struct libusb_device_handle *handle; /* Open handle to device */
} usb_printer_t;
typedef int (*usb_cb_t)(usb_printer_t *, const char *, const char *,
const void *);
typedef struct usb_globals_s /* Global USB printer information */
typedef struct usb_globals_s
{
usb_printer_t *printer; /* Printer */
@@ -108,41 +105,143 @@ typedef struct usb_globals_s /* Global USB printer information */
} usb_globals_t;
/*
* Quirks: various printer quirks are handled by this structure and its flags.
* Quirks: various printer quirks are handled by this table & its flags.
*
* The quirks table used to be compiled into the backend but is now loaded from
* one or more files in the /usr/share/cups/usb directory.
* This is copied from the usblp kernel module. So we can easily copy and paste
* new quirks from the module.
*/
#define USB_QUIRK_BLACKLIST 0x0001 /* Does not conform to the spec */
#define USB_QUIRK_NO_REATTACH 0x0002 /* After printing we cannot re-attach
the usblp kernel module */
#define USB_QUIRK_SOFT_RESET 0x0004 /* After printing do a soft reset
for clean-up */
#define USB_QUIRK_UNIDIR 0x0008 /* Requires unidirectional mode */
#define USB_QUIRK_USB_INIT 0x0010 /* Needs vendor USB init string */
#define USB_QUIRK_VENDOR_CLASS 0x0020 /* Descriptor uses vendor-specific
struct quirk_printer_struct {
int vendorId;
int productId;
unsigned int quirks;
};
#define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires
unidirectional mode (no INs/reads) */
#define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */
#define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific
Class or SubClass */
#define USB_QUIRK_WHITELIST 0x0000 /* no quirks */
typedef struct usb_quirk_s /* USB "quirk" information */
{
int vendor_id, /* Affected vendor ID */
product_id; /* Affected product ID or 0 for all */
unsigned quirks; /* Quirks bitfield */
} usb_quirk_t;
#define USBLP_QUIRK_BLACKLIST 0x8 /* these printers do not conform to the USB print spec */
#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset
for clean-up */
#define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach
the usblp kernel module */
static const struct quirk_printer_struct quirk_printers[] = {
{ 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */
{ 0x03f0, 0x0104, USBLP_QUIRK_BIDIR }, /* HP DeskJet 880C */
{ 0x03f0, 0x0204, USBLP_QUIRK_BIDIR }, /* HP DeskJet 815C */
{ 0x03f0, 0x0304, USBLP_QUIRK_BIDIR }, /* HP DeskJet 810C/812C */
{ 0x03f0, 0x0404, USBLP_QUIRK_BIDIR }, /* HP DeskJet 830C */
{ 0x03f0, 0x0504, USBLP_QUIRK_BIDIR }, /* HP DeskJet 885C */
{ 0x03f0, 0x0604, USBLP_QUIRK_BIDIR }, /* HP DeskJet 840C */
{ 0x03f0, 0x0804, USBLP_QUIRK_BIDIR }, /* HP DeskJet 816C */
{ 0x03f0, 0x1104, USBLP_QUIRK_BIDIR }, /* HP Deskjet 959C */
{ 0x0409, 0xefbe, USBLP_QUIRK_BIDIR }, /* NEC Picty900 (HP OEM) */
{ 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */
{ 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */
{ 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
{ 0x043d, 0x00f3, USBLP_QUIRK_NO_REATTACH }, /* Lexmark International,
Inc. (e250d), https://bugs.launchpad.net/bugs/1084164 */
{ 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820,
by zut <kernel@zut.de> */
{ 0x04a9, 0x1095, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP6000D
Printer, https://bugs.launchpad.net/bugs/1160638 */
{ 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200
Printer, http://www.cups.org/str.php?L4155 */
{ 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300
Printer, https://bugs.launchpad.net/bugs/1032385 */
{ 0x04a9, 0x1721, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP210
https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53 */
{ 0x04a9, 0x170c, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP500
Printer, https://bugs.launchpad.net/bugs/1032456 */
{ 0x04a9, 0x1717, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP510
Printer, https://bugs.launchpad.net/bugs/1050009 */
{ 0x04a9, 0x173d, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP550
Printer, http://www.cups.org/str.php?L4155 */
{ 0x04a9, 0x173e, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP560
Printer, http://www.cups.org/str.php?L4155 */
{ 0x04a9, 0x26a3, USBLP_QUIRK_NO_REATTACH }, /* Canon, Inc. MF4150
Printer, https://bugs.launchpad.net/bugs/1160638 */
{ 0x04f9, 0x001a, USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
HL-1430 Laser Printer,
https://bugs.launchpad.net/bugs/1038695 */
{ 0x04f9, 0x000d, USBLP_QUIRK_BIDIR |
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
HL-1440 Laser Printer,
https://bugs.launchpad.net/bugs/1000253 */
{ 0x04f9, 0x000e, USBLP_QUIRK_BIDIR |
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
HL-1450 Laser Printer,
https://bugs.launchpad.net/bugs/1000253 */
{ 0x06bc, 0x000b, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp.
Okipage 14ex Printer,
https://bugs.launchpad.net/bugs/872483 */
{ 0x06bc, 0x01c7, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. B410d,
https://bugs.launchpad.net/bugs/872483 */
{ 0x04b8, 0x0001, USBLP_QUIRK_BIDIR |
USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 740 / Photo 750,
http://bugs.debian.org/697970 */
{ 0x04b8, 0x0005, USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 670,
https://bugs.launchpad.net/bugs/872483 */
{ 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt
Printer M129C */
{ 0x067b, 0x2305, USBLP_QUIRK_BIDIR |
USBLP_QUIRK_NO_REATTACH |
USBLP_QUIRK_RESET },
/* Prolific Technology, Inc. PL2305 Parallel Port
(USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
{ 0x0924, 0x3ce9, USBLP_QUIRK_NO_REATTACH }, /* Xerox Phaser 3124
https://bugzilla.redhat.com/show_bug.cgi?id=867392 */
{ 0x0924, 0x4293, USBLP_QUIRK_NO_REATTACH }, /* Xerox WorkCentre 3210
https://bugs.launchpad.net/bugs/1102470 */
{ 0x1a86, 0x7584, USBLP_QUIRK_NO_REATTACH }, /* QinHeng Electronics
CH340S (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/1000253 */
{ 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices,
https://bugs.launchpad.net/bugs/1032456 */
{ 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
https://bugs.launchpad.net/bugs/1001028 */
/* Canon */
{ 0x04a9, 0x304a, USBLP_QUIRK_BLACKLIST }, /* Canon CP-10 */
{ 0x04a9, 0x3063, USBLP_QUIRK_BLACKLIST }, /* Canon CP-100 */
{ 0x04a9, 0x307c, USBLP_QUIRK_BLACKLIST }, /* Canon CP-200 */
{ 0x04a9, 0x307d, USBLP_QUIRK_BLACKLIST }, /* Canon CP-300 */
{ 0x04a9, 0x30bd, USBLP_QUIRK_BLACKLIST }, /* Canon CP-220 */
{ 0x04a9, 0x30be, USBLP_QUIRK_BLACKLIST }, /* Canon CP-330 */
{ 0x04a9, 0x30f6, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP400 */
{ 0x04a9, 0x310b, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP600 */
{ 0x04a9, 0x3127, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP710 */
{ 0x04a9, 0x3128, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP510 */
{ 0x04a9, 0x3141, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES1 */
{ 0x04a9, 0x3142, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP730 */
{ 0x04a9, 0x3143, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP720 */
{ 0x04a9, 0x3170, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP750 */
{ 0x04a9, 0x3171, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP740 */
{ 0x04a9, 0x3185, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES2 */
{ 0x04a9, 0x3186, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES20 */
{ 0x04a9, 0x31aa, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP770 */
{ 0x04a9, 0x31ab, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP760 */
{ 0x04a9, 0x31b0, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES30 */
{ 0x04a9, 0x31dd, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */
{ 0x04a9, 0x31ee, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES40 */
{ 0x04a9, 0x3214, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP800 */
{ 0x04a9, 0x3255, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP900 */
{ 0x04a9, 0x3256, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP810 */
{ 0x04a9, 0x30F5, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP500 */
{ 0x04a9, 0x31AF, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES3 */
{ 0x04a9, 0x31DD, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */
/* MISSING PIDs: CP520, CP530, CP790 */
{ 0, 0 }
};
/*
* Globals...
*/
cups_array_t *all_quirks; /* Array of printer quirks */
usb_globals_t g = { 0 }; /* Globals */
libusb_device **all_list; /* List of connected USB devices */
libusb_device **list; /* List of connected USB devices */
/*
@@ -150,24 +249,22 @@ libusb_device **all_list; /* List of connected USB devices */
*/
static int close_device(usb_printer_t *printer);
static int compare_quirks(usb_quirk_t *a, usb_quirk_t *b);
static usb_printer_t *find_device(usb_cb_t cb, const void *data);
static unsigned find_quirks(int vendor_id, int product_id);
static int get_device_id(usb_printer_t *printer, char *buffer,
size_t bufsize);
static int list_cb(usb_printer_t *printer, const char *device_uri,
const char *device_id, const void *data);
static void load_quirks(void);
static char *make_device_uri(usb_printer_t *printer,
const char *device_id,
char *uri, size_t uri_size);
static int open_device(usb_printer_t *printer, int verbose);
static int print_cb(usb_printer_t *printer, const char *device_uri,
const char *device_id, const void *data);
static int printer_class_soft_reset(usb_printer_t *printer);
static unsigned int quirks(int vendor, int product);
static void *read_thread(void *reference);
static void *sidechannel_thread(void *reference);
static void soft_reset(void);
static int soft_reset_printer(usb_printer_t *printer);
/*
@@ -177,8 +274,6 @@ static int soft_reset_printer(usb_printer_t *printer);
void
list_devices(void)
{
load_quirks();
fputs("DEBUG: list_devices\n", stderr);
find_device(list_cb, NULL);
}
@@ -221,8 +316,6 @@ print_device(const char *uri, /* I - Device URI */
const char *val; /* Option value */
load_quirks();
/*
* See if the side-channel descriptor is valid...
*/
@@ -248,9 +341,9 @@ print_device(const char *uri, /* I - Device URI */
/*
* Some devices need a reset after finishing a job, these devices are
* marked with the USB_QUIRK_SOFT_RESET quirk.
* marked with the USBLP_QUIRK_RESET quirk.
*/
g.printer->reset_after_job = (g.printer->quirks & USB_QUIRK_SOFT_RESET ? 1 : 0);
g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0);
/*
* If we are printing data from a print driver on stdin, ignore SIGTERM
@@ -496,7 +589,7 @@ print_device(const char *uri, /* I - Device URI */
iostatus = libusb_bulk_transfer(g.printer->handle,
g.printer->write_endp,
print_buffer, g.print_bytes,
&bytes, 0);
&bytes, 60000);
/*
* Ignore timeout errors, but retain the number of bytes written to
* avoid sending duplicate data...
@@ -519,7 +612,7 @@ print_device(const char *uri, /* I - Device URI */
iostatus = libusb_bulk_transfer(g.printer->handle,
g.printer->write_endp,
print_buffer, g.print_bytes,
&bytes, 0);
&bytes, 60000);
}
/*
@@ -534,7 +627,7 @@ print_device(const char *uri, /* I - Device URI */
iostatus = libusb_bulk_transfer(g.printer->handle,
g.printer->write_endp,
print_buffer, g.print_bytes,
&bytes, 0);
&bytes, 60000);
}
if (iostatus)
@@ -667,7 +760,7 @@ print_device(const char *uri, /* I - Device URI */
* Clean up ....
*/
libusb_free_device_list(all_list, 1);
libusb_free_device_list(list, 1);
libusb_exit(NULL);
return (status);
@@ -786,23 +879,6 @@ close_device(usb_printer_t *printer) /* I - Printer */
}
/*
* 'compare_quirks()' - Compare two quirks entries.
*/
static int /* O - Result of comparison */
compare_quirks(usb_quirk_t *a, /* I - First quirk entry */
usb_quirk_t *b) /* I - Second quirk entry */
{
int result; /* Result of comparison */
if ((result = b->vendor_id - a->vendor_id) == 0)
result = b->product_id - a->product_id;
return (result);
}
/*
* 'find_device()' - Find or enumerate USB printers.
*/
@@ -847,7 +923,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
if (err)
{
fprintf(stderr, "DEBUG: Unable to initialize USB access via libusb, "
"libusb error %i\n", (int)err);
"libusb error %i\n", err);
return (NULL);
}
@@ -875,13 +951,13 @@ find_device(usb_cb_t cb, /* I - Callback function */
!devdesc.idProduct)
continue;
printer.quirks = find_quirks(devdesc.idVendor, devdesc.idProduct);
printer.quirks = quirks(devdesc.idVendor, devdesc.idProduct);
/*
* Ignore blacklisted printers...
*/
if (printer.quirks & USB_QUIRK_BLACKLIST)
if (printer.quirks & USBLP_QUIRK_BLACKLIST)
continue;
for (conf = 0; conf < devdesc.bNumConfigurations; conf ++)
@@ -910,13 +986,13 @@ find_device(usb_cb_t cb, /* I - Callback function */
if (((altptr->bInterfaceClass != LIBUSB_CLASS_PRINTER ||
altptr->bInterfaceSubClass != 1) &&
((printer.quirks & USB_QUIRK_VENDOR_CLASS) == 0)) ||
((printer.quirks & USBLP_QUIRK_BAD_CLASS) == 0)) ||
(altptr->bInterfaceProtocol != 1 && /* Unidirectional */
altptr->bInterfaceProtocol != 2) || /* Bidirectional */
altptr->bInterfaceProtocol < protocol)
continue;
if (printer.quirks & USB_QUIRK_VENDOR_CLASS)
if (printer.quirks & USBLP_QUIRK_BAD_CLASS)
fprintf(stderr, "DEBUG: Printer does not report class 7 and/or "
"subclass 1 but works as a printer anyway\n");
@@ -973,7 +1049,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
{
fprintf(stderr, "DEBUG: Device protocol: %d\n",
printer.protocol);
if (printer.quirks & USB_QUIRK_UNIDIR)
if (printer.quirks & USBLP_QUIRK_BIDIR)
{
printer.read_endp = -1;
fprintf(stderr, "DEBUG: Printer reports bi-di support "
@@ -993,7 +1069,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
altsetting[printer.altset].
endpoint[printer.write_endp].
bEndpointAddress;
if (printer.quirks & USB_QUIRK_NO_REATTACH)
if (printer.quirks & USBLP_QUIRK_NO_REATTACH)
{
printer.usblp_attached = 0;
fprintf(stderr, "DEBUG: Printer does not like usblp "
@@ -1028,35 +1104,6 @@ find_device(usb_cb_t cb, /* I - Callback function */
}
/*
* 'find_quirks()' - Find the quirks for the given printer, if any.
*
* First looks for an exact match, then looks for the vendor ID wildcard match.
*/
static unsigned /* O - Quirks flags */
find_quirks(int vendor_id, /* I - Vendor ID */
int product_id) /* I - Product ID */
{
usb_quirk_t key, /* Search key */
*match; /* Matching quirk entry */
key.vendor_id = vendor_id;
key.product_id = product_id;
if ((match = cupsArrayFind(all_quirks, &key)) != NULL)
return (match->quirks);
key.product_id = 0;
if ((match = cupsArrayFind(all_quirks, &key)) != NULL)
return (match->quirks);
return (USB_QUIRK_WHITELIST);
}
/*
* 'get_device_id()' - Get the IEEE-1284 device ID for the printer.
*/
@@ -1162,104 +1209,6 @@ list_cb(usb_printer_t *printer, /* I - Printer */
}
/*
* 'load_quirks()' - Load all quirks files in the /usr/share/cups/usb directory.
*/
static void
load_quirks(void)
{
const char *datadir; /* CUPS_DATADIR environment variable */
char filename[1024], /* Filename */
line[1024]; /* Line from file */
cups_dir_t *dir; /* Directory */
cups_dentry_t *dent; /* Directory entry */
cups_file_t *fp; /* Quirks file */
usb_quirk_t *quirk; /* New quirk */
all_quirks = cupsArrayNew((cups_array_func_t)compare_quirks, NULL);
if ((datadir = getenv("CUPS_DATADIR")) == NULL)
datadir = CUPS_DATADIR;
snprintf(filename, sizeof(filename), "%s/usb", datadir);
if ((dir = cupsDirOpen(filename)) == NULL)
{
perror(filename);
return;
}
fprintf(stderr, "DEBUG: Loading USB quirks from \"%s\".\n", filename);
while ((dent = cupsDirRead(dir)) != NULL)
{
if (!S_ISREG(dent->fileinfo.st_mode))
continue;
snprintf(filename, sizeof(filename), "%s/usb/%s", datadir, dent->filename);
if ((fp = cupsFileOpen(filename, "r")) == NULL)
{
perror(filename);
continue;
}
while (cupsFileGets(fp, line, sizeof(line)))
{
/*
* Skip blank and comment lines...
*/
if (line[0] == '#' || !line[0])
continue;
/*
* Add a quirk...
*/
if ((quirk = calloc(1, sizeof(usb_quirk_t))) == NULL)
{
perror("DEBUG: Unable to allocate memory for quirk");
break;
}
if (sscanf(line, "%x%x", &quirk->vendor_id, &quirk->product_id) < 1)
{
fprintf(stderr, "DEBUG: Bad line: %s\n", line);
free(quirk);
continue;
}
if (strstr(line, " blacklist"))
quirk->quirks |= USB_QUIRK_BLACKLIST;
if (strstr(line, " no-reattach"))
quirk->quirks |= USB_QUIRK_NO_REATTACH;
if (strstr(line, " soft-reset"))
quirk->quirks |= USB_QUIRK_SOFT_RESET;
if (strstr(line, " unidir"))
quirk->quirks |= USB_QUIRK_UNIDIR;
if (strstr(line, " usb-init"))
quirk->quirks |= USB_QUIRK_USB_INIT;
if (strstr(line, " vendor-class"))
quirk->quirks |= USB_QUIRK_VENDOR_CLASS;
cupsArrayAdd(all_quirks, quirk);
}
cupsFileClose(fp);
}
fprintf(stderr, "DEBUG: Loaded %d quirks.\n", cupsArrayCount(all_quirks));
cupsDirClose(dir);
}
/*
* 'make_device_uri()' - Create a device URI for a USB printer.
*/
@@ -1686,6 +1635,65 @@ print_cb(usb_printer_t *printer, /* I - Printer */
}
/*
* 'printer_class_soft_reset()' - Do the soft reset request specific to printers
*
* This soft reset is specific to the printer device class and is much less
* invasive than the general USB reset libusb_reset_device(). Especially it
* does never happen that the USB addressing and configuration changes. What
* is actually done is that all buffers get flushed and the bulk IN and OUT
* pipes get reset to their default states. This clears all stall conditions.
* See http://cholla.mmto.org/computers/linux/usb/usbprint11.pdf
*/
static int /* O - 0 on success, < 0 on error */
printer_class_soft_reset(usb_printer_t *printer) /* I - Printer */
{
struct libusb_config_descriptor *confptr = NULL;
/* Pointer to current configuration */
int interface,
errcode;
if (libusb_get_config_descriptor(printer->device, printer->conf, &confptr)
< 0)
interface = printer->iface;
else
interface = confptr->interface[printer->iface].
altsetting[printer->altset].bInterfaceNumber;
libusb_free_config_descriptor(confptr);
if ((errcode = libusb_control_transfer(printer->handle,
LIBUSB_REQUEST_TYPE_CLASS |
LIBUSB_ENDPOINT_OUT |
LIBUSB_RECIPIENT_OTHER,
2, 0, interface, NULL, 0, 5000)) < 0)
errcode = libusb_control_transfer(printer->handle,
LIBUSB_REQUEST_TYPE_CLASS |
LIBUSB_ENDPOINT_OUT |
LIBUSB_RECIPIENT_INTERFACE,
2, 0, interface, NULL, 0, 5000);
return errcode;
}
/*
* 'quirks()' - Get the known quirks of a given printer model
*/
static unsigned int quirks(int vendor, int product)
{
int i;
for (i = 0; quirk_printers[i].vendorId; i++)
{
if (vendor == quirk_printers[i].vendorId &&
(quirk_printers[i].productId == 0x0000 ||
product == quirk_printers[i].productId))
return quirk_printers[i].quirks;
}
return 0;
}
/*
* 'read_thread()' - Thread to read the backchannel data on.
*/
@@ -1909,15 +1917,13 @@ sidechannel_thread(void *reference)
* 'soft_reset()' - Send a soft reset to the device.
*/
static void
soft_reset(void)
static void soft_reset(void)
{
fd_set input_set; /* Input set for select() */
struct timeval tv; /* Time value */
char buffer[2048]; /* Buffer */
struct timespec cond_timeout; /* pthread condition timeout */
/*
* Send an abort once a second until the I/O lock is released by the main
* thread...
@@ -1962,7 +1968,7 @@ soft_reset(void)
* Send the reset...
*/
soft_reset_printer(g.printer);
printer_class_soft_reset(g.printer);
/*
* Release the I/O lock...
@@ -1976,51 +1982,6 @@ soft_reset(void)
/*
* 'soft_reset_printer()' - Do the soft reset request specific to printers
*
* This soft reset is specific to the printer device class and is much less
* invasive than the general USB reset libusb_reset_device(). Especially it
* does never happen that the USB addressing and configuration changes. What
* is actually done is that all buffers get flushed and the bulk IN and OUT
* pipes get reset to their default states. This clears all stall conditions.
* See http://cholla.mmto.org/computers/linux/usb/usbprint11.pdf
*/
static int /* O - 0 on success, < 0 on error */
soft_reset_printer(
usb_printer_t *printer) /* I - Printer */
{
struct libusb_config_descriptor *confptr = NULL;
/* Pointer to current configuration */
int interface, /* Interface to reset */
errcode; /* Error code */
if (libusb_get_config_descriptor(printer->device, printer->conf,
&confptr) < 0)
interface = printer->iface;
else
interface = confptr->interface[printer->iface].
altsetting[printer->altset].bInterfaceNumber;
libusb_free_config_descriptor(confptr);
if ((errcode = libusb_control_transfer(printer->handle,
LIBUSB_REQUEST_TYPE_CLASS |
LIBUSB_ENDPOINT_OUT |
LIBUSB_RECIPIENT_OTHER,
2, 0, interface, NULL, 0, 5000)) < 0)
errcode = libusb_control_transfer(printer->handle,
LIBUSB_REQUEST_TYPE_CLASS |
LIBUSB_ENDPOINT_OUT |
LIBUSB_RECIPIENT_INTERFACE,
2, 0, interface, NULL, 0, 5000);
return (errcode);
}
/*
* End of "$Id: usb-libusb.c 11456 2013-12-09 19:26:47Z msweet $".
* End of "$Id: usb-libusb.c 10979 2013-05-13 17:39:19Z msweet $".
*/
+3 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: usb-unix.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: usb-unix.c 7810 2008-07-29 01:11:15Z mike $"
*
* USB port backend for CUPS.
*
@@ -257,6 +257,7 @@ list_devices(void)
close(fd);
}
#elif defined(__sgi)
#elif defined(__sun) && defined(ECPPIOC_GETDEVID)
int i; /* Looping var */
int fd; /* File descriptor */
@@ -612,5 +613,5 @@ side_cb(int print_fd, /* I - Print file */
/*
* End of "$Id: usb-unix.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: usb-unix.c 7810 2008-07-29 01:11:15Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: usb.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: usb.c 7687 2008-06-24 01:28:36Z mike $"
*
* USB port backend for CUPS.
*
@@ -260,5 +260,5 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
/*
* End of "$Id: usb.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: usb.c 7687 2008-06-24 01:28:36Z mike $".
*/
+2 -3
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
#
# Berkeley commands makefile for CUPS.
#
@@ -88,7 +88,6 @@ install-exec:
$(INSTALL_DIR) $(SYMROOT); \
for file in $(TARGETS); do \
cp $$file $(SYMROOT); \
dsymutil $(SYMROOT)/$$file; \
done \
fi
@@ -164,5 +163,5 @@ include Dependencies
#
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
#
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: lpc.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: lpc.c 7079 2007-11-30 01:58:31Z mike $"
*
* "lpc" command for CUPS.
*
@@ -446,5 +446,5 @@ show_status(http_t *http, /* I - HTTP connection to server */
/*
* End of "$Id: lpc.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: lpc.c 7079 2007-11-30 01:58:31Z mike $".
*/
+7 -7
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: lpq.c 11101 2013-07-08 11:20:33Z msweet $"
* "$Id: lpq.c 7460 2008-04-16 02:19:54Z mike $"
*
* "lpq" command for CUPS.
*
@@ -138,8 +138,8 @@ main(int argc, /* I - Number of command-line arguments */
if ((named_dest = cupsGetNamedDest(http, dest, instance)) == NULL)
{
if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
if (cupsLastError() == IPP_BAD_REQUEST ||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
_cupsLangPrintf(stderr,
_("%s: Error - add '/version=1.1' to server "
"name."), argv[0]);
@@ -208,8 +208,8 @@ main(int argc, /* I - Number of command-line arguments */
{
if ((named_dest = cupsGetNamedDest(http, NULL, NULL)) == NULL)
{
if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
if (cupsLastError() == IPP_BAD_REQUEST ||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
{
_cupsLangPrintf(stderr,
_("%s: Error - add '/version=1.1' to server name."),
@@ -528,7 +528,7 @@ show_jobs(const char *command, /* I - Command name */
*/
if (jobstate == IPP_JOB_PROCESSING)
strlcpy(rankstr, "active", sizeof(rankstr));
strcpy(rankstr, "active");
else
{
/*
@@ -679,5 +679,5 @@ usage(void)
/*
* End of "$Id: lpq.c 11101 2013-07-08 11:20:33Z msweet $".
* End of "$Id: lpq.c 7460 2008-04-16 02:19:54Z mike $".
*/
+6 -6
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: lpr.c 11101 2013-07-08 11:20:33Z msweet $"
* "$Id: lpr.c 7720 2008-07-11 22:46:21Z mike $"
*
* "lpr" command for CUPS.
*
@@ -227,8 +227,8 @@ main(int argc, /* I - Number of command-line arguments */
dest->options[j].value,
num_options, &options);
}
else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
else if (cupsLastError() == IPP_BAD_REQUEST ||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
{
_cupsLangPrintf(stderr,
_("%s: Error - add '/version=1.1' to server "
@@ -330,8 +330,8 @@ main(int argc, /* I - Number of command-line arguments */
dest->options[j].value,
num_options, &options);
}
else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
else if (cupsLastError() == IPP_BAD_REQUEST ||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
{
_cupsLangPrintf(stderr,
_("%s: Error - add '/version=1.1' to server "
@@ -436,5 +436,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
* End of "$Id: lpr.c 11101 2013-07-08 11:20:33Z msweet $".
* End of "$Id: lpr.c 7720 2008-07-11 22:46:21Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: lprm.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $"
*
* "lprm" command for CUPS.
*
@@ -213,5 +213,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
* End of "$Id: lprm.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $".
*/
+2 -4
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
#
# CGI makefile for CUPS.
#
@@ -120,7 +120,6 @@ install-exec:
$(INSTALL_DIR) $(SYMROOT); \
for file in $(CGIS); do \
cp $$file $(SYMROOT); \
dsymutil $(SYMROOT)/$$file; \
done \
fi
@@ -155,7 +154,6 @@ install-libs: $(INSTALLSTATIC)
if test "x$(SYMROOT)" != "x"; then \
$(INSTALL_DIR) $(SYMROOT); \
cp $(LIBCUPSCGI) $(SYMROOT); \
dsymutil $(SYMROOT)/$(LIBCUPSCGI); \
fi
installstatic:
@@ -380,5 +378,5 @@ include Dependencies
#
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
#
+15 -15
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: admin.c 11345 2013-10-18 21:14:52Z msweet $"
* "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $"
*
* Administration CGI for CUPS.
*
@@ -962,13 +962,13 @@ do_am_printer(http_t *http, /* I - HTTP connection */
else if (!_cups_strncasecmp(make, "laserjet", 8) ||
!_cups_strncasecmp(make, "deskjet", 7) ||
!_cups_strncasecmp(make, "designjet", 9))
strlcpy(make, "HP", sizeof(make));
strcpy(make, "HP");
else if (!_cups_strncasecmp(make, "phaser", 6))
strlcpy(make, "Xerox", sizeof(make));
strcpy(make, "Xerox");
else if (!_cups_strncasecmp(make, "stylus", 6))
strlcpy(make, "Epson", sizeof(make));
strcpy(make, "Epson");
else
strlcpy(make, "Generic", sizeof(make));
strcpy(make, "Generic");
if (!cgiGetVariable("CURRENT_MAKE"))
cgiSetVariable("CURRENT_MAKE", make);
@@ -1348,20 +1348,20 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
if (!file)
{
var = cgiGetVariable("PPD_NAME");
if (strcmp(var, "__no_change__"))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
NULL, var);
}
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
NULL, cgiGetVariable("PRINTER_LOCATION"));
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
NULL, cgiGetVariable("PRINTER_INFO"));
if (!file)
{
var = cgiGetVariable("PPD_NAME");
if (strcmp(var, "__no_change__"))
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
NULL, var);
}
strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
/*
@@ -4187,7 +4187,7 @@ get_option_value(
if (bufptr == buffer || (bufend - bufptr) < 2)
return (NULL);
memcpy(bufptr, "}", 2);
strcpy(bufptr, "}");
}
return (buffer);
@@ -4218,5 +4218,5 @@ get_points(double number, /* I - Original number */
/*
* End of "$Id: admin.c 11345 2013-10-18 21:14:52Z msweet $".
* End of "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: cgi-private.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: cgi-private.h 7940 2008-09-16 00:45:16Z mike $"
*
* Private CGI definitions for CUPS.
*
@@ -32,5 +32,5 @@
/*
* End of "$Id: cgi-private.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: cgi-private.h 7940 2008-09-16 00:45:16Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: cgi.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: cgi.h 6649 2007-07-11 21:46:42Z mike $"
*
* CGI support library definitions for CUPS.
*
@@ -115,5 +115,5 @@ extern const char *cgiText(const char *message);
#endif /* !_CUPS_CGI_H_ */
/*
* End of "$Id: cgi.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: cgi.h 6649 2007-07-11 21:46:42Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: classes.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: classes.c 7940 2008-09-16 00:45:16Z mike $"
*
* Class status CGI for CUPS.
*
@@ -554,5 +554,5 @@ show_class(http_t *http, /* I - Connection to server */
/*
* End of "$Id: classes.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: classes.c 7940 2008-09-16 00:45:16Z mike $".
*/
+4 -4
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: help-index.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: help-index.c 7717 2008-07-04 02:35:33Z mike $"
*
* Online help index routines for CUPS.
*
* Copyright 2007-2012 by Apple Inc.
* Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -910,7 +910,7 @@ help_load_file(
node = NULL;
offset = 0;
strlcpy(section, "Other", sizeof(section));
strcpy(section, "Other");
while (cupsFileGets(fp, line, sizeof(line)))
{
@@ -1324,5 +1324,5 @@ help_sort_words(help_word_t *w1, /* I - Second word */
/*
* End of "$Id: help-index.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: help-index.c 7717 2008-07-04 02:35:33Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: help-index.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: help-index.h 7615 2008-05-25 07:17:07Z mike $"
*
* Online help index definitions for CUPS.
*
@@ -83,5 +83,5 @@ extern help_index_t *helpSearchIndex(help_index_t *hi, const char *query,
#endif /* !_CUPS_HELP_INDEX_H_ */
/*
* End of "$Id: help-index.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: help-index.h 7615 2008-05-25 07:17:07Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: help.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id$"
*
* Online help CGI for CUPS.
*
@@ -393,5 +393,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
* End of "$Id: help.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id$".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: html.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: html.c 6649 2007-07-11 21:46:42Z mike $"
*
* HTML support functions for CUPS.
*
@@ -235,5 +235,5 @@ cgi_null_passwd(const char *prompt) /* I - Prompt string (unused) */
/*
* End of "$Id: html.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: html.c 6649 2007-07-11 21:46:42Z mike $".
*/
+5 -5
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: ipp-var.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $"
*
* CGI <-> IPP variable routines for CUPS.
*
@@ -129,7 +129,7 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */
*nameptr = '\0';
if (!strncmp(name, "printer_state_history", 21))
strlcpy(name, "printer_state_history", sizeof(name));
strcpy(name, "printer_state_history");
/*
* Possibly add it to the list of attributes...
@@ -554,8 +554,8 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
ipp_t *request, /* Get-Job-Attributes request */
*response; /* Get-Job-Attributes response */
ipp_attribute_t *attr; /* Current job attribute */
static const char * const job_attrs[] =/* Job attributes we want */
{
static const char * const job_attrs[] =
{ /* Job attributes we want */
"job-state",
"job-printer-state-message"
};
@@ -1589,5 +1589,5 @@ cgiText(const char *message) /* I - Message */
/*
* End of "$Id: ipp-var.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $".
*/
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: jobs.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: jobs.c 7237 2008-01-22 01:38:39Z mike $"
*
* Job status CGI for CUPS.
*
@@ -182,7 +182,7 @@ do_job_op(http_t *http, /* I - HTTP connection */
char url[1024]; /* Encoded URL */
strlcpy(url, "5;URL=", sizeof(url));
strcpy(url, "5;URL=");
cgiFormEncode(url + 6, getenv("HTTP_REFERER"), sizeof(url) - 6);
cgiSetVariable("refresh_page", url);
}
@@ -210,5 +210,5 @@ do_job_op(http_t *http, /* I - HTTP connection */
/*
* End of "$Id: jobs.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: jobs.c 7237 2008-01-22 01:38:39Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: printers.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: printers.c 7940 2008-09-16 00:45:16Z mike $"
*
* Printer status CGI for CUPS.
*
@@ -574,5 +574,5 @@ show_printer(http_t *http, /* I - Connection to server */
/*
* End of "$Id: printers.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: printers.c 7940 2008-09-16 00:45:16Z mike $".
*/
+9 -9
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: search.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: search.c 7720 2008-07-11 22:46:21Z mike $"
*
* Search routines for CUPS.
*
* Copyright 2007-2012 by Apple Inc.
* Copyright 2007-2011 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -208,7 +208,7 @@ cgiCompileSearch(const char *query) /* I - Query string */
* Add the prefix string...
*/
memcpy(sptr, prefix, strlen(prefix) + 1);
strcpy(sptr, prefix);
sptr += strlen(sptr);
/*
@@ -249,16 +249,16 @@ cgiCompileSearch(const char *query) /* I - Query string */
return (NULL);
}
memcpy(sptr, ".*|.*", 6);
strcpy(sptr, ".*|.*");
sptr += 5;
memcpy(sptr, lword2, strlen(lword2) + 1);
strcpy(sptr, lword2);
sptr += strlen(sptr);
memcpy(sptr, ".*", 3);
strcpy(sptr, ".*");
sptr += 2;
memcpy(sptr, lword, strlen(lword) + 1);
strcpy(sptr, lword);
sptr += strlen(sptr);
free(lword);
@@ -287,7 +287,7 @@ cgiCompileSearch(const char *query) /* I - Query string */
free(lword);
if (sptr > s)
memcpy(sptr, ".*", 3);
strcpy(sptr, ".*");
else
{
/*
@@ -377,5 +377,5 @@ cgiFreeSearch(void *search) /* I - Search context */
/*
* End of "$Id: search.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: search.c 7720 2008-07-11 22:46:21Z mike $".
*/
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: template.c 11688 2014-03-05 21:11:32Z msweet $"
* "$Id: template.c 7219 2008-01-14 22:00:02Z mike $"
*
* CGI template function.
*
@@ -553,7 +553,7 @@ cgi_copy(FILE *out, /* I - Output file */
if (regcomp(&re, compare, REG_EXTENDED | REG_ICASE))
{
fprintf(stderr,
"ERROR: Unable to compile regular expression \"%s\"!\n",
"ERROR: Unable to compile regular expresion \"%s\"!\n",
compare);
result = 0;
}
@@ -729,5 +729,5 @@ cgi_puturi(const char *s, /* I - String to output */
/*
* End of "$Id: template.c 11688 2014-03-05 21:11:32Z msweet $".
* End of "$Id: template.c 7219 2008-01-14 22:00:02Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: testcgi.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: testcgi.c 6649 2007-07-11 21:46:42Z mike $"
*
* CGI test program for CUPS.
*
@@ -71,5 +71,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
* End of "$Id: testcgi.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: testcgi.c 6649 2007-07-11 21:46:42Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: testhi.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: testhi.c 6649 2007-07-11 21:46:42Z mike $"
*
* Help index test program for CUPS.
*
@@ -109,5 +109,5 @@ list_nodes(const char *title, /* I - Title string */
/*
* End of "$Id: testhi.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: testhi.c 6649 2007-07-11 21:46:42Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: testtemplate.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: testtemplate.c 6649 2007-07-11 21:46:42Z mike $"
*
* CGI template test program for CUPS.
*
@@ -99,5 +99,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
* End of "$Id: testtemplate.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: testtemplate.c 6649 2007-07-11 21:46:42Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: var.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: var.c 7460 2008-04-16 02:19:54Z mike $"
*
* CGI form variable and array functions for CUPS.
*
@@ -1307,5 +1307,5 @@ cgi_unlink_file(void)
/*
* End of "$Id: var.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: var.c 7460 2008-04-16 02:19:54Z mike $".
*/
+3 -3
Ver Arquivo
@@ -1,9 +1,9 @@
#
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
# "$Id: Makefile 7938 2008-09-11 23:53:59Z mike $"
#
# Configuration file makefile for CUPS.
#
# Copyright 2007-2012 by Apple Inc.
# Copyright 2007-2011 by Apple Inc.
# Copyright 1993-2006 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -139,5 +139,5 @@ uninstall:
#
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
# End of "$Id: Makefile 7938 2008-09-11 23:53:59Z mike $".
#
+2 -5
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cups-files.conf.in 11201 2013-07-26 21:27:27Z msweet $"
# "$Id: cups-files.conf.in 4185 2013-02-20 02:19:13Z msweet $"
#
# Sample file/directory/user/group configuration file for the CUPS scheduler.
# See "man cups-files.conf" for a complete description of this file.
@@ -8,9 +8,6 @@
# List of events that are considered fatal errors for the scheduler...
#FatalErrors @CUPS_FATAL_ERRORS@
# Do we call fsync() after writing configuration or status files?
#SyncOnClose No
# Default user and group for filters/backends/helper programs; this cannot be
# any user or group that resolves to ID 0 for security reasons...
#User @CUPS_USER@
@@ -97,5 +94,5 @@ PageLog @CUPS_LOGDIR@/page_log
#TempDir @CUPS_REQUESTS@/tmp
#
# End of "$Id: cups-files.conf.in 11201 2013-07-26 21:27:27Z msweet $".
# End of "$Id: cups-files.conf.in 4185 2013-02-20 02:19:13Z msweet $".
#
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cupsd.conf.in 11025 2013-06-07 01:00:33Z msweet $"
# "$Id: cupsd.conf.in 7888 2008-08-29 21:16:56Z mike $"
#
# Sample configuration file for the CUPS scheduler. See "man cupsd.conf" for a
# complete description of this file.
@@ -130,5 +130,5 @@ WebInterface @CUPS_WEBIF@
</Policy>
#
# End of "$Id: cupsd.conf.in 11025 2013-06-07 01:00:33Z msweet $".
# End of "$Id: cupsd.conf.in 7888 2008-08-29 21:16:56Z mike $".
#
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.convs.in 11025 2013-06-07 01:00:33Z msweet $"
# "$Id: mime.convs.in 6761 2007-08-02 17:58:59Z mike $"
#
# DO NOT EDIT THIS FILE, AS IT IS OVERWRITTEN WHEN YOU INSTALL NEW
# VERSIONS OF CUPS. Instead, create a "local.convs" file that
@@ -59,5 +59,5 @@ application/vnd.cups-raster image/pwg-raster 100 rastertopwg
@DEFAULT_RAW_PRINTING@application/octet-stream application/vnd.cups-raw 0 -
#
# End of "$Id: mime.convs.in 11025 2013-06-07 01:00:33Z msweet $".
# End of "$Id: mime.convs.in 6761 2007-08-02 17:58:59Z mike $".
#
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: snmp.conf.in 11025 2013-06-07 01:00:33Z msweet $"
# "$Id$"
#
# Sample SNMP configuration file for CUPS. See "man cups-snmp.conf" for a
# complete description of this file.
@@ -9,5 +9,5 @@
@CUPS_SNMP_COMMUNITY@
#
# End of "$Id: snmp.conf.in 11025 2013-06-07 01:00:33Z msweet $".
# End of "$Id$".
#
+17 -21
Ver Arquivo
@@ -1,16 +1,16 @@
dnl
dnl "$Id: cups-common.m4 8781 2009-08-28 17:34:54Z mike $"
dnl
dnl Common configuration stuff for CUPS.
dnl Common configuration stuff for CUPS.
dnl
dnl Copyright 2007-2014 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl Copyright 2007-2013 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Apple Inc. and are protected by Federal copyright
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
dnl which should have been included with this file. If this file is
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl These coded instructions, statements, and computer programs are the
dnl property of Apple Inc. and are protected by Federal copyright
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
dnl which should have been included with this file. If this file is
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl
dnl We need at least autoconf 2.60...
@@ -20,8 +20,8 @@ dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Version number information...
CUPS_VERSION=1.7.2
CUPS_REVISION=
CUPS_VERSION="1.6.3"
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
@@ -225,9 +225,7 @@ dnl See if we have libusb...
AC_ARG_ENABLE(libusb, [ --enable-libusb use libusb for USB printing])
LIBUSB=""
USBQUIRKS=""
AC_SUBST(LIBUSB)
AC_SUBST(USBQUIRKS)
if test "x$PKGCONFIG" != x; then
if test x$enable_libusb = xyes -o $uname != Darwin; then
@@ -237,7 +235,6 @@ if test "x$PKGCONFIG" != x; then
AC_DEFINE(HAVE_LIBUSB)
CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`"
LIBUSB="`$PKGCONFIG --libs libusb-1.0`"
USBQUIRKS="\$(DATADIR)/usb"
else
AC_MSG_RESULT(no)
fi
@@ -267,7 +264,6 @@ AC_CHECK_HEADER(zlib.h,
AC_DEFINE(HAVE_LIBZ)
LIBZ="-lz"
LIBS="$LIBS -lz"
AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
if test "x$GZIP" != z; then
INSTALL_GZIP="-z"
fi))
@@ -303,11 +299,16 @@ fi
LIBS="$SAVELIBS"
dnl Check for DBUS support
AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
if test -d /etc/dbus-1; then
DBUSDIR="/etc/dbus-1"
else
DBUSDIR=""
fi
AC_ARG_ENABLE(dbus, [ --enable-dbus build with DBUS support])
AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
DBUSDIR="$withval")
DBUSDIR=""
DBUS_NOTIFIER=""
DBUS_NOTIFIERLIBS=""
@@ -324,12 +325,7 @@ if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x; then
LIBS="$LIBS $DBUS_NOTIFIERLIBS"
AC_CHECK_FUNC(dbus_message_iter_init_append,
AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND))
AC_CHECK_FUNC(dbus_threads_init,
AC_DEFINE(HAVE_DBUS_THREADS_INIT))
LIBS="$SAVELIBS"
if test -d /etc/dbus-1; then
DBUSDIR="/etc/dbus-1"
fi
else
AC_MSG_RESULT(no)
fi
+37 -38
Ver Arquivo
@@ -1,16 +1,16 @@
dnl
dnl "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $"
dnl
dnl Compiler stuff for CUPS.
dnl Compiler stuff for CUPS.
dnl
dnl Copyright 2007-2014 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl Copyright 2007-2012 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Apple Inc. and are protected by Federal copyright
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
dnl which should have been included with this file. If this file is
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl These coded instructions, statements, and computer programs are the
dnl property of Apple Inc. and are protected by Federal copyright
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
dnl which should have been included with this file. If this file is
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl
dnl Clear the debugging and non-shared library options unless the user asks
@@ -114,43 +114,29 @@ if test -n "$GCC"; then
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector"
AC_TRY_LINK(,,
if test "x$LSB_BUILD" = xy; then
# Can't use stack-protector with LSB binaries...
OPTIM="$OPTIM -fno-stack-protector"
else
OPTIM="$OPTIM -fstack-protector"
fi
OPTIM="$OPTIM -fstack-protector"
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
CFLAGS="$OLDCFLAGS"
if test "x$LSB_BUILD" != xy; then
# The -fPIE option is available with some versions of GCC and
# adds randomization of addresses, which avoids another class of
# exploits that depend on a fixed address for common functions.
#
# Not available to LSB binaries...
AC_MSG_CHECKING(if GCC supports -fPIE)
OLDCFLAGS="$CFLAGS"
case "$uname" in
Darwin*)
CFLAGS="$CFLAGS -fPIE -Wl,-pie"
AC_TRY_COMPILE(,,[
PIEFLAGS="-fPIE -Wl,-pie"
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
# The -fPIE option is available with some versions of GCC and adds
# randomization of addresses, which avoids another class of exploits
# that depend on a fixed address for common functions.
AC_MSG_CHECKING(if GCC supports -fPIE)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fPIE"
AC_TRY_COMPILE(,,
[case "$CC" in
*clang)
PIEFLAGS="-fPIE -Wl,-pie"
;;
*)
CFLAGS="$CFLAGS -fPIE -pie"
AC_TRY_COMPILE(,,[
PIEFLAGS="-fPIE -pie"
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
PIEFLAGS="-fPIE -pie"
;;
esac
CFLAGS="$OLDCFLAGS"
fi
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
CFLAGS="$OLDCFLAGS"
if test "x$with_optim" = x; then
# Add useful warning options for tracking down problems...
@@ -185,7 +171,7 @@ if test -n "$GCC"; then
# The -z relro option is provided by the Linux linker command to
# make relocatable data read-only.
if test x$enable_relro = xyes; then
RELROFLAGS="-Wl,-z,relro,-z,now"
RELROFLAGS="-Wl,-z,relro"
fi
;;
esac
@@ -216,6 +202,19 @@ else
OPTIM="+z $OPTIM"
fi
;;
IRIX)
if test -z "$OPTIM"; then
if test "x$with_optim" = x; then
OPTIM="-O2"
else
OPTIM="$with_optim $OPTIM"
fi
fi
if test "x$with_optim" = x; then
OPTIM="-fullwarn -woff 1183,1209,1349,1506,3201 $OPTIM"
fi
;;
OSF*)
# Tru64 UNIX aka Digital UNIX aka OSF/1
if test -z "$OPTIM"; then
+21 -12
Ver Arquivo
@@ -3,7 +3,7 @@ dnl "$Id: cups-directories.m4 7799 2008-07-25 20:06:08Z mike $"
dnl
dnl Directory stuff for CUPS.
dnl
dnl Copyright 2007-2013 by Apple Inc.
dnl Copyright 2007-2012 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -102,6 +102,9 @@ fi
dnl Fix "libdir" variable...
if test "$libdir" = "\${exec_prefix}/lib"; then
case "$uname" in
IRIX*)
libdir="$exec_prefix/lib32"
;;
Linux*)
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
libdir="$exec_prefix/lib64"
@@ -166,6 +169,13 @@ if test x$rcdir = x; then
RCSTOP="620"
;;
IRIX*)
# IRIX
INITDIR="/etc"
RCSTART="60"
RCSTOP="25"
;;
Linux | GNU | GNU/k*BSD*)
# Linux/HURD seems to choose an init.d directory at random...
if test -d /sbin/init.d; then
@@ -412,17 +422,16 @@ AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups")
AC_SUBST(CUPS_SERVERROOT)
# Transient run-time state
AC_ARG_WITH(rundir, [ --with-rundir set transient run-time state directory],CUPS_STATEDIR="$withval",[
case "$uname" in
Darwin*)
# Darwin (OS X)
CUPS_STATEDIR="$CUPS_SERVERROOT"
;;
*)
# All others
CUPS_STATEDIR="$localstatedir/run/cups"
;;
esac])
case "$uname" in
Darwin*)
# Darwin (OS X)
CUPS_STATEDIR="$CUPS_SERVERROOT"
;;
*)
# All others
CUPS_STATEDIR="$localstatedir/run/cups"
;;
esac
AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR")
AC_SUBST(CUPS_STATEDIR)
-10
Ver Arquivo
@@ -23,8 +23,6 @@ AC_ARG_WITH(dnssd-includes, [ --with-dnssd-includes set directory for DNS Ser
DNSSDLIBS=""
DNSSD_BACKEND=""
IPPFIND_BIN=""
IPPFIND_MAN=""
if test "x$PKGCONFIG" != x -a x$enable_avahi != xno; then
AC_MSG_CHECKING(for Avahi)
@@ -33,8 +31,6 @@ if test "x$PKGCONFIG" != x -a x$enable_avahi != xno; then
CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
DNSSD_BACKEND="dnssd"
IPPFIND_BIN="ippfind"
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
AC_DEFINE(HAVE_AVAHI)
else
AC_MSG_RESULT(no)
@@ -49,8 +45,6 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
AC_DEFINE(HAVE_DNSSD)
DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration"
DNSSD_BACKEND="dnssd"
IPPFIND_BIN="ippfind"
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
;;
*)
# All others...
@@ -67,8 +61,6 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
AC_DEFINE(HAVE_DNSSD)
DNSSDLIBS="-ldns_sd"
DNSSD_BACKEND="dnssd",
IPPFIND_BIN="ippfind"
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
AC_MSG_RESULT(no))
LIBS="$SAVELIBS"
;;
@@ -78,8 +70,6 @@ fi
AC_SUBST(DNSSDLIBS)
AC_SUBST(DNSSD_BACKEND)
AC_SUBST(IPPFIND_BIN)
AC_SUBST(IPPFIND_MAN)
dnl
dnl End of "$Id: cups-dnssd.m4 7890 2008-08-29 22:19:39Z mike $".
+35 -6
Ver Arquivo
@@ -1,9 +1,9 @@
dnl
dnl "$Id: cups-gssapi.m4 11324 2013-10-04 03:11:42Z msweet $"
dnl "$Id$"
dnl
dnl GSSAPI/Kerberos library detection for CUPS.
dnl
dnl Copyright 2007-2013 by Apple Inc.
dnl Copyright 2007-2012 by Apple Inc.
dnl Copyright 2006-2007 by Easy Software Products.
dnl
dnl This file contains Kerberos support code, copyright 2006 by
@@ -71,9 +71,38 @@ if test x$enable_gssapi != xno; then
if test "x$LIBGSSAPI" != x; then
AC_CHECK_HEADER(krb5.h, AC_DEFINE(HAVE_KRB5_H))
if test -d /System/Library/Frameworks/GSS.framework; then
AC_CHECK_HEADER(GSS/gssapi.h, AC_DEFINE(HAVE_GSS_GSSAPI_H))
AC_CHECK_HEADER(GSS/gssapi_generic.h, AC_DEFINE(HAVE_GSS_GSSAPI_GENERIC_H))
AC_CHECK_HEADER(GSS/gssapi_spi.h, AC_DEFINE(HAVE_GSS_GSSAPI_SPI_H))
gssdir="/System/Library/Frameworks/GSS.framework"
AC_MSG_CHECKING(for GSS/gssapi.h presence)
if test -f $gssdir/Headers/gssapi.h; then
AC_DEFINE(HAVE_GSS_GSSAPI_H)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING(for GSS/gssapi_generic.h presence)
if test -f $gssdir/Headers/gssapi_generic.h; then
AC_DEFINE(HAVE_GSSAPI_GENERIC_H)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING(for GSS/gssapi_spi.h presence)
if test -f $gssdir/PrivateHeaders/gssapi_spi.h; then
AC_MSG_RESULT(yes)
AC_MSG_CHECKING(for GSS/gssapi_spi.h usability)
if test -s $gssdir/PrivateHeaders/gssapi_spi.h; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GSS_GSSAPI_SPI_H)
else
AC_MSG_RESULT(no)
fi
else
AC_MSG_RESULT(no)
if test $uversion -ge 110 -a $uversion -lt 120; then
# Broken public headers in 10.7.x...
AC_MSG_ERROR(Run 'sudo mkdir -p $gssdir/PrivateHeaders' and 'sudo touch $gssdir/PrivateHeaders/gssapi_spi.h' to build CUPS.)
fi
fi
else
AC_CHECK_HEADER(gssapi.h, AC_DEFINE(HAVE_GSSAPI_H))
AC_CHECK_HEADER(gssapi/gssapi.h, AC_DEFINE(HAVE_GSSAPI_GSSAPI_H))
@@ -129,5 +158,5 @@ AC_SUBST(CUPS_DEFAULT_GSSSERVICENAME)
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GSSSERVICENAME, "$CUPS_DEFAULT_GSSSERVICENAME")
dnl
dnl End of "$Id: cups-gssapi.m4 11324 2013-10-04 03:11:42Z msweet $".
dnl End of "$Id$".
dnl
+14
Ver Arquivo
@@ -28,6 +28,12 @@ if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
AMANDIR="/usr/share/man"
PMANDIR="/usr/share/man"
;;
IRIX)
# SGI IRIX
mandir="/usr/share/catman/u_man"
AMANDIR="/usr/share/catman/a_man"
PMANDIR="/usr/share/catman/p_man"
;;
*)
# All others
mandir="/usr/man"
@@ -45,6 +51,14 @@ AC_SUBST(PMANDIR)
dnl Setup manpage extensions...
case "$uname" in
IRIX*)
# SGI IRIX
MAN1EXT=1
MAN5EXT=5
MAN7EXT=7
MAN8EXT=1m
MAN8DIR=1
;;
SunOS* | HP-UX*)
# Solaris and HP-UX
MAN1EXT=1
+4 -8
Ver Arquivo
@@ -3,7 +3,7 @@ dnl "$Id: cups-opsys.m4 6649 2007-07-11 21:46:42Z mike $"
dnl
dnl Operating system stuff for CUPS.
dnl
dnl Copyright 2007-2012 by Apple Inc.
dnl Copyright 2007-2011 by Apple Inc.
dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -19,16 +19,12 @@ uversion=`uname -r | sed -e '1,$s/^[[^0-9]]*\([[0-9]]*\)\.\([[0-9]]*\).*/\1\2/'`
uarch=`uname -m`
case "$uname" in
Darwin*)
uname="Darwin"
if test $uversion -lt 120; then
AC_MSG_ERROR([Sorry, this version of CUPS requires OS X 10.8 or higher.])
fi
;;
GNU* | GNU/*)
uname="GNU"
;;
IRIX*)
uname="IRIX"
;;
Linux*)
uname="Linux"
;;
+2 -2
Ver Arquivo
@@ -215,8 +215,8 @@ if test "$DSO" != ":"; then
EXPORT_LDFLAGS="-Wl,-R$libdir"
fi
;;
Linux | GNU)
# Linux, and HURD...
IRIX | Linux | GNU)
# IRIX, Linux, and HURD...
if test $exec_prefix != /usr; then
DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir"
+28 -1
Ver Arquivo
@@ -59,7 +59,34 @@ if test x$enable_ssl != xno; then
AC_CHECK_HEADER(Security/SecIdentitySearchPriv.h,
AC_DEFINE(HAVE_SECIDENTITYSEARCHPRIV_H))
AC_DEFINE(HAVE_CSSMERRORSTRING)])
dnl Check for SecCertificateCopyData..
AC_MSG_CHECKING(for SecCertificateCopyData)
if test $uversion -ge 100; then
AC_DEFINE(HAVE_SECCERTIFICATECOPYDATA)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
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
dnl Check for SecPolicyCreateSSL...
AC_MSG_CHECKING(for SecPolicyCreateSSL)
if test $uversion -ge 110; then
AC_DEFINE(HAVE_SECPOLICYCREATESSL)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi])
AC_DEFINE(HAVE_CSSMERRORSTRING)
fi
fi
+42 -6
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: config.h.in 11642 2014-02-27 15:57:59Z msweet $"
* "$Id: config.h.in 7918 2008-09-08 22:03:01Z mike $"
*
* Configuration file for CUPS.
*
* Copyright 2007-2013 by Apple Inc.
* Copyright 2007-2012 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -132,11 +132,13 @@
/*
* Do we have ZLIB?
* Do we have various image libraries?
*/
#undef HAVE_LIBPNG
#undef HAVE_LIBZ
#undef HAVE_INFLATECOPY
#undef HAVE_LIBJPEG
#undef HAVE_LIBTIFF
/*
@@ -166,6 +168,13 @@
#undef HAVE_CRYPT_H
/*
* Do we have <scsi/sg.h>?
*/
#undef HAVE_SCSI_SG_H
/*
* Use <stdint.h>?
*/
@@ -316,6 +325,34 @@
#undef HAVE_SECURETRANSPORTPRIV_H
/*
* Do we have the SecCertificateCopyData function?
*/
#undef HAVE_SECCERTIFICATECOPYDATA
/*
* Do we have the SecIdentitySearchCreateWithPolicy function?
*/
#undef HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY
/*
* Do we have the SecPolicyCreateSSL function?
*/
#undef HAVE_SECPOLICYCREATESSL
/*
* Do we have the SecPolicyCreateSSL function?
*/
#undef HAVE_SECPOLICYCREATESSL
/*
* Do we have the cssmErrorString function?
*/
@@ -535,7 +572,6 @@
#undef HAVE_DBUS
#undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND
#undef HAVE_DBUS_THREADS_INIT
/*
@@ -707,5 +743,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
#endif /* !_CUPS_CONFIG_H_ */
/*
* End of "$Id: config.h.in 11642 2014-02-27 15:57:59Z msweet $".
* End of "$Id: config.h.in 7918 2008-09-08 22:03:01Z mike $".
*/
externo
-11405
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4 -3
Ver Arquivo
@@ -1,9 +1,9 @@
dnl
dnl "$Id: configure.in 11109 2013-07-08 21:15:13Z msweet $"
dnl "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $"
dnl
dnl Configuration script for CUPS.
dnl
dnl Copyright 2007-2012 by Apple Inc.
dnl Copyright 2007-2013 by Apple Inc.
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -70,6 +70,7 @@ AC_OUTPUT(Makedefs
desktop/cups.desktop
doc/help/ref-cups-files-conf.html
doc/help/ref-cupsd-conf.html
doc/help/standard.html
doc/index.html
man/client.conf.man
man/cups-deviced.man
@@ -92,5 +93,5 @@ AC_OUTPUT(Makedefs
chmod +x cups-config
dnl
dnl End of "$Id: configure.in 11109 2013-07-08 21:15:13Z msweet $".
dnl End of "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $".
dnl
+2 -2
Ver Arquivo
@@ -1,6 +1,6 @@
#! /bin/sh
#
# "$Id: cups-config.in 10996 2013-05-29 11:51:34Z msweet $"
# "$Id: cups-config.in 9926 2011-08-27 09:23:01Z mike $"
#
# CUPS configuration utility.
#
@@ -142,5 +142,5 @@ while test $# -gt 0; do
done
#
# End of "$Id: cups-config.in 10996 2013-05-29 11:51:34Z msweet $".
# End of "$Id: cups-config.in 9926 2011-08-27 09:23:01Z mike $".
#
+5 -15
Ver Arquivo
@@ -1,9 +1,9 @@
#
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
#
# API library Makefile for CUPS.
#
# Copyright 2007-2013 by Apple Inc.
# Copyright 2007-2012 by Apple Inc.
# Copyright 1997-2006 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -17,14 +17,6 @@
include ../Makedefs
#
# Options to build libcups without the use of deprecated APIs...
#
OPTIONS = -D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED=""
#
# Object files...
#
@@ -113,7 +105,6 @@ HEADERS = \
ipp.h \
language.h \
ppd.h \
pwg.h \
raster.h \
sidechannel.h \
transcode.h \
@@ -268,7 +259,6 @@ install-libs: $(INSTALLSTATIC)
if test "x$(SYMROOT)" != "x"; then \
$(INSTALL_DIR) $(SYMROOT); \
cp $(LIBCUPS) $(SYMROOT); \
dsymutil $(SYMROOT)/$(LIBCUPS); \
fi
installstatic:
@@ -536,8 +526,8 @@ apihelp:
--css ../doc/cups-printable.css \
--header api-cups.header --intro api-cups.shtml \
api-cups.xml \
cups.h pwg.h adminutil.c dest*.c language.c notify.c \
options.c pwg-media.c tempfile.c usersys.c \
cups.h adminutil.c dest*.c language.c notify.c \
options.c tempfile.c usersys.c \
util.c >../doc/help/api-cups.html
mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
$(RM) api-cups.xml
@@ -639,5 +629,5 @@ include Dependencies
#
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
#
+45 -45
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: adminutil.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: adminutil.c 7850 2008-08-20 00:07:25Z mike $"
*
* Administration utility API definitions for CUPS.
*
* Copyright 2007-2013 by Apple Inc.
* Copyright 2007-2012 by Apple Inc.
* Copyright 2001-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -129,7 +129,7 @@ cupsAdminCreateWindowsPPD(
* Get the supported banner pages, etc. for the printer...
*/
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/printers/%s", dest);
@@ -145,7 +145,7 @@ cupsAdminCreateWindowsPPD(
*/
response = cupsDoRequest(http, request, "/");
if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING)
if (!response || cupsLastError() > IPP_OK_CONFLICT)
{
unlink(src);
return (NULL);
@@ -253,7 +253,7 @@ cupsAdminCreateWindowsPPD(
snprintf(line, sizeof(line),
_cupsLangString(language, _("Missing value on line %d.")),
linenum);
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
cupsFileClose(srcfp);
cupsFileClose(dstfp);
@@ -272,7 +272,7 @@ cupsAdminCreateWindowsPPD(
_cupsLangString(language,
_("Missing double quote on line %d.")),
linenum);
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
cupsFileClose(srcfp);
cupsFileClose(dstfp);
@@ -291,7 +291,7 @@ cupsAdminCreateWindowsPPD(
_cupsLangString(language,
_("Bad option + choice on line %d.")),
linenum);
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
cupsFileClose(srcfp);
cupsFileClose(dstfp);
@@ -334,7 +334,7 @@ cupsAdminCreateWindowsPPD(
if (linenum == 0)
{
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1);
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1);
cupsFileClose(dstfp);
unlink(buffer);
@@ -424,7 +424,7 @@ cupsAdminExportSamba(
if (!dest || !ppd || !samba_server || !samba_user || !samba_password)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (0);
}
@@ -434,7 +434,7 @@ cupsAdminExportSamba(
if ((fp = cupsTempFile2(authfile, sizeof(authfile))) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
return (0);
}
@@ -487,7 +487,7 @@ cupsAdminExportSamba(
_("Unable to copy Windows 2000 printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -522,7 +522,7 @@ cupsAdminExportSamba(
_("Unable to copy CUPS printer driver "
"files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -565,7 +565,7 @@ cupsAdminExportSamba(
_("Unable to install Windows 2000 printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -610,7 +610,7 @@ cupsAdminExportSamba(
_("Unable to copy Windows 9x printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -639,7 +639,7 @@ cupsAdminExportSamba(
_("Unable to install Windows 9x printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -691,7 +691,7 @@ cupsAdminExportSamba(
_("Unable to copy 64-bit Windows printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -726,7 +726,7 @@ cupsAdminExportSamba(
_("Unable to copy 64-bit CUPS printer driver "
"files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -769,7 +769,7 @@ cupsAdminExportSamba(
_("Unable to install Windows 2000 printer "
"driver files (%d).")), status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -794,13 +794,13 @@ cupsAdminExportSamba(
"are installed.")),
sizeof(message));
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0);
_cupsSetError(IPP_NOT_FOUND, message, 0);
_cupsLangPuts(logfile, message);
}
if (have_drivers == 0)
{
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0);
_cupsSetError(IPP_NOT_FOUND, message, 0);
unlink(authfile);
@@ -821,7 +821,7 @@ cupsAdminExportSamba(
_("Unable to set Windows printer driver (%d).")),
status);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
if (logfile)
_cupsLangPuts(logfile, message);
@@ -882,9 +882,9 @@ cupsAdminGetServerSettings(
*/
if (strcmp(cg->http->hostname, cg->server) ||
cg->ipp_port != httpAddrPort(cg->http->hostaddr) ||
cg->ipp_port != _httpAddrPort(cg->http->hostaddr) ||
(cg->http->encryption != cg->encryption &&
cg->http->encryption == HTTP_ENCRYPTION_NEVER))
cg->http->encryption == HTTP_ENCRYPT_NEVER))
{
/*
* Need to close the current connection because something has changed...
@@ -901,13 +901,13 @@ cupsAdminGetServerSettings(
if (!cg->http)
{
if ((cg->http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC,
cupsEncryption(), 1, 0, NULL)) == NULL)
if ((cg->http = _httpCreate(cupsServer(), ippPort(), NULL,
cupsEncryption(), AF_UNSPEC)) == NULL)
{
if (errno)
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, NULL, 0);
_cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
else
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE,
_cupsSetError(IPP_SERVICE_UNAVAILABLE,
_("Unable to connect to host."), 1);
if (num_settings)
@@ -925,7 +925,7 @@ cupsAdminGetServerSettings(
if (!http || !num_settings || !settings)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
if (num_settings)
*num_settings = 0;
@@ -944,7 +944,7 @@ cupsAdminGetServerSettings(
*/
if ((status = get_cupsd_conf(http, cg, cg->cupsd_update, cupsdconf,
sizeof(cupsdconf), &remote)) == HTTP_STATUS_OK)
sizeof(cupsdconf), &remote)) == HTTP_OK)
{
if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL)
{
@@ -954,7 +954,7 @@ cupsAdminGetServerSettings(
snprintf(message, sizeof(message),
_cupsLangString(cupsLangDefault(), _("Open of %s failed: %s")),
cupsdconf, strerror(errno));
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
}
}
else
@@ -1136,7 +1136,7 @@ cupsAdminGetServerSettings(
cg->cupsd_num_settings,
&(cg->cupsd_settings));
}
else if (status != HTTP_STATUS_NOT_MODIFIED)
else if (status != HTTP_NOT_MODIFIED)
invalidate_cupsd_cache(cg);
/*
@@ -1220,7 +1220,7 @@ cupsAdminSetServerSettings(
if (!http || !num_settings || !settings)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (0);
}
@@ -1230,11 +1230,11 @@ cupsAdminSetServerSettings(
*/
if (get_cupsd_conf(http, cg, 0, cupsdconf, sizeof(cupsdconf),
&remote) == HTTP_STATUS_OK)
&remote) == HTTP_OK)
{
if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
return (0);
}
}
@@ -1398,7 +1398,7 @@ cupsAdminSetServerSettings(
if (remote)
unlink(cupsdconf);
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
return (0);
}
@@ -1954,7 +1954,7 @@ cupsAdminSetServerSettings(
status = cupsPutFile(http, "/admin/conf/cupsd.conf", tempfile);
if (status == HTTP_STATUS_CREATED)
if (status == HTTP_CREATED)
{
/*
* Updated OK, add the basic settings...
@@ -2024,7 +2024,7 @@ cupsAdminSetServerSettings(
unlink(tempfile);
return (status == HTTP_STATUS_CREATED);
return (status == HTTP_CREATED);
}
@@ -2158,16 +2158,16 @@ get_cupsd_conf(
snprintf(message, sizeof(message),
_cupsLangString(cupsLangDefault(), _("stat of %s failed: %s")),
name, strerror(errno));
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
*name = '\0';
return (HTTP_STATUS_SERVER_ERROR);
return (HTTP_SERVER_ERROR);
}
else if (last_update && info.st_mtime <= last_update)
status = HTTP_STATUS_NOT_MODIFIED;
status = HTTP_NOT_MODIFIED;
else
status = HTTP_STATUS_OK;
status = HTTP_OK;
}
else
#endif /* !WIN32 */
@@ -2180,11 +2180,11 @@ get_cupsd_conf(
{
*name = '\0';
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
invalidate_cupsd_cache(cg);
return (HTTP_STATUS_SERVER_ERROR);
return (HTTP_SERVER_ERROR);
}
*remote = 1;
@@ -2199,7 +2199,7 @@ get_cupsd_conf(
close(fd);
if (status != HTTP_STATUS_OK)
if (status != HTTP_OK)
{
unlink(name);
*name = '\0';
@@ -2337,5 +2337,5 @@ write_option(cups_file_t *dstfp, /* I - PPD file */
/*
* End of "$Id: adminutil.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: adminutil.c 7850 2008-08-20 00:07:25Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: adminutil.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: adminutil.h 7026 2007-10-19 00:57:45Z mike $"
*
* Administration utility API definitions for CUPS.
*
@@ -77,5 +77,5 @@ extern int cupsAdminSetServerSettings(http_t *http,
#endif /* !_CUPS_ADMINUTIL_H_ */
/*
* End of "$Id: adminutil.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: adminutil.h 7026 2007-10-19 00:57:45Z mike $".
*/
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
Filter and backend programming header for CUPS.
Copyright 2008-2014 by Apple Inc.
Copyright 2008-2011 by Apple Inc.
These coded instructions, statements, and computer programs are the
property of Apple Inc. and are protected by Federal copyright
+8 -97
Ver Arquivo
@@ -237,7 +237,7 @@ prefix strings:</p>
<code>marker-types</code>, <code>printer-alert</code>, and
<code>printer-alert-description</code> printer attributes. Standard
<code>marker-types</code> values are listed in <a href='#TABLE1'>Table
1</a>. String values need special handling - see <a href="#ATTR_STRINGS">Reporting Attribute String Values</a> below.</dd>
1</a>.</dd>
<dt>CRIT: message</dt>
<dd>Sets the printer-state-message attribute and adds the specified
@@ -320,11 +320,11 @@ the "DEBUG:" prefix string.</p>
<td>Fuser unit</td>
</tr>
<tr>
<td>fuser-cleaning-pad</td>
<td>fuserCleaningPad</td>
<td>Fuser cleaning pad</td>
</tr>
<tr>
<td>fuser-oil</td>
<td>fuserOil</td>
<td>Fuser oil</td>
</tr>
<tr>
@@ -336,7 +336,7 @@ the "DEBUG:" prefix string.</p>
<td>Photo conductor</td>
</tr>
<tr>
<td>solid-wax</td>
<td>solidWax</td>
<td>Wax supply</td>
</tr>
<tr>
@@ -348,19 +348,19 @@ the "DEBUG:" prefix string.</p>
<td>Toner supply</td>
</tr>
<tr>
<td>transfer-unit</td>
<td>transferUnit</td>
<td>Transfer unit</td>
</tr>
<tr>
<td>waste-ink</td>
<td>wasteInk</td>
<td>Waste ink tank</td>
</tr>
<tr>
<td>waste-toner</td>
<td>wasteToner</td>
<td>Waste toner tank</td>
</tr>
<tr>
<td>waste-wax</td>
<td>wasteWax</td>
<td>Waste wax tank</td>
</tr>
</tbody>
@@ -440,95 +440,6 @@ the "DEBUG:" prefix string.</p>
</tbody>
</table></div>
<h4><a name="ATTR_STRINGS">Reporting Attribute String Values</a></h4>
<p>When reporting string values using "ATTR:" messages, a filter or backend must take special care to appropriately quote those values. The scheduler uses the CUPS option parsing code for attributes, so the general syntax is:</p>
<pre class="example">
name=simple
name=simple,simple,...
name='complex value'
name="complex value"
name='"complex value"','"complex value"',...
</pre>
<p>Simple values are strings that do not contain spaces, quotes, backslashes, or the comma and can be placed verbatim in the "ATTR:" message, for example:</p>
<pre class="example">
int levels[4] = { 40, 50, 60, 70 }; /* CMYK */
fputs("ATTR: marker-colors=#00FFFF,#FF00FF,#FFFF00,#000000\n", stderr);
fputs("ATTR: marker-high-levels=100,100,100,100\n", stderr);
fprintf(stderr, "ATTR: marker-levels=%d,%d,%d,%d\n", levels[0], levels[1],
levels[2], levels[3], levels[4]);
fputs("ATTR: marker-low-levels=5,5,5,5\n", stderr);
fputs("ATTR: marker-types=toner,toner,toner,toner\n", stderr);
</pre>
<p>Complex values that contains spaces, quotes, backslashes, or the comma must be quoted. For a single value a single set of quotes is sufficient:</p>
<pre class="example">
fputs("ATTR: marker-message='Levels shown are approximate.'\n", stderr);
</pre>
<p>When multiple values are reported, each value must be enclosed by a set of single and double quotes:</p>
<pre class="example">
fputs("ATTR: marker-names='\"Cyan Toner\"','\"Magenta Toner\"',"
"'\"Yellow Toner\"','\"Black Toner\"'\n", stderr);
</pre>
<p>The IPP backend includes a <var>quote_string</var> function that may be used to properly quote a complex value in an "ATTR:" message:</p>
<pre class="example">
static const char * /* O - Quoted string */
quote_string(const char *s, /* I - String */
char *q, /* I - Quoted string buffer */
size_t qsize) /* I - Size of quoted string buffer */
{
char *qptr, /* Pointer into string buffer */
*qend; /* End of string buffer */
qptr = q;
qend = q + qsize - 5;
if (qend &lt; q)
{
*q = '\0';
return (q);
}
*qptr++ = '\'';
*qptr++ = '\"';
while (*s && qptr &lt; qend)
{
if (*s == '\\' || *s == '\"' || *s == '\'')
{
if (qptr &lt; (qend - 4))
{
*qptr++ = '\\';
*qptr++ = '\\';
*qptr++ = '\\';
}
else
break;
}
*qptr++ = *s++;
}
*qptr++ = '\"';
*qptr++ = '\'';
*qptr = '\0';
return (q);
}
</pre>
<h4><a name="MANAGING_STATE">Managing Printer State in a Filter</a></h4>
<p>Filters are responsible for managing the state keywords they set using
+6 -7
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: array-private.h 3933 2012-10-01 03:01:10Z msweet $"
* "$Id: array-private.h 3448 2011-10-04 06:53:26Z msweet $"
*
* Private array definitions for CUPS.
*
* Copyright 2011-2012 by Apple Inc.
* Copyright 2011 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -37,10 +37,9 @@ extern "C" {
* Functions...
*/
extern int _cupsArrayAddStrings(cups_array_t *a, const char *s,
char delim) _CUPS_API_1_5;
extern cups_array_t *_cupsArrayNewStrings(const char *s, char delim)
_CUPS_API_1_5;
extern int _cupsArrayAddStrings(cups_array_t *a, const char *s)
_CUPS_API_1_5;
extern cups_array_t *_cupsArrayNewStrings(const char *s) _CUPS_API_1_5;
# ifdef __cplusplus
}
@@ -48,5 +47,5 @@ extern cups_array_t *_cupsArrayNewStrings(const char *s, char delim)
#endif /* !_CUPS_ARRAY_PRIVATE_H_ */
/*
* End of "$Id: array-private.h 3933 2012-10-01 03:01:10Z msweet $".
* End of "$Id: array-private.h 3448 2011-10-04 06:53:26Z msweet $".
*/
+10 -50
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: array.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: array.c 7616 2008-05-28 00:34:13Z mike $"
*
* Sorted array routines for CUPS.
*
@@ -138,7 +138,8 @@ cupsArrayAdd(cups_array_t *a, /* I - Array */
/*
* '_cupsArrayAddStrings()' - Add zero or more delimited strings to an array.
* '_cupsArrayAddStrings()' - Add zero or more comma-delimited strings to an
* array.
*
* Note: The array MUST be created using the @link _cupsArrayNewStrings@
* function. Duplicate strings are NOT added. If the string pointer "s" is NULL
@@ -147,8 +148,7 @@ cupsArrayAdd(cups_array_t *a, /* I - Array */
int /* O - 1 on success, 0 on failure */
_cupsArrayAddStrings(cups_array_t *a, /* I - Array */
const char *s, /* I - Delimited strings or NULL */
char delim)/* I - Delimiter character */
const char *s) /* I - Comma-delimited strings or NULL */
{
char *buffer, /* Copy of string */
*start, /* Start of string */
@@ -156,47 +156,20 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
int status = 1; /* Status of add */
DEBUG_printf(("_cupsArrayAddStrings(a=%p, s=\"%s\", delim='%c')", a, s,
delim));
if (!a || !s || !*s)
{
DEBUG_puts("1_cupsArrayAddStrings: Returning 0");
return (0);
}
if (delim == ' ')
if (!strchr(s, ','))
{
/*
* Skip leading whitespace...
* String doesn't contain a comma, so add it as a single value...
*/
DEBUG_puts("1_cupsArrayAddStrings: Skipping leading whitespace.");
while (*s && isspace(*s & 255))
s ++;
DEBUG_printf(("1_cupsArrayAddStrings: Remaining string \"%s\".", s));
}
if (!strchr(s, delim) &&
(delim != ' ' || (!strchr(s, '\t') && !strchr(s, '\n'))))
{
/*
* String doesn't contain a delimiter, so add it as a single value...
*/
DEBUG_puts("1_cupsArrayAddStrings: No delimiter seen, adding a single "
"value.");
if (!cupsArrayFind(a, (void *)s))
status = cupsArrayAdd(a, (void *)s);
}
else if ((buffer = strdup(s)) == NULL)
{
DEBUG_puts("1_cupsArrayAddStrings: Unable to duplicate string.");
status = 0;
}
else
{
for (start = end = buffer; *end; start = end)
@@ -206,21 +179,11 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
* it...
*/
if (delim == ' ')
{
while (*end && !isspace(*end & 255))
end ++;
while (*end && isspace(*end & 255))
*end++ = '\0';
}
else if ((end = strchr(start, delim)) != NULL)
if ((end = strchr(start, ',')) != NULL)
*end++ = '\0';
else
end = start + strlen(start);
DEBUG_printf(("1_cupsArrayAddStrings: Adding \"%s\", end=\"%s\"", start,
end));
if (!cupsArrayFind(a, start))
status &= cupsArrayAdd(a, start);
}
@@ -228,8 +191,6 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
free(buffer);
}
DEBUG_printf(("1_cupsArrayAddStrings: Returning %d.", status));
return (status);
}
@@ -821,8 +782,7 @@ cupsArrayNew3(cups_array_func_t f, /* I - Comparison function or @code NULL@ fo
*/
cups_array_t * /* O - Array */
_cupsArrayNewStrings(const char *s, /* I - Delimited strings or NULL */
char delim) /* I - Delimiter character */
_cupsArrayNewStrings(const char *s) /* I - Comma-delimited strings or NULL */
{
cups_array_t *a; /* Array */
@@ -830,7 +790,7 @@ _cupsArrayNewStrings(const char *s, /* I - Delimited strings or NULL */
if ((a = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0,
(cups_acopy_func_t)_cupsStrAlloc,
(cups_afree_func_t)_cupsStrFree)) != NULL)
_cupsArrayAddStrings(a, s, delim);
_cupsArrayAddStrings(a, s);
return (a);
}
@@ -1362,5 +1322,5 @@ cups_array_find(cups_array_t *a, /* I - Array */
/*
* End of "$Id: array.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: array.c 7616 2008-05-28 00:34:13Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: array.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: array.h 7266 2008-01-29 02:15:29Z mike $"
*
* Sorted array definitions for CUPS.
*
@@ -88,5 +88,5 @@ extern void *cupsArrayUserData(cups_array_t *a) _CUPS_API_1_2;
#endif /* !_CUPS_ARRAY_H_ */
/*
* End of "$Id: array.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: array.h 7266 2008-01-29 02:15:29Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: attr.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: attr.c 7584 2008-05-16 22:55:53Z mike $"
*
* PPD model-specific attribute routines for CUPS.
*
@@ -331,5 +331,5 @@ _ppdNormalizeMakeAndModel(
/*
* End of "$Id: attr.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: attr.c 7584 2008-05-16 22:55:53Z mike $".
*/
+12 -19
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: auth.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: auth.c 7720 2008-07-11 22:46:21Z mike $"
*
* Authentication functions for CUPS.
*
@@ -112,7 +112,7 @@ static int cups_local_auth(http_t *http);
/*
* 'cupsDoAuthentication()' - Authenticate a request.
*
* This function should be called in response to a @code HTTP_STATUS_UNAUTHORIZED@
* This function should be called in response to a @code HTTP_UNAUTHORIZED@
* status, prior to resubmitting your request.
*
* @since CUPS 1.1.20/OS X 10.4@
@@ -164,14 +164,14 @@ cupsDoAuthentication(
DEBUG_printf(("2cupsDoAuthentication: authstring=\"%s\"",
http->authstring));
if (http->status == HTTP_STATUS_UNAUTHORIZED)
if (http->status == HTTP_UNAUTHORIZED)
http->digest_tries ++;
return (0);
}
else if (localauth == -1)
{
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1); /* Error or canceled */
}
}
@@ -190,18 +190,11 @@ cupsDoAuthentication(
* Nope - get a new password from the user...
*/
char default_username[HTTP_MAX_VALUE];
/* Default username */
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
if (httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "username",
default_username))
cupsSetUser(default_username);
snprintf(prompt, sizeof(prompt),
_cupsLangString(cg->lang_default, _("Password for %s on %s? ")),
cupsUser(),
@@ -212,22 +205,22 @@ cupsDoAuthentication(
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
{
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
}
snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(),
password);
}
else if (http->status == HTTP_STATUS_UNAUTHORIZED)
else if (http->status == HTTP_UNAUTHORIZED)
http->digest_tries ++;
if (http->status == HTTP_STATUS_UNAUTHORIZED && http->digest_tries >= 3)
if (http->status == HTTP_UNAUTHORIZED && http->digest_tries >= 3)
{
DEBUG_printf(("1cupsDoAuthentication: Too many authentication tries (%d)",
http->digest_tries));
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
}
@@ -244,7 +237,7 @@ cupsDoAuthentication(
if (_cupsSetNegotiateAuthString(http, method, resource))
{
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
}
}
@@ -287,7 +280,7 @@ cupsDoAuthentication(
{
DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"",
www_auth));
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
http->status = HTTP_AUTHORIZATION_CANCELED;
return (-1);
}
@@ -465,7 +458,7 @@ _cupsSetNegotiateAuthString(
authsize = sizeof(http->_authstring);
}
strlcpy(http->authstring, "Negotiate ", authsize);
strcpy(http->authstring, "Negotiate ");
httpEncode64_2(http->authstring + 10, authsize - 10, output_token.value,
output_token.length);
@@ -888,5 +881,5 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
/*
* End of "$Id: auth.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: auth.c 7720 2008-07-11 22:46:21Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: backchannel.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: backchannel.c 7616 2008-05-28 00:34:13Z mike $"
*
* Backchannel functions for CUPS.
*
@@ -195,5 +195,5 @@ cups_setup(fd_set *set, /* I - Set for select() */
/*
* End of "$Id: backchannel.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: backchannel.c 7616 2008-05-28 00:34:13Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: backend.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $"
*
* Backend functions for CUPS.
*
@@ -150,5 +150,5 @@ quote_string(const char *s) /* I - String to write */
/*
* End of "$Id: backend.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: backend.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: backend.h 7810 2008-07-29 01:11:15Z mike $"
*
* Backend definitions for CUPS.
*
@@ -74,5 +74,5 @@ extern void cupsBackendReport(const char *device_scheme,
#endif /* !_CUPS_BACKEND_H_ */
/*
* End of "$Id: backend.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: backend.h 7810 2008-07-29 01:11:15Z mike $".
*/
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: conflicts.c 3933 2012-10-01 03:01:10Z msweet $"
* "$Id: conflicts.c 3794 2012-04-23 22:44:16Z msweet $"
*
* Option marking routines for CUPS.
*
@@ -930,7 +930,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */
if (!_cups_strncasecmp(option, "Custom", 6) && !_cups_strcasecmp(choice, "True"))
{
_cups_strcpy(option, option + 6);
strlcpy(choice, "Custom", sizeof(choice));
strcpy(choice, "Custom");
}
constptr->option = ppdFindOption(ppd, option);
@@ -1210,5 +1210,5 @@ ppd_test_constraints(
/*
* End of "$Id: conflicts.c 3933 2012-10-01 03:01:10Z msweet $".
* End of "$Id: conflicts.c 3794 2012-04-23 22:44:16Z msweet $".
*/
+3 -16
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: cups-private.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: cups-private.h 9596 2011-03-11 18:26:36Z mike $"
*
* Private definitions for CUPS.
*
@@ -24,7 +24,6 @@
# include "string-private.h"
# include "debug-private.h"
# include "array-private.h"
# include "ipp-private.h"
# include "http-private.h"
# include "language-private.h"
@@ -87,11 +86,6 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
char resolved_uri[1024];
/* Buffer for cupsBackendDeviceURI */
/* debug.c */
# ifdef DEBUG
int thread_id; /* Friendly thread ID */
# endif /* DEBUG */
/* file.c */
cups_file_t *stdio_files[3];/* stdin, stdout, stderr */
@@ -131,7 +125,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
cups_array_t *leg_size_lut, /* Lookup table for legacy names */
*ppd_size_lut, /* Lookup table for PPD names */
*pwg_size_lut; /* Lookup table for PWG names */
pwg_media_t pwg_media; /* PWG media data for custom size */
_pwg_media_t pwg_media; /* PWG media data for custom size */
char pwg_name[65]; /* PWG media name for custom size */
/* request.c */
@@ -151,7 +145,6 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
/* usersys.c */
http_encryption_t encryption; /* Encryption setting */
char user[65], /* User name */
user_agent[256],/* User-Agent string */
server[256], /* Server address */
servername[256],/* Server hostname */
password[128]; /* Password for default callback */
@@ -207,7 +200,6 @@ typedef struct _cups_dconstres_s /* Constraint/resolver */
struct _cups_dinfo_s /* Destination capability and status
* information */
{
int version; /* IPP version */
const char *uri; /* Printer URI */
char *resource; /* Resource path */
ipp_t *attrs; /* Printer attributes */
@@ -219,11 +211,6 @@ struct _cups_dinfo_s /* Destination capability and status
cups_array_t *media_db; /* Media database */
_cups_media_db_t min_size, /* Minimum size */
max_size; /* Maximum size */
unsigned cached_flags; /* Flags used for cached media */
cups_array_t *cached_db; /* Cache of media from last index/default */
time_t ready_time; /* When xxx-ready attributes were last queried */
ipp_t *ready_attrs; /* xxx-ready attributes */
cups_array_t *ready_db; /* media[-col]-ready media database */
};
@@ -281,5 +268,5 @@ extern char *_cupsUserDefault(char *name, size_t namesize);
#endif /* !_CUPS_CUPS_PRIVATE_H_ */
/*
* End of "$Id: cups-private.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: cups-private.h 9596 2011-03-11 18:26:36Z mike $".
*/
+19 -49
Ver Arquivo
@@ -1,18 +1,18 @@
/*
* "$Id: cups.h 11551 2014-01-29 16:31:35Z msweet $"
* "$Id: cups.h 8781 2009-08-28 17:34:54Z mike $"
*
* API definitions for CUPS.
* API definitions for CUPS.
*
* Copyright 2007-2014 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
* Copyright 2007-2013 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
* This file is subject to the Apple OS-Developed Software exception.
*/
#ifndef _CUPS_CUPS_H_
@@ -37,7 +37,6 @@ typedef off_t ssize_t; /* @private@ */
# include "file.h"
# include "ipp.h"
# include "language.h"
# include "pwg.h"
/*
@@ -53,10 +52,10 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0702
# define CUPS_VERSION 1.0603
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 7
# define CUPS_VERSION_PATCH 2
# define CUPS_VERSION_MINOR 6
# define CUPS_VERSION_PATCH 3
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
@@ -354,13 +353,12 @@ extern ipp_t *cupsDoRequest(http_t *http, ipp_t *request,
const char *resource);
extern http_encryption_t cupsEncryption(void);
extern void cupsFreeJobs(int num_jobs, cups_job_t *jobs);
extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED;
extern const char *cupsGetDefault(void);
extern int cupsGetJobs(cups_job_t **jobs, const char *name,
int myjobs, int whichjobs);
extern const char *cupsGetPPD(const char *name)
_CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
extern const char *cupsGetPPD(const char *name);
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED;
extern ipp_status_t cupsLastError(void);
extern int cupsPrintFile(const char *name, const char *filename,
const char *title, int num_options,
@@ -368,7 +366,7 @@ extern int cupsPrintFile(const char *name, const char *filename,
extern int cupsPrintFiles(const char *name, int num_files,
const char **files, const char *title,
int num_options, cups_option_t *options);
extern char *cupsTempFile(char *filename, int len) _CUPS_DEPRECATED_MSG("Use cupsTempFd or cupsTempFile2 instead.");
extern char *cupsTempFile(char *filename, int len) _CUPS_DEPRECATED;
extern int cupsTempFd(char *filename, int len);
extern int cupsAddDest(const char *name, const char *instance,
@@ -418,7 +416,7 @@ extern int cupsGetJobs2(http_t *http, cups_job_t **jobs,
const char *name, int myjobs,
int whichjobs) _CUPS_API_1_1_21;
extern const char *cupsGetPPD2(http_t *http, const char *name)
_CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
_CUPS_API_1_1_21;
extern int cupsPrintFile2(http_t *http, const char *name,
const char *filename,
const char *title, int num_options,
@@ -592,34 +590,6 @@ extern http_status_t cupsStartDestDocument(http_t *http, cups_dest_t *dest,
cups_option_t *options,
int last_document) _CUPS_API_1_6;
/* New in CUPS 1.7 */
extern ipp_attribute_t *cupsFindDestDefault(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo,
const char *option) _CUPS_API_1_7;
extern ipp_attribute_t *cupsFindDestReady(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo,
const char *option) _CUPS_API_1_7;
extern ipp_attribute_t *cupsFindDestSupported(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo,
const char *option)
_CUPS_API_1_7;
extern int cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo, int n,
unsigned flags,
cups_size_t *size)
_CUPS_API_1_7;
extern int cupsGetDestMediaCount(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo,
unsigned flags) _CUPS_API_1_7;
extern int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
cups_dinfo_t *dinfo,
unsigned flags,
cups_size_t *size)
_CUPS_API_1_7;
extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7;
extern const char *cupsUserAgent(void) _CUPS_API_1_7;
# ifdef __cplusplus
}
# endif /* __cplusplus */
@@ -627,5 +597,5 @@ extern const char *cupsUserAgent(void) _CUPS_API_1_7;
#endif /* !_CUPS_CUPS_H_ */
/*
* End of "$Id: cups.h 11551 2014-01-29 16:31:35Z msweet $".
* End of "$Id: cups.h 8781 2009-08-28 17:34:54Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: custom.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: custom.c 6649 2007-07-11 21:46:42Z mike $"
*
* PPD custom option routines for CUPS.
*
@@ -118,5 +118,5 @@ ppdNextCustomParam(ppd_coption_t *opt) /* I - Custom option */
/*
* End of "$Id: custom.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: custom.c 6649 2007-07-11 21:46:42Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: debug-private.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id$"
*
* Private debugging macros for CUPS.
*
@@ -113,5 +113,5 @@ extern int _cups_gettimeofday(struct timeval *tv, void *tz);
#endif /* !_CUPS_DEBUG_PRIVATE_H_ */
/*
* End of "$Id: debug-private.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id$".
*/
+44 -40
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: debug.c 4027 2012-11-16 01:00:05Z msweet $"
* "$Id: debug.c 3643 2012-02-13 16:35:48Z msweet $"
*
* Debugging functions for CUPS.
*
@@ -68,24 +68,8 @@ int _cups_debug_level = 1;
static regex_t *debug_filter = NULL;
/* Filter expression for messages */
static int debug_init = 0; /* Did we initialize debugging? */
static _cups_mutex_t debug_init_mutex = _CUPS_MUTEX_INITIALIZER,
static _cups_mutex_t debug_mutex = _CUPS_MUTEX_INITIALIZER;
/* Mutex to control initialization */
debug_log_mutex = _CUPS_MUTEX_INITIALIZER;
/* Mutex to serialize log entries */
/*
* 'debug_thread_id()' - Return an integer representing the current thread.
*/
static int /* O - Local thread ID */
debug_thread_id(void)
{
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
return (cg->thread_id);
}
/*
@@ -245,8 +229,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
if (bufptr)
{
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr += strlen(bufptr);
if ((bufptr + strlen(temp)) > bufend)
{
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
strcpy(bufptr, temp);
bufptr += strlen(temp);
}
}
break;
@@ -275,8 +267,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
if (bufptr)
{
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr += strlen(bufptr);
if ((bufptr + strlen(temp)) > bufend)
{
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
strcpy(bufptr, temp);
bufptr += strlen(temp);
}
}
break;
@@ -290,8 +290,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
if (bufptr)
{
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr += strlen(bufptr);
if ((bufptr + strlen(temp)) > bufend)
{
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
bufptr = bufend;
}
else
{
strcpy(bufptr, temp);
bufptr += strlen(temp);
}
}
break;
@@ -449,9 +457,9 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
{
int result; /* Filter result */
_cupsMutexLock(&debug_init_mutex);
_cupsMutexLock(&debug_mutex);
result = regexec(debug_filter, format, 0, NULL, 0);
_cupsMutexUnlock(&debug_init_mutex);
_cupsMutexUnlock(&debug_mutex);
if (result)
return;
@@ -462,13 +470,13 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
*/
gettimeofday(&curtime, NULL);
snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d ",
debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24),
snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d.%03d ",
(int)((curtime.tv_sec / 3600) % 24),
(int)((curtime.tv_sec / 60) % 60),
(int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000));
va_start(ap, format);
bytes = debug_vsnprintf(buffer + 19, sizeof(buffer) - 20, format, ap) + 19;
bytes = debug_vsnprintf(buffer + 13, sizeof(buffer) - 14, format, ap) + 13;
va_end(ap);
if (bytes >= (sizeof(buffer) - 1))
@@ -486,9 +494,7 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
* Write it out...
*/
_cupsMutexLock(&debug_log_mutex);
write(_cups_debug_fd, buffer, bytes);
_cupsMutexUnlock(&debug_log_mutex);
}
@@ -532,9 +538,9 @@ _cups_debug_puts(const char *s) /* I - String to output */
{
int result; /* Filter result */
_cupsMutexLock(&debug_init_mutex);
_cupsMutexLock(&debug_mutex);
result = regexec(debug_filter, s, 0, NULL, 0);
_cupsMutexUnlock(&debug_init_mutex);
_cupsMutexUnlock(&debug_mutex);
if (result)
return;
@@ -545,8 +551,8 @@ _cups_debug_puts(const char *s) /* I - String to output */
*/
gettimeofday(&curtime, NULL);
bytes = snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d %s",
debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24),
bytes = snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d.%03d %s",
(int)((curtime.tv_sec / 3600) % 24),
(int)((curtime.tv_sec / 60) % 60),
(int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000),
s);
@@ -566,9 +572,7 @@ _cups_debug_puts(const char *s) /* I - String to output */
* Write it out...
*/
_cupsMutexLock(&debug_log_mutex);
write(_cups_debug_fd, buffer, bytes);
_cupsMutexUnlock(&debug_log_mutex);
}
@@ -582,7 +586,7 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
const char *filter, /* I - Filter string or NULL */
int force) /* I - Force initialization */
{
_cupsMutexLock(&debug_init_mutex);
_cupsMutexLock(&debug_mutex);
if (!debug_init || force)
{
@@ -644,11 +648,11 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
debug_init = 1;
}
_cupsMutexUnlock(&debug_init_mutex);
_cupsMutexUnlock(&debug_mutex);
}
#endif /* DEBUG */
/*
* End of "$Id: debug.c 4027 2012-11-16 01:00:05Z msweet $".
* End of "$Id: debug.c 3643 2012-02-13 16:35:48Z msweet $".
*/
+29 -37
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: dest-job.c 4274 2013-04-09 20:10:23Z msweet $"
* "$Id: dest-job.c 3833 2012-05-23 22:51:18Z msweet $"
*
* Destination job support for CUPS.
*
* Copyright 2012-2013 by Apple Inc.
* Copyright 2012 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -15,7 +15,7 @@
*
* Contents:
*
* cupsCancelDestJob() - Cancel a job on a destination.
 * cupsCancelDestJob() - Cancel a job on a destination.
* cupsCloseDestJob() - Close a job and start printing.
* cupsCreateDestJob() - Create a job on a destination.
* cupsFinishDestDocument() - Finish the current document.
@@ -34,7 +34,7 @@
*
* The "job_id" is the number returned by cupsCreateDestJob.
*
* Returns IPP_STATUS_OK on success and IPP_NOT_AUTHORIZED or IPP_FORBIDDEN on
* Returns IPP_OK on success and IPP_NOT_AUTHORIZED or IPP_FORBIDDEN on
* failure.
*
* @since CUPS 1.6/OS X 10.8@
@@ -45,7 +45,7 @@ cupsCancelDestJob(http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
int job_id) /* I - Job ID */
{
return (IPP_STATUS_ERROR_NOT_FOUND);
return (IPP_NOT_FOUND);
}
@@ -53,7 +53,7 @@ cupsCancelDestJob(http_t *http, /* I - Connection to destination */
* 'cupsCloseDestJob()' - Close a job and start printing.
*
* Use when the last call to cupsStartDocument passed 0 for "last_document".
* "job_id" is the job ID returned by cupsCreateDestJob. Returns @code IPP_STATUS_OK@
* "job_id" is the job ID returned by cupsCreateDestJob. Returns @code IPP_OK@
* on success.
*
* @since CUPS 1.6/OS X 10.8@
@@ -81,9 +81,9 @@ cupsCloseDestJob(
if (!http || !dest || !info || job_id <= 0)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
DEBUG_puts("1cupsCloseDestJob: Bad arguments.");
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
}
/*
@@ -94,33 +94,31 @@ cupsCloseDestJob(
IPP_TAG_ENUM)) != NULL)
{
for (i = 0; i < attr->num_values; i ++)
if (attr->values[i].integer == IPP_OP_CLOSE_JOB)
if (attr->values[i].integer == IPP_CLOSE_JOB)
{
request = ippNewRequest(IPP_OP_CLOSE_JOB);
request = ippNewRequest(IPP_CLOSE_JOB);
break;
}
}
if (!request)
request = ippNewRequest(IPP_OP_SEND_DOCUMENT);
request = ippNewRequest(IPP_SEND_DOCUMENT);
if (!request)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
DEBUG_puts("1cupsCloseDestJob: Unable to create Close-Job/Send-Document "
"request.");
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
}
ippSetVersion(request, info->version / 10, info->version % 10);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, info->uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, cupsUser());
if (ippGetOperation(request) == IPP_OP_SEND_DOCUMENT)
if (ippGetOperation(request) == IPP_SEND_DOCUMENT)
ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", 1);
/*
@@ -139,7 +137,7 @@ cupsCloseDestJob(
/*
* 'cupsCreateDestJob()' - Create a job on a destination.
*
* Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success, saving the job ID
* Returns @code IPP_OK@ or @code IPP_OK_SUBST@ on success, saving the job ID
* in the variable pointed to by "job_id".
*
* @since CUPS 1.6/OS X 10.8@
@@ -175,24 +173,22 @@ cupsCreateDestJob(
if (!http || !dest || !info || !job_id)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
DEBUG_puts("1cupsCreateDestJob: Bad arguments.");
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
}
/*
* Build a Create-Job request...
*/
if ((request = ippNewRequest(IPP_OP_CREATE_JOB)) == NULL)
if ((request = ippNewRequest(IPP_CREATE_JOB)) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
DEBUG_puts("1cupsCreateDestJob: Unable to create Create-Job request.");
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
}
ippSetVersion(request, info->version / 10, info->version % 10);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, info->uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
@@ -201,7 +197,6 @@ cupsCreateDestJob(
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
title);
cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB);
cupsEncodeOptions2(request, num_options, options, IPP_TAG_SUBSCRIPTION);
@@ -233,7 +228,7 @@ cupsCreateDestJob(
/*
* 'cupsFinishDestDocument()' - Finish the current document.
*
* Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success.
* Returns @code IPP_OK@ or @code IPP_OK_SUBST@ on success.
*
* @since CUPS 1.6/OS X 10.8@
*/
@@ -254,9 +249,9 @@ cupsFinishDestDocument(
if (!http || !dest || !info)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
DEBUG_puts("1cupsFinishDestDocument: Bad arguments.");
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
}
/*
@@ -314,25 +309,23 @@ cupsStartDestDocument(
if (!http || !dest || !info || job_id <= 0)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
DEBUG_puts("1cupsStartDestDocument: Bad arguments.");
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
/*
* Create a Send-Document request...
*/
if ((request = ippNewRequest(IPP_OP_SEND_DOCUMENT)) == NULL)
if ((request = ippNewRequest(IPP_SEND_DOCUMENT)) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
DEBUG_puts("1cupsStartDestDocument: Unable to create Send-Document "
"request.");
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
ippSetVersion(request, info->version / 10, info->version % 10);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, info->uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id);
@@ -346,7 +339,6 @@ cupsStartDestDocument(
"document-format", NULL, format);
ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", last_document);
cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
cupsEncodeOptions2(request, num_options, options, IPP_TAG_DOCUMENT);
/*
@@ -362,5 +354,5 @@ cupsStartDestDocument(
/*
* End of "$Id: dest-job.c 4274 2013-04-09 20:10:23Z msweet $".
* End of "$Id: dest-job.c 3833 2012-05-23 22:51:18Z msweet $".
*/
+9 -10
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: dest-localization.c 4216 2013-03-11 13:57:36Z msweet $"
* "$Id: dest-localization.c 3833 2012-05-23 22:51:18Z msweet $"
*
* Destination localization support for CUPS.
*
* Copyright 2012-2013 by Apple Inc.
* Copyright 2012 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -178,7 +178,7 @@ cups_create_localizations(
if (httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text,
scheme, sizeof(scheme), userpass, sizeof(userpass),
hostname, sizeof(hostname), &port, resource,
sizeof(resource)) < HTTP_URI_STATUS_OK)
sizeof(resource)) < HTTP_URI_OK)
{
DEBUG_printf(("4cups_create_localizations: Bad printer-strings-uri value "
"\"%s\".", attr->values[0].string.text));
@@ -188,7 +188,7 @@ cups_create_localizations(
httpGetHostname(http, http_hostname, sizeof(http_hostname));
if (!_cups_strcasecmp(http_hostname, hostname) &&
port == httpAddrPort(http->hostaddr))
port == _httpAddrPort(http->hostaddr))
{
/*
* Use the same connection...
@@ -203,12 +203,11 @@ cups_create_localizations(
*/
if (!strcmp(scheme, "https"))
encryption = HTTP_ENCRYPTION_ALWAYS;
encryption = HTTP_ENCRYPT_ALWAYS;
else
encryption = HTTP_ENCRYPTION_IF_REQUESTED;
encryption = HTTP_ENCRYPT_IF_REQUESTED;
if ((http2 = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1,
30000, NULL)) == NULL)
if ((http2 = httpConnectEncrypt(hostname, port, encryption)) == NULL)
{
DEBUG_printf(("4cups_create_localizations: Unable to connect to "
"%s:%d: %s", hostname, port, cupsLastErrorString()));
@@ -234,7 +233,7 @@ cups_create_localizations(
DEBUG_printf(("4cups_create_localizations: GET %s = %s", resource,
httpStatus(status)));
if (status == HTTP_STATUS_OK)
if (status == HTTP_OK)
{
/*
* Got the file, read it...
@@ -383,5 +382,5 @@ cups_scan_strings(char *buffer) /* I - Start of string */
/*
* End of "$Id: dest-localization.c 4216 2013-03-11 13:57:36Z msweet $".
* End of "$Id: dest-localization.c 3833 2012-05-23 22:51:18Z msweet $".
*/
+72 -580
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: dest-options.c 11085 2013-07-03 13:53:05Z msweet $"
* "$Id: dest-options.c 4185 2013-02-20 02:19:13Z msweet $"
*
* Destination option/media support for CUPS.
*
* Copyright 2012-2013 by Apple Inc.
* Copyright 2012 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -21,26 +21,14 @@
* option/value pair.
* cupsCopyDestInfo() - Get the supported values/capabilities for the
* destination.
* cupsFindDestDefault() - Find the default value(s) for the given
* option.
* cupsFindDestReady() - Find the default value(s) for the given
* option.
* cupsFindDestSupported() - Find the default value(s) for the given
* option.
* cupsFreeDestInfo() - Free destination information obtained using
* @link cupsCopyDestInfo@.
* cupsGetDestMediaByIndex() - Get a media name, dimension, and margins for a
* specific size.
* cupsGetDestMediaByName() - Get media names, dimensions, and margins.
* cupsGetDestMediaBySize() - Get media names, dimensions, and margins.
* cupsGetDestMediaCount() - Get the number of sizes supported by a
* destination.
* cupsGetDestMediaDefault() - Get the default size for a destination.
* cups_add_dconstres() - Add a constraint or resolver to an array.
* cups_compare_dconstres() - Compare to resolver entries.
* cups_compare_media_db() - Compare two media entries.
* cups_copy_media_db() - Copy a media entry.
* cups_create_cached() - Create the media selection cache.
* cups_create_constraints() - Create the constraints and resolvers arrays.
* cups_create_defaults() - Create the -default option array.
* cups_create_media_db() - Create the media database.
@@ -49,7 +37,6 @@
* cups_is_close_media_db() - Compare two media entries to see if they are
* close to the same size.
* cups_test_constraints() - Test constraints.
* cups_update_ready() - Update xxx-ready attributes for the printer.
*/
/*
@@ -59,13 +46,6 @@
#include "cups-private.h"
/*
* Local constants...
*/
#define _CUPS_MEDIA_READY_TTL 30 /* Life of xxx-ready values */
/*
* Local functions...
*/
@@ -76,15 +56,12 @@ static int cups_compare_dconstres(_cups_dconstres_t *a,
static int cups_compare_media_db(_cups_media_db_t *a,
_cups_media_db_t *b);
static _cups_media_db_t *cups_copy_media_db(_cups_media_db_t *mdb);
static void cups_create_cached(http_t *http, cups_dinfo_t *dinfo,
unsigned flags);
static void cups_create_constraints(cups_dinfo_t *dinfo);
static void cups_create_defaults(cups_dinfo_t *dinfo);
static void cups_create_media_db(cups_dinfo_t *dinfo,
unsigned flags);
static void cups_create_media_db(cups_dinfo_t *dinfo);
static void cups_free_media_db(_cups_media_db_t *mdb);
static int cups_get_media_db(http_t *http, cups_dinfo_t *dinfo,
pwg_media_t *pwg, unsigned flags,
static int cups_get_media_db(cups_dinfo_t *dinfo,
_pwg_media_t *pwg, unsigned flags,
cups_size_t *size);
static int cups_is_close_media_db(_cups_media_db_t *a,
_cups_media_db_t *b);
@@ -95,7 +72,6 @@ static cups_array_t *cups_test_constraints(cups_dinfo_t *dinfo,
cups_option_t *options,
int *num_conflicts,
cups_option_t **conflicts);
static void cups_update_ready(http_t *http, cups_dinfo_t *dinfo);
/*
@@ -157,7 +133,7 @@ cupsCheckDestSupported(
* Check range of custom media sizes...
*/
pwg_media_t *pwg; /* Current PWG media size info */
_pwg_media_t *pwg; /* Current PWG media size info */
int min_width, /* Minimum width */
min_length, /* Minimum length */
max_width, /* Maximum width */
@@ -175,13 +151,13 @@ cupsCheckDestSupported(
i --, attrval ++)
{
if (!strncmp(attrval->string.text, "custom_min_", 11) &&
(pwg = pwgMediaForPWG(attrval->string.text)) != NULL)
(pwg = _pwgMediaForPWG(attrval->string.text)) != NULL)
{
min_width = pwg->width;
min_length = pwg->length;
}
else if (!strncmp(attrval->string.text, "custom_max_", 11) &&
(pwg = pwgMediaForPWG(attrval->string.text)) != NULL)
(pwg = _pwgMediaForPWG(attrval->string.text)) != NULL)
{
max_width = pwg->width;
max_length = pwg->length;
@@ -193,7 +169,7 @@ cupsCheckDestSupported(
*/
if (min_width < INT_MAX && max_width > 0 &&
(pwg = pwgMediaForPWG(value)) != NULL &&
(pwg = _pwgMediaForPWG(value)) != NULL &&
pwg->width >= min_width && pwg->width <= max_width &&
pwg->length >= min_length && pwg->length <= max_length)
return (1);
@@ -644,11 +620,11 @@ cupsCopyDestInfo(
* Send a Get-Printer-Attributes request...
*/
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, cupsUser());
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, cupsUser());
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes",
(int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])),
@@ -656,7 +632,7 @@ cupsCopyDestInfo(
response = cupsDoRequest(http, request, resource);
status = cupsLastError();
if (status > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
if (status > IPP_OK_SUBST)
{
DEBUG_printf(("cupsCopyDestSupported: Get-Printer-Attributes for '%s' "
"returned %s (%s)", dest->name, ippErrorString(status),
@@ -665,9 +641,9 @@ cupsCopyDestInfo(
ippDelete(response);
response = NULL;
if (status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED && version > 11)
if (status == IPP_VERSION_NOT_SUPPORTED && version > 11)
version = 11;
else if (status == IPP_STATUS_ERROR_BUSY)
else if (status == IPP_PRINTER_BUSY)
{
sleep(delay);
@@ -690,12 +666,11 @@ cupsCopyDestInfo(
if ((dinfo = calloc(1, sizeof(cups_dinfo_t))) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
ippDelete(response);
return (NULL);
}
dinfo->version = version;
dinfo->uri = uri;
dinfo->resource = _cupsStrAlloc(resource);
dinfo->attrs = response;
@@ -704,129 +679,6 @@ cupsCopyDestInfo(
}
/*
* 'cupsFindDestDefault()' - Find the default value(s) for the given option.
*
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
* functions to inspect the default value(s) as needed.
*
* @since CUPS 1.7/OS X 10.9@
*/
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
cupsFindDestDefault(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
const char *option) /* I - Option/attribute name */
{
char name[IPP_MAX_NAME]; /* Attribute name */
/*
* Range check input...
*/
if (!http || !dest || !dinfo || !option)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (NULL);
}
/*
* Find and return the attribute...
*/
snprintf(name, sizeof(name), "%s-default", option);
return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO));
}
/*
* 'cupsFindDestReady()' - Find the default value(s) for the given option.
*
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
* functions to inspect the default value(s) as needed.
*
* @since CUPS 1.7/OS X 10.9@
*/
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
cupsFindDestReady(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
const char *option) /* I - Option/attribute name */
{
char name[IPP_MAX_NAME]; /* Attribute name */
/*
* Range check input...
*/
if (!http || !dest || !dinfo || !option)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (NULL);
}
/*
* Find and return the attribute...
*/
cups_update_ready(http, dinfo);
snprintf(name, sizeof(name), "%s-ready", option);
return (ippFindAttribute(dinfo->ready_attrs, name, IPP_TAG_ZERO));
}
/*
* 'cupsFindDestSupported()' - Find the default value(s) for the given option.
*
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
* functions to inspect the default value(s) as needed.
*
* @since CUPS 1.7/OS X 10.9@
*/
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
cupsFindDestSupported(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
const char *option) /* I - Option/attribute name */
{
char name[IPP_MAX_NAME]; /* Attribute name */
/*
* Range check input...
*/
if (!http || !dest || !dinfo || !option)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (NULL);
}
/*
* Find and return the attribute...
*/
snprintf(name, sizeof(name), "%s-supported", option);
return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO));
}
/*
* 'cupsFreeDestInfo()' - Free destination information obtained using
* @link cupsCopyDestInfo@.
@@ -855,79 +707,12 @@ cupsFreeDestInfo(cups_dinfo_t *dinfo) /* I - Destination information */
cupsArrayDelete(dinfo->media_db);
cupsArrayDelete(dinfo->cached_db);
ippDelete(dinfo->ready_attrs);
cupsArrayDelete(dinfo->ready_db);
ippDelete(dinfo->attrs);
free(dinfo);
}
/*
* 'cupsGetDestMediaByIndex()' - Get a media name, dimension, and margins for a
* specific size.
*
* The @code flags@ parameter determines which set of media are indexed. For
* example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will get the Nth
* borderless size supported by the printer.
*
* @since CUPS 1.7/OS X 10.9@
*/
int /* O - 1 on success, 0 on failure */
cupsGetDestMediaByIndex(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
int n, /* I - Media size number (0-based) */
unsigned flags, /* I - Media flags */
cups_size_t *size) /* O - Media size information */
{
cups_size_t *nsize; /* Size for N */
/*
* Range check input...
*/
if (size)
memset(size, 0, sizeof(cups_size_t));
if (!http || !dest || !dinfo || n < 0 || !size)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (0);
}
/*
* Load media list as needed...
*/
if (flags & CUPS_MEDIA_FLAGS_READY)
cups_update_ready(http, dinfo);
if (!dinfo->cached_db || dinfo->cached_flags != flags)
cups_create_cached(http, dinfo, flags);
/*
* Copy the size over and return...
*/
if ((nsize = (cups_size_t *)cupsArrayIndex(dinfo->cached_db, n)) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (0);
}
memcpy(size, nsize, sizeof(cups_size_t));
return (1);
}
/*
* 'cupsGetDestMediaByName()' - Get media names, dimensions, and margins.
*
@@ -957,7 +742,7 @@ cupsGetDestMediaByName(
unsigned flags, /* I - Media matching flags */
cups_size_t *size) /* O - Media size information */
{
pwg_media_t *pwg; /* PWG media info */
_pwg_media_t *pwg; /* PWG media info */
/*
@@ -969,7 +754,7 @@ cupsGetDestMediaByName(
if (!http || !dest || !dinfo || !media || !size)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (0);
}
@@ -977,11 +762,11 @@ cupsGetDestMediaByName(
* Lookup the media size name...
*/
if ((pwg = pwgMediaForPWG(media)) == NULL)
if ((pwg = pwgMediaForLegacy(media)) == NULL)
if ((pwg = _pwgMediaForPWG(media)) == NULL)
if ((pwg = _pwgMediaForLegacy(media)) == NULL)
{
DEBUG_printf(("1cupsGetDestMediaByName: Unknown size '%s'.", media));
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown media size name."), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Unknown media size name."), 1);
return (0);
}
@@ -989,7 +774,7 @@ cupsGetDestMediaByName(
* Lookup the size...
*/
return (cups_get_media_db(http, dinfo, pwg, flags, size));
return (cups_get_media_db(dinfo, pwg, flags, size));
}
@@ -1025,7 +810,7 @@ cupsGetDestMediaBySize(
unsigned flags, /* I - Media matching flags */
cups_size_t *size) /* O - Media size information */
{
pwg_media_t *pwg; /* PWG media info */
_pwg_media_t *pwg; /* PWG media info */
/*
@@ -1037,7 +822,7 @@ cupsGetDestMediaBySize(
if (!http || !dest || !dinfo || width <= 0 || length <= 0 || !size)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (0);
}
@@ -1045,11 +830,11 @@ cupsGetDestMediaBySize(
* Lookup the media size name...
*/
if ((pwg = pwgMediaForSize(width, length)) == NULL)
if ((pwg = _pwgMediaForSize(width, length)) == NULL)
{
DEBUG_printf(("1cupsGetDestMediaBySize: Invalid size %dx%d.", width,
length));
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media size."), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Invalid media size."), 1);
return (0);
}
@@ -1057,116 +842,7 @@ cupsGetDestMediaBySize(
* Lookup the size...
*/
return (cups_get_media_db(http, dinfo, pwg, flags, size));
}
/*
* 'cupsGetDestMediaCount()' - Get the number of sizes supported by a
* destination.
*
* The @code flags@ parameter determines the set of media sizes that are
* counted. For example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return
* the number of borderless sizes.
*
* @since CUPS 1.7/OS X 10.9@
*/
int /* O - Number of sizes */
cupsGetDestMediaCount(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
unsigned flags) /* I - Media flags */
{
/*
* Range check input...
*/
if (!http || !dest || !dinfo)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (0);
}
/*
* Load media list as needed...
*/
if (flags & CUPS_MEDIA_FLAGS_READY)
cups_update_ready(http, dinfo);
if (!dinfo->cached_db || dinfo->cached_flags != flags)
cups_create_cached(http, dinfo, flags);
return (cupsArrayCount(dinfo->cached_db));
}
/*
* 'cupsGetDestMediaDefault()' - Get the default size for a destination.
*
* The @code flags@ parameter determines which default size is returned. For
* example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return the default
* borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
*
* @since CUPS 1.7/OS X 10.9@
*/
int /* O - 1 on success, 0 on failure */
cupsGetDestMediaDefault(
http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
unsigned flags, /* I - Media flags */
cups_size_t *size) /* O - Media size information */
{
const char *media; /* Default media size */
/*
* Range check input...
*/
if (size)
memset(size, 0, sizeof(cups_size_t));
if (!http || !dest || !dinfo || !size)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
return (0);
}
/*
* Get the default media size, if any...
*/
if ((media = cupsGetOption("media", dest->num_options,
dest->options)) == NULL)
media = "na_letter_8.5x11in";
if (cupsGetDestMediaByName(http, dest, dinfo, media, flags, size))
return (1);
if (strcmp(media, "na_letter_8.5x11in") &&
cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags,
size))
return (1);
if (strcmp(media, "iso_a4_210x297mm") &&
cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags,
size))
return (1);
if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) &&
cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
return (1);
/*
* Fall back to the first matching media size...
*/
return (cupsGetDestMediaByIndex(http, dest, dinfo, flags, 0, size));
return (cups_get_media_db(dinfo, pwg, flags, size));
}
@@ -1267,66 +943,6 @@ cups_copy_media_db(
}
/*
* 'cups_create_cached()' - Create the media selection cache.
*/
static void
cups_create_cached(http_t *http, /* I - Connection to destination */
cups_dinfo_t *dinfo, /* I - Destination information */
unsigned flags) /* I - Media selection flags */
{
cups_array_t *db; /* Media database array to use */
_cups_media_db_t *mdb, /* Media database entry */
*first; /* First entry this size */
if (dinfo->cached_db)
cupsArrayDelete(dinfo->cached_db);
dinfo->cached_db = cupsArrayNew(NULL, NULL);
dinfo->cached_flags = flags;
if (flags & CUPS_MEDIA_FLAGS_READY)
{
cups_update_ready(http, dinfo);
db = dinfo->ready_db;
}
else
{
if (!dinfo->media_db)
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT);
db = dinfo->media_db;
}
for (mdb = (_cups_media_db_t *)cupsArrayFirst(db), first = mdb;
mdb;
mdb = (_cups_media_db_t *)cupsArrayNext(db))
{
if (flags & CUPS_MEDIA_FLAGS_BORDERLESS)
{
if (!mdb->left && !mdb->right && !mdb->top && !mdb->bottom)
cupsArrayAdd(dinfo->cached_db, mdb);
}
else if (flags & CUPS_MEDIA_FLAGS_DUPLEX)
{
if (first->width != mdb->width || first->length != mdb->length)
{
cupsArrayAdd(dinfo->cached_db, first);
first = mdb;
}
else if (mdb->left >= first->left && mdb->right >= first->right &&
mdb->top >= first->top && mdb->bottom >= first->bottom)
first = mdb;
}
}
if (flags & CUPS_MEDIA_FLAGS_DUPLEX)
cupsArrayAdd(dinfo->cached_db, first);
}
/*
* 'cups_create_constraints()' - Create the constraints and resolvers arrays.
*/
@@ -1420,8 +1036,7 @@ cups_create_defaults(
static void
cups_create_media_db(
cups_dinfo_t *dinfo, /* I - Destination information */
unsigned flags) /* I - Media flags */
cups_dinfo_t *dinfo) /* I - Destination information */
{
int i; /* Looping var */
_ipp_value_t *val; /* Current value */
@@ -1429,40 +1044,21 @@ cups_create_media_db(
*media_attr, /* media-xxx */
*x_dimension, /* x-dimension */
*y_dimension; /* y-dimension */
pwg_media_t *pwg; /* PWG media info */
cups_array_t *db; /* New media database array */
_pwg_media_t *pwg; /* PWG media info */
_cups_media_db_t mdb; /* Media entry */
db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
NULL, NULL, 0,
(cups_acopy_func_t)cups_copy_media_db,
(cups_afree_func_t)cups_free_media_db);
dinfo->media_db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
NULL, NULL, 0,
(cups_acopy_func_t)cups_copy_media_db,
(cups_afree_func_t)cups_free_media_db);
dinfo->min_size.width = INT_MAX;
dinfo->min_size.length = INT_MAX;
dinfo->max_size.width = 0;
dinfo->max_size.length = 0;
if (flags == CUPS_MEDIA_FLAGS_READY)
{
dinfo->ready_db = db;
media_col_db = ippFindAttribute(dinfo->ready_attrs, "media-col-ready",
IPP_TAG_BEGIN_COLLECTION);
media_attr = ippFindAttribute(dinfo->ready_attrs, "media-ready",
IPP_TAG_ZERO);
}
else
{
dinfo->media_db = db;
dinfo->min_size.width = INT_MAX;
dinfo->min_size.length = INT_MAX;
dinfo->max_size.width = 0;
dinfo->max_size.length = 0;
media_col_db = ippFindAttribute(dinfo->attrs, "media-col-database",
IPP_TAG_BEGIN_COLLECTION);
media_attr = ippFindAttribute(dinfo->attrs, "media-supported",
IPP_TAG_ZERO);
}
if (media_col_db)
if ((media_col_db = ippFindAttribute(dinfo->attrs, "media-col-database",
IPP_TAG_BEGIN_COLLECTION)) != NULL)
{
_ipp_value_t *custom = NULL; /* Custom size range value */
@@ -1479,32 +1075,15 @@ cups_create_media_db(
/* media-size collection value */
if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
IPP_TAG_INTEGER)) != NULL &&
IPP_TAG_INTEGER)) != NULL &&
(y_dimension = ippFindAttribute(media_size, "y-dimension",
IPP_TAG_INTEGER)) != NULL)
{
/*
* Fixed size...
*/
mdb.width = x_dimension->values[0].integer;
mdb.length = y_dimension->values[0].integer;
}
else if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
IPP_TAG_INTEGER)) != NULL &&
(y_dimension = ippFindAttribute(media_size, "y-dimension",
IPP_TAG_RANGE)) != NULL)
{
/*
* Roll limits...
*/
mdb.width = x_dimension->values[0].integer;
mdb.length = y_dimension->values[0].range.upper;
}
else if (flags != CUPS_MEDIA_FLAGS_READY &&
(x_dimension = ippFindAttribute(media_size, "x-dimension",
IPP_TAG_RANGE)) != NULL &&
else if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
IPP_TAG_RANGE)) != NULL &&
(y_dimension = ippFindAttribute(media_size, "y-dimension",
IPP_TAG_RANGE)) != NULL)
{
@@ -1528,6 +1107,7 @@ cups_create_media_db(
dinfo->max_size.right = 635; /* Default 1/4" side margins */
dinfo->max_size.top =
dinfo->max_size.bottom = 1270; /* Default 1/2" top/bottom margins */
continue;
}
}
@@ -1587,7 +1167,7 @@ cups_create_media_db(
IPP_TAG_INTEGER)) != NULL)
mdb.top = media_attr->values[0].integer;
cupsArrayAdd(db, &mdb);
cupsArrayAdd(dinfo->media_db, &mdb);
}
if (custom)
@@ -1625,7 +1205,8 @@ cups_create_media_db(
}
}
}
else if (media_attr &&
else if ((media_attr = ippFindAttribute(dinfo->attrs, "media-supported",
IPP_TAG_ZERO)) != NULL &&
(media_attr->value_tag == IPP_TAG_NAME ||
media_attr->value_tag == IPP_TAG_NAMELANG ||
media_attr->value_tag == IPP_TAG_KEYWORD))
@@ -1641,8 +1222,8 @@ cups_create_media_db(
i > 0;
i --, val ++)
{
if ((pwg = pwgMediaForPWG(val->string.text)) == NULL)
if ((pwg = pwgMediaForLegacy(val->string.text)) == NULL)
if ((pwg = _pwgMediaForPWG(val->string.text)) == NULL)
if ((pwg = _pwgMediaForLegacy(val->string.text)) == NULL)
{
DEBUG_printf(("3cups_create_media_db: Ignoring unknown size '%s'.",
val->string.text));
@@ -1652,14 +1233,12 @@ cups_create_media_db(
mdb.width = pwg->width;
mdb.length = pwg->length;
if (flags != CUPS_MEDIA_FLAGS_READY &&
!strncmp(val->string.text, "custom_min_", 11))
if (!strncmp(val->string.text, "custom_min_", 11))
{
mdb.size_name = NULL;
dinfo->min_size = mdb;
}
else if (flags != CUPS_MEDIA_FLAGS_READY &&
!strncmp(val->string.text, "custom_max_", 11))
else if (!strncmp(val->string.text, "custom_max_", 11))
{
mdb.size_name = NULL;
dinfo->max_size = mdb;
@@ -1668,7 +1247,7 @@ cups_create_media_db(
{
mdb.size_name = val->string.text;
cupsArrayAdd(db, &mdb);
cupsArrayAdd(dinfo->media_db, &mdb);
}
}
}
@@ -1705,13 +1284,11 @@ cups_free_media_db(
*/
static int /* O - 1 on match, 0 on failure */
cups_get_media_db(http_t *http, /* I - Connection to destination */
cups_dinfo_t *dinfo, /* I - Destination information */
pwg_media_t *pwg, /* I - PWG media info */
cups_get_media_db(cups_dinfo_t *dinfo, /* I - Destination information */
_pwg_media_t *pwg, /* I - PWG media info */
unsigned flags, /* I - Media matching flags */
cups_size_t *size) /* O - Media size/margin/name info */
cups_size_t *size) /* O - Media size/margin/name info */
{
cups_array_t *db; /* Which media database to query */
_cups_media_db_t *mdb, /* Current media database entry */
*best = NULL, /* Best matching entry */
key; /* Search key */
@@ -1721,18 +1298,8 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Create the media database as needed...
*/
if (flags & CUPS_MEDIA_FLAGS_READY)
{
cups_update_ready(http, dinfo);
db = dinfo->ready_db;
}
else
{
if (!dinfo->media_db)
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT);
db = dinfo->media_db;
}
if (!dinfo->media_db)
cups_create_media_db(dinfo);
/*
* Find a match...
@@ -1742,7 +1309,7 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
key.width = pwg->width;
key.length = pwg->length;
if ((mdb = cupsArrayFind(db, &key)) != NULL)
if ((mdb = cupsArrayFind(dinfo->media_db, &key)) != NULL)
{
/*
* Found an exact match, let's figure out the best margins for the flags
@@ -1760,9 +1327,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
if (best->left != 0 || best->right != 0 || best->top != 0 ||
best->bottom != 0)
{
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && !cups_compare_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (mdb->left <= best->left && mdb->right <= best->right &&
mdb->top <= best->top && mdb->bottom <= best->bottom)
@@ -1790,9 +1357,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Look for the largest margins...
*/
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && !cups_compare_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (mdb->left >= best->left && mdb->right >= best->right &&
mdb->top >= best->top && mdb->bottom >= best->bottom)
@@ -1805,9 +1372,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Look for the smallest non-zero margins...
*/
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && !cups_compare_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) &&
((mdb->right > 0 && mdb->right <= best->right) ||
@@ -1867,9 +1434,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Find a close size...
*/
for (mdb = (_cups_media_db_t *)cupsArrayFirst(db);
for (mdb = (_cups_media_db_t *)cupsArrayFirst(dinfo->media_db);
mdb;
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
if (cups_is_close_media_db(mdb, &key))
break;
@@ -1887,9 +1454,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
if (best->left != 0 || best->right != 0 || best->top != 0 ||
best->bottom != 0)
{
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && cups_is_close_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (mdb->left <= best->left && mdb->right <= best->right &&
mdb->top <= best->top && mdb->bottom <= best->bottom)
@@ -1908,9 +1475,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Look for the largest margins...
*/
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && cups_is_close_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (mdb->left >= best->left && mdb->right >= best->right &&
mdb->top >= best->top && mdb->bottom >= best->bottom)
@@ -1923,9 +1490,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
* Look for the smallest non-zero margins...
*/
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
mdb && cups_is_close_media_db(mdb, &key);
mdb = (_cups_media_db_t *)cupsArrayNext(db))
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
{
if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) &&
((mdb->right > 0 && mdb->right <= best->right) ||
@@ -2192,80 +1759,5 @@ cups_test_constraints(
/*
* 'cups_update_ready()' - Update xxx-ready attributes for the printer.
*/
static void
cups_update_ready(http_t *http, /* I - Connection to destination */
cups_dinfo_t *dinfo) /* I - Destination information */
{
ipp_t *request; /* Get-Printer-Attributes request */
static const char * const pattrs[] = /* Printer attributes we want */
{
"finishings-col-ready",
"finishings-ready",
"job-finishings-col-ready",
"job-finishings-ready",
"media-col-ready",
"media-ready"
};
/*
* Don't update more than once every 30 seconds...
*/
if ((time(NULL) - dinfo->ready_time) < _CUPS_MEDIA_READY_TTL)
return;
/*
* Free any previous results...
*/
if (dinfo->cached_flags & CUPS_MEDIA_FLAGS_READY)
{
cupsArrayDelete(dinfo->cached_db);
dinfo->cached_db = NULL;
dinfo->cached_flags = CUPS_MEDIA_FLAGS_DEFAULT;
}
ippDelete(dinfo->ready_attrs);
dinfo->ready_attrs = NULL;
cupsArrayDelete(dinfo->ready_db);
dinfo->ready_db = NULL;
/*
* Query the xxx-ready values...
*/
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
ippSetVersion(request, dinfo->version / 10, dinfo->version % 10);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
dinfo->uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, cupsUser());
ippAddStrings(request, IPP_TAG_OPERATION,
IPP_TAG_KEYWORD | IPP_TAG_CUPS_CONST, "requested-attributes",
(int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
dinfo->ready_attrs = cupsDoRequest(http, request, dinfo->resource);
/*
* Update the ready media database...
*/
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_READY);
/*
* Update last lookup time and return...
*/
dinfo->ready_time = time(NULL);
}
/*
* End of "$Id: dest-options.c 11085 2013-07-03 13:53:05Z msweet $".
* End of "$Id: dest-options.c 4185 2013-02-20 02:19:13Z msweet $".
*/
+45 -78
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: dest.c 11688 2014-03-05 21:11:32Z msweet $"
* "$Id: dest.c 9568 2011-02-25 06:13:56Z mike $"
*
* User-defined destination (and option) support for CUPS.
*
@@ -319,8 +319,7 @@ cupsAddDest(const char *name, /* I - Destination name */
if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
return (num_dests);
if ((dest = cups_add_dest(name, instance, &num_dests, dests)) == NULL)
return (num_dests);
dest = cups_add_dest(name, instance, &num_dests, dests);
/*
* Find the base dest again now the array has been realloc'd.
@@ -635,7 +634,7 @@ cupsConnectDest(
if (resource)
*resource = '\0';
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (NULL);
}
@@ -652,7 +651,7 @@ cupsConnectDest(
if ((uri = cupsGetOption("printer-uri-supported", dest->num_options,
dest->options)) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOENT), 0);
if (cb)
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
@@ -672,9 +671,9 @@ cupsConnectDest(
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
userpass, sizeof(userpass), hostname, sizeof(hostname),
&port, resource, resourcesize) < HTTP_URI_STATUS_OK)
&port, resource, resourcesize) < HTTP_URI_OK)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer URI."), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad printer URI."), 1);
if (cb)
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
@@ -718,12 +717,11 @@ cupsConnectDest(
*/
if (!strcmp(scheme, "ipps") || port == 443)
encryption = HTTP_ENCRYPTION_ALWAYS;
encryption = HTTP_ENCRYPT_ALWAYS;
else
encryption = HTTP_ENCRYPTION_IF_REQUESTED;
encryption = HTTP_ENCRYPT_IF_REQUESTED;
http = httpConnect2(hostname, port, addrlist, AF_UNSPEC, encryption, 1, 0,
NULL);
http = _httpCreate(hostname, port, addrlist, encryption, AF_UNSPEC);
/*
* Connect if requested...
@@ -891,10 +889,6 @@ cupsEnumDests(
num_dests; /* Number of destinations */
cups_dest_t *dests = NULL, /* Destinations */
*dest; /* Current destination */
const char *defprinter; /* Default printer */
char name[1024], /* Copy of printer name */
*instance, /* Pointer to instance name */
*user_default; /* User default printer */
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
int count, /* Number of queries started */
remaining; /* Remainder of timeout */
@@ -937,33 +931,8 @@ cupsEnumDests(
* Get the list of local printers and pass them to the callback function...
*/
num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, NULL,
&dests, type, mask);
if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
defprinter = name;
else if ((defprinter = cupsGetDefault2(CUPS_HTTP_DEFAULT)) != NULL)
{
strlcpy(name, defprinter, sizeof(name));
defprinter = name;
}
if (defprinter)
{
/*
* Separate printer and instance name...
*/
if ((instance = strchr(name, '/')) != NULL)
*instance++ = '\0';
/*
* Lookup the printer and instance and make it the default...
*/
if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
dest->is_default = 1;
}
num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, CUPS_GET_PRINTERS, NULL, &dests,
type, mask);
for (i = num_dests, dest = dests;
i > 0 && (!cancel || !*cancel);
@@ -982,11 +951,11 @@ cupsEnumDests(
* Get Bonjour-shared printers...
*/
data.type = type;
data.mask = mask;
data.cb = cb;
data.user_data = user_data;
data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device);
data.type = type;
data.mask = mask;
data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices,
NULL, NULL, 0, NULL,
(cups_afree_func_t)cups_dnssd_free_device);
# ifdef HAVE_DNSSD
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
@@ -1330,7 +1299,7 @@ _cupsGetDestResource(
if (resource)
*resource = '\0';
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
return (NULL);
}
@@ -1344,7 +1313,7 @@ _cupsGetDestResource(
if (resource)
*resource = '\0';
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOENT), 0);
return (NULL);
}
@@ -1359,9 +1328,9 @@ _cupsGetDestResource(
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
userpass, sizeof(userpass), hostname, sizeof(hostname),
&port, resource, resourcesize) < HTTP_URI_STATUS_OK)
&port, resource, resourcesize) < HTTP_URI_OK)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer URI."), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad printer URI."), 1);
return (NULL);
}
@@ -1373,12 +1342,12 @@ _cupsGetDestResource(
/*
* '_cupsGetDests()' - Get destinations from a server.
*
* "op" is IPP_OP_CUPS_GET_PRINTERS to get a full list, IPP_OP_CUPS_GET_DEFAULT
* to get the system-wide default printer, or IPP_OP_GET_PRINTER_ATTRIBUTES for
* a known printer.
* "op" is CUPS_GET_PRINTERS to get a full list, CUPS_GET_DEFAULT to get the
* system-wide default printer, or IPP_GET_PRINTER_ATTRIBUTES for a known
* printer.
*
* "name" is the name of an existing printer and is only used when "op" is
* IPP_OP_GET_PRINTER_ATTRIBUTES.
* IPP_GET_PRINTER_ATTRIBUTES.
*
* "dest" is initialized to point to the array of destinations.
*
@@ -1440,7 +1409,6 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
"printer-is-shared",
"printer-location",
"printer-make-and-model",
"printer-mandatory-job-attributes",
"printer-name",
"printer-state",
"printer-state-change-time",
@@ -1459,13 +1427,13 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
#endif /* __APPLE__ */
/*
* Build a IPP_OP_CUPS_GET_PRINTERS or IPP_OP_GET_PRINTER_ATTRIBUTES request, which
* Build a CUPS_GET_PRINTERS or IPP_GET_PRINTER_ATTRIBUTES request, which
* require the following attributes:
*
* attributes-charset
* attributes-natural-language
* requesting-user-name
* printer-uri [for IPP_OP_GET_PRINTER_ATTRIBUTES]
* printer-uri [for IPP_GET_PRINTER_ATTRIBUTES]
*/
request = ippNewRequest(op);
@@ -1477,7 +1445,7 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, cupsUser());
if (name && op != IPP_OP_CUPS_GET_DEFAULT)
if (name && op != CUPS_GET_DEFAULT)
{
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", ippPort(), "/printers/%s", name);
@@ -1546,7 +1514,6 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
!strcmp(attr->name, "printer-info") ||
!strcmp(attr->name, "printer-is-shared") ||
!strcmp(attr->name, "printer-make-and-model") ||
!strcmp(attr->name, "printer-mandatory-job-attributes") ||
!strcmp(attr->name, "printer-state") ||
!strcmp(attr->name, "printer-state-change-time") ||
!strcmp(attr->name, "printer-type") ||
@@ -1709,7 +1676,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
if (!dests)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad NULL dests pointer"), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad NULL dests pointer"), 1);
return (0);
}
@@ -1718,9 +1685,9 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
*/
*dests = (cups_dest_t *)0;
num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, dests, 0, 0);
num_dests = _cupsGetDests(http, CUPS_GET_PRINTERS, NULL, dests, 0, 0);
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
if (cupsLastError() >= IPP_REDIRECTION_OTHER_SITE)
{
cupsFreeDests(num_dests, *dests);
*dests = (cups_dest_t *)0;
@@ -1836,7 +1803,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
*/
if (num_dests > 0)
_cupsSetError(IPP_STATUS_OK, NULL, 0);
_cupsSetError(IPP_OK, NULL, 0);
return (num_dests);
}
@@ -1873,7 +1840,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
defname[256]; /* Default printer name */
const char *home = getenv("HOME"); /* Home directory */
int set_as_default = 0; /* Set returned destination as default */
ipp_op_t op = IPP_OP_GET_PRINTER_ATTRIBUTES;
ipp_op_t op = IPP_GET_PRINTER_ATTRIBUTES;
/* IPP operation to get server ops */
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
@@ -1927,7 +1894,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
* No locally-set default destination, ask the server...
*/
op = IPP_OP_CUPS_GET_DEFAULT;
op = CUPS_GET_DEFAULT;
}
}
@@ -2111,9 +2078,9 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Get the server destinations...
*/
num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
num_temps = _cupsGetDests(http, CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
if (cupsLastError() >= IPP_REDIRECTION_OTHER_SITE)
{
cupsFreeDests(num_temps, temps);
return (-1);
@@ -2470,7 +2437,7 @@ appleGetPaperSize(char *name, /* I - Paper size name buffer */
int namesize) /* I - Size of buffer */
{
CFStringRef defaultPaperID; /* Default paper ID */
pwg_media_t *pwgmedia; /* PWG media size */
_pwg_media_t *pwgmedia; /* PWG media size */
defaultPaperID = _cupsAppleCopyDefaultPaperID();
@@ -2479,7 +2446,7 @@ appleGetPaperSize(char *name, /* I - Paper size name buffer */
!CFStringGetCString(defaultPaperID, name, namesize,
kCFStringEncodingUTF8))
name[0] = '\0';
else if ((pwgmedia = pwgMediaForLegacy(name)) != NULL)
else if ((pwgmedia = _pwgMediaForLegacy(name)) != NULL)
strlcpy(name, pwgmedia->pwg, namesize);
if (defaultPaperID)
@@ -3166,7 +3133,7 @@ cups_dnssd_query_cb(
device->state = _CUPS_DNSSD_PENDING;
make_and_model[0] = '\0';
strlcpy(model, "Unknown", sizeof(model));
strcpy(model, "Unknown");
for (txt = rdata, txtend = txt + rdlen;
txt < txtend;
@@ -3208,10 +3175,10 @@ cups_dnssd_query_cb(
if (!_cups_strcasecmp(key, "usb_MFG") ||
!_cups_strcasecmp(key, "usb_MANU") ||
!_cups_strcasecmp(key, "usb_MANUFACTURER"))
strlcpy(make_and_model, value, sizeof(make_and_model));
strcpy(make_and_model, value);
else if (!_cups_strcasecmp(key, "usb_MDL") ||
!_cups_strcasecmp(key, "usb_MODEL"))
strlcpy(model, value, sizeof(model));
strcpy(model, value);
else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript"))
{
if (value[0] == '(')
@@ -3223,14 +3190,14 @@ cups_dnssd_query_cb(
if ((ptr = value + strlen(value) - 1) > value && *ptr == ')')
*ptr = '\0';
strlcpy(model, value + 1, sizeof(model));
strcpy(model, value + 1);
}
else
strlcpy(model, value, sizeof(model));
strcpy(model, value);
}
else if (!_cups_strcasecmp(key, "ty"))
{
strlcpy(model, value, sizeof(model));
strcpy(model, value);
if ((ptr = strchr(model, ',')) != NULL)
*ptr = '\0';
@@ -3419,7 +3386,7 @@ cups_dnssd_resolve(
_HTTP_RESOLVE_FQDN, cups_dnssd_resolve_cb,
&resolve)) == NULL)
{
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to resolve printer URI."), 1);
_cupsSetError(IPP_INTERNAL_ERROR, _("Unable to resolve printer URI."), 1);
if (cb)
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
@@ -3920,5 +3887,5 @@ cups_make_string(
/*
* End of "$Id: dest.c 11688 2014-03-05 21:11:32Z msweet $".
* End of "$Id: dest.c 9568 2011-02-25 06:13:56Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: dir.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: dir.c 7279 2008-01-31 01:50:44Z mike $"
*
* Directory routines for CUPS.
*
@@ -468,5 +468,5 @@ cupsDirRewind(cups_dir_t *dp) /* I - Directory pointer */
#endif /* WIN32 */
/*
* End of "$Id: dir.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: dir.c 7279 2008-01-31 01:50:44Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: dir.h 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: dir.h 7026 2007-10-19 00:57:45Z mike $"
*
* Public directory definitions for CUPS.
*
@@ -65,5 +65,5 @@ extern void cupsDirRewind(cups_dir_t *dp) _CUPS_API_1_2;
#endif /* !_CUPS_DIR_H_ */
/*
* End of "$Id: dir.h 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: dir.h 7026 2007-10-19 00:57:45Z mike $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: emit.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: emit.c 7863 2008-08-26 03:39:59Z mike $"
*
* PPD code emission routines for CUPS.
*
@@ -1225,5 +1225,5 @@ ppd_handle_media(ppd_file_t *ppd) /* I - PPD file */
/*
* End of "$Id: emit.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: emit.c 7863 2008-08-26 03:39:59Z mike $".
*/
+29 -247
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: encode.c 11734 2014-03-25 18:01:47Z msweet $"
* "$Id: encode.c 7696 2008-06-26 00:54:42Z mike $"
*
* Option encoding routines for CUPS.
*
* Copyright 2007-2013 by Apple Inc.
* Copyright 2007-2012 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -31,110 +31,14 @@
/*
* Local list of option names, the value tags they should use, and the list of
* supported operations...
* Local list of option names and the value tags they should use...
*
* **** THIS LIST MUST BE SORTED BY ATTRIBUTE NAME ****
* **** THIS LIST MUST BE SORTED ****
*/
static const ipp_op_t ipp_job_creation[] =
{
IPP_OP_PRINT_JOB,
IPP_OP_PRINT_URI,
IPP_OP_VALIDATE_JOB,
IPP_OP_CREATE_JOB,
IPP_OP_HOLD_JOB,
IPP_OP_SET_JOB_ATTRIBUTES,
IPP_OP_CUPS_NONE
};
static const ipp_op_t ipp_doc_creation[] =
{
IPP_OP_PRINT_JOB,
IPP_OP_PRINT_URI,
IPP_OP_SEND_DOCUMENT,
IPP_OP_SEND_URI,
IPP_OP_SET_JOB_ATTRIBUTES,
IPP_OP_SET_DOCUMENT_ATTRIBUTES,
IPP_OP_CUPS_NONE
};
static const ipp_op_t ipp_sub_creation[] =
{
IPP_OP_PRINT_JOB,
IPP_OP_PRINT_URI,
IPP_OP_CREATE_JOB,
IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS,
IPP_OP_CREATE_JOB_SUBSCRIPTIONS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t ipp_all_print[] =
{
IPP_OP_PRINT_JOB,
IPP_OP_PRINT_URI,
IPP_OP_VALIDATE_JOB,
IPP_OP_CREATE_JOB,
IPP_OP_SEND_DOCUMENT,
IPP_OP_SEND_URI,
IPP_OP_CUPS_NONE
};
static const ipp_op_t ipp_all_limit[] =
{
IPP_OP_GET_JOBS,
IPP_OP_GET_PRINTER_ATTRIBUTES,
IPP_OP_CUPS_GET_PRINTERS,
IPP_OP_CUPS_GET_CLASSES,
IPP_OP_CUPS_GET_DEVICES,
IPP_OP_CUPS_GET_PPDS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t ipp_set_printer[] =
{
IPP_OP_SET_PRINTER_ATTRIBUTES,
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
IPP_OP_CUPS_ADD_MODIFY_CLASS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t cups_am_class[] =
{
IPP_OP_CUPS_ADD_MODIFY_CLASS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t cups_am_printer[] =
{
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
IPP_OP_CUPS_NONE
};
static const ipp_op_t cups_schemes[] =
{
IPP_OP_CUPS_GET_DEVICES,
IPP_OP_CUPS_GET_PPDS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t cups_get_ppds[] =
{
IPP_OP_CUPS_GET_PPDS,
IPP_OP_CUPS_NONE
};
static const ipp_op_t cups_ppd_name[] =
{
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
IPP_OP_CUPS_GET_PPD,
IPP_OP_CUPS_NONE
};
static const _ipp_option_t ipp_options[] =
{
{ 1, "auth-info", IPP_TAG_TEXT, IPP_TAG_JOB },
{ 1, "auth-info-default", IPP_TAG_TEXT, IPP_TAG_PRINTER },
{ 1, "auth-info-required", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
{ 0, "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
{ 0, "blackplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
@@ -142,26 +46,18 @@ static const _ipp_option_t ipp_options[] =
{ 0, "brightness-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "columns", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ 0, "columns-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "compression", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
ipp_doc_creation },
{ 0, "compression", IPP_TAG_KEYWORD, IPP_TAG_OPERATION },
{ 0, "copies", IPP_TAG_INTEGER, IPP_TAG_JOB,
IPP_TAG_DOCUMENT },
{ 0, "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "device-uri", IPP_TAG_URI, IPP_TAG_PRINTER },
{ 1, "document-copies", IPP_TAG_RANGE, IPP_TAG_JOB,
IPP_TAG_DOCUMENT,
ipp_doc_creation },
{ 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
ipp_doc_creation },
IPP_TAG_DOCUMENT },
{ 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION },
{ 0, "document-format-default", IPP_TAG_MIMETYPE, IPP_TAG_PRINTER },
{ 1, "document-numbers", IPP_TAG_RANGE, IPP_TAG_JOB,
IPP_TAG_DOCUMENT,
ipp_all_print },
{ 1, "exclude-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_schemes },
IPP_TAG_DOCUMENT },
{ 1, "exclude-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION },
{ 1, "finishings", IPP_TAG_ENUM, IPP_TAG_JOB,
IPP_TAG_DOCUMENT },
{ 1, "finishings-default", IPP_TAG_ENUM, IPP_TAG_PRINTER },
@@ -174,15 +70,7 @@ static const _ipp_option_t ipp_options[] =
{ 0, "gamma-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "hue", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ 0, "hue-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 1, "include-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_schemes },
{ 0, "job-account-id", IPP_TAG_NAME, IPP_TAG_JOB },
{ 0, "job-account-id-default",IPP_TAG_NAME, IPP_TAG_PRINTER },
{ 0, "job-accounting-user-id", IPP_TAG_NAME, IPP_TAG_JOB },
{ 0, "job-accounting-user-id-default", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ 0, "job-authorization-uri", IPP_TAG_URI, IPP_TAG_OPERATION },
{ 0, "job-hold-until", IPP_TAG_KEYWORD, IPP_TAG_JOB },
{ 1, "include-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION },
{ 0, "job-id", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
{ 0, "job-impressions", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
{ 0, "job-impressions-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
@@ -192,12 +80,6 @@ static const _ipp_option_t ipp_options[] =
{ 0, "job-media-sheets", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
{ 0, "job-media-sheets-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
{ 0, "job-page-limit", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "job-password", IPP_TAG_STRING, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
ipp_job_creation },
{ 0, "job-password-encryption", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
ipp_job_creation },
{ 0, "job-priority", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ 0, "job-quota-period", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 1, "job-sheets", IPP_TAG_NAME, IPP_TAG_JOB },
@@ -267,33 +149,7 @@ static const _ipp_option_t ipp_options[] =
{ 0, "penwidth", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ 0, "penwidth-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "port-monitor", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ 0, "ppd-device-id", IPP_TAG_TEXT, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-make", IPP_TAG_TEXT, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-make-and-model", IPP_TAG_TEXT, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-model-number", IPP_TAG_INTEGER, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-name", IPP_TAG_NAME, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_ppd_name },
{ 0, "ppd-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-product", IPP_TAG_TEXT, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-psversion", IPP_TAG_TEXT, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-type", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
IPP_TAG_ZERO,
cups_get_ppds },
{ 0, "ppd-name", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ 0, "ppi", IPP_TAG_INTEGER, IPP_TAG_JOB },
{ 0, "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
{ 0, "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
@@ -393,27 +249,23 @@ cupsEncodeOptions2(
cups_option_t *options, /* I - Options */
ipp_tag_t group_tag) /* I - Group to encode */
{
int i, j; /* Looping vars */
int count; /* Number of values */
char *s, /* Pointer into option value */
*val, /* Pointer to option value */
*copy, /* Copy of option value */
*sep, /* Option separator */
quote; /* Quote character */
ipp_attribute_t *attr; /* IPP attribute */
ipp_tag_t value_tag; /* IPP value tag */
cups_option_t *option; /* Current option */
ipp_t *collection; /* Collection value */
int num_cols; /* Number of collection values */
cups_option_t *cols; /* Collection values */
ipp_op_t op; /* Operation for this request */
const ipp_op_t *ops; /* List of allowed operations */
int i, j; /* Looping vars */
int count; /* Number of values */
char *s, /* Pointer into option value */
*val, /* Pointer to option value */
*copy, /* Copy of option value */
*sep, /* Option separator */
quote; /* Quote character */
ipp_attribute_t *attr; /* IPP attribute */
ipp_tag_t value_tag; /* IPP value tag */
cups_option_t *option; /* Current option */
ipp_t *collection; /* Collection value */
int num_cols; /* Number of collection values */
cups_option_t *cols; /* Collection values */
DEBUG_printf(("cupsEncodeOptions2(ipp=%p(%s), num_options=%d, options=%p, "
"group_tag=%x)", ipp,
ipp ? ippOpString(ippGetOperation(ipp)) : "", num_options,
options, group_tag));
DEBUG_printf(("cupsEncodeOptions2(ipp=%p, num_options=%d, options=%p, "
"group_tag=%x)", ipp, num_options, options, group_tag));
/*
* Range check input...
@@ -426,18 +278,13 @@ cupsEncodeOptions2(
* Do special handling for the document-format/raw options...
*/
op = ippGetOperation(ipp);
if (group_tag == IPP_TAG_OPERATION &&
(op == IPP_OP_PRINT_JOB || op == IPP_OP_PRINT_URI ||
op == IPP_OP_SEND_DOCUMENT || op == IPP_OP_SEND_URI))
if (group_tag == IPP_TAG_OPERATION)
{
/*
* Handle the document format stuff first...
*/
if ((val = (char *)cupsGetOption("document-format", num_options,
options)) != NULL)
if ((val = (char *)cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else if (cupsGetOption("raw", num_options, options))
@@ -476,22 +323,6 @@ cupsEncodeOptions2(
continue;
value_tag = match->value_tag;
if (match->operations)
ops = match->operations;
else if (group_tag == IPP_TAG_JOB)
ops = ipp_job_creation;
else if (group_tag == IPP_TAG_DOCUMENT)
ops = ipp_doc_creation;
else if (group_tag == IPP_TAG_SUBSCRIPTION)
ops = ipp_sub_creation;
else if (group_tag == IPP_TAG_PRINTER)
ops = ipp_set_printer;
else
{
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
continue;
}
}
else
{
@@ -505,23 +336,10 @@ cupsEncodeOptions2(
strcmp(option->name + namelen - 10, "-supported")))
{
if (group_tag != IPP_TAG_JOB && group_tag != IPP_TAG_DOCUMENT)
{
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
continue;
}
}
else if (group_tag != IPP_TAG_PRINTER)
{
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
continue;
}
if (group_tag == IPP_TAG_JOB)
ops = ipp_job_creation;
else if (group_tag == IPP_TAG_DOCUMENT)
ops = ipp_doc_creation;
else
ops = ipp_set_printer;
if (!_cups_strcasecmp(option->value, "true") ||
!_cups_strcasecmp(option->value, "false"))
@@ -530,22 +348,6 @@ cupsEncodeOptions2(
value_tag = IPP_TAG_NAME;
}
/*
* Verify that we send this attribute for this operation...
*/
while (*ops != IPP_OP_CUPS_NONE)
if (op == *ops)
break;
else
ops ++;
if (*ops == IPP_OP_CUPS_NONE && op != IPP_OP_CUPS_NONE)
{
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
continue;
}
/*
* Count the number of values...
*/
@@ -821,26 +623,6 @@ cupsEncodeOptions2(
}
#ifdef DEBUG
/*
* '_ippCheckOptions()' - Validate that the option array is sorted properly.
*/
const char * /* O - First out-of-order option or NULL */
_ippCheckOptions(void)
{
int i; /* Looping var */
for (i = 0; i < (int)(sizeof(ipp_options) / sizeof(ipp_options[0]) - 1); i ++)
if (strcmp(ipp_options[i].name, ipp_options[i + 1].name) >= 0)
return (ipp_options[i + 1].name);
return (NULL);
}
#endif /* DEBUG */
/*
* '_ippFindOption()' - Find the attribute information for an option.
*/
@@ -878,5 +660,5 @@ compare_ipp_options(_ipp_option_t *a, /* I - First option */
/*
* End of "$Id: encode.c 11734 2014-03-25 18:01:47Z msweet $".
* End of "$Id: encode.c 7696 2008-06-26 00:54:42Z mike $".
*/
+2 -4
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: file-private.h 11642 2014-02-27 15:57:59Z msweet $"
* "$Id: file-private.h 3275 2011-05-20 07:26:13Z msweet $"
*
* Private file definitions for CUPS.
*
@@ -16,8 +16,6 @@
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
*/
#ifndef _CUPS_FILE_PRIVATE_H_
@@ -135,5 +133,5 @@ extern void _cupsFileCheckFilter(void *context,
#endif /* !_CUPS_FILE_PRIVATE_H_ */
/*
* End of "$Id: file-private.h 11642 2014-02-27 15:57:59Z msweet $".
* End of "$Id: file-private.h 3275 2011-05-20 07:26:13Z msweet $".
*/
+56 -18
Ver Arquivo
@@ -1,23 +1,61 @@
/*
* "$Id: file.c 11642 2014-02-27 15:57:59Z msweet $"
* "$Id: file.c 7672 2008-06-18 22:03:02Z mike $"
*
* File functions for CUPS.
* File functions for CUPS.
*
* Since stdio files max out at 256 files on many systems, we have to
* write similar functions without this limit. At the same time, using
* our own file functions allows us to provide transparent support of
* gzip'd print files, PPD files, etc.
* Since stdio files max out at 256 files on many systems, we have to
* write similar functions without this limit. At the same time, using
* our own file functions allows us to provide transparent support of
* gzip'd print files, PPD files, etc.
*
* Copyright 2007-2013 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
* Copyright 2007-2012 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
* Contents:
*
* _cupsFileCheck() - Check the permissions of the given filename.
* _cupsFileCheckFilter() - Report file check results as CUPS filter messages.
* cupsFileClose() - Close a CUPS file.
* cupsFileCompression() - Return whether a file is compressed.
* cupsFileEOF() - Return the end-of-file status.
* cupsFileFind() - Find a file using the specified path.
* cupsFileFlush() - Flush pending output.
* cupsFileGetChar() - Get a single character from a file.
* cupsFileGetConf() - Get a line from a configuration file.
* cupsFileGetLine() - Get a CR and/or LF-terminated line that may
* contain binary data.
* cupsFileGets() - Get a CR and/or LF-terminated line.
* cupsFileLock() - Temporarily lock access to a file.
* cupsFileNumber() - Return the file descriptor associated with a CUPS
* file.
* cupsFileOpen() - Open a CUPS file.
* cupsFileOpenFd() - Open a CUPS file using a file descriptor.
* cupsFilePeekChar() - Peek at the next character from a file.
* cupsFilePrintf() - Write a formatted string.
* cupsFilePutChar() - Write a character.
* cupsFilePutConf() - Write a configuration line.
* cupsFilePuts() - Write a string.
* cupsFileRead() - Read from a file.
* cupsFileRewind() - Set the current file position to the beginning of
* the file.
* cupsFileSeek() - Seek in a file.
* cupsFileStderr() - Return a CUPS file associated with stderr.
* cupsFileStdin() - Return a CUPS file associated with stdin.
* cupsFileStdout() - Return a CUPS file associated with stdout.
* cupsFileTell() - Return the current file position.
* cupsFileUnlock() - Unlock access to a file.
* cupsFileWrite() - Write to a file.
* cups_compress() - Compress a buffer of data.
* cups_fill() - Fill the input buffer.
* cups_open() - Safely open a file for writing.
* cups_read() - Read from a file descriptor.
* cups_write() - Write to a file descriptor.
*/
/*
@@ -2391,8 +2429,8 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */
}
else
{
tcrc = ((((((uLong)trailer[3] << 8) | (uLong)trailer[2]) << 8) |
(uLong)trailer[1]) << 8) | (uLong)trailer[0];
tcrc = (((((trailer[3] << 8) | trailer[2]) << 8) | trailer[1]) << 8) |
trailer[0];
if (tcrc != fp->crc)
{
@@ -2400,7 +2438,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */
* Bad CRC, mark end-of-file...
*/
DEBUG_printf(("9cups_fill: tcrc=%08x != fp->crc=%08x",
DEBUG_printf(("9cups_fill: tcrc=%08x, fp->crc=%08x",
(unsigned int)tcrc, (unsigned int)fp->crc));
fp->eof = 1;
@@ -2672,5 +2710,5 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
/*
* End of "$Id: file.c 11642 2014-02-27 15:57:59Z msweet $".
* End of "$Id: file.c 7672 2008-06-18 22:03:02Z mike $".
*/
+2 -4
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: file.h 11642 2014-02-27 15:57:59Z msweet $"
* "$Id: file.h 7460 2008-04-16 02:19:54Z mike $"
*
* Public file definitions for CUPS.
*
@@ -16,8 +16,6 @@
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
*/
#ifndef _CUPS_FILE_H_
@@ -114,5 +112,5 @@ extern ssize_t cupsFileWrite(cups_file_t *fp, const char *buf,
#endif /* !_CUPS_FILE_H_ */
/*
* End of "$Id: file.h 11642 2014-02-27 15:57:59Z msweet $".
* End of "$Id: file.h 7460 2008-04-16 02:19:54Z mike $".
*/
+20 -21
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: getdevices.c 4216 2013-03-11 13:57:36Z msweet $"
* "$Id: getdevices.c 3794 2012-04-23 22:44:16Z msweet $"
*
* cupsGetDevices implementation for CUPS.
*
* Copyright 2008-2013 by Apple Inc.
* Copyright 2008-2012 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -71,19 +71,19 @@ cupsGetDevices(
user_data));
if (!callback)
return (IPP_STATUS_ERROR_INTERNAL);
return (IPP_INTERNAL_ERROR);
if (!http)
http = _cupsConnect();
if (!http)
return (IPP_STATUS_ERROR_SERVICE_UNAVAILABLE);
return (IPP_SERVICE_UNAVAILABLE);
/*
* Create a CUPS-Get-Devices request...
*/
request = ippNewRequest(IPP_OP_CUPS_GET_DEVICES);
request = ippNewRequest(CUPS_GET_DEVICES);
if (timeout > 0)
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "timeout",
@@ -115,14 +115,14 @@ cupsGetDevices(
status = cupsSendRequest(http, request, "/", ippLength(request));
DEBUG_puts("2cupsGetDevices: Waiting for response status...");
while (status == HTTP_STATUS_CONTINUE)
while (status == HTTP_CONTINUE)
status = httpUpdate(http);
if (status != HTTP_STATUS_OK)
if (status != HTTP_OK)
{
httpFlush(http);
if (status == HTTP_STATUS_UNAUTHORIZED)
if (status == HTTP_UNAUTHORIZED)
{
/*
* See if we can do authentication...
@@ -131,16 +131,16 @@ cupsGetDevices(
DEBUG_puts("2cupsGetDevices: Need authorization...");
if (!cupsDoAuthentication(http, "POST", "/"))
httpReconnect2(http, 30000, NULL);
httpReconnect(http);
else
{
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
status = HTTP_AUTHORIZATION_CANCELED;
break;
}
}
#ifdef HAVE_SSL
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
else if (status == HTTP_UPGRADE_REQUIRED)
{
/*
* Force a reconnect with encryption...
@@ -148,20 +148,19 @@ cupsGetDevices(
DEBUG_puts("2cupsGetDevices: Need encryption...");
if (!httpReconnect2(http, 30000, NULL))
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
if (!httpReconnect(http))
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
}
#endif /* HAVE_SSL */
}
}
while (status == HTTP_STATUS_UNAUTHORIZED ||
status == HTTP_STATUS_UPGRADE_REQUIRED);
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED);
DEBUG_printf(("2cupsGetDevices: status=%d", status));
ippDelete(request);
if (status != HTTP_STATUS_OK)
if (status != HTTP_OK)
{
_cupsSetHTTPError(status);
return (cupsLastError());
@@ -187,7 +186,7 @@ cupsGetDevices(
do
{
if ((state = ippRead(http, response)) == IPP_STATE_ERROR)
if ((state = ippRead(http, response)) == IPP_ERROR)
break;
DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state,
@@ -241,7 +240,7 @@ cupsGetDevices(
device_uri = attr->values[0].string.text;
}
}
while (state != IPP_STATE_DATA);
while (state != IPP_DATA);
DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state,
response->last));
@@ -258,8 +257,8 @@ cupsGetDevices(
httpBlocking(http, blocking);
httpFlush(http);
if (status == HTTP_STATUS_ERROR)
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0);
if (status == HTTP_ERROR)
_cupsSetError(IPP_INTERNAL_ERROR, strerror(http->error), 0);
else
{
attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
@@ -280,5 +279,5 @@ cupsGetDevices(
/*
* End of "$Id: getdevices.c 4216 2013-03-11 13:57:36Z msweet $".
* End of "$Id: getdevices.c 3794 2012-04-23 22:44:16Z msweet $".
*/
+2 -2
Ver Arquivo
@@ -1,5 +1,5 @@
/*
* "$Id: getifaddrs.c 10996 2013-05-29 11:51:34Z msweet $"
* "$Id: getifaddrs.c 6649 2007-07-11 21:46:42Z mike $"
*
* Network interface functions for CUPS.
*
@@ -262,5 +262,5 @@ _cups_freeifaddrs(struct ifaddrs *addrs)/* I - Interface list to free */
/*
* End of "$Id: getifaddrs.c 10996 2013-05-29 11:51:34Z msweet $".
* End of "$Id: getifaddrs.c 6649 2007-07-11 21:46:42Z mike $".
*/
+52 -72
Ver Arquivo
@@ -1,9 +1,9 @@
/*
* "$Id: getputfile.c 11153 2013-07-17 14:10:21Z msweet $"
* "$Id: getputfile.c 7359 2008-02-29 19:01:35Z mike $"
*
* Get/put file functions for CUPS.
*
* Copyright 2007-2013 by Apple Inc.
* Copyright 2007-2012 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -39,7 +39,7 @@
/*
* 'cupsGetFd()' - Get a file from the server.
*
* This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved.
* This function returns @code HTTP_OK@ when the file is successfully retrieved.
*
* @since CUPS 1.1.20/OS X 10.4@
*/
@@ -68,12 +68,12 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
if (http)
http->error = EINVAL;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
if (!http)
if ((http = _cupsConnect()) == NULL)
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
return (HTTP_SERVICE_UNAVAILABLE);
/*
* Then send GET requests to the HTTP server...
@@ -84,37 +84,27 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
do
{
if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close"))
{
httpClearFields(http);
if (httpReconnect2(http, 30000, NULL))
{
status = HTTP_STATUS_ERROR;
break;
}
}
httpClearFields(http);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring);
httpSetField(http, HTTP_FIELD_IF_MODIFIED_SINCE, if_modified_since);
if (httpGet(http, resource))
{
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
else
{
status = HTTP_STATUS_UNAUTHORIZED;
status = HTTP_UNAUTHORIZED;
continue;
}
}
while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_STATUS_UNAUTHORIZED)
if (status == HTTP_UNAUTHORIZED)
{
/*
* Flush any error message...
@@ -128,46 +118,46 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
if (cupsDoAuthentication(http, "GET", resource))
{
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
status = HTTP_AUTHORIZATION_CANCELED;
break;
}
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
continue;
}
#ifdef HAVE_SSL
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
else if (status == HTTP_UPGRADE_REQUIRED)
{
/* Flush any error message... */
httpFlush(http);
/* Reconnect... */
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
/* Upgrade with encryption... */
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
/* Try again, this time with encryption enabled... */
continue;
}
#endif /* HAVE_SSL */
}
while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED);
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED);
/*
* See if we actually got the file or an error...
*/
if (status == HTTP_STATUS_OK)
if (status == HTTP_OK)
{
/*
* Yes, copy the file...
@@ -195,7 +185,7 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
/*
* 'cupsGetFile()' - Get a file from the server.
*
* This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved.
* This function returns @code HTTP_OK@ when the file is successfully retrieved.
*
* @since CUPS 1.1.20/OS X 10.4@
*/
@@ -218,7 +208,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
if (http)
http->error = EINVAL;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
/*
@@ -233,7 +223,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
http->error = errno;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
/*
@@ -248,7 +238,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
close(fd);
if (status != HTTP_STATUS_OK)
if (status != HTTP_OK)
unlink(filename);
/*
@@ -262,7 +252,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
/*
* 'cupsPutFd()' - Put a file on the server.
*
* This function returns @code HTTP_STATUS_CREATED@ when the file is stored
* This function returns @code HTTP_CREATED@ when the file is stored
* successfully.
*
* @since CUPS 1.1.20/OS X 10.4@
@@ -291,12 +281,12 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
if (http)
http->error = EINVAL;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
if (!http)
if ((http = _cupsConnect()) == NULL)
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
return (HTTP_SERVICE_UNAVAILABLE);
/*
* Then send PUT requests to the HTTP server...
@@ -306,34 +296,24 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
do
{
if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close"))
{
httpClearFields(http);
if (httpReconnect2(http, 30000, NULL))
{
status = HTTP_STATUS_ERROR;
break;
}
}
DEBUG_printf(("2cupsPutFd: starting attempt, authstring=\"%s\"...",
http->authstring));
httpClearFields(http);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring);
httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked");
httpSetExpect(http, HTTP_STATUS_CONTINUE);
httpSetExpect(http, HTTP_CONTINUE);
if (httpPut(http, resource))
{
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
else
{
status = HTTP_STATUS_UNAUTHORIZED;
status = HTTP_UNAUTHORIZED;
continue;
}
}
@@ -345,9 +325,9 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
if (httpWait(http, 1000))
status = httpUpdate(http);
else
status = HTTP_STATUS_CONTINUE;
status = HTTP_CONTINUE;
if (status == HTTP_STATUS_CONTINUE)
if (status == HTTP_CONTINUE)
{
/*
* Copy the file...
@@ -358,21 +338,21 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
if (httpCheck(http))
{
if ((status = httpUpdate(http)) != HTTP_STATUS_CONTINUE)
if ((status = httpUpdate(http)) != HTTP_CONTINUE)
break;
}
else
httpWrite2(http, buffer, bytes);
}
if (status == HTTP_STATUS_CONTINUE)
if (status == HTTP_CONTINUE)
{
httpWrite2(http, buffer, 0);
while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
}
if (status == HTTP_STATUS_ERROR && !retries)
if (status == HTTP_ERROR && !retries)
{
DEBUG_printf(("2cupsPutFd: retry on status %d", status));
@@ -382,9 +362,9 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
httpFlush(http);
/* Reconnect... */
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
@@ -394,7 +374,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
DEBUG_printf(("2cupsPutFd: status=%d", status));
if (status == HTTP_STATUS_UNAUTHORIZED)
if (status == HTTP_UNAUTHORIZED)
{
/*
* Flush any error message...
@@ -408,47 +388,47 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
if (cupsDoAuthentication(http, "PUT", resource))
{
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
status = HTTP_AUTHORIZATION_CANCELED;
break;
}
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
continue;
}
#ifdef HAVE_SSL
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
else if (status == HTTP_UPGRADE_REQUIRED)
{
/* Flush any error message... */
httpFlush(http);
/* Reconnect... */
if (httpReconnect2(http, 30000, NULL))
if (httpReconnect(http))
{
status = HTTP_STATUS_ERROR;
status = HTTP_ERROR;
break;
}
/* Upgrade with encryption... */
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
/* Try again, this time with encryption enabled... */
continue;
}
#endif /* HAVE_SSL */
}
while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED ||
(status == HTTP_STATUS_ERROR && retries < 2));
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED ||
(status == HTTP_ERROR && retries < 2));
/*
* See if we actually put the file or an error...
*/
if (status != HTTP_STATUS_CREATED)
if (status != HTTP_CREATED)
{
_cupsSetHTTPError(status);
httpFlush(http);
@@ -487,7 +467,7 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
if (http)
http->error = EINVAL;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
/*
@@ -502,7 +482,7 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
http->error = errno;
return (HTTP_STATUS_ERROR);
return (HTTP_ERROR);
}
/*
@@ -518,5 +498,5 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
/*
* End of "$Id: getputfile.c 11153 2013-07-17 14:10:21Z msweet $".
* End of "$Id: getputfile.c 7359 2008-02-29 19:01:35Z mike $".
*/

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais