Comparar commits
2 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| c8d724e6bb | |||
| 00d0ae86f6 |
@@ -0,0 +1,201 @@
|
||||
CHANGES-2.0.txt
|
||||
---------------
|
||||
|
||||
CHANGES IN CUPS V2.0.3
|
||||
|
||||
- Security: Fixed CERT VU #810572 exploiting the dynamic linker
|
||||
(STR #4609)
|
||||
- Security: The scheduler could hang with malformed gzip data
|
||||
(STR #4602)
|
||||
- Restored missing generic printer icon file (STR #4587)
|
||||
- Fixed logging of configuration errors to show up as errors (STR #4582)
|
||||
- Fixed potential buffer overflows in raster code and filters
|
||||
(STR #4598, STR #4599, STR #4600, STR #4601)
|
||||
- Fixed a gzip processing bug (#4602)
|
||||
- Fixed <Limit> inside <Location> (STR #4575)
|
||||
- Fixed lpadmin when both -m and -o are used (STR #4578)
|
||||
- The web interface always showed support for 2-sided printing
|
||||
(STR #4595)
|
||||
- cupsRasterReadHeader did not fully validate the raster header
|
||||
(STR #4596)
|
||||
- The rastertopwg filter did not check for truncated input (STR #4597)
|
||||
- The cups-lpd mini-daemon did not check for request parameters
|
||||
(STR #4603)
|
||||
- The scheduler could get caught in a busy loop (STR #4605)
|
||||
- The sample Epson driver could crash (STR #4616)
|
||||
- The IPP backend now correctly monitors jobs
|
||||
(<rdar://problem/20495955>)
|
||||
- The ppdhtml and ppdpo utilities crashed when the -D option was used
|
||||
before a driver information file (STR #4627)
|
||||
- ippfind incorrectly substituted "=port" for service_port.
|
||||
- The IPP/1.1 test file did not handle the initial print job
|
||||
completing early (STR #4576)
|
||||
- Fixed a memory leak in cupsConnectDest (STR #4634)
|
||||
- PWG Raster Format output contained invalid ImageBox values
|
||||
(<rdar://problem/21144309>)
|
||||
- Added Russian translation (STR #4577)
|
||||
- Added German translation (STR #4635)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.2
|
||||
|
||||
- Security: cupsRasterReadPixels buffer overflow with invalid page
|
||||
header and compressed raster data (STR #4551)
|
||||
- Command-line programs were not localized on Mac OS X
|
||||
(<rdar://problem/14546232>)
|
||||
- The scheduler incorrectly cleared the MakeModel string in the
|
||||
printers.conf file after a restart (<rdar://problem/16827518>)
|
||||
- CUPS did not compile with older versions of GNU TLS (STR #4527)
|
||||
- CUPS did not compile without Avahi or mDNSResponder (STR #4523)
|
||||
- ippLength() did not return the correct length for IPP_TAG_CONST
|
||||
string values.
|
||||
- The scheduler incorrectly aborted jobs after a job was restarted
|
||||
(<rdar://problem/19129387>)
|
||||
- The cups-files.conf file contained the old ServerCertificate/Key
|
||||
directives instead of ServerKeychain.
|
||||
- Fixed builds when no SSL/TLS library is available, or when explicitly
|
||||
disabled (STR #4531)
|
||||
- Fixed an OpenBSD charset transcoding issue.
|
||||
- Fixed USB printing on OpenBSD (STR #4525)
|
||||
- The --without-xinetd configure option did not work (STR #4542)
|
||||
- Backends needing to load OS X kernel extensions did not work
|
||||
(<rdar://problem/19015679>)
|
||||
- Mapping of PPD keywords to IPP keywords did not work if the PPD
|
||||
keyword was already an IPP keyword (<rdar://problem/19121005>)
|
||||
- cupsGetPPD* sent bad requests (STR #4567)
|
||||
- ippserver used the wrong temporary directory on Windows (STR #4547)
|
||||
- ippserver did not handle Bonjour registrations properly (STR #4548)
|
||||
- The scheduler could crash during shutdown if Avahi was shutdown
|
||||
first (STR #4550)
|
||||
- Added a USB quirk rule for Intermec printers (STR #4553)
|
||||
- The scheduler did not always log which configuration file had the
|
||||
error (STR #4559)
|
||||
- The ippfind and ipptool programs now correctly match hostnames with
|
||||
trailing dots (STR #4563)
|
||||
- The ipptool timeout option did not work (STR #4515)
|
||||
- Fixed several issues with client.conf, CUPS_SERVER, and the "-h"
|
||||
option of most commands (STR #4528)
|
||||
- Another change for OpenBSD (STR #4526)
|
||||
- Added Japanese localization (STR #4524)
|
||||
- Documentation changes (STR #4569)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.1
|
||||
|
||||
- Security: SSLv3 is now disabled by default to protect against the
|
||||
POODLE attack (STR #4476)
|
||||
- Printer sharing did not work when systemd was being used (STR #4497)
|
||||
- cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if
|
||||
it was not readable by the user (STR #4500)
|
||||
- The web interface now protects against frame "click-jacking" attacks
|
||||
(STR #4492)
|
||||
- Fixed a crash in ippAttributeString (<rdar://problem/17903871>)
|
||||
- Fixed a crash in the scheduler on Linux/*BSD if colord was not running
|
||||
(STR #4496)
|
||||
- Fixed a random crash in the scheduler when not using systemd
|
||||
(STR #4484)
|
||||
- Added systemd support for cups-lpd (STR #4493)
|
||||
- The scheduler did not honor the FatalErrors directive for mis-
|
||||
configured Group and SystemGroup values (STR #4495)
|
||||
- The network backends no longer report waste-receptacle conditions when
|
||||
using SNMP (STR #4499)
|
||||
- The IPP backend did not work with some configurations of Windows
|
||||
(STR #4503)
|
||||
- RPMs did not build (STR #4490)
|
||||
- Added a USB quirk rule for the Brother HL-1250 (STR #4519)
|
||||
- Fixed compiles on unsupported platforms (STR #4510)
|
||||
- "cancel -a" did not cancel all jobs on all destinations (STR #4513)
|
||||
- The web interface did not work on OpenBSD (STR #4496)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.0
|
||||
|
||||
- The scheduler did not preserve listener sockets from launchd or
|
||||
systemd after a restart (<rdar://problem/18112848>)
|
||||
- Added some USB quirk rules for the libusb-based USB backend
|
||||
(STR #4482)
|
||||
- Spanish localization update (STR #4487)
|
||||
- Updated documentation for 2.0.0 release.
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0rc1
|
||||
|
||||
- Documentation updates (STR #4464)
|
||||
- The scheduler now monitors the AC power status on OS X, allowing for
|
||||
"sleep printing" when sharing printers (<rdar://problem/17325852>)
|
||||
- The scheduler incorrectly called launch_activate_socket multiple times
|
||||
on OS X (<rdar://problem/17523218>)
|
||||
- The ippserver test program now passes the IPP Everywhere self-
|
||||
certification tests (STR #4101)
|
||||
- Relaxed the new OS X filter sandbox slightly (STR #4471,
|
||||
<rdar://problem/17483959>)
|
||||
- Dropped the old Epson Stylus Color/Photo sample drivers since they
|
||||
don't work with any current printers and there are free alternatives
|
||||
that produce much better output (<rdar://problem/18036889>)
|
||||
- Log and configuration files that are not world-readable are again
|
||||
accessible via the web interface (STR #4461)
|
||||
- PPD files are now created using the permissions specified by the
|
||||
ConfigFilePerm directive.
|
||||
- Fixed RPM build issues (STR #4459)
|
||||
- Fixed the spinner image and restart page when reconfiguring the
|
||||
scheduler through the web interface (STR #4475)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0b1
|
||||
|
||||
- Added a "--list-filters" option to the cupsfilter command (STR #4325)
|
||||
- Added systemd support (STR #3917)
|
||||
- Added support for re-sending a job as a raster file if a higher-level
|
||||
format such as PDF fails (<rdar://problem/15583721>)
|
||||
- Added support for regular expression matching in the MIME type rules
|
||||
(<rdar://problem/11131245>)
|
||||
- Added support for TLS certificate validation and policy enforcement
|
||||
(STR #1616)
|
||||
- Added support for simultaneous XML and test output from ipptool.
|
||||
- Added support for PAUSE directive in ipptool test files.
|
||||
- Added support for auto-typing of TIFF files by ipptool (STR #4418)
|
||||
- The scheduler now returns completed jobs in the correct newest-to-
|
||||
oldest order (STR #4396)
|
||||
- The configure script now supports target-specific tools for pkg-config
|
||||
and others (STR #4423)
|
||||
- The ipptool program now supports EXPECT statements for collection
|
||||
member attributes (<rdar://problem/15355218>)
|
||||
- The ipptool program now supports collection attributes with multiple
|
||||
values (<rdar://problem/15355124>)
|
||||
- The sample drivers now include all of the installed localizations by
|
||||
default (<rdar://problem/14756625>)
|
||||
- Adopted Linux man page conventions and updated all man pages
|
||||
(STR #4372, STR #4329)
|
||||
- The scheduler now supports the "first-index" operation attribute for
|
||||
the Get-Jobs operation (STR #2913)
|
||||
- Changed the default AccessLogLevel and PageLogFormat to disable the
|
||||
access_log and page_log files by default (<rdar://problem/16495000>)
|
||||
- cupsRasterInterpretPPD now supports the Orientation header in order to
|
||||
support long-edge feed raster printers (<rdar://problem/15837926>)
|
||||
- The scheduler now allows run-as-root backends to have group read and
|
||||
execute permissions (STR #2935)
|
||||
- The ippFindAttribute and ippFindNextAttribute functions now support
|
||||
hierarchical searches (STR #4395)
|
||||
- Dropped OpenSSL support in favor of GNU TLS.
|
||||
- Dropped "dark wake" support on OS X, which was preventing portables
|
||||
from going to sleep when there was a stuck job. We now use a variation
|
||||
of the CUPS 1.4 sleep support to do a cleaner sleep
|
||||
(<rdar://problem/14323704>)
|
||||
- Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX)
|
||||
- Dropped lppasswd and support for Digest authentication in in the
|
||||
scheduler (STR #4321)
|
||||
- The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no
|
||||
longer supported.
|
||||
- The scheduler now caches more job history data and limits the number
|
||||
of completed jobs returned by Get-Jobs as needed in order to prevent a
|
||||
denial-of-service on busy servers (STR #2913)
|
||||
- The filter/backend sandbox on OS X now defaults to a more strict
|
||||
whitelist (<rdar://problem/15939788>)
|
||||
- Increased the default idle exit timeout to 60 seconds on OS X
|
||||
(<rdar://problem/16041820>)
|
||||
- Printer classes were not accessible on OS X
|
||||
(<rdar://problem/16385643>)
|
||||
- The scheduler now uses </DefaultPrinter> to close the default printer
|
||||
definition in printers.conf (STR #4153)
|
||||
- Canceling all jobs in the web interface now just cancels the jobs
|
||||
(STR #1914)
|
||||
+38
-197
@@ -1,201 +1,42 @@
|
||||
CHANGES.txt - 2.0.3 - 2015-06-08
|
||||
CHANGES.txt - 2.1b1 - 2015-06-03
|
||||
--------------------------------
|
||||
|
||||
CHANGES IN CUPS V2.0.3
|
||||
CHANGES IN CUPS V2.1b1
|
||||
|
||||
- Security: Fixed CERT VU #810572 exploiting the dynamic linker
|
||||
(STR #4609)
|
||||
- Security: The scheduler could hang with malformed gzip data
|
||||
(STR #4602)
|
||||
- Restored missing generic printer icon file (STR #4587)
|
||||
- Fixed logging of configuration errors to show up as errors (STR #4582)
|
||||
- Fixed potential buffer overflows in raster code and filters
|
||||
(STR #4598, STR #4599, STR #4600, STR #4601)
|
||||
- Fixed a gzip processing bug (#4602)
|
||||
- Fixed <Limit> inside <Location> (STR #4575)
|
||||
- Fixed lpadmin when both -m and -o are used (STR #4578)
|
||||
- The web interface always showed support for 2-sided printing
|
||||
(STR #4595)
|
||||
- cupsRasterReadHeader did not fully validate the raster header
|
||||
(STR #4596)
|
||||
- The rastertopwg filter did not check for truncated input (STR #4597)
|
||||
- The cups-lpd mini-daemon did not check for request parameters
|
||||
(STR #4603)
|
||||
- The scheduler could get caught in a busy loop (STR #4605)
|
||||
- The sample Epson driver could crash (STR #4616)
|
||||
- The IPP backend now correctly monitors jobs
|
||||
(<rdar://problem/20495955>)
|
||||
- The ppdhtml and ppdpo utilities crashed when the -D option was used
|
||||
before a driver information file (STR #4627)
|
||||
- ippfind incorrectly substituted "=port" for service_port.
|
||||
- The IPP/1.1 test file did not handle the initial print job
|
||||
completing early (STR #4576)
|
||||
- Fixed a memory leak in cupsConnectDest (STR #4634)
|
||||
- PWG Raster Format output contained invalid ImageBox values
|
||||
(<rdar://problem/21144309>)
|
||||
- Added Russian translation (STR #4577)
|
||||
- Added German translation (STR #4635)
|
||||
- Improved speed of ppdMarkDefaults for complex/large PPDs
|
||||
(<rdar://problem/15146999>)
|
||||
- The IPP backend now stops sending print data if the printer indicates
|
||||
the job has been aborted or canceled (<rdar://problem/17837631>)
|
||||
- The IPP backend now sends the job-pages-per-set attribute when
|
||||
printing multiple copy jobs with finishings
|
||||
(<rdar://problem/16792757>)
|
||||
- The IPP backend now updates the cupsMandatory values when the printer
|
||||
configuration changes (<rdar://problem/18126570>)
|
||||
- No longer install banner files since third-party banner filters now
|
||||
supply their own (STR #4518)
|
||||
- Added support for EXPECT-ALL directive in ipptool test files
|
||||
(STR #4469)
|
||||
- Added support for WITH-VALUE-FROM predicate in ipptool test files
|
||||
(STR #4470)
|
||||
- The scheduler no longer listens on the loopback interface unless the
|
||||
web interface or printer sharing are enabled
|
||||
(<rdar://problem/9136448>)
|
||||
- Added a PPD generator for IPP Everywhere printers (STR #4258)
|
||||
- Now install "default" versions of more configuration files
|
||||
(<rdar://problem/19024491>)
|
||||
- The cupstestppd program did not handle "maxsize(nnn)" entries in
|
||||
cupsFilter/cupsFilter2 values (<rdar://problem/18974858>)
|
||||
- The scheduler now checks the return value of rename() calls
|
||||
(STR #4589)
|
||||
- The scheduler now validates ErrorPolicy values in config files
|
||||
(STR #4591)
|
||||
- Long cookies caused the web interface to stop working (STR #4619)
|
||||
- Added SSLOptions values to allow Diffie-Hellman key exchange and
|
||||
disable TLS/1.0 support.
|
||||
- Updated the scheduler to support more IPP Everywhere attributes
|
||||
(STR #4630)
|
||||
- The scheduler now supports advanced ASL and journald logging when
|
||||
"syslog" output is configured (STR #4474)
|
||||
- The scheduler now supports logging to stderr when running in the
|
||||
foreground (STR #4505)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.2
|
||||
|
||||
- Security: cupsRasterReadPixels buffer overflow with invalid page
|
||||
header and compressed raster data (STR #4551)
|
||||
- Command-line programs were not localized on Mac OS X
|
||||
(<rdar://problem/14546232>)
|
||||
- The scheduler incorrectly cleared the MakeModel string in the
|
||||
printers.conf file after a restart (<rdar://problem/16827518>)
|
||||
- CUPS did not compile with older versions of GNU TLS (STR #4527)
|
||||
- CUPS did not compile without Avahi or mDNSResponder (STR #4523)
|
||||
- ippLength() did not return the correct length for IPP_TAG_CONST
|
||||
string values.
|
||||
- The scheduler incorrectly aborted jobs after a job was restarted
|
||||
(<rdar://problem/19129387>)
|
||||
- The cups-files.conf file contained the old ServerCertificate/Key
|
||||
directives instead of ServerKeychain.
|
||||
- Fixed builds when no SSL/TLS library is available, or when explicitly
|
||||
disabled (STR #4531)
|
||||
- Fixed an OpenBSD charset transcoding issue.
|
||||
- Fixed USB printing on OpenBSD (STR #4525)
|
||||
- The --without-xinetd configure option did not work (STR #4542)
|
||||
- Backends needing to load OS X kernel extensions did not work
|
||||
(<rdar://problem/19015679>)
|
||||
- Mapping of PPD keywords to IPP keywords did not work if the PPD
|
||||
keyword was already an IPP keyword (<rdar://problem/19121005>)
|
||||
- cupsGetPPD* sent bad requests (STR #4567)
|
||||
- ippserver used the wrong temporary directory on Windows (STR #4547)
|
||||
- ippserver did not handle Bonjour registrations properly (STR #4548)
|
||||
- The scheduler could crash during shutdown if Avahi was shutdown
|
||||
first (STR #4550)
|
||||
- Added a USB quirk rule for Intermec printers (STR #4553)
|
||||
- The scheduler did not always log which configuration file had the
|
||||
error (STR #4559)
|
||||
- The ippfind and ipptool programs now correctly match hostnames with
|
||||
trailing dots (STR #4563)
|
||||
- The ipptool timeout option did not work (STR #4515)
|
||||
- Fixed several issues with client.conf, CUPS_SERVER, and the "-h"
|
||||
option of most commands (STR #4528)
|
||||
- Another change for OpenBSD (STR #4526)
|
||||
- Added Japanese localization (STR #4524)
|
||||
- Documentation changes (STR #4569)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.1
|
||||
|
||||
- Security: SSLv3 is now disabled by default to protect against the
|
||||
POODLE attack (STR #4476)
|
||||
- Printer sharing did not work when systemd was being used (STR #4497)
|
||||
- cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if
|
||||
it was not readable by the user (STR #4500)
|
||||
- The web interface now protects against frame "click-jacking" attacks
|
||||
(STR #4492)
|
||||
- Fixed a crash in ippAttributeString (<rdar://problem/17903871>)
|
||||
- Fixed a crash in the scheduler on Linux/*BSD if colord was not running
|
||||
(STR #4496)
|
||||
- Fixed a random crash in the scheduler when not using systemd
|
||||
(STR #4484)
|
||||
- Added systemd support for cups-lpd (STR #4493)
|
||||
- The scheduler did not honor the FatalErrors directive for mis-
|
||||
configured Group and SystemGroup values (STR #4495)
|
||||
- The network backends no longer report waste-receptacle conditions when
|
||||
using SNMP (STR #4499)
|
||||
- The IPP backend did not work with some configurations of Windows
|
||||
(STR #4503)
|
||||
- RPMs did not build (STR #4490)
|
||||
- Added a USB quirk rule for the Brother HL-1250 (STR #4519)
|
||||
- Fixed compiles on unsupported platforms (STR #4510)
|
||||
- "cancel -a" did not cancel all jobs on all destinations (STR #4513)
|
||||
- The web interface did not work on OpenBSD (STR #4496)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0.0
|
||||
|
||||
- The scheduler did not preserve listener sockets from launchd or
|
||||
systemd after a restart (<rdar://problem/18112848>)
|
||||
- Added some USB quirk rules for the libusb-based USB backend
|
||||
(STR #4482)
|
||||
- Spanish localization update (STR #4487)
|
||||
- Updated documentation for 2.0.0 release.
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0rc1
|
||||
|
||||
- Documentation updates (STR #4464)
|
||||
- The scheduler now monitors the AC power status on OS X, allowing for
|
||||
"sleep printing" when sharing printers (<rdar://problem/17325852>)
|
||||
- The scheduler incorrectly called launch_activate_socket multiple times
|
||||
on OS X (<rdar://problem/17523218>)
|
||||
- The ippserver test program now passes the IPP Everywhere self-
|
||||
certification tests (STR #4101)
|
||||
- Relaxed the new OS X filter sandbox slightly (STR #4471,
|
||||
<rdar://problem/17483959>)
|
||||
- Dropped the old Epson Stylus Color/Photo sample drivers since they
|
||||
don't work with any current printers and there are free alternatives
|
||||
that produce much better output (<rdar://problem/18036889>)
|
||||
- Log and configuration files that are not world-readable are again
|
||||
accessible via the web interface (STR #4461)
|
||||
- PPD files are now created using the permissions specified by the
|
||||
ConfigFilePerm directive.
|
||||
- Fixed RPM build issues (STR #4459)
|
||||
- Fixed the spinner image and restart page when reconfiguring the
|
||||
scheduler through the web interface (STR #4475)
|
||||
|
||||
|
||||
CHANGES IN CUPS V2.0b1
|
||||
|
||||
- Added a "--list-filters" option to the cupsfilter command (STR #4325)
|
||||
- Added systemd support (STR #3917)
|
||||
- Added support for re-sending a job as a raster file if a higher-level
|
||||
format such as PDF fails (<rdar://problem/15583721>)
|
||||
- Added support for regular expression matching in the MIME type rules
|
||||
(<rdar://problem/11131245>)
|
||||
- Added support for TLS certificate validation and policy enforcement
|
||||
(STR #1616)
|
||||
- Added support for simultaneous XML and test output from ipptool.
|
||||
- Added support for PAUSE directive in ipptool test files.
|
||||
- Added support for auto-typing of TIFF files by ipptool (STR #4418)
|
||||
- The scheduler now returns completed jobs in the correct newest-to-
|
||||
oldest order (STR #4396)
|
||||
- The configure script now supports target-specific tools for pkg-config
|
||||
and others (STR #4423)
|
||||
- The ipptool program now supports EXPECT statements for collection
|
||||
member attributes (<rdar://problem/15355218>)
|
||||
- The ipptool program now supports collection attributes with multiple
|
||||
values (<rdar://problem/15355124>)
|
||||
- The sample drivers now include all of the installed localizations by
|
||||
default (<rdar://problem/14756625>)
|
||||
- Adopted Linux man page conventions and updated all man pages
|
||||
(STR #4372, STR #4329)
|
||||
- The scheduler now supports the "first-index" operation attribute for
|
||||
the Get-Jobs operation (STR #2913)
|
||||
- Changed the default AccessLogLevel and PageLogFormat to disable the
|
||||
access_log and page_log files by default (<rdar://problem/16495000>)
|
||||
- cupsRasterInterpretPPD now supports the Orientation header in order to
|
||||
support long-edge feed raster printers (<rdar://problem/15837926>)
|
||||
- The scheduler now allows run-as-root backends to have group read and
|
||||
execute permissions (STR #2935)
|
||||
- The ippFindAttribute and ippFindNextAttribute functions now support
|
||||
hierarchical searches (STR #4395)
|
||||
- Dropped OpenSSL support in favor of GNU TLS.
|
||||
- Dropped "dark wake" support on OS X, which was preventing portables
|
||||
from going to sleep when there was a stuck job. We now use a variation
|
||||
of the CUPS 1.4 sleep support to do a cleaner sleep
|
||||
(<rdar://problem/14323704>)
|
||||
- Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX)
|
||||
- Dropped lppasswd and support for Digest authentication in in the
|
||||
scheduler (STR #4321)
|
||||
- The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no
|
||||
longer supported.
|
||||
- The scheduler now caches more job history data and limits the number
|
||||
of completed jobs returned by Get-Jobs as needed in order to prevent a
|
||||
denial-of-service on busy servers (STR #2913)
|
||||
- The filter/backend sandbox on OS X now defaults to a more strict
|
||||
whitelist (<rdar://problem/15939788>)
|
||||
- Increased the default idle exit timeout to 60 seconds on OS X
|
||||
(<rdar://problem/16041820>)
|
||||
- Printer classes were not accessible on OS X
|
||||
(<rdar://problem/16385643>)
|
||||
- The scheduler now uses </DefaultPrinter> to close the default printer
|
||||
definition in printers.conf (STR #4153)
|
||||
- Canceling all jobs in the web interface now just cancels the jobs
|
||||
(STR #1914)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v2.0.3 - 2015-06-08
|
||||
INSTALL - CUPS v2.1b1 - 2015-06-08
|
||||
----------------------------------
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makedefs.in 11716 2014-03-21 14:50:24Z msweet $"
|
||||
# "$Id: Makedefs.in 12519 2015-02-17 13:10:19Z msweet $"
|
||||
#
|
||||
# Common makefile definitions for CUPS.
|
||||
#
|
||||
@@ -264,5 +264,5 @@ USBQUIRKS = @USBQUIRKS@
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makedefs.in 11716 2014-03-21 14:50:24Z msweet $"
|
||||
# End of "$Id: Makedefs.in 12519 2015-02-17 13:10:19Z msweet $"
|
||||
#
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $"
|
||||
# "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $"
|
||||
#
|
||||
# Top-level Makefile for CUPS.
|
||||
#
|
||||
@@ -348,5 +348,5 @@ dist: all
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $".
|
||||
# End of "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $".
|
||||
#
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
README - CUPS v2.0.3 - 2015-06-08
|
||||
README - CUPS v2.1b1 - 2015-06-08
|
||||
---------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt" instead...
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dnssd.c 12660 2015-05-22 19:09:57Z msweet $"
|
||||
* "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $"
|
||||
*
|
||||
* DNS-SD discovery backend for CUPS.
|
||||
*
|
||||
@@ -1330,5 +1330,5 @@ unquote(char *dst, /* I - Destination buffer */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dnssd.c 12660 2015-05-22 19:09:57Z msweet $".
|
||||
* End of "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $".
|
||||
*/
|
||||
|
||||
+43
-329
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: ipp.c 12624 2015-05-06 23:50:20Z msweet $"
|
||||
* "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $"
|
||||
*
|
||||
* IPP backend for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -122,6 +122,7 @@ static const char * const pattrs[] = /* Printer attributes we want */
|
||||
"printer-alert",
|
||||
"printer-alert-description",
|
||||
"printer-is-accepting-jobs",
|
||||
"printer-mandatory-job-attributes",
|
||||
"printer-state",
|
||||
"printer-state-message",
|
||||
"printer-state-reasons"
|
||||
@@ -145,6 +146,8 @@ static cups_option_t *attr_cache = NULL;
|
||||
static cups_array_t *state_reasons; /* Array of printe-state-reasons keywords */
|
||||
static char tmpfilename[1024] = "";
|
||||
/* Temporary spool file name */
|
||||
static char mandatory_attrs[1024] = "";
|
||||
/* cupsMandatory value */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1295,11 +1298,16 @@ main(int argc, /* I - Number of command-line args */
|
||||
* Load the PPD file and generate PWG attribute mapping information...
|
||||
*/
|
||||
|
||||
ppd_attr_t *mandatory; /* cupsMandatory value */
|
||||
|
||||
ppd = ppdOpenFile(getenv("PPD"));
|
||||
pc = _ppdCacheCreateWithPPD(ppd);
|
||||
|
||||
ppdMarkDefaults(ppd);
|
||||
cupsMarkOptions(ppd, num_options, options);
|
||||
|
||||
if ((mandatory = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL)
|
||||
strlcpy(mandatory_attrs, mandatory->value, sizeof(mandatory_attrs));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1459,6 +1467,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
|
||||
goto cleanup;
|
||||
else if (ipp_status == IPP_STATUS_ERROR_FORBIDDEN ||
|
||||
ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED ||
|
||||
ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
|
||||
{
|
||||
const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
|
||||
@@ -2017,12 +2026,8 @@ main(int argc, /* I - Number of command-line args */
|
||||
remote_job_states[job_state->values[0].integer -
|
||||
IPP_JOB_PENDING]);
|
||||
|
||||
if ((job_sheets = ippFindAttribute(response,
|
||||
"job-media-sheets-completed",
|
||||
IPP_TAG_INTEGER)) == NULL)
|
||||
job_sheets = ippFindAttribute(response,
|
||||
"job-impressions-completed",
|
||||
IPP_TAG_INTEGER);
|
||||
if ((job_sheets = ippFindAttribute(response, "job-impressions-completed", IPP_TAG_INTEGER)) == NULL)
|
||||
job_sheets = ippFindAttribute(response, "job-media-sheets-completed", IPP_TAG_INTEGER);
|
||||
|
||||
if (job_sheets)
|
||||
fprintf(stderr, "PAGE: total %d\n",
|
||||
@@ -2459,6 +2464,8 @@ monitor_printer(
|
||||
new_reasons |= _CUPS_JSR_JOB_PASSWORD_WAIT;
|
||||
else if (!strcmp(attr->values[i].string.text, "job-release-wait"))
|
||||
new_reasons |= _CUPS_JSR_JOB_RELEASE_WAIT;
|
||||
else if (!strncmp(attr->values[i].string.text, "job-canceled-", 13) || !strcmp(attr->values[i].string.text, "aborted-by-system"))
|
||||
job_canceled = 1;
|
||||
}
|
||||
|
||||
if (new_reasons != monitor->job_reasons)
|
||||
@@ -2559,19 +2566,10 @@ new_request(
|
||||
ipp_attribute_t *print_color_mode_sup)
|
||||
/* I - Printer supports print-color-mode */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ipp_t *request; /* Request data */
|
||||
const char *keyword; /* PWG keyword */
|
||||
_pwg_size_t *size; /* PWG media size */
|
||||
ipp_t *media_col, /* media-col value */
|
||||
*media_size; /* media-size value */
|
||||
const char *media_source, /* media-source value */
|
||||
*media_type, /* media-type value */
|
||||
*collate_str, /* multiple-document-handling value */
|
||||
*mandatory; /* Mandatory attributes */
|
||||
ipp_tag_t group; /* Current group */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
const char *color_attr_name; /* Supported color attribute */
|
||||
char buffer[1024]; /* Value buffer */
|
||||
|
||||
|
||||
@@ -2591,36 +2589,31 @@ new_request(
|
||||
* Add standard attributes...
|
||||
*/
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
fprintf(stderr, "DEBUG: printer-uri=\"%s\"\n", uri);
|
||||
|
||||
if (user && *user)
|
||||
{
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requesting-user-name", NULL, user);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user);
|
||||
fprintf(stderr, "DEBUG: requesting-user-name=\"%s\"\n", user);
|
||||
}
|
||||
|
||||
if (title && *title)
|
||||
{
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
|
||||
title);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title);
|
||||
fprintf(stderr, "DEBUG: job-name=\"%s\"\n", title);
|
||||
}
|
||||
|
||||
if (format && op != IPP_CREATE_JOB)
|
||||
{
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE,
|
||||
"document-format", NULL, format);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
|
||||
fprintf(stderr, "DEBUG: document-format=\"%s\"\n", format);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
if (compression && op != IPP_OP_CREATE_JOB && op != IPP_OP_VALIDATE_JOB)
|
||||
{
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"compression", NULL, compression);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression);
|
||||
fprintf(stderr, "DEBUG: compression=\"%s\"\n", compression);
|
||||
}
|
||||
#endif /* HAVE_LIBZ */
|
||||
@@ -2633,313 +2626,13 @@ new_request(
|
||||
{
|
||||
if (pc)
|
||||
{
|
||||
int num_finishings = 0, /* Number of finishing values */
|
||||
finishings[10]; /* Finishing enum values */
|
||||
ppd_choice_t *choice; /* Marked choice */
|
||||
|
||||
/*
|
||||
* Send standard IPP attributes...
|
||||
*/
|
||||
|
||||
fputs("DEBUG: Adding standard IPP operation/job attributes.\n", stderr);
|
||||
|
||||
if (pc->password &&
|
||||
(keyword = cupsGetOption("job-password", num_options,
|
||||
options)) != NULL)
|
||||
{
|
||||
ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", keyword, (int)strlen(keyword));
|
||||
|
||||
if ((keyword = cupsGetOption("job-password-encryption", num_options,
|
||||
options)) == NULL)
|
||||
keyword = "none";
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"job-password-encryption", NULL, keyword);
|
||||
}
|
||||
|
||||
if (pc->account_id)
|
||||
{
|
||||
if ((keyword = cupsGetOption("job-account-id", num_options,
|
||||
options)) == NULL)
|
||||
keyword = cupsGetOption("job-billing", num_options, options);
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-account-id",
|
||||
NULL, keyword);
|
||||
}
|
||||
|
||||
if (pc->accounting_user_id)
|
||||
{
|
||||
if ((keyword = cupsGetOption("job-accounting-user-id", num_options,
|
||||
options)) == NULL)
|
||||
keyword = user;
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME,
|
||||
"job-accounting-user-id", NULL, keyword);
|
||||
}
|
||||
|
||||
for (mandatory = (char *)cupsArrayFirst(pc->mandatory);
|
||||
mandatory;
|
||||
mandatory = (char *)cupsArrayNext(pc->mandatory))
|
||||
{
|
||||
if (strcmp(mandatory, "copies") &&
|
||||
strcmp(mandatory, "destination-uris") &&
|
||||
strcmp(mandatory, "finishings") &&
|
||||
strcmp(mandatory, "job-account-id") &&
|
||||
strcmp(mandatory, "job-accounting-user-id") &&
|
||||
strcmp(mandatory, "job-password") &&
|
||||
strcmp(mandatory, "job-password-encryption") &&
|
||||
strcmp(mandatory, "media") &&
|
||||
strncmp(mandatory, "media-col", 9) &&
|
||||
strcmp(mandatory, "multiple-document-handling") &&
|
||||
strcmp(mandatory, "output-bin") &&
|
||||
strcmp(mandatory, "print-color-mode") &&
|
||||
strcmp(mandatory, "print-quality") &&
|
||||
strcmp(mandatory, "sides") &&
|
||||
(keyword = cupsGetOption(mandatory, num_options, options)) != NULL)
|
||||
{
|
||||
_ipp_option_t *opt = _ippFindOption(mandatory);
|
||||
/* Option type */
|
||||
ipp_tag_t value_tag = opt ? opt->value_tag : IPP_TAG_NAME;
|
||||
/* Value type */
|
||||
|
||||
switch (value_tag)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
ippAddInteger(request, IPP_TAG_JOB, value_tag, mandatory,
|
||||
atoi(keyword));
|
||||
break;
|
||||
case IPP_TAG_BOOLEAN :
|
||||
ippAddBoolean(request, IPP_TAG_JOB, mandatory,
|
||||
!_cups_strcasecmp(keyword, "true"));
|
||||
break;
|
||||
case IPP_TAG_RANGE :
|
||||
{
|
||||
int lower, upper; /* Range */
|
||||
|
||||
if (sscanf(keyword, "%d-%d", &lower, &upper) != 2)
|
||||
lower = upper = atoi(keyword);
|
||||
|
||||
ippAddRange(request, IPP_TAG_JOB, mandatory, lower, upper);
|
||||
}
|
||||
break;
|
||||
case IPP_TAG_STRING :
|
||||
ippAddOctetString(request, IPP_TAG_JOB, mandatory, keyword, (int)strlen(keyword));
|
||||
break;
|
||||
default :
|
||||
if (!strcmp(mandatory, "print-color-mode") && !strcmp(keyword, "monochrome"))
|
||||
{
|
||||
if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
|
||||
keyword = "auto-monochrome";
|
||||
else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
|
||||
keyword = "process-monochrome";
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_JOB, value_tag, mandatory,
|
||||
NULL, keyword);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("PageSize", num_options, options)) == NULL)
|
||||
keyword = cupsGetOption("media", num_options, options);
|
||||
|
||||
if ((size = _ppdCacheGetSize(pc, keyword)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Add a media-col value...
|
||||
*/
|
||||
|
||||
media_size = ippNew();
|
||||
ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"x-dimension", size->width);
|
||||
ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"y-dimension", size->length);
|
||||
|
||||
media_col = ippNew();
|
||||
ippAddCollection(media_col, IPP_TAG_ZERO, "media-size", media_size);
|
||||
|
||||
media_source = _ppdCacheGetSource(pc, cupsGetOption("InputSlot",
|
||||
num_options,
|
||||
options));
|
||||
media_type = _ppdCacheGetType(pc, cupsGetOption("MediaType",
|
||||
num_options,
|
||||
options));
|
||||
|
||||
for (i = 0; i < media_col_sup->num_values; i ++)
|
||||
{
|
||||
if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-left-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"media-left-margin", size->left);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-bottom-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"media-bottom-margin", size->bottom);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-right-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"media-right-margin", size->right);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-top-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"media-top-margin", size->top);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-source") && media_source)
|
||||
ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD,
|
||||
"media-source", NULL, media_source);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text,
|
||||
"media-type") && media_type)
|
||||
ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD,
|
||||
"media-type", NULL, media_type);
|
||||
}
|
||||
|
||||
ippAddCollection(request, IPP_TAG_JOB, "media-col", media_col);
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("output-bin", num_options,
|
||||
options)) == NULL)
|
||||
{
|
||||
if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL)
|
||||
keyword = _ppdCacheGetBin(pc, choice->choice);
|
||||
}
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-bin",
|
||||
NULL, keyword);
|
||||
|
||||
color_attr_name = print_color_mode_sup ? "print-color-mode" : "output-mode";
|
||||
|
||||
if ((keyword = cupsGetOption("print-color-mode", num_options,
|
||||
options)) == NULL)
|
||||
{
|
||||
if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, "Gray"))
|
||||
keyword = "monochrome";
|
||||
else
|
||||
keyword = "color";
|
||||
}
|
||||
}
|
||||
|
||||
if (keyword && !strcmp(keyword, "monochrome"))
|
||||
{
|
||||
if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
|
||||
keyword = "auto-monochrome";
|
||||
else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
|
||||
keyword = "process-monochrome";
|
||||
}
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, color_attr_name,
|
||||
NULL, keyword);
|
||||
|
||||
if ((keyword = cupsGetOption("print-quality", num_options,
|
||||
options)) != NULL)
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
|
||||
atoi(keyword));
|
||||
else if ((choice = ppdFindMarkedChoice(ppd, "cupsPrintQuality")) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, "draft"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
|
||||
IPP_QUALITY_DRAFT);
|
||||
else if (!_cups_strcasecmp(choice->choice, "normal"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
|
||||
IPP_QUALITY_NORMAL);
|
||||
else if (!_cups_strcasecmp(choice->choice, "high"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
|
||||
IPP_QUALITY_HIGH);
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("sides", num_options, options)) != NULL)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
|
||||
NULL, keyword);
|
||||
else if (pc->sides_option &&
|
||||
(choice = ppdFindMarkedChoice(ppd, pc->sides_option)) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, pc->sides_1sided))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
|
||||
NULL, "one-sided");
|
||||
else if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_long))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
|
||||
NULL, "two-sided-long-edge");
|
||||
if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_short))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
|
||||
NULL, "two-sided-short-edge");
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("multiple-document-handling",
|
||||
num_options, options)) != NULL)
|
||||
{
|
||||
if (strstr(keyword, "uncollated"))
|
||||
keyword = "false";
|
||||
else
|
||||
keyword = "true";
|
||||
}
|
||||
else if ((keyword = cupsGetOption("collate", num_options,
|
||||
options)) == NULL)
|
||||
keyword = "true";
|
||||
|
||||
if (format)
|
||||
{
|
||||
if (!_cups_strcasecmp(format, "image/gif") ||
|
||||
!_cups_strcasecmp(format, "image/jp2") ||
|
||||
!_cups_strcasecmp(format, "image/jpeg") ||
|
||||
!_cups_strcasecmp(format, "image/png") ||
|
||||
!_cups_strcasecmp(format, "image/tiff") ||
|
||||
!_cups_strncasecmp(format, "image/x-", 8))
|
||||
{
|
||||
/*
|
||||
* Collation makes no sense for single page image formats...
|
||||
*/
|
||||
|
||||
keyword = "false";
|
||||
}
|
||||
else if (!_cups_strncasecmp(format, "image/", 6) ||
|
||||
!_cups_strcasecmp(format, "application/vnd.cups-raster"))
|
||||
{
|
||||
/*
|
||||
* Multi-page image formats will have copies applied by the upstream
|
||||
* filters...
|
||||
*/
|
||||
|
||||
copies = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (doc_handling_sup)
|
||||
{
|
||||
if (!_cups_strcasecmp(keyword, "true"))
|
||||
collate_str = "separate-documents-collated-copies";
|
||||
else
|
||||
collate_str = "separate-documents-uncollated-copies";
|
||||
|
||||
for (i = 0; i < doc_handling_sup->num_values; i ++)
|
||||
if (!strcmp(doc_handling_sup->values[i].string.text, collate_str))
|
||||
{
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD,
|
||||
"multiple-document-handling", NULL, collate_str);
|
||||
break;
|
||||
}
|
||||
|
||||
if (i >= doc_handling_sup->num_values)
|
||||
copies = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map finishing options...
|
||||
*/
|
||||
|
||||
num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options,
|
||||
(int)(sizeof(finishings) /
|
||||
sizeof(finishings[0])),
|
||||
finishings);
|
||||
if (num_finishings > 0)
|
||||
ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings",
|
||||
num_finishings, finishings);
|
||||
copies = _cupsConvertOptions(request, ppd, pc, media_col_sup, doc_handling_sup, print_color_mode_sup, user, format, copies, num_options, options);
|
||||
|
||||
/*
|
||||
* Map FaxOut options...
|
||||
@@ -3221,6 +2914,7 @@ report_printer_state(ipp_t *ipp) /* I - IPP response */
|
||||
{
|
||||
ipp_attribute_t *pa, /* printer-alert */
|
||||
*pam, /* printer-alert-message */
|
||||
*pmja, /* printer-mandatory-job-attributes */
|
||||
*psm, /* printer-state-message */
|
||||
*reasons, /* printer-state-reasons */
|
||||
*marker; /* marker-* attributes */
|
||||
@@ -3241,6 +2935,26 @@ report_printer_state(ipp_t *ipp) /* I - IPP response */
|
||||
IPP_TAG_TEXT)) != NULL)
|
||||
report_attr(pam);
|
||||
|
||||
if ((pmja = ippFindAttribute(ipp, "printer-mandatory-job-attributes", IPP_TAG_KEYWORD)) != NULL)
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count = ippGetCount(pmja); /* Number of values */
|
||||
|
||||
for (i = 0, valptr = value; i < count; i ++, valptr += strlen(valptr))
|
||||
{
|
||||
if (i)
|
||||
snprintf(valptr, sizeof(value) - (size_t)(valptr - value), " %s", ippGetString(pmja, i, NULL));
|
||||
else
|
||||
strlcpy(value, ippGetString(pmja, i, NULL), sizeof(value));
|
||||
}
|
||||
|
||||
if (strcmp(value, mandatory_attrs))
|
||||
{
|
||||
strlcpy(mandatory_attrs, value, sizeof(mandatory_attrs));
|
||||
fprintf(stderr, "PPD: cupsMandatory=\"%s\"\n", value);
|
||||
}
|
||||
}
|
||||
|
||||
if ((psm = ippFindAttribute(ipp, "printer-state-message",
|
||||
IPP_TAG_TEXT)) != NULL)
|
||||
{
|
||||
@@ -3769,5 +3483,5 @@ update_reasons(ipp_attribute_t *attr, /* I - printer-state-reasons or NULL */
|
||||
}
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp.c 12624 2015-05-06 23:50:20Z msweet $".
|
||||
* End of "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: snmp-supplies.c 12228 2014-10-21 13:42:05Z msweet $"
|
||||
* "$Id: snmp-supplies.c 12227 2014-10-21 13:42:04Z msweet $"
|
||||
*
|
||||
* SNMP supplies functions for CUPS.
|
||||
*
|
||||
@@ -1098,5 +1098,5 @@ utf16_to_utf8(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: snmp-supplies.c 12228 2014-10-21 13:42:05Z msweet $".
|
||||
* End of "$Id: snmp-supplies.c 12227 2014-10-21 13:42:04Z msweet $".
|
||||
*/
|
||||
|
||||
+84
-67
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usb-darwin.c 12529 2015-02-23 18:57:57Z msweet $"
|
||||
* "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $"
|
||||
*
|
||||
* Copyright 2005-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
@@ -302,8 +302,8 @@ static void parse_pserror (char *sockBuffer, int len);
|
||||
|
||||
static IOUSBInterfaceInterface220 **usb_interface220_for_service(io_service_t usbClass);
|
||||
static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDevice);
|
||||
static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting);
|
||||
static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language);
|
||||
static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting);
|
||||
static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language);
|
||||
static CFStringRef deviceIDCopyManufacturer(CFStringRef deviceID);
|
||||
static CFStringRef deviceIDCopyModel(CFStringRef deviceID);
|
||||
static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID);
|
||||
@@ -1099,17 +1099,17 @@ 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);
|
||||
|
||||
|
||||
if (kr == kIOReturnSuccess && masterPort != 0x0)
|
||||
{
|
||||
iterator_reference_t reference = { callBack, userdata, true };
|
||||
|
||||
|
||||
IONotificationPortRef addNotification = IONotificationPortCreate(masterPort);
|
||||
io_iterator_t addIterator = IO_OBJECT_NULL;
|
||||
|
||||
|
||||
kr = IOServiceAddMatchingNotification(addNotification, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName),
|
||||
&device_added, &reference, &addIterator);
|
||||
if (kr == kIOReturnSuccess && addIterator != IO_OBJECT_NULL)
|
||||
@@ -1124,7 +1124,7 @@ static void iterate_printers(iterator_callback_t callBack, void *userdata)
|
||||
}
|
||||
mach_port_deallocate(mach_task_self(), masterPort);
|
||||
}
|
||||
|
||||
|
||||
Iterating = 0;
|
||||
}
|
||||
|
||||
@@ -1138,7 +1138,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
{
|
||||
iterator_reference_t *reference = userdata;
|
||||
io_service_t device;
|
||||
|
||||
|
||||
while (reference->keepRunning && (device = IOIteratorNext(iterator)) != 0x0)
|
||||
{
|
||||
UInt32 locationID = 0;
|
||||
@@ -1175,7 +1175,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
|
||||
if (IsPrintingInterface(intfClass, intfSubclass, intfProtocol))
|
||||
{
|
||||
CFStringRef deviceIDString = printer_interface_deviceid(intf220, 0);
|
||||
CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, 0);
|
||||
if (deviceIDString != NULL)
|
||||
{
|
||||
reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, 0);
|
||||
@@ -1183,7 +1183,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
}
|
||||
}
|
||||
|
||||
IOUSBInterfaceDescriptor *intfDesc = nil;
|
||||
IOUSBInterfaceDescriptor *intfDesc = NULL;
|
||||
while (reference->keepRunning && (intfDesc = (IOUSBInterfaceDescriptor *)(*intf220)->FindNextAssociatedDescriptor(intf220, intfDesc, kUSBInterfaceDesc)))
|
||||
{
|
||||
intfClass = intfDesc->bInterfaceClass;
|
||||
@@ -1192,7 +1192,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
|
||||
if ((IsPrintingInterface(intfClass, intfSubclass, intfProtocol)))
|
||||
{
|
||||
CFStringRef deviceIDString = printer_interface_deviceid(intf220, intfDesc->bAlternateSetting);
|
||||
CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, intfDesc->bAlternateSetting);
|
||||
if (deviceIDString != NULL)
|
||||
{
|
||||
reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, intfDesc->bAlternateSetting);
|
||||
@@ -1202,6 +1202,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
}
|
||||
(*intf220)->Release(intf220);
|
||||
}
|
||||
IOObjectRelease(intf);
|
||||
}
|
||||
|
||||
device_added_done:
|
||||
@@ -1210,12 +1211,12 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
|
||||
IOObjectRelease(device);
|
||||
}
|
||||
|
||||
|
||||
/* One last call to the call back now that we are not longer have printers left to iterate...
|
||||
*/
|
||||
if (reference->keepRunning && reference->callback)
|
||||
reference->keepRunning = reference->callback(reference->userdata, IO_OBJECT_NULL, NULL, 0, 0, 0);
|
||||
|
||||
|
||||
if (!reference->keepRunning)
|
||||
CFRunLoopStop(CFRunLoopGetCurrent());
|
||||
}
|
||||
@@ -1226,42 +1227,47 @@ static void device_added(void *userdata, io_iterator_t iterator)
|
||||
|
||||
static Boolean list_device_cb(void *refcon, io_service_t obj, CFStringRef deviceIDString, UInt32 deviceLocation, UInt8 interfaceNum, UInt8 alternateSetting)
|
||||
{
|
||||
(void)refcon;
|
||||
(void)interfaceNum;
|
||||
(void)alternateSetting;
|
||||
|
||||
if (obj != IO_OBJECT_NULL)
|
||||
{
|
||||
CFStringRef make = NULL;
|
||||
CFStringRef model = NULL;
|
||||
CFStringRef serial = NULL;
|
||||
|
||||
CFStringRef make = deviceIDCopyManufacturer(deviceIDString);
|
||||
CFStringRef model = deviceIDCopyModel(deviceIDString);
|
||||
CFStringRef serial = deviceIDCopySerialNumber(deviceIDString);
|
||||
|
||||
char uristr[1024], makestr[1024], modelstr[1024], serialstr[1024];
|
||||
char optionsstr[1024], idstr[1024], make_modelstr[1024];
|
||||
|
||||
|
||||
CFStringGetCString(deviceIDString, idstr, sizeof(idstr), kCFStringEncodingUTF8);
|
||||
backendGetMakeModel(idstr, make_modelstr, sizeof(make_modelstr));
|
||||
|
||||
|
||||
modelstr[0] = '/';
|
||||
|
||||
|
||||
if (make == NULL || !CFStringGetCString(make, makestr, sizeof(makestr), kCFStringEncodingUTF8))
|
||||
strlcpy(makestr, "Unknown", sizeof(makestr));
|
||||
|
||||
|
||||
if (model == NULL || !CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1, kCFStringEncodingUTF8))
|
||||
strlcpy(modelstr + 1, "Printer", sizeof(modelstr) - 1);
|
||||
|
||||
|
||||
optionsstr[0] = '\0';
|
||||
if (serial != NULL && CFStringGetCString(serial, serialstr, sizeof(serialstr), kCFStringEncodingUTF8))
|
||||
snprintf(optionsstr, sizeof(optionsstr), "?serial=%s", serialstr);
|
||||
else if (deviceLocation != 0)
|
||||
snprintf(optionsstr, sizeof(optionsstr), "?location=%x", (unsigned)deviceLocation);
|
||||
|
||||
|
||||
httpAssembleURI(HTTP_URI_CODING_ALL, uristr, sizeof(uristr), "usb", NULL, makestr, 0, modelstr);
|
||||
strlcat(uristr, optionsstr, sizeof(uristr));
|
||||
|
||||
|
||||
cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (make != NULL) CFRelease(make);
|
||||
if (model != NULL) CFRelease(model);
|
||||
if (serial != NULL) CFRelease(serial);
|
||||
}
|
||||
|
||||
return obj != IO_OBJECT_NULL;
|
||||
}
|
||||
|
||||
@@ -1271,13 +1277,13 @@ static Boolean list_device_cb(void *refcon, io_service_t obj, CFStringRef device
|
||||
static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef deviceIDString, UInt32 deviceLocation, UInt8 interfaceNum, UInt8 alternateSetting)
|
||||
{
|
||||
Boolean keepLooking = true;
|
||||
|
||||
|
||||
if (obj != IO_OBJECT_NULL)
|
||||
{
|
||||
CFStringRef make = deviceIDCopyManufacturer(deviceIDString);
|
||||
CFStringRef model = deviceIDCopyModel(deviceIDString);
|
||||
CFStringRef serial = deviceIDCopySerialNumber(deviceIDString);
|
||||
|
||||
|
||||
if (make && CFStringCompare(make, g.make, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
|
||||
{
|
||||
if (model && CFStringCompare(model, g.model, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
|
||||
@@ -1288,6 +1294,7 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
|
||||
{
|
||||
IOObjectRetain(obj);
|
||||
g.printer_obj = obj;
|
||||
g.location = deviceLocation;
|
||||
g.alternateSetting = alternateSetting;
|
||||
keepLooking = false;
|
||||
}
|
||||
@@ -1296,20 +1303,20 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
|
||||
{
|
||||
if (g.printer_obj != 0)
|
||||
IOObjectRelease(g.printer_obj);
|
||||
|
||||
|
||||
g.alternateSetting = alternateSetting;
|
||||
g.printer_obj = obj;
|
||||
IOObjectRetain(obj);
|
||||
|
||||
|
||||
if (g.location == 0 || g.location == deviceLocation)
|
||||
keepLooking = false;
|
||||
}
|
||||
|
||||
|
||||
if ( !keepLooking )
|
||||
g.interfaceNum = interfaceNum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (make) CFRelease(make);
|
||||
if (model) CFRelease(model);
|
||||
if (serial) CFRelease(serial);
|
||||
@@ -1328,7 +1335,7 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!keepLooking && g.status_timer != NULL)
|
||||
{
|
||||
fputs("STATE: -offline-report\n", stderr);
|
||||
@@ -1337,14 +1344,14 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
|
||||
CFRelease(g.status_timer);
|
||||
g.status_timer = NULL;
|
||||
}
|
||||
|
||||
|
||||
return keepLooking;
|
||||
}
|
||||
|
||||
static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID)
|
||||
{
|
||||
CFStringRef serialKeys[] = { CFSTR("SN:"), CFSTR("SERN:"), NULL };
|
||||
|
||||
|
||||
return copy_value_for_key(deviceID, serialKeys);
|
||||
}
|
||||
|
||||
@@ -1554,7 +1561,7 @@ static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDe
|
||||
}
|
||||
|
||||
|
||||
static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting)
|
||||
static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting)
|
||||
{
|
||||
// I have tried to make this function as neat as I can, but the possibility of needing to resend
|
||||
// a request to get the entire string makes it hideous...
|
||||
@@ -1568,8 +1575,8 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
#define kDefaultNoDataTimeout 5000L
|
||||
#define pack_device_id_wIndex(intf, alt) ((UInt16)((((UInt16)(intf)) << 8) | ((UInt8)(alt))))
|
||||
|
||||
if (printer == nil)
|
||||
return nil;
|
||||
if (printer == NULL)
|
||||
return NULL;
|
||||
|
||||
|
||||
IOReturn err = kIOReturnError;
|
||||
@@ -1591,15 +1598,15 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
request.pData = NULL;
|
||||
}
|
||||
|
||||
IOReturn err = kIOReturnError;
|
||||
IOReturn berr = kIOReturnError;
|
||||
char *buffer = malloc(size);
|
||||
if (buffer == NULL)
|
||||
return kIOReturnNoMemory;
|
||||
|
||||
request.wLength = HostToUSBWord(size);
|
||||
request.pData = buffer;
|
||||
err = (*printer)->ControlRequestTO(printer, (UInt8)0, &request);
|
||||
return err;
|
||||
berr = (*printer)->ControlRequestTO(printer, (UInt8)0, &request);
|
||||
return berr;
|
||||
};
|
||||
|
||||
/* This request takes the 0 based configuration index. IOKit returns a 1 based configuration index */
|
||||
@@ -1639,7 +1646,7 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
}
|
||||
|
||||
CFStringRef manufacturer = deviceIDCopyManufacturer(ret);
|
||||
CFStringRef model = deviceIDCopyManufacturer(ret);
|
||||
CFStringRef model = deviceIDCopyModel(ret);
|
||||
CFStringRef serial = deviceIDCopySerialNumber(ret);
|
||||
|
||||
if (manufacturer == NULL || serial == NULL || model == NULL)
|
||||
@@ -1664,22 +1671,22 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
CFMutableStringRef extras = CFStringCreateMutable(NULL, 0);
|
||||
if (manufacturer == NULL)
|
||||
{
|
||||
manufacturer = printer_interface_indexed_description(printer, desc.iManufacturer, kUSBLanguageEnglish);
|
||||
if (CFStringGetLength(manufacturer) > 0)
|
||||
manufacturer = copy_printer_interface_indexed_description(printer, desc.iManufacturer, kUSBLanguageEnglish);
|
||||
if (manufacturer && CFStringGetLength(manufacturer) > 0)
|
||||
CFStringAppendFormat(extras, NULL, CFSTR("MFG:%@;"), manufacturer);
|
||||
}
|
||||
|
||||
if (model == NULL)
|
||||
{
|
||||
model = printer_interface_indexed_description(printer, desc.iProduct, kUSBLanguageEnglish);
|
||||
if (CFStringGetLength(model) > 0)
|
||||
CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), manufacturer);
|
||||
model = copy_printer_interface_indexed_description(printer, desc.iProduct, kUSBLanguageEnglish);
|
||||
if (model && CFStringGetLength(model) > 0)
|
||||
CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), model);
|
||||
}
|
||||
|
||||
if (serial == NULL && desc.iSerialNumber != 0)
|
||||
{
|
||||
serial = printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
|
||||
if (CFStringGetLength(serial) > 0)
|
||||
serial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
|
||||
if (serial && CFStringGetLength(serial) > 0)
|
||||
CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), serial);
|
||||
}
|
||||
|
||||
@@ -1697,14 +1704,8 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
}
|
||||
}
|
||||
|
||||
if (manufacturer != NULL)
|
||||
CFRelease(manufacturer);
|
||||
if (model != NULL)
|
||||
CFRelease(model);
|
||||
if (serial != NULL)
|
||||
CFRelease(serial);
|
||||
|
||||
|
||||
if (ret != NULL)
|
||||
{
|
||||
/* Remove special characters from the serial number */
|
||||
CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
|
||||
if (range.length == 1)
|
||||
@@ -1717,11 +1718,27 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
|
||||
ret = deviceIDString;
|
||||
CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return (CFStringGetLength(ret) > 0 ? ret : nil);
|
||||
if (manufacturer != NULL)
|
||||
CFRelease(manufacturer);
|
||||
|
||||
if (model != NULL)
|
||||
CFRelease(model);
|
||||
|
||||
if (serial != NULL)
|
||||
CFRelease(serial);
|
||||
|
||||
if (ret != NULL && CFStringGetLength(ret) == 0)
|
||||
{
|
||||
CFRelease(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language)
|
||||
static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language)
|
||||
{
|
||||
IOReturn err;
|
||||
UInt8 description[256]; // Max possible descriptor length
|
||||
@@ -1759,7 +1776,7 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
|
||||
|
||||
err = (*printer)->ControlRequestTO(printer, 0, &request);
|
||||
if (err != kIOReturnSuccess && err != kIOReturnUnderrun)
|
||||
return nil;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
unsigned int length = description[0];
|
||||
@@ -1775,17 +1792,17 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
|
||||
request.wIndex = language;
|
||||
|
||||
bzero(description, length);
|
||||
request.wLength = length;
|
||||
request.wLength = (UInt16)length;
|
||||
request.pData = &description;
|
||||
request.completionTimeout = 0;
|
||||
request.noDataTimeout = 60L;
|
||||
|
||||
err = (*printer)->ControlRequestTO(printer, 0, &request);
|
||||
if (err != kIOReturnSuccess)
|
||||
return nil;
|
||||
return NULL;
|
||||
|
||||
if (description[1] != kUSBStringDesc)
|
||||
return nil;
|
||||
return NULL;
|
||||
|
||||
if ((description[0] & 1) != 0)
|
||||
description[0] &= 0xfe;
|
||||
@@ -1799,7 +1816,7 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
|
||||
if (length > maxLength - 1)
|
||||
length = maxLength -1;
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
for (unsigned i = 0; i < length; i++)
|
||||
buffer[i] = (char) description[2*i+2];
|
||||
|
||||
buffer[length] = 0;
|
||||
@@ -2446,7 +2463,7 @@ static void get_device_id(cups_sc_status_t *status,
|
||||
IOUSBInterfaceInterface220 **intf220 = usb_interface220_for_service(g.printer_obj);
|
||||
if (intf220)
|
||||
{
|
||||
deviceIDString = printer_interface_deviceid(intf220, g.alternateSetting);
|
||||
deviceIDString = copy_printer_interface_deviceid(intf220, g.alternateSetting);
|
||||
(*intf220)->Release(intf220);
|
||||
}
|
||||
}
|
||||
@@ -2458,7 +2475,7 @@ static void get_device_id(cups_sc_status_t *status,
|
||||
*datalen = (int)strlen(data);
|
||||
else
|
||||
*datalen = 0;
|
||||
|
||||
|
||||
CFRelease(deviceIDString);
|
||||
}
|
||||
else
|
||||
@@ -2497,5 +2514,5 @@ log_usb_class_driver(int is_64bit) /* I - Is the USB class driver 64-bit? */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb-darwin.c 12529 2015-02-23 18:57:57Z msweet $".
|
||||
* End of "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usb-libusb.c 12349 2014-12-09 22:10:52Z msweet $"
|
||||
* "$Id: usb-libusb.c 12348 2014-12-09 22:10:45Z msweet $"
|
||||
*
|
||||
* LIBUSB interface code for CUPS.
|
||||
*
|
||||
@@ -2004,6 +2004,6 @@ soft_reset_printer(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb-libusb.c 12349 2014-12-09 22:10:52Z msweet $".
|
||||
* End of "$Id: usb-libusb.c 12348 2014-12-09 22:10:45Z msweet $".
|
||||
*/
|
||||
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $"
|
||||
# "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $"
|
||||
#
|
||||
# CGI makefile for CUPS.
|
||||
#
|
||||
@@ -353,5 +353,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $".
|
||||
# End of "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $".
|
||||
#
|
||||
|
||||
+90
-11
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $"
|
||||
* "$Id: admin.c 12516 2015-02-12 20:18:11Z msweet $"
|
||||
*
|
||||
* Administration CGI for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -18,6 +18,8 @@
|
||||
*/
|
||||
|
||||
#include "cgi-private.h"
|
||||
#include <cups/http-private.h>
|
||||
#include <cups/ppd-private.h>
|
||||
#include <cups/adminutil.h>
|
||||
#include <cups/ppd.h>
|
||||
#include <errno.h>
|
||||
@@ -38,12 +40,7 @@ static int current_device = 0; /* Current device shown */
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void choose_device_cb(const char *device_class,
|
||||
const char *device_id, const char *device_info,
|
||||
const char *device_make_and_model,
|
||||
const char *device_uri,
|
||||
const char *device_location,
|
||||
const char *title);
|
||||
static void choose_device_cb(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, const char *title);
|
||||
static void do_add_rss_subscription(http_t *http);
|
||||
static void do_am_class(http_t *http, int modify);
|
||||
static void do_am_printer(http_t *http, int modify);
|
||||
@@ -61,6 +58,7 @@ static void do_set_sharing(http_t *http);
|
||||
static char *get_option_value(ppd_file_t *ppd, const char *name,
|
||||
char *buffer, size_t bufsize);
|
||||
static double get_points(double number, const char *uval);
|
||||
static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
|
||||
|
||||
|
||||
/*
|
||||
@@ -832,7 +830,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
const cgi_file_t *file; /* Uploaded file, if any */
|
||||
const char *var; /* CGI variable */
|
||||
char uri[HTTP_MAX_URI], /* Device or printer URI */
|
||||
*uriptr; /* Pointer into URI */
|
||||
*uriptr, /* Pointer into URI */
|
||||
evefile[1024] = ""; /* IPP Everywhere PPD file */
|
||||
int maxrate; /* Maximum baud rate */
|
||||
char baudrate[255]; /* Baud rate string */
|
||||
const char *name, /* Pointer to class name */
|
||||
@@ -1331,7 +1330,9 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
if (!file)
|
||||
{
|
||||
var = cgiGetVariable("PPD_NAME");
|
||||
if (strcmp(var, "__no_change__"))
|
||||
if (!strcmp(var, "everywhere"))
|
||||
get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile));
|
||||
else if (strcmp(var, "__no_change__"))
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
|
||||
NULL, var);
|
||||
}
|
||||
@@ -1384,6 +1385,11 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
|
||||
if (file)
|
||||
ippDelete(cupsDoFileRequest(http, request, "/admin/", file->tempfile));
|
||||
else if (evefile[0])
|
||||
{
|
||||
ippDelete(cupsDoFileRequest(http, request, "/admin/", evefile));
|
||||
unlink(evefile);
|
||||
}
|
||||
else
|
||||
ippDelete(cupsDoRequest(http, request, "/admin/"));
|
||||
|
||||
@@ -4198,5 +4204,78 @@ get_points(double number, /* I - Original number */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $".
|
||||
* 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
|
||||
*/
|
||||
|
||||
static char * /* O - Filename or NULL */
|
||||
get_printer_ppd(const char *uri, /* I - Printer URI */
|
||||
char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize) /* I - Size of filename buffer */
|
||||
{
|
||||
http_t *http; /* Connection to printer */
|
||||
ipp_t *request, /* Get-Printer-Attributes request */
|
||||
*response; /* Get-Printer-Attributes response */
|
||||
char resolved[1024], /* Resolved URI */
|
||||
scheme[32], /* URI scheme */
|
||||
userpass[256], /* Username:password */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
|
||||
|
||||
/*
|
||||
* Connect to the printer...
|
||||
*/
|
||||
|
||||
if (strstr(uri, "._tcp"))
|
||||
{
|
||||
/*
|
||||
* Resolve URI...
|
||||
*/
|
||||
|
||||
if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to resolve \"%s\".\n", uri);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
uri = resolved;
|
||||
}
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Bad printer URI \"%s\".\n", uri);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
|
||||
if (!http)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Send a Get-Printer-Attributes request...
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (!_ppdCreateFromIPP(buffer, bufsize, response))
|
||||
fprintf(stderr, "ERROR: Unable to create PPD file: %s\n", strerror(errno));
|
||||
|
||||
ippDelete(response);
|
||||
httpClose(http);
|
||||
|
||||
if (buffer[0])
|
||||
return (buffer);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: admin.c 12516 2015-02-12 20:18:11Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: help-index.c 12344 2014-12-09 21:36:11Z msweet $"
|
||||
* "$Id: help-index.c 12644 2015-05-19 21:22:35Z msweet $"
|
||||
*
|
||||
* Online help index routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -1220,7 +1220,7 @@ help_new_node(const char *filename, /* I - Filename */
|
||||
|
||||
n->filename = strdup(filename);
|
||||
n->anchor = anchor ? strdup(anchor) : NULL;
|
||||
n->section = (section && *section) ? strdup(section) : NULL;
|
||||
n->section = *section ? strdup(section) : NULL;
|
||||
n->text = strdup(text);
|
||||
n->mtime = mtime;
|
||||
n->offset = offset;
|
||||
@@ -1306,5 +1306,5 @@ help_sort_words(help_word_t *w1, /* I - Second word */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: help-index.c 12344 2014-12-09 21:36:11Z msweet $".
|
||||
* End of "$Id: help-index.c 12644 2015-05-19 21:22:35Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ipp-var.c 12701 2015-06-08 18:33:44Z msweet $"
|
||||
* "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $"
|
||||
*
|
||||
* CGI <-> IPP variable routines for CUPS.
|
||||
*
|
||||
@@ -1547,5 +1547,5 @@ cgiText(const char *message) /* I - Message */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp-var.c 12701 2015-06-08 18:33:44Z msweet $".
|
||||
* End of "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: template.c 12701 2015-06-08 18:33:44Z msweet $"
|
||||
* "$Id: template.c 12700 2015-06-08 18:32:35Z msweet $"
|
||||
*
|
||||
* CGI template function.
|
||||
*
|
||||
@@ -686,5 +686,5 @@ cgi_puturi(const char *s, /* I - String to output */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: template.c 12701 2015-06-08 18:33:44Z msweet $".
|
||||
* End of "$Id: template.c 12700 2015-06-08 18:32:35Z msweet $".
|
||||
*/
|
||||
|
||||
+27
-8
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: var.c 12034 2014-07-16 19:37:34Z msweet $"
|
||||
* "$Id: var.c 12621 2015-05-06 21:32:18Z msweet $"
|
||||
*
|
||||
* CGI form variable and array functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2005 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -626,6 +626,8 @@ cgi_initialize_cookies(void)
|
||||
|
||||
while (*cookie)
|
||||
{
|
||||
int skip = 0; /* Skip this cookie? */
|
||||
|
||||
/*
|
||||
* Skip leading whitespace...
|
||||
*/
|
||||
@@ -641,9 +643,14 @@ cgi_initialize_cookies(void)
|
||||
|
||||
for (ptr = name; *cookie && *cookie != '=';)
|
||||
if (ptr < (name + sizeof(name) - 1))
|
||||
{
|
||||
*ptr++ = *cookie++;
|
||||
}
|
||||
else
|
||||
break;
|
||||
{
|
||||
skip = 1;
|
||||
cookie ++;
|
||||
}
|
||||
|
||||
if (*cookie != '=')
|
||||
break;
|
||||
@@ -659,26 +666,38 @@ cgi_initialize_cookies(void)
|
||||
{
|
||||
for (cookie ++, ptr = value; *cookie && *cookie != '\"';)
|
||||
if (ptr < (value + sizeof(value) - 1))
|
||||
{
|
||||
*ptr++ = *cookie++;
|
||||
}
|
||||
else
|
||||
break;
|
||||
{
|
||||
skip = 1;
|
||||
cookie ++;
|
||||
}
|
||||
|
||||
if (*cookie == '\"')
|
||||
cookie ++;
|
||||
else
|
||||
skip = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (ptr = value; *cookie && *cookie != ';';)
|
||||
if (ptr < (value + sizeof(value) - 1))
|
||||
{
|
||||
*ptr++ = *cookie++;
|
||||
}
|
||||
else
|
||||
break;
|
||||
{
|
||||
skip = 1;
|
||||
cookie ++;
|
||||
}
|
||||
}
|
||||
|
||||
if (*cookie == ';')
|
||||
cookie ++;
|
||||
else if (*cookie)
|
||||
break;
|
||||
skip = 1;
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
@@ -687,7 +706,7 @@ cgi_initialize_cookies(void)
|
||||
* "$"...
|
||||
*/
|
||||
|
||||
if (name[0] != '$')
|
||||
if (name[0] != '$' && !skip)
|
||||
num_cookies = cupsAddOption(name, value, num_cookies, &cookies);
|
||||
}
|
||||
}
|
||||
@@ -1278,5 +1297,5 @@ cgi_unlink_file(void)
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: var.c 12034 2014-07-16 19:37:34Z msweet $".
|
||||
* End of "$Id: var.c 12621 2015-05-06 21:32:18Z msweet $".
|
||||
*/
|
||||
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 12533 2015-02-27 12:30:26Z msweet $"
|
||||
#
|
||||
# Configuration file makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2012 by Apple Inc.
|
||||
# Copyright 2007-2015 by Apple Inc.
|
||||
# Copyright 1993-2006 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -76,8 +76,8 @@ install-data:
|
||||
else \
|
||||
$(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT) ; \
|
||||
fi ; \
|
||||
$(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.default; \
|
||||
done
|
||||
$(INSTALL_CONFIG) -g $(CUPS_GROUP) cupsd.conf $(SERVERROOT)/cupsd.conf.default
|
||||
$(INSTALL_DIR) -m 755 $(DATADIR)/mime
|
||||
for file in $(REPLACE); do \
|
||||
if test -r $(DATADIR)/mime/$$file ; then \
|
||||
@@ -139,5 +139,5 @@ uninstall:
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 12533 2015-02-27 12:30:26Z msweet $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 12336 2014-12-09 21:19:52Z msweet $"
|
||||
dnl "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $"
|
||||
dnl
|
||||
dnl Common configuration stuff for CUPS.
|
||||
dnl
|
||||
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Version number information...
|
||||
CUPS_VERSION=2.0.3
|
||||
CUPS_VERSION=2.1b1
|
||||
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'`"
|
||||
@@ -137,6 +137,7 @@ AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_H))
|
||||
AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
|
||||
AC_CHECK_HEADER(sys/param.h,AC_DEFINE(HAVE_SYS_PARAM_H))
|
||||
AC_CHECK_HEADER(sys/ucred.h,AC_DEFINE(HAVE_SYS_UCRED_H))
|
||||
AC_CHECK_HEADER(asl.h,AC_DEFINE(HAVE_ASL_H))
|
||||
|
||||
dnl Checks for iconv.h and iconv_open
|
||||
AC_CHECK_HEADER(iconv.h,
|
||||
@@ -465,5 +466,5 @@ esac
|
||||
AC_SUBST(BUILDDIRS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-common.m4 12336 2014-12-09 21:19:52Z msweet $".
|
||||
dnl End of "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-defaults.m4 11789 2014-04-02 16:52:53Z msweet $"
|
||||
dnl "$Id: cups-defaults.m4 12350 2014-12-09 22:18:21Z msweet $"
|
||||
dnl
|
||||
dnl Default cupsd configuration settings for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 2007-2014 by Apple Inc.
|
||||
dnl Copyright 2006-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -409,5 +409,5 @@ AC_SUBST(CUPS_WEBIF)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_WEBIF, $CUPS_DEFAULT_WEBIF)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-defaults.m4 11789 2014-04-02 16:52:53Z msweet $".
|
||||
dnl End of "$Id: cups-defaults.m4 12350 2014-12-09 22:18:21Z msweet $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-network.m4 12325 2014-12-09 20:28:51Z msweet $"
|
||||
dnl "$Id: cups-network.m4 12324 2014-12-09 20:28:39Z msweet $"
|
||||
dnl
|
||||
dnl Networking stuff for CUPS.
|
||||
dnl
|
||||
@@ -72,5 +72,5 @@ AC_SUBST(CUPS_DEFAULT_DOMAINSOCKET)
|
||||
AC_SUBST(CUPS_LISTEN_DOMAINSOCKET)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-network.m4 12325 2014-12-09 20:28:51Z msweet $".
|
||||
dnl End of "$Id: cups-network.m4 12324 2014-12-09 20:28:39Z msweet $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-ssl.m4 12290 2014-12-05 17:25:55Z msweet $"
|
||||
dnl "$Id: cups-ssl.m4 12645 2015-05-20 01:20:52Z msweet $"
|
||||
dnl
|
||||
dnl TLS stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2014 by Apple Inc.
|
||||
dnl Copyright 2007-2015 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
|
||||
@@ -53,6 +53,10 @@ if test x$enable_ssl != xno; then
|
||||
|
||||
AC_DEFINE(HAVE_CSSMERRORSTRING)
|
||||
AC_DEFINE(HAVE_SECKEYCHAINOPEN)])
|
||||
|
||||
if test $uversion -ge 150; then
|
||||
AC_DEFINE(HAVE_SSLSETENABLEDCIPHERS)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -104,5 +108,5 @@ EXPORT_SSLLIBS="$SSLLIBS"
|
||||
AC_SUBST(EXPORT_SSLLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-ssl.m4 12290 2014-12-05 17:25:55Z msweet $".
|
||||
dnl End of "$Id: cups-ssl.m4 12645 2015-05-20 01:20:52Z msweet $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: cups-startup.m4 12351 2014-12-09 22:18:45Z msweet $"
|
||||
dnl "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $"
|
||||
dnl
|
||||
dnl Launch-on-demand/startup stuff for CUPS.
|
||||
dnl
|
||||
@@ -68,6 +68,15 @@ if test x$enable_systemd != xno; then
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AC_MSG_CHECKING(for libsystemd-journal)
|
||||
if $PKGCONFIG --exists libsystemd-journal; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
|
||||
ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
|
||||
AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H))
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -172,5 +181,5 @@ fi
|
||||
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-startup.m4 12351 2014-12-09 22:18:45Z msweet $".
|
||||
dnl End of "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $".
|
||||
dnl
|
||||
|
||||
+24
-3
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: config.h.in 12329 2014-12-09 20:50:51Z msweet $"
|
||||
* "$Id: config.h.in 12687 2015-06-03 17:19:04Z msweet $"
|
||||
*
|
||||
* Configuration file for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -242,6 +242,20 @@
|
||||
#undef HAVE_VSYSLOG
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the ASL functions?
|
||||
*/
|
||||
|
||||
#undef HAVE_ASL_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the systemd journal functions?
|
||||
*/
|
||||
|
||||
#undef HAVE_SYSTEMD_SD_JOURNAL_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the (v)snprintf() functions?
|
||||
*/
|
||||
@@ -348,6 +362,13 @@
|
||||
#undef HAVE_SECKEYCHAINOPEN
|
||||
|
||||
|
||||
/*
|
||||
* Do we have (a working) SSLSetEnabledCiphers function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SSLSETENABLEDCIPHERS
|
||||
|
||||
|
||||
/*
|
||||
* Do we have libpaper?
|
||||
*/
|
||||
@@ -719,5 +740,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
|
||||
#endif /* !_CUPS_CONFIG_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: config.h.in 12329 2014-12-09 20:50:51Z msweet $".
|
||||
* End of "$Id: config.h.in 12687 2015-06-03 17:19:04Z msweet $".
|
||||
*/
|
||||
|
||||
externo
+32
-3
@@ -2519,7 +2519,7 @@ esac
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
|
||||
CUPS_VERSION=2.0.3
|
||||
CUPS_VERSION=2.1b1
|
||||
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'`"
|
||||
@@ -4910,6 +4910,13 @@ if test "x$ac_cv_header_sys_ucred_h" = xyes; then :
|
||||
fi
|
||||
|
||||
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "asl.h" "ac_cv_header_asl_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_asl_h" = xyes; then :
|
||||
$as_echo "#define HAVE_ASL_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_iconv_h" = xyes; then :
|
||||
@@ -8150,6 +8157,11 @@ fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if test $uversion -ge 150; then
|
||||
$as_echo "#define HAVE_SSLSETENABLEDCIPHERS 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -9138,6 +9150,24 @@ $as_echo "yes" >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd-journal" >&5
|
||||
$as_echo_n "checking for libsystemd-journal... " >&6; }
|
||||
if $PKGCONFIG --exists libsystemd-journal; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
|
||||
ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-journal.h" "ac_cv_header_systemd_sd_journal_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then :
|
||||
$as_echo "#define HAVE_SYSTEMD_SD_JOURNAL_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -10167,7 +10197,7 @@ fi
|
||||
|
||||
|
||||
|
||||
ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config data/testprint desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES"
|
||||
ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
@@ -10879,7 +10909,6 @@ do
|
||||
"conf/pam.std") CONFIG_FILES="$CONFIG_FILES conf/pam.std" ;;
|
||||
"conf/snmp.conf") CONFIG_FILES="$CONFIG_FILES conf/snmp.conf" ;;
|
||||
"cups-config") CONFIG_FILES="$CONFIG_FILES cups-config" ;;
|
||||
"data/testprint") CONFIG_FILES="$CONFIG_FILES data/testprint" ;;
|
||||
"desktop/cups.desktop") CONFIG_FILES="$CONFIG_FILES desktop/cups.desktop" ;;
|
||||
"doc/index.html") CONFIG_FILES="$CONFIG_FILES doc/index.html" ;;
|
||||
"man/client.conf.man") CONFIG_FILES="$CONFIG_FILES man/client.conf.man" ;;
|
||||
|
||||
+2
-3
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id: configure.ac 12222 2014-10-21 11:55:01Z msweet $"
|
||||
dnl "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $"
|
||||
dnl
|
||||
dnl Configuration script for CUPS.
|
||||
dnl
|
||||
@@ -66,7 +66,6 @@ AC_OUTPUT(Makedefs
|
||||
conf/pam.std
|
||||
conf/snmp.conf
|
||||
cups-config
|
||||
data/testprint
|
||||
desktop/cups.desktop
|
||||
doc/index.html
|
||||
man/client.conf.man
|
||||
@@ -92,5 +91,5 @@ AC_OUTPUT(Makedefs
|
||||
chmod +x cups-config
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: configure.ac 12222 2014-10-21 11:55:01Z msweet $".
|
||||
dnl End of "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $".
|
||||
dnl
|
||||
|
||||
+16
-4
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 12032 2014-07-15 20:37:32Z msweet $"
|
||||
# "$Id: Makefile 12635 2015-05-19 02:12:22Z msweet $"
|
||||
#
|
||||
# API library Makefile for CUPS.
|
||||
#
|
||||
@@ -94,7 +94,8 @@ TESTOBJS = \
|
||||
testlang.o \
|
||||
testppd.o \
|
||||
testpwg.o \
|
||||
testsnmp.o
|
||||
testsnmp.o \
|
||||
tlscheck.o
|
||||
OBJS = \
|
||||
$(LIBOBJS) \
|
||||
$(TESTOBJS)
|
||||
@@ -161,7 +162,8 @@ UNITTARGETS = \
|
||||
testoptions \
|
||||
testppd \
|
||||
testpwg \
|
||||
testsnmp
|
||||
testsnmp \
|
||||
tlscheck
|
||||
|
||||
TARGETS = \
|
||||
$(LIBTARGETS)
|
||||
@@ -539,6 +541,16 @@ testsnmp: testsnmp.o $(LIBCUPSSTATIC)
|
||||
$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
|
||||
|
||||
|
||||
#
|
||||
# tlscheck (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
tlscheck: tlscheck.o $(LIBCUPSSTATIC)
|
||||
echo Linking $@...
|
||||
$(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \
|
||||
$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
|
||||
|
||||
|
||||
#
|
||||
# Automatic API help files...
|
||||
#
|
||||
@@ -665,5 +677,5 @@ tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 12032 2014-07-15 20:37:32Z msweet $".
|
||||
# End of "$Id: Makefile 12635 2015-05-19 02:12:22Z msweet $".
|
||||
#
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: auth.c 12230 2014-10-21 13:55:24Z msweet $"
|
||||
* "$Id: auth.c 12619 2015-05-06 21:00:19Z msweet $"
|
||||
*
|
||||
* Authentication functions for CUPS.
|
||||
*
|
||||
@@ -311,7 +311,7 @@ _cupsSetNegotiateAuthString(
|
||||
* to use it...
|
||||
*/
|
||||
|
||||
if (gss_init_sec_context == NULL)
|
||||
if (&gss_init_sec_context == NULL)
|
||||
{
|
||||
DEBUG_puts("1_cupsSetNegotiateAuthString: Weak-linked GSSAPI/Kerberos "
|
||||
"framework is not present");
|
||||
@@ -876,5 +876,5 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: auth.c 12230 2014-10-21 13:55:24Z msweet $".
|
||||
* End of "$Id: auth.c 12619 2015-05-06 21:00:19Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: cups-private.h 11851 2014-05-07 23:55:35Z msweet $"
|
||||
* "$Id: cups-private.h 12441 2015-01-29 14:42:32Z msweet $"
|
||||
*
|
||||
* Private definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -281,5 +281,5 @@ extern char *_cupsUserDefault(char *name, size_t namesize);
|
||||
#endif /* !_CUPS_CUPS_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: cups-private.h 11851 2014-05-07 23:55:35Z msweet $".
|
||||
* End of "$Id: cups-private.h 12441 2015-01-29 14:42:32Z msweet $".
|
||||
*/
|
||||
|
||||
+18
-11
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: cups.h 12704 2015-06-08 19:08:01Z msweet $"
|
||||
* "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $"
|
||||
*
|
||||
* API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -35,6 +35,15 @@ typedef off_t ssize_t; /* @private@ */
|
||||
# include "language.h"
|
||||
# include "pwg.h"
|
||||
|
||||
/*
|
||||
* Define _PPD_DEPRECATED to silence the warnings about PPD functions being
|
||||
* deprecated...
|
||||
*/
|
||||
|
||||
# ifndef _PPD_DEPRECATED
|
||||
# define _PPD_DEPRECATED _CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo and friends instead.")
|
||||
# endif /* !_PPD_DEPRECATED */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
@@ -49,10 +58,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 2.0003
|
||||
# define CUPS_VERSION 2.0100
|
||||
# define CUPS_VERSION_MAJOR 2
|
||||
# define CUPS_VERSION_MINOR 0
|
||||
# define CUPS_VERSION_PATCH 3
|
||||
# define CUPS_VERSION_MINOR 1
|
||||
# define CUPS_VERSION_PATCH 0
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
@@ -354,8 +363,7 @@ extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsGetDes
|
||||
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 const char *cupsGetPPD(const char *name) _PPD_DEPRECATED;
|
||||
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
|
||||
extern ipp_status_t cupsLastError(void);
|
||||
extern int cupsPrintFile(const char *name, const char *filename,
|
||||
@@ -413,8 +421,7 @@ extern int cupsGetDests2(http_t *http, cups_dest_t **dests)
|
||||
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.");
|
||||
extern const char *cupsGetPPD2(http_t *http, const char *name) _PPD_DEPRECATED;
|
||||
extern int cupsPrintFile2(http_t *http, const char *name,
|
||||
const char *filename,
|
||||
const char *title, int num_options,
|
||||
@@ -479,7 +486,7 @@ extern const char *cupsGetPassword2(const char *prompt, http_t *http,
|
||||
const char *resource) _CUPS_API_1_4;
|
||||
extern http_status_t cupsGetPPD3(http_t *http, const char *name,
|
||||
time_t *modtime, char *buffer,
|
||||
size_t bufsize) _CUPS_API_1_4;
|
||||
size_t bufsize) _PPD_DEPRECATED;
|
||||
extern ipp_t *cupsGetResponse(http_t *http,
|
||||
const char *resource) _CUPS_API_1_4;
|
||||
extern ssize_t cupsReadResponseData(http_t *http, char *buffer,
|
||||
@@ -628,5 +635,5 @@ extern int cupsSetServerCredentials(const char *path, const char *common_name,
|
||||
#endif /* !_CUPS_CUPS_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: cups.h 12704 2015-06-08 19:08:01Z msweet $".
|
||||
* End of "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: debug.c 12328 2014-12-09 20:38:47Z msweet $"
|
||||
* "$Id: debug.c 12327 2014-12-09 20:38:39Z msweet $"
|
||||
*
|
||||
* Debugging functions for CUPS.
|
||||
*
|
||||
@@ -643,5 +643,5 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: debug.c 12328 2014-12-09 20:38:47Z msweet $".
|
||||
* End of "$Id: debug.c 12327 2014-12-09 20:38:39Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dest.c 12665 2015-05-25 15:08:55Z msweet $"
|
||||
* "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $"
|
||||
*
|
||||
* User-defined destination (and option) support for CUPS.
|
||||
*
|
||||
@@ -3943,5 +3943,5 @@ cups_make_string(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dest.c 12665 2015-05-25 15:08:55Z msweet $".
|
||||
* End of "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $".
|
||||
*/
|
||||
|
||||
+7
-3
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: encode.c 11733 2014-03-25 18:01:41Z msweet $"
|
||||
* "$Id: encode.c 12668 2015-05-27 19:30:32Z msweet $"
|
||||
*
|
||||
* Option encoding routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -117,6 +117,9 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "copies", IPP_TAG_INTEGER, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT },
|
||||
{ 0, "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "date-time-at-completed",IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "date-time-at-creation", IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "date-time-at-processing",IPP_TAG_DATE, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "device-uri", IPP_TAG_URI, IPP_TAG_PRINTER },
|
||||
{ 1, "document-copies", IPP_TAG_RANGE, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT,
|
||||
@@ -274,6 +277,7 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER },
|
||||
{ 1, "printer-commands", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
|
||||
{ 0, "printer-error-policy", IPP_TAG_NAME, IPP_TAG_PRINTER },
|
||||
{ 0, "printer-geo-location", IPP_TAG_URI, IPP_TAG_PRINTER },
|
||||
{ 0, "printer-info", IPP_TAG_TEXT, IPP_TAG_PRINTER },
|
||||
{ 0, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
|
||||
{ 0, "printer-is-shared", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
|
||||
@@ -849,5 +853,5 @@ compare_ipp_options(_ipp_option_t *a, /* I - First option */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: encode.c 11733 2014-03-25 18:01:41Z msweet $".
|
||||
* End of "$Id: encode.c 12668 2015-05-27 19:30:32Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: file.c 12642 2015-05-19 15:04:47Z msweet $"
|
||||
* "$Id: file.c 12641 2015-05-19 15:04:39Z msweet $"
|
||||
*
|
||||
* File functions for CUPS.
|
||||
*
|
||||
@@ -2752,5 +2752,5 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: file.c 12642 2015-05-19 15:04:47Z msweet $".
|
||||
* End of "$Id: file.c 12641 2015-05-19 15:04:39Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: globals.c 12481 2015-02-03 12:45:14Z msweet $"
|
||||
* "$Id: globals.c 12480 2015-02-03 12:36:34Z msweet $"
|
||||
*
|
||||
* Global variable access routines for CUPS.
|
||||
*
|
||||
@@ -394,5 +394,5 @@ cups_globals_init(void)
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: globals.c 12481 2015-02-03 12:45:14Z msweet $".
|
||||
* End of "$Id: globals.c 12480 2015-02-03 12:36:34Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: http-private.h 12419 2015-01-22 15:51:20Z msweet $"
|
||||
* "$Id: http-private.h 12645 2015-05-20 01:20:52Z msweet $"
|
||||
*
|
||||
* Private HTTP definitions for CUPS.
|
||||
*
|
||||
@@ -126,6 +126,7 @@ extern CFAbsoluteTime SecCertificateNotValidAfter(SecCertificateRef certificate)
|
||||
|
||||
# ifndef WIN32
|
||||
# include <net/if.h>
|
||||
# include <resolv.h>
|
||||
# ifdef HAVE_GETIFADDRS
|
||||
# include <ifaddrs.h>
|
||||
# else
|
||||
@@ -161,8 +162,11 @@ extern "C" {
|
||||
#define _HTTP_RESOLVE_FQDN 2 /* Resolve to a FQDN */
|
||||
#define _HTTP_RESOLVE_FAXOUT 4 /* Resolve FaxOut service? */
|
||||
|
||||
#define _HTTP_TLS_NONE 0 /* No TLS options */
|
||||
#define _HTTP_TLS_ALLOW_RC4 1 /* Allow RC4 cipher suites */
|
||||
#define _HTTP_TLS_ALLOW_SSL3 2 /* Allow SSL 3.0 */
|
||||
#define _HTTP_TLS_ALLOW_DH 4 /* Allow DH/DHE key negotiation */
|
||||
#define _HTTP_TLS_DENY_TLS10 16 /* Deny TLS 1.0 */
|
||||
|
||||
|
||||
/*
|
||||
@@ -438,5 +442,5 @@ extern int _httpWait(http_t *http, int msec, int usessl);
|
||||
#endif /* !_CUPS_HTTP_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: http-private.h 12419 2015-01-22 15:51:20Z msweet $".
|
||||
* End of "$Id: http-private.h 12645 2015-05-20 01:20:52Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: http.c 12334 2014-12-09 21:01:55Z msweet $"
|
||||
* "$Id: http.c 12333 2014-12-09 21:01:46Z msweet $"
|
||||
*
|
||||
* HTTP routines for CUPS.
|
||||
*
|
||||
@@ -4850,5 +4850,5 @@ http_write_chunk(http_t *http, /* I - HTTP connection */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: http.c 12334 2014-12-09 21:01:55Z msweet $".
|
||||
* End of "$Id: http.c 12333 2014-12-09 21:01:46Z msweet $".
|
||||
*/
|
||||
|
||||
+18
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ipp-support.c 12194 2014-10-02 18:44:36Z msweet $"
|
||||
* "$Id: ipp-support.c 12666 2015-05-25 19:38:09Z msweet $"
|
||||
*
|
||||
* Internet Printing Protocol support functions for CUPS.
|
||||
*
|
||||
@@ -195,7 +195,7 @@ static const char * const ipp_std_ops[] =
|
||||
"Suspend-Current-Job",
|
||||
"Resume-Job",
|
||||
|
||||
/* 0x0030 - 0x003e */
|
||||
/* 0x0030 - 0x003f */
|
||||
"Promote-Job",
|
||||
"Schedule-Job-After",
|
||||
"0x0032",
|
||||
@@ -210,7 +210,21 @@ static const char * const ipp_std_ops[] =
|
||||
"Close-Job",
|
||||
"Identify-Printer",
|
||||
"Validate-Document",
|
||||
"Send-Hardcopy-Document"
|
||||
"Send-Hardcopy-Document",
|
||||
"Acknowledge-Document",
|
||||
|
||||
/* 0x0040 - 0x004a */
|
||||
"Acknowledge-Identify-Printer",
|
||||
"Acknowledge-Job",
|
||||
"Fetch-Document",
|
||||
"Fetch-Job",
|
||||
"Get-Output-Device-Attributes",
|
||||
"Update-Active-Jobs",
|
||||
"Deregister-Output-Device",
|
||||
"Update-Document-Status",
|
||||
"Update-Job-Status",
|
||||
"Update-Output-Device-Attributes",
|
||||
"Get-Next-Document-Data"
|
||||
},
|
||||
* const ipp_cups_ops[] =
|
||||
{
|
||||
@@ -2271,5 +2285,5 @@ ipp_col_string(ipp_t *col, /* I - Collection attribute */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp-support.c 12194 2014-10-02 18:44:36Z msweet $".
|
||||
* End of "$Id: ipp-support.c 12666 2015-05-25 19:38:09Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ipp.c 12469 2015-02-01 04:51:08Z msweet $"
|
||||
* "$Id: ipp.c 12468 2015-02-01 04:50:43Z msweet $"
|
||||
*
|
||||
* Internet Printing Protocol functions for CUPS.
|
||||
*
|
||||
@@ -7062,5 +7062,5 @@ ipp_write_file(int *fd, /* I - File descriptor */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp.c 12469 2015-02-01 04:51:08Z msweet $".
|
||||
* End of "$Id: ipp.c 12468 2015-02-01 04:50:43Z msweet $".
|
||||
*/
|
||||
|
||||
+40
-27
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ipp.h 11806 2014-04-09 16:12:27Z msweet $"
|
||||
* "$Id: ipp.h 12666 2015-05-25 19:38:09Z msweet $"
|
||||
*
|
||||
* Internet Printing Protocol definitions for CUPS.
|
||||
*
|
||||
@@ -246,11 +246,11 @@ typedef enum ipp_op_e /**** IPP operations ****/
|
||||
IPP_OP_CUPS_INVALID = -1, /* Invalid operation name for @link ippOpValue@ */
|
||||
IPP_OP_CUPS_NONE = 0, /* No operation @private@ */
|
||||
IPP_OP_PRINT_JOB = 0x0002, /* Print a single file */
|
||||
IPP_OP_PRINT_URI, /* Print a single URL @private@ */
|
||||
IPP_OP_PRINT_URI, /* Print a single URL */
|
||||
IPP_OP_VALIDATE_JOB, /* Validate job options */
|
||||
IPP_OP_CREATE_JOB, /* Create an empty print job */
|
||||
IPP_OP_SEND_DOCUMENT, /* Add a file to a job */
|
||||
IPP_OP_SEND_URI, /* Add a URL to a job @private@ */
|
||||
IPP_OP_SEND_URI, /* Add a URL to a job */
|
||||
IPP_OP_CANCEL_JOB, /* Cancel a job */
|
||||
IPP_OP_GET_JOB_ATTRIBUTES, /* Get job attributes */
|
||||
IPP_OP_GET_JOBS, /* Get a list of jobs */
|
||||
@@ -261,7 +261,7 @@ typedef enum ipp_op_e /**** IPP operations ****/
|
||||
IPP_OP_PAUSE_PRINTER = 0x0010, /* Stop a printer */
|
||||
IPP_OP_RESUME_PRINTER, /* Start a printer */
|
||||
IPP_OP_PURGE_JOBS, /* Cancel all jobs */
|
||||
IPP_OP_SET_PRINTER_ATTRIBUTES, /* Set printer attributes @private@ */
|
||||
IPP_OP_SET_PRINTER_ATTRIBUTES, /* Set printer attributes */
|
||||
IPP_OP_SET_JOB_ATTRIBUTES, /* Set job attributes */
|
||||
IPP_OP_GET_PRINTER_SUPPORTED_VALUES, /* Get supported attribute values */
|
||||
IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, /* Create one or more printer subscriptions @since CUPS 1.2/OS X 10.5@ */
|
||||
@@ -279,32 +279,45 @@ typedef enum ipp_op_e /**** IPP operations ****/
|
||||
IPP_OP_ENABLE_PRINTER, /* Start a printer */
|
||||
IPP_OP_DISABLE_PRINTER, /* Stop a printer */
|
||||
IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
|
||||
/* Stop printer after the current job @private@ */
|
||||
IPP_OP_HOLD_NEW_JOBS, /* Hold new jobs @private@ */
|
||||
IPP_OP_RELEASE_HELD_NEW_JOBS, /* Release new jobs @private@ */
|
||||
IPP_OP_DEACTIVATE_PRINTER, /* Stop a printer @private@ */
|
||||
IPP_OP_ACTIVATE_PRINTER, /* Start a printer @private@ */
|
||||
IPP_OP_RESTART_PRINTER, /* Restart a printer @private@ */
|
||||
IPP_OP_SHUTDOWN_PRINTER, /* Turn a printer off @private@ */
|
||||
IPP_OP_STARTUP_PRINTER, /* Turn a printer on @private@ */
|
||||
IPP_OP_REPROCESS_JOB, /* Reprint a job @private@ */
|
||||
IPP_OP_CANCEL_CURRENT_JOB, /* Cancel the current job @private@ */
|
||||
IPP_OP_SUSPEND_CURRENT_JOB, /* Suspend the current job @private@ */
|
||||
IPP_OP_RESUME_JOB, /* Resume the current job @private@ */
|
||||
IPP_OP_PROMOTE_JOB, /* Promote a job to print sooner @private@ */
|
||||
IPP_OP_SCHEDULE_JOB_AFTER, /* Schedule a job to print after another @private@ */
|
||||
IPP_OP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document @private@ */
|
||||
IPP_OP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes @private@ */
|
||||
IPP_OP_GET_DOCUMENTS, /* Get-Documents @private@ */
|
||||
IPP_OP_DELETE_DOCUMENT, /* Delete-Document @private@ */
|
||||
IPP_OP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes @private@ */
|
||||
/* Stop printer after the current job */
|
||||
IPP_OP_HOLD_NEW_JOBS, /* Hold new jobs */
|
||||
IPP_OP_RELEASE_HELD_NEW_JOBS, /* Release new jobs */
|
||||
IPP_OP_DEACTIVATE_PRINTER, /* Stop a printer */
|
||||
IPP_OP_ACTIVATE_PRINTER, /* Start a printer */
|
||||
IPP_OP_RESTART_PRINTER, /* Restart a printer */
|
||||
IPP_OP_SHUTDOWN_PRINTER, /* Turn a printer off */
|
||||
IPP_OP_STARTUP_PRINTER, /* Turn a printer on */
|
||||
IPP_OP_REPROCESS_JOB, /* Reprint a job */
|
||||
IPP_OP_CANCEL_CURRENT_JOB, /* Cancel the current job */
|
||||
IPP_OP_SUSPEND_CURRENT_JOB, /* Suspend the current job */
|
||||
IPP_OP_RESUME_JOB, /* Resume the current job */
|
||||
IPP_OP_PROMOTE_JOB, /* Promote a job to print sooner */
|
||||
IPP_OP_SCHEDULE_JOB_AFTER, /* Schedule a job to print after another */
|
||||
IPP_OP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document */
|
||||
IPP_OP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes */
|
||||
IPP_OP_GET_DOCUMENTS, /* Get-Documents */
|
||||
IPP_OP_DELETE_DOCUMENT, /* Delete-Document */
|
||||
IPP_OP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes */
|
||||
IPP_OP_CANCEL_JOBS, /* Cancel-Jobs */
|
||||
IPP_OP_CANCEL_MY_JOBS, /* Cancel-My-Jobs */
|
||||
IPP_OP_RESUBMIT_JOB, /* Resubmit-Job */
|
||||
IPP_OP_CLOSE_JOB, /* Close-Job */
|
||||
IPP_OP_IDENTIFY_PRINTER, /* Identify-Printer @private@ */
|
||||
IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document @private@ */
|
||||
IPP_OP_SEND_HARDCOPY_DOCUMENT, /* Send-Hardcopy-Document @private@ */
|
||||
IPP_OP_IDENTIFY_PRINTER, /* Identify-Printer */
|
||||
IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document */
|
||||
IPP_OP_SEND_HARDCOPY_DOCUMENT, /* Send-Hardcopy-Document */
|
||||
IPP_OP_ACKNOWLEDGE_DOCUMENT, /* Acknowledge-Document */
|
||||
IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER, /* Acknowledge-Identify-Printer */
|
||||
IPP_OP_ACKNOWLEDGE_JOB, /* Acknowledge-Job */
|
||||
IPP_OP_FETCH_DOCUMENT, /* Fetch-Document */
|
||||
IPP_OP_FETCH_JOB, /* Fetch-Job */
|
||||
IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES, /* Get-Output-Device-Attributes */
|
||||
IPP_OP_UPDATE_ACTIVE_JOBS, /* Update-Active-Jobs */
|
||||
IPP_OP_DEREGISTER_OUTPUT_DEVICE, /* Deregister-Output-Device */
|
||||
IPP_OP_UPDATE_DOCUMENT_STATUS, /* Update-Document-Status */
|
||||
IPP_OP_UPDATE_JOB_STATUS, /* Update-Job-Status */
|
||||
IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES,
|
||||
/* Update-Output-Device-Attributes */
|
||||
IPP_OP_GET_NEXT_DOCUMENT_DATA, /* Get-Next-Document-Data */
|
||||
|
||||
IPP_OP_PRIVATE = 0x4000, /* Reserved @private@ */
|
||||
IPP_OP_CUPS_GET_DEFAULT, /* Get the default printer */
|
||||
@@ -1021,5 +1034,5 @@ extern const char *ippStateString(ipp_state_t state) _CUPS_API_2_0;
|
||||
#endif /* !_CUPS_IPP_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp.h 11806 2014-04-09 16:12:27Z msweet $".
|
||||
* End of "$Id: ipp.h 12666 2015-05-25 19:38:09Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: language.c 12266 2014-11-19 16:05:28Z msweet $"
|
||||
* "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $"
|
||||
*
|
||||
* I18N/language support for CUPS.
|
||||
*
|
||||
@@ -1588,5 +1588,5 @@ cups_unquote(char *d, /* O - Unquoted string */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: language.c 12266 2014-11-19 16:05:28Z msweet $".
|
||||
* End of "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $".
|
||||
*/
|
||||
|
||||
+9
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: mark.c 11558 2014-02-06 18:33:34Z msweet $"
|
||||
* "$Id: mark.c 12258 2014-11-19 12:38:44Z msweet $"
|
||||
*
|
||||
* Option marking routines for CUPS.
|
||||
*
|
||||
@@ -514,6 +514,12 @@ ppdMarkDefaults(ppd_file_t *ppd) /* I - PPD file record */
|
||||
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
ppd_defaults(ppd, g);
|
||||
|
||||
/*
|
||||
* Finally, tag any conflicts (API compatibility) once at the end.
|
||||
*/
|
||||
|
||||
ppdConflicts(ppd);
|
||||
}
|
||||
|
||||
|
||||
@@ -710,7 +716,7 @@ ppd_defaults(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
for (i = g->num_options, o = g->options; i > 0; i --, o ++)
|
||||
if (_cups_strcasecmp(o->keyword, "PageRegion") != 0)
|
||||
ppdMarkOption(ppd, o->keyword, o->defchoice);
|
||||
ppd_mark_option(ppd, o->keyword, o->defchoice);
|
||||
|
||||
for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++)
|
||||
ppd_defaults(ppd, sg);
|
||||
@@ -1078,5 +1084,5 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: mark.c 11558 2014-02-06 18:33:34Z msweet $".
|
||||
* End of "$Id: mark.c 12258 2014-11-19 12:38:44Z msweet $".
|
||||
*/
|
||||
|
||||
+951
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ppd-cache.c 12434 2015-01-28 16:29:06Z msweet $"
|
||||
* "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $"
|
||||
*
|
||||
* PPD cache implementation for CUPS.
|
||||
*
|
||||
@@ -37,10 +37,326 @@ static int pwg_compare_finishings(_pwg_finishings_t *a,
|
||||
_pwg_finishings_t *b);
|
||||
static void pwg_free_finishings(_pwg_finishings_t *f);
|
||||
static void pwg_ppdize_name(const char *ipp, char *name, size_t namesize);
|
||||
static void pwg_ppdize_resolution(ipp_attribute_t *attr, int element, int *xres, int *yres, char *name, size_t namesize);
|
||||
static void pwg_unppdize_name(const char *ppd, char *name, size_t namesize,
|
||||
const char *dashchars);
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsConvertOptions()' - Convert printer options to standard IPP attributes.
|
||||
*
|
||||
* This functions converts PPD and CUPS-specific options to their standard IPP
|
||||
* attributes and values and adds them to the specified IPP request.
|
||||
*/
|
||||
|
||||
int /* O - New number of copies */
|
||||
_cupsConvertOptions(ipp_t *request, /* I - IPP request */
|
||||
ppd_file_t *ppd, /* I - PPD file */
|
||||
_ppd_cache_t *pc, /* I - PPD cache info */
|
||||
ipp_attribute_t *media_col_sup,
|
||||
/* I - media-col-supported values */
|
||||
ipp_attribute_t *doc_handling_sup,
|
||||
/* I - multiple-document-handling-supported values */
|
||||
ipp_attribute_t *print_color_mode_sup,
|
||||
/* I - Printer supports print-color-mode */
|
||||
const char *user, /* I - User info */
|
||||
const char *format, /* I - document-format value */
|
||||
int copies, /* I - Number of copies */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t *options) /* I - Options */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
const char *keyword; /* PWG keyword */
|
||||
pwg_size_t *size; /* PWG media size */
|
||||
ipp_t *media_col, /* media-col value */
|
||||
*media_size; /* media-size value */
|
||||
const char *media_source, /* media-source value */
|
||||
*media_type, /* media-type value */
|
||||
*collate_str, /* multiple-document-handling value */
|
||||
*color_attr_name, /* Supported color attribute */
|
||||
*mandatory; /* Mandatory attributes */
|
||||
int num_finishings = 0, /* Number of finishing values */
|
||||
finishings[10]; /* Finishing enum values */
|
||||
ppd_choice_t *choice; /* Marked choice */
|
||||
|
||||
|
||||
/*
|
||||
* Send standard IPP attributes...
|
||||
*/
|
||||
|
||||
if (pc->password && (keyword = cupsGetOption("job-password", num_options, options)) != NULL)
|
||||
{
|
||||
ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", keyword, (int)strlen(keyword));
|
||||
|
||||
if ((keyword = cupsGetOption("job-password-encryption", num_options, options)) == NULL)
|
||||
keyword = "none";
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "job-password-encryption", NULL, keyword);
|
||||
}
|
||||
|
||||
if (pc->account_id)
|
||||
{
|
||||
if ((keyword = cupsGetOption("job-account-id", num_options, options)) == NULL)
|
||||
keyword = cupsGetOption("job-billing", num_options, options);
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-account-id", NULL, keyword);
|
||||
}
|
||||
|
||||
if (pc->accounting_user_id)
|
||||
{
|
||||
if ((keyword = cupsGetOption("job-accounting-user-id", num_options, options)) == NULL)
|
||||
keyword = user;
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-accounting-user-id", NULL, keyword);
|
||||
}
|
||||
|
||||
for (mandatory = (const char *)cupsArrayFirst(pc->mandatory); mandatory; mandatory = (const char *)cupsArrayNext(pc->mandatory))
|
||||
{
|
||||
if (strcmp(mandatory, "copies") &&
|
||||
strcmp(mandatory, "destination-uris") &&
|
||||
strcmp(mandatory, "finishings") &&
|
||||
strcmp(mandatory, "job-account-id") &&
|
||||
strcmp(mandatory, "job-accounting-user-id") &&
|
||||
strcmp(mandatory, "job-password") &&
|
||||
strcmp(mandatory, "job-password-encryption") &&
|
||||
strcmp(mandatory, "media") &&
|
||||
strncmp(mandatory, "media-col", 9) &&
|
||||
strcmp(mandatory, "multiple-document-handling") &&
|
||||
strcmp(mandatory, "output-bin") &&
|
||||
strcmp(mandatory, "print-color-mode") &&
|
||||
strcmp(mandatory, "print-quality") &&
|
||||
strcmp(mandatory, "sides") &&
|
||||
(keyword = cupsGetOption(mandatory, num_options, options)) != NULL)
|
||||
{
|
||||
_ipp_option_t *opt = _ippFindOption(mandatory);
|
||||
/* Option type */
|
||||
ipp_tag_t value_tag = opt ? opt->value_tag : IPP_TAG_NAME;
|
||||
/* Value type */
|
||||
|
||||
switch (value_tag)
|
||||
{
|
||||
case IPP_TAG_INTEGER :
|
||||
case IPP_TAG_ENUM :
|
||||
ippAddInteger(request, IPP_TAG_JOB, value_tag, mandatory, atoi(keyword));
|
||||
break;
|
||||
case IPP_TAG_BOOLEAN :
|
||||
ippAddBoolean(request, IPP_TAG_JOB, mandatory, !_cups_strcasecmp(keyword, "true"));
|
||||
break;
|
||||
case IPP_TAG_RANGE :
|
||||
{
|
||||
int lower, upper; /* Range */
|
||||
|
||||
if (sscanf(keyword, "%d-%d", &lower, &upper) != 2)
|
||||
lower = upper = atoi(keyword);
|
||||
|
||||
ippAddRange(request, IPP_TAG_JOB, mandatory, lower, upper);
|
||||
}
|
||||
break;
|
||||
case IPP_TAG_STRING :
|
||||
ippAddOctetString(request, IPP_TAG_JOB, mandatory, keyword, (int)strlen(keyword));
|
||||
break;
|
||||
default :
|
||||
if (!strcmp(mandatory, "print-color-mode") && !strcmp(keyword, "monochrome"))
|
||||
{
|
||||
if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
|
||||
keyword = "auto-monochrome";
|
||||
else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
|
||||
keyword = "process-monochrome";
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_JOB, value_tag, mandatory, NULL, keyword);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("PageSize", num_options, options)) == NULL)
|
||||
keyword = cupsGetOption("media", num_options, options);
|
||||
|
||||
if ((size = _ppdCacheGetSize(pc, keyword)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Add a media-col value...
|
||||
*/
|
||||
|
||||
media_size = ippNew();
|
||||
ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"x-dimension", size->width);
|
||||
ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
|
||||
"y-dimension", size->length);
|
||||
|
||||
media_col = ippNew();
|
||||
ippAddCollection(media_col, IPP_TAG_ZERO, "media-size", media_size);
|
||||
|
||||
media_source = _ppdCacheGetSource(pc, cupsGetOption("InputSlot",
|
||||
num_options,
|
||||
options));
|
||||
media_type = _ppdCacheGetType(pc, cupsGetOption("MediaType",
|
||||
num_options,
|
||||
options));
|
||||
|
||||
for (i = 0; i < media_col_sup->num_values; i ++)
|
||||
{
|
||||
if (!strcmp(media_col_sup->values[i].string.text, "media-left-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-left-margin", size->left);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text, "media-bottom-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text, "media-right-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-right-margin", size->right);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text, "media-top-margin"))
|
||||
ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-top-margin", size->top);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text, "media-source") && media_source)
|
||||
ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-source", NULL, media_source);
|
||||
else if (!strcmp(media_col_sup->values[i].string.text, "media-type") && media_type)
|
||||
ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-type", NULL, media_type);
|
||||
}
|
||||
|
||||
ippAddCollection(request, IPP_TAG_JOB, "media-col", media_col);
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("output-bin", num_options, options)) == NULL)
|
||||
{
|
||||
if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL)
|
||||
keyword = _ppdCacheGetBin(pc, choice->choice);
|
||||
}
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-bin", NULL, keyword);
|
||||
|
||||
color_attr_name = print_color_mode_sup ? "print-color-mode" : "output-mode";
|
||||
|
||||
if ((keyword = cupsGetOption("print-color-mode", num_options, options)) == NULL)
|
||||
{
|
||||
if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, "Gray"))
|
||||
keyword = "monochrome";
|
||||
else
|
||||
keyword = "color";
|
||||
}
|
||||
}
|
||||
|
||||
if (keyword && !strcmp(keyword, "monochrome"))
|
||||
{
|
||||
if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
|
||||
keyword = "auto-monochrome";
|
||||
else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
|
||||
keyword = "process-monochrome";
|
||||
}
|
||||
|
||||
if (keyword)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, color_attr_name, NULL, keyword);
|
||||
|
||||
if ((keyword = cupsGetOption("print-quality", num_options, options)) != NULL)
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", atoi(keyword));
|
||||
else if ((choice = ppdFindMarkedChoice(ppd, "cupsPrintQuality")) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, "draft"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_DRAFT);
|
||||
else if (!_cups_strcasecmp(choice->choice, "normal"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_NORMAL);
|
||||
else if (!_cups_strcasecmp(choice->choice, "high"))
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_HIGH);
|
||||
}
|
||||
|
||||
if ((keyword = cupsGetOption("sides", num_options, options)) != NULL)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, keyword);
|
||||
else if (pc->sides_option && (choice = ppdFindMarkedChoice(ppd, pc->sides_option)) != NULL)
|
||||
{
|
||||
if (!_cups_strcasecmp(choice->choice, pc->sides_1sided))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "one-sided");
|
||||
else if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_long))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-long-edge");
|
||||
if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_short))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-short-edge");
|
||||
}
|
||||
|
||||
/*
|
||||
* Copies...
|
||||
*/
|
||||
|
||||
if ((keyword = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
|
||||
{
|
||||
if (strstr(keyword, "uncollated"))
|
||||
keyword = "false";
|
||||
else
|
||||
keyword = "true";
|
||||
}
|
||||
else if ((keyword = cupsGetOption("collate", num_options, options)) == NULL)
|
||||
keyword = "true";
|
||||
|
||||
if (format)
|
||||
{
|
||||
if (!_cups_strcasecmp(format, "image/gif") ||
|
||||
!_cups_strcasecmp(format, "image/jp2") ||
|
||||
!_cups_strcasecmp(format, "image/jpeg") ||
|
||||
!_cups_strcasecmp(format, "image/png") ||
|
||||
!_cups_strcasecmp(format, "image/tiff") ||
|
||||
!_cups_strncasecmp(format, "image/x-", 8))
|
||||
{
|
||||
/*
|
||||
* Collation makes no sense for single page image formats...
|
||||
*/
|
||||
|
||||
keyword = "false";
|
||||
}
|
||||
else if (!_cups_strncasecmp(format, "image/", 6) ||
|
||||
!_cups_strcasecmp(format, "application/vnd.cups-raster"))
|
||||
{
|
||||
/*
|
||||
* Multi-page image formats will have copies applied by the upstream
|
||||
* filters...
|
||||
*/
|
||||
|
||||
copies = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (doc_handling_sup)
|
||||
{
|
||||
if (!_cups_strcasecmp(keyword, "true"))
|
||||
collate_str = "separate-documents-collated-copies";
|
||||
else
|
||||
collate_str = "separate-documents-uncollated-copies";
|
||||
|
||||
for (i = 0; i < doc_handling_sup->num_values; i ++)
|
||||
{
|
||||
if (!strcmp(doc_handling_sup->values[i].string.text, collate_str))
|
||||
{
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "multiple-document-handling", NULL, collate_str);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= doc_handling_sup->num_values)
|
||||
copies = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map finishing options...
|
||||
*/
|
||||
|
||||
num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)(sizeof(finishings) / sizeof(finishings[0])), finishings);
|
||||
if (num_finishings > 0)
|
||||
{
|
||||
ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings);
|
||||
|
||||
if (copies > 1 && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Send job-pages-per-set attribute to apply finishings correctly...
|
||||
*/
|
||||
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / copies);
|
||||
}
|
||||
}
|
||||
|
||||
return (copies);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_ppdCacheCreateWithFile()' - Create PPD cache and mapping data from a
|
||||
* written file.
|
||||
@@ -2466,6 +2782,604 @@ _ppdCacheWriteFile(
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_ppdCreateFromIPP()' - Create a PPD file describing the capabilities
|
||||
* of an IPP printer.
|
||||
*/
|
||||
|
||||
char * /* O - PPD filename or NULL on error */
|
||||
_ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||||
size_t bufsize, /* I - Size of filename buffer */
|
||||
ipp_t *response) /* I - Get-Printer-Attributes response */
|
||||
{
|
||||
cups_file_t *fp; /* PPD file */
|
||||
ipp_attribute_t *attr, /* xxx-supported */
|
||||
*defattr, /* xxx-default */
|
||||
*x_dim, *y_dim; /* Media dimensions */
|
||||
ipp_t *media_size; /* Media size collection */
|
||||
char make[256], /* Make and model */
|
||||
*model, /* Model name */
|
||||
ppdname[PPD_MAX_NAME];
|
||||
/* PPD keyword */
|
||||
int i, j, /* Looping vars */
|
||||
count, /* Number of values */
|
||||
bottom, /* Largest bottom margin */
|
||||
left, /* Largest left margin */
|
||||
right, /* Largest right margin */
|
||||
top; /* Largest top margin */
|
||||
pwg_media_t *pwg; /* PWG media size */
|
||||
int xres, yres; /* Resolution values */
|
||||
struct lconv *loc = localeconv();
|
||||
/* Locale data */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (buffer)
|
||||
*buffer = '\0';
|
||||
|
||||
if (!buffer || bufsize < 1 || !response)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Open a temporary file for the PPD...
|
||||
*/
|
||||
|
||||
if ((fp = cupsTempFile2(buffer, (int)bufsize)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Standard stuff for PPD file...
|
||||
*/
|
||||
|
||||
cupsFilePuts(fp, "*PPD-Adobe: \"4.3\"\n");
|
||||
cupsFilePuts(fp, "*FormatVersion: \"4.3\"\n");
|
||||
cupsFilePrintf(fp, "*FileVersion: \"%d.%d\"\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR);
|
||||
cupsFilePuts(fp, "*LanguageVersion: English\n");
|
||||
cupsFilePuts(fp, "*LanguageEncoding: ISOLatin1\n");
|
||||
cupsFilePuts(fp, "*PSVersion: \"(3010.000) 0\"\n");
|
||||
cupsFilePuts(fp, "*LanguageLevel: \"3\"\n");
|
||||
cupsFilePuts(fp, "*FileSystem: False\n");
|
||||
cupsFilePuts(fp, "*PCFileName: \"ippeve.ppd\"\n");
|
||||
|
||||
if ((attr = ippFindAttribute(response, "printer-make-and-model", IPP_TAG_TEXT)) != NULL)
|
||||
strlcpy(make, ippGetString(attr, 0, NULL), sizeof(make));
|
||||
else
|
||||
strlcpy(make, "Unknown Printer", sizeof(make));
|
||||
|
||||
if (!_cups_strncasecmp(make, "Hewlett Packard ", 16) ||
|
||||
!_cups_strncasecmp(make, "Hewlett-Packard ", 16))
|
||||
{
|
||||
model = make + 16;
|
||||
strlcpy(make, "HP", sizeof(make));
|
||||
}
|
||||
else if ((model = strchr(make, ' ')) != NULL)
|
||||
*model++ = '\0';
|
||||
else
|
||||
model = make;
|
||||
|
||||
cupsFilePrintf(fp, "*Manufacturer: \"%s\"\n", make);
|
||||
cupsFilePrintf(fp, "*ModelName: \"%s\"\n", model);
|
||||
cupsFilePrintf(fp, "*Product: \"(%s)\"\n", model);
|
||||
cupsFilePrintf(fp, "*NickName: \"%s\"\n", model);
|
||||
cupsFilePrintf(fp, "*ShortNickName: \"%s\"\n", model);
|
||||
|
||||
if ((attr = ippFindAttribute(response, "color-supported", IPP_TAG_BOOLEAN)) != NULL && ippGetBoolean(attr, 0))
|
||||
cupsFilePuts(fp, "*ColorDevice: True\n");
|
||||
else
|
||||
cupsFilePuts(fp, "*ColorDevice: False\n");
|
||||
|
||||
cupsFilePrintf(fp, "*cupsVersion: %d.%d\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR);
|
||||
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
|
||||
cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
|
||||
|
||||
/*
|
||||
* Filters...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL)
|
||||
{
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *format = ippGetString(attr, i, NULL);
|
||||
/* PDL */
|
||||
|
||||
if (!_cups_strcasecmp(format, "application/pdf"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
|
||||
else if (!_cups_strcasecmp(format, "application/postscript"))
|
||||
cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-postscript application/postscript 10 -\"\n");
|
||||
else if (_cups_strcasecmp(format, "application/octet-stream") && _cups_strcasecmp(format, "application/vnd.hp-pcl") && _cups_strcasecmp(format, "text/plain"))
|
||||
cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 10 -\"\n", format, format);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* PageSize/PageRegion/ImageableArea/PaperDimension
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-bottom-margin-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
for (i = 1, bottom = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
|
||||
if (ippGetInteger(attr, i) > bottom)
|
||||
bottom = ippGetInteger(attr, i);
|
||||
}
|
||||
else
|
||||
bottom = 1270;
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-left-margin-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
for (i = 1, left = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
|
||||
if (ippGetInteger(attr, i) > left)
|
||||
left = ippGetInteger(attr, i);
|
||||
}
|
||||
else
|
||||
left = 635;
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-right-margin-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
for (i = 1, right = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
|
||||
if (ippGetInteger(attr, i) > right)
|
||||
right = ippGetInteger(attr, i);
|
||||
}
|
||||
else
|
||||
right = 635;
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-top-margin-supported", IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
for (i = 1, top = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
|
||||
if (ippGetInteger(attr, i) > top)
|
||||
top = ippGetInteger(attr, i);
|
||||
}
|
||||
else
|
||||
top = 1270;
|
||||
|
||||
if ((defattr = ippFindAttribute(response, "media-col-default", IPP_TAG_BEGIN_COLLECTION)) != NULL)
|
||||
{
|
||||
if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL)
|
||||
{
|
||||
media_size = ippGetCollection(attr, 0);
|
||||
x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
|
||||
y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
|
||||
|
||||
if (x_dim && y_dim)
|
||||
{
|
||||
pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
|
||||
strlcpy(ppdname, pwg->ppd, sizeof(ppdname));
|
||||
}
|
||||
else
|
||||
strlcpy(ppdname, "Unknown", sizeof(ppdname));
|
||||
}
|
||||
else
|
||||
strlcpy(ppdname, "Unknown", sizeof(ppdname));
|
||||
}
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-size-supported", IPP_TAG_BEGIN_COLLECTION)) != NULL)
|
||||
{
|
||||
cupsFilePrintf(fp, "*OpenUI *PageSize: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *PageSize\n"
|
||||
"*DefaultPageSize: %s\n", ppdname);
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
media_size = ippGetCollection(attr, i);
|
||||
x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
|
||||
y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
|
||||
|
||||
if (x_dim && y_dim)
|
||||
{
|
||||
char twidth[256], /* Width string */
|
||||
tlength[256]; /* Length string */
|
||||
|
||||
pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
|
||||
|
||||
_cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
|
||||
|
||||
cupsFilePrintf(fp, "*PageSize %s: \"<</PageSize[%s %s]>>setpagedevice\"\n", pwg->ppd, twidth, tlength);
|
||||
}
|
||||
}
|
||||
cupsFilePuts(fp, "*CloseUI: *PageSize\n");
|
||||
|
||||
cupsFilePrintf(fp, "*OpenUI *PageRegion: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *PageRegion\n"
|
||||
"*DefaultPageRegion: %s\n", ppdname);
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
media_size = ippGetCollection(attr, i);
|
||||
x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
|
||||
y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
|
||||
|
||||
if (x_dim && y_dim)
|
||||
{
|
||||
char twidth[256], /* Width string */
|
||||
tlength[256]; /* Length string */
|
||||
|
||||
pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
|
||||
|
||||
_cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
|
||||
|
||||
cupsFilePrintf(fp, "*PageRegion %s: \"<</PageSize[%s %s]>>setpagedevice\"\n", pwg->ppd, twidth, tlength);
|
||||
}
|
||||
}
|
||||
cupsFilePuts(fp, "*CloseUI: *PageRegion\n");
|
||||
|
||||
cupsFilePrintf(fp, "*DefaultImageableArea: %s\n"
|
||||
"*DefaultPaperDimension: %s\n", ppdname, ppdname);
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
media_size = ippGetCollection(attr, i);
|
||||
x_dim = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
|
||||
y_dim = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
|
||||
|
||||
if (x_dim && y_dim)
|
||||
{
|
||||
char tleft[256], /* Left string */
|
||||
tbottom[256], /* Bottom string */
|
||||
tright[256], /* Right string */
|
||||
ttop[256], /* Top string */
|
||||
twidth[256], /* Width string */
|
||||
tlength[256]; /* Length string */
|
||||
|
||||
pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
|
||||
|
||||
_cupsStrFormatd(tleft, tleft + sizeof(tleft), left * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(tbottom, tbottom + sizeof(tbottom), bottom * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(tright, tright + sizeof(tright), (pwg->width - right) * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(ttop, ttop + sizeof(ttop), (pwg->length - top) * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
|
||||
_cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
|
||||
|
||||
cupsFilePrintf(fp, "*ImageableArea %s: \"%s %s %s %s\"\n", pwg->ppd, tleft, tbottom, tright, ttop);
|
||||
cupsFilePrintf(fp, "*PaperDimension %s: \"%s %s\"\n", pwg->ppd, twidth, tlength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* InputSlot...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-source", IPP_TAG_KEYWORD)) != NULL)
|
||||
pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
|
||||
else
|
||||
strlcpy(ppdname, "Unknown", sizeof(ppdname));
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-source-supported", IPP_TAG_KEYWORD)) != NULL && (count = ippGetCount(attr)) > 1)
|
||||
{
|
||||
static const char * const sources[][2] =
|
||||
{
|
||||
{ "Auto", "Automatic" },
|
||||
{ "Main", "Main" },
|
||||
{ "Alternate", "Alternate" },
|
||||
{ "LargeCapacity", "Large Capacity" },
|
||||
{ "Manual", "Manual" },
|
||||
{ "Envelope", "Envelope" },
|
||||
{ "Disc", "Disc" },
|
||||
{ "Photo", "Photo" },
|
||||
{ "Hagaki", "Hagaki" },
|
||||
{ "MainRoll", "Main Roll" },
|
||||
{ "AlternateRoll", "Alternate Roll" },
|
||||
{ "Top", "Top" },
|
||||
{ "Middle", "Middle" },
|
||||
{ "Bottom", "Bottom" },
|
||||
{ "Side", "Side" },
|
||||
{ "Left", "Left" },
|
||||
{ "Right", "Right" },
|
||||
{ "Center", "Center" },
|
||||
{ "Rear", "Rear" },
|
||||
{ "ByPassTray", "Multipurpose" },
|
||||
{ "Tray1", "Tray 1" },
|
||||
{ "Tray2", "Tray 2" },
|
||||
{ "Tray3", "Tray 3" },
|
||||
{ "Tray4", "Tray 4" },
|
||||
{ "Tray5", "Tray 5" },
|
||||
{ "Tray6", "Tray 6" },
|
||||
{ "Tray7", "Tray 7" },
|
||||
{ "Tray8", "Tray 8" },
|
||||
{ "Tray9", "Tray 9" },
|
||||
{ "Tray10", "Tray 10" },
|
||||
{ "Tray11", "Tray 11" },
|
||||
{ "Tray12", "Tray 12" },
|
||||
{ "Tray13", "Tray 13" },
|
||||
{ "Tray14", "Tray 14" },
|
||||
{ "Tray15", "Tray 15" },
|
||||
{ "Tray16", "Tray 16" },
|
||||
{ "Tray17", "Tray 17" },
|
||||
{ "Tray18", "Tray 18" },
|
||||
{ "Tray19", "Tray 19" },
|
||||
{ "Tray20", "Tray 20" },
|
||||
{ "Roll1", "Roll 1" },
|
||||
{ "Roll2", "Roll 2" },
|
||||
{ "Roll3", "Roll 3" },
|
||||
{ "Roll4", "Roll 4" },
|
||||
{ "Roll5", "Roll 5" },
|
||||
{ "Roll6", "Roll 6" },
|
||||
{ "Roll7", "Roll 7" },
|
||||
{ "Roll8", "Roll 8" },
|
||||
{ "Roll9", "Roll 9" },
|
||||
{ "Roll10", "Roll 10" }
|
||||
};
|
||||
|
||||
cupsFilePrintf(fp, "*OpenUI *InputSlot: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *InputSlot\n"
|
||||
"*DefaultInputSlot: %s\n", ppdname);
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
pwg_ppdize_name(ippGetString(attr, i, NULL), ppdname, sizeof(ppdname));
|
||||
|
||||
for (j = 0; j < (int)(sizeof(sources) / sizeof(sources[0])); j ++)
|
||||
if (!strcmp(sources[j][0], ppdname))
|
||||
{
|
||||
cupsFilePrintf(fp, "*InputSlot %s/%s: \"<</MediaPosition %d>>setpagedevice\"\n", ppdname, sources[j][1], j);
|
||||
break;
|
||||
}
|
||||
}
|
||||
cupsFilePuts(fp, "*CloseUI: *InputSlot\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* MediaType...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-type", IPP_TAG_KEYWORD)) != NULL)
|
||||
pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
|
||||
else
|
||||
strlcpy(ppdname, "Unknown", sizeof(ppdname));
|
||||
|
||||
if ((attr = ippFindAttribute(response, "media-type-supported", IPP_TAG_KEYWORD)) != NULL && (count = ippGetCount(attr)) > 1)
|
||||
{
|
||||
static const char * const types[][2] =
|
||||
{ /* Media type strings (far from complete) */
|
||||
{ "Auto", "Automatic" },
|
||||
{ "Cardstock", "Cardstock" },
|
||||
{ "Disc", "CD/DVD/Bluray" },
|
||||
{ "Envelope", "Envelope" },
|
||||
{ "Labels", "Label" },
|
||||
{ "Other", "Other" },
|
||||
{ "Photographic", "Photo" },
|
||||
{ "PhotographicGlossy", "Glossy Photo" },
|
||||
{ "PhotographicHighGloss", "High-Gloss Photo" },
|
||||
{ "PhotographicMatte", "Matte Photo" },
|
||||
{ "PhotographicSatin", "Satin Photo" },
|
||||
{ "PhotographicSemiGloss", "Semi-Gloss Photo" },
|
||||
{ "Stationery", "Plain Paper" },
|
||||
{ "StationeryLetterhead", "Letterhead" },
|
||||
{ "Transparency", "Transparency" }
|
||||
};
|
||||
|
||||
cupsFilePrintf(fp, "*OpenUI *MediaType: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *MediaType\n"
|
||||
"*DefaultMediaType: %s\n", ppdname);
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
pwg_ppdize_name(ippGetString(attr, i, NULL), ppdname, sizeof(ppdname));
|
||||
|
||||
for (j = 0; j < (int)(sizeof(types) / sizeof(types[0])); j ++)
|
||||
if (!strcmp(types[j][0], ppdname))
|
||||
{
|
||||
cupsFilePrintf(fp, "*MediaType %s/%s: \"<</MediaType(%s)>>setpagedevice\"\n", ppdname, types[j][1], ppdname);
|
||||
break;
|
||||
}
|
||||
|
||||
if (j >= (int)(sizeof(types) / sizeof(types[0])))
|
||||
cupsFilePrintf(fp, "*MediaType %s: \"<</MediaType(%s)>>setpagedevice\"\n", ppdname, ppdname);
|
||||
|
||||
}
|
||||
cupsFilePuts(fp, "*CloseUI: *MediaType\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* ColorModel...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "pwg-raster-document-type-supported", IPP_TAG_KEYWORD)) == NULL)
|
||||
attr = ippFindAttribute(response, "print-color-mode-supported", IPP_TAG_KEYWORD);
|
||||
|
||||
if (attr)
|
||||
{
|
||||
const char *default_color = NULL; /* Default */
|
||||
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *keyword = ippGetString(attr, i, NULL);
|
||||
/* Keyword for color/bit depth */
|
||||
|
||||
if (!strcmp(keyword, "black_1") || !strcmp(keyword, "bi-level") || !strcmp(keyword, "process-bi-level"))
|
||||
{
|
||||
if (!default_color)
|
||||
cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *ColorModel\n");
|
||||
|
||||
cupsFilePuts(fp, "*ColorModel FastGray/Fast Grayscale: \"<</cupsColorSpace 3/cupsBitsPerColor 1/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
|
||||
|
||||
if (!default_color)
|
||||
default_color = "FastGray";
|
||||
}
|
||||
else if (!strcmp(keyword, "sgray_8") || !strcmp(keyword, "monochrome") || !strcmp(keyword, "process-monochrome"))
|
||||
{
|
||||
if (!default_color)
|
||||
cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *ColorModel\n");
|
||||
|
||||
cupsFilePuts(fp, "*ColorModel Gray/Grayscale: \"<</cupsColorSpace 18/cupsBitsPerColor 8/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
|
||||
|
||||
if (!default_color || !strcmp(default_color, "FastGray"))
|
||||
default_color = "Gray";
|
||||
}
|
||||
else if (!strcmp(keyword, "srgb_8") || !strcmp(keyword, "color"))
|
||||
{
|
||||
if (!default_color)
|
||||
cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *ColorModel\n");
|
||||
|
||||
cupsFilePuts(fp, "*ColorModel RGB/Color: \"<</cupsColorSpace 19/cupsBitsPerColor 8/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
|
||||
|
||||
default_color = "RGB";
|
||||
}
|
||||
}
|
||||
|
||||
if (default_color)
|
||||
{
|
||||
cupsFilePrintf(fp, "*DefaultColorModel: %s\n", default_color);
|
||||
cupsFilePuts(fp, "*CloseUI: *ColorModel\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Duplex...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "sides-supported", IPP_TAG_KEYWORD)) != NULL && ippContainsString(attr, "two-sided-long-edge"))
|
||||
{
|
||||
cupsFilePuts(fp, "*OpenUI *Duplex/2-Sided Printing: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *Duplex\n"
|
||||
"*DefaultDuplex: None\n"
|
||||
"*Duplex None/Off (1-Sided): \"<</Duplex false>>setpagedevice\"\n"
|
||||
"*Duplex DuplexNoTumble/Long-Edge (Portrait): \"<</Duplex true/Tumble false>>setpagedevice\"\n"
|
||||
"*Duplex DuplexTumble/Short-Edge (Landscape): \"<</Duplex true/Tumble true>>setpagedevice\"\n"
|
||||
"*CloseUI: *Duplex\n");
|
||||
|
||||
if ((attr = ippFindAttribute(response, "pwg-raster-document-sheet-back", IPP_TAG_KEYWORD)) != NULL)
|
||||
{
|
||||
const char *keyword = ippGetString(attr, 0, NULL);
|
||||
/* Keyword value */
|
||||
|
||||
if (!strcmp(keyword, "flipped"))
|
||||
cupsFilePuts(fp, "*cupsBackSide: Flipped\n");
|
||||
else if (!strcmp(keyword, "manual-tumble"))
|
||||
cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n");
|
||||
else if (!strcmp(keyword, "normal"))
|
||||
cupsFilePuts(fp, "*cupsBackSide: Normal\n");
|
||||
else
|
||||
cupsFilePuts(fp, "*cupsBackSide: Rotated\n");
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL)
|
||||
{
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *dm = ippGetString(attr, i, NULL);
|
||||
/* DM value */
|
||||
|
||||
if (!_cups_strcasecmp(dm, "DM1"))
|
||||
{
|
||||
cupsFilePuts(fp, "*cupsBackSide: Normal\n");
|
||||
break;
|
||||
}
|
||||
else if (!_cups_strcasecmp(dm, "DM2"))
|
||||
{
|
||||
cupsFilePuts(fp, "*cupsBackSide: Flipped\n");
|
||||
break;
|
||||
}
|
||||
else if (!_cups_strcasecmp(dm, "DM3"))
|
||||
{
|
||||
cupsFilePuts(fp, "*cupsBackSide: Rotated\n");
|
||||
break;
|
||||
}
|
||||
else if (!_cups_strcasecmp(dm, "DM4"))
|
||||
{
|
||||
cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* cupsPrintQuality and DefaultResolution...
|
||||
*/
|
||||
|
||||
if ((attr = ippFindAttribute(response, "pwg-raster-document-resolution-supported", IPP_TAG_RESOLUTION)) != NULL)
|
||||
{
|
||||
count = ippGetCount(attr);
|
||||
|
||||
pwg_ppdize_resolution(attr, count / 2, &xres, &yres, ppdname, sizeof(ppdname));
|
||||
cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname);
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *cupsPrintQuality/Print Quality: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *cupsPrintQuality\n"
|
||||
"*DefaultcupsPrintQuality: Normal\n");
|
||||
if (count > 2)
|
||||
{
|
||||
pwg_ppdize_resolution(attr, 0, &xres, &yres, NULL, 0);
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality Draft: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
|
||||
}
|
||||
pwg_ppdize_resolution(attr, count / 2, &xres, &yres, NULL, 0);
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality Normal: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
|
||||
if (count > 1)
|
||||
{
|
||||
pwg_ppdize_resolution(attr, count - 1, &xres, &yres, NULL, 0);
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality High: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
|
||||
}
|
||||
|
||||
cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n");
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL)
|
||||
{
|
||||
int lowdpi = 0, hidpi = 0; /* Lower and higher resolution */
|
||||
|
||||
for (i = 0, count = ippGetCount(attr); i < count; i ++)
|
||||
{
|
||||
const char *rs = ippGetString(attr, i, NULL);
|
||||
/* RS value */
|
||||
|
||||
if (_cups_strncasecmp(rs, "RS", 2))
|
||||
continue;
|
||||
|
||||
lowdpi = atoi(rs + 2);
|
||||
if ((rs = strrchr(rs, '-')) != NULL)
|
||||
hidpi = atoi(rs + 1);
|
||||
else
|
||||
hidpi = lowdpi;
|
||||
break;
|
||||
}
|
||||
|
||||
if (lowdpi == 0)
|
||||
{
|
||||
/*
|
||||
* Invalid "urf-supported" value...
|
||||
*/
|
||||
|
||||
cupsFilePuts(fp, "*DefaultResolution: 300dpi\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Generate print qualities based on low and high DPIs...
|
||||
*/
|
||||
|
||||
cupsFilePrintf(fp, "*DefaultResolution: %ddpi\n", lowdpi);
|
||||
|
||||
cupsFilePuts(fp, "*OpenUI *cupsPrintQuality/Print Quality: PickOne\n"
|
||||
"*OrderDependency: 10 AnySetup *cupsPrintQuality\n"
|
||||
"*DefaultcupsPrintQuality: Normal\n");
|
||||
if ((lowdpi & 1) == 0)
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality Draft: \"<</HWResolution[%d %d]>>setpagedevice\"\n", lowdpi, lowdpi / 2);
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality Normal: \"<</HWResolution[%d %d]>>setpagedevice\"\n", lowdpi, lowdpi);
|
||||
if (hidpi > lowdpi)
|
||||
cupsFilePrintf(fp, "*cupsPrintQuality High: \"<</HWResolution[%d %d]>>setpagedevice\"\n", hidpi, hidpi);
|
||||
cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n");
|
||||
}
|
||||
}
|
||||
else if ((attr = ippFindAttribute(response, "printer-resolution-default", IPP_TAG_RESOLUTION)) != NULL)
|
||||
{
|
||||
pwg_ppdize_resolution(attr, 0, &xres, &yres, ppdname, sizeof(ppdname));
|
||||
cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname);
|
||||
}
|
||||
else
|
||||
cupsFilePuts(fp, "*DefaultResolution: 300dpi\n");
|
||||
|
||||
/*
|
||||
* Close up and return...
|
||||
*/
|
||||
|
||||
cupsFileClose(fp);
|
||||
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_pwgInputSlotForSource()' - Get the InputSlot name for the given PWG
|
||||
* media-source.
|
||||
@@ -2677,6 +3591,41 @@ pwg_ppdize_name(const char *ipp, /* I - IPP keyword */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 'pwg_ppdize_resolution()' - Convert PWG resolution values to PPD values.
|
||||
*/
|
||||
|
||||
static void
|
||||
pwg_ppdize_resolution(
|
||||
ipp_attribute_t *attr, /* I - Attribute to convert */
|
||||
int element, /* I - Element to convert */
|
||||
int *xres, /* O - X resolution in DPI */
|
||||
int *yres, /* O - Y resolution in DPI */
|
||||
char *name, /* I - Name buffer */
|
||||
size_t namesize) /* I - Size of name buffer */
|
||||
{
|
||||
ipp_res_t units; /* Units for resolution */
|
||||
|
||||
|
||||
*xres = ippGetResolution(attr, element, yres, &units);
|
||||
|
||||
if (units == IPP_RES_PER_CM)
|
||||
{
|
||||
*xres = (int)(*xres * 2.54);
|
||||
*yres = (int)(*yres * 2.54);
|
||||
}
|
||||
|
||||
if (name && namesize > 4)
|
||||
{
|
||||
if (*xres == *yres)
|
||||
snprintf(name, namesize, "%ddpi", *xres);
|
||||
else
|
||||
snprintf(name, namesize, "%dx%ddpi", *xres, *yres);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'pwg_unppdize_name()' - Convert a PPD keyword to a lowercase IPP keyword.
|
||||
*/
|
||||
@@ -2731,5 +3680,5 @@ pwg_unppdize_name(const char *ppd, /* I - PPD keyword */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ppd-cache.c 12434 2015-01-28 16:29:06Z msweet $".
|
||||
* End of "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: ppd-private.h 11558 2014-02-06 18:33:34Z msweet $"
|
||||
* "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $"
|
||||
*
|
||||
* Private PPD definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -49,7 +49,7 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define _PPD_CACHE_VERSION 6 /* Version number in cache file */
|
||||
# define _PPD_CACHE_VERSION 7 /* Version number in cache file */
|
||||
|
||||
|
||||
/*
|
||||
@@ -155,6 +155,7 @@ struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
extern int _cupsConvertOptions(ipp_t *request, ppd_file_t *ppd, _ppd_cache_t *pc, ipp_attribute_t *media_col_sup, ipp_attribute_t *doc_handling_sup, ipp_attribute_t *print_color_mode_sup, const char *user, const char *format, int copies, int num_options, cups_option_t *options);
|
||||
extern _ppd_cache_t *_ppdCacheCreateWithFile(const char *filename,
|
||||
ipp_t **attrs);
|
||||
extern _ppd_cache_t *_ppdCacheCreateWithPPD(ppd_file_t *ppd);
|
||||
@@ -187,6 +188,7 @@ extern const char *_ppdCacheGetType(_ppd_cache_t *pc,
|
||||
const char *media_type);
|
||||
extern int _ppdCacheWriteFile(_ppd_cache_t *pc,
|
||||
const char *filename, ipp_t *attrs);
|
||||
extern char *_ppdCreateFromIPP(char *buffer, size_t bufsize, ipp_t *response);
|
||||
extern void _ppdFreeLanguages(cups_array_t *languages);
|
||||
extern cups_encoding_t _ppdGetEncoding(const char *name);
|
||||
extern cups_array_t *_ppdGetLanguages(ppd_file_t *ppd);
|
||||
@@ -221,5 +223,5 @@ extern const char *_pwgPageSizeForMedia(pwg_media_t *media,
|
||||
#endif /* !_CUPS_PPD_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: ppd-private.h 11558 2014-02-06 18:33:34Z msweet $".
|
||||
* End of "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $".
|
||||
*/
|
||||
|
||||
+12
-3
@@ -14,7 +14,7 @@
|
||||
*%
|
||||
*% Copyright 2007-2010 by Apple Inc.
|
||||
*% Copyright 2002-2006 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"
|
||||
@@ -22,7 +22,7 @@
|
||||
*% file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
*FormatVersion: "4.3"
|
||||
*FileVersion: "1.3"
|
||||
*LanguageVersion: English
|
||||
*LanguageVersion: English
|
||||
*LanguageEncoding: ISOLatin1
|
||||
*PCFileName: "TEST.PPD"
|
||||
*Manufacturer: "ESP"
|
||||
@@ -104,7 +104,7 @@
|
||||
*fr_CA.PageRegion A4/French Canadian A4: ""
|
||||
*fr_CA.PageRegion Env10/French Canadian #10 Envelope: ""
|
||||
|
||||
*DefaultImageableArea: Letter
|
||||
*DefaultImageableArea: Letter
|
||||
*ImageableArea Letter: "18 36 594 756"
|
||||
*ImageableArea Letter.Banner: "18 0 594 792"
|
||||
*ImageableArea Letter.Fullbleed: "0 0 612 792"
|
||||
@@ -145,6 +145,15 @@
|
||||
*MediaType Transparency/Transparency Film: "MediaType=Transparency"
|
||||
*CloseUI: *MediaType
|
||||
|
||||
*OpenUI *OutputBin/Output Tray: PickOne
|
||||
*OrderDependency: 25 AnySetup *OutputBin
|
||||
*DefaultOutputBin: Tray1
|
||||
*OutputBin Auto/Automatic Tray: "OutputBin=Auto"
|
||||
*OutputBin Tray1/Tray 1: "OutputBin=Tray1"
|
||||
*OutputBin Tray2/Tray 2: "OutputBin=Tray2"
|
||||
*OutputBin MainTray/Main Tray: "OutputBin=MainTray"
|
||||
*CloseUI: *OutputBin
|
||||
|
||||
*OpenUI *Duplex/2-Sided Printing: PickOne
|
||||
*OrderDependency: 10 DocumentSetup *Duplex
|
||||
*DefaultDuplex: None
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testfile.c 12578 2015-03-30 19:07:29Z msweet $"
|
||||
* "$Id: testfile.c 12577 2015-03-30 19:07:17Z msweet $"
|
||||
*
|
||||
* File test program for CUPS.
|
||||
*
|
||||
@@ -825,5 +825,5 @@ read_write_tests(int compression) /* I - Use compression? */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testfile.c 12578 2015-03-30 19:07:29Z msweet $".
|
||||
* End of "$Id: testfile.c 12577 2015-03-30 19:07:17Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testhttp.c 12028 2014-07-15 14:01:27Z msweet $"
|
||||
* "$Id: testhttp.c 12678 2015-05-28 19:09:48Z msweet $"
|
||||
*
|
||||
* HTTP test program for CUPS.
|
||||
*
|
||||
@@ -645,7 +645,6 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (lcreds && cupsArrayCount(creds) == cupsArrayCount(lcreds))
|
||||
{
|
||||
int i;
|
||||
http_credential_t *cred, *lcred;
|
||||
|
||||
for (i = 1, cred = (http_credential_t *)cupsArrayFirst(creds), lcred = (http_credential_t *)cupsArrayFirst(lcreds);
|
||||
@@ -890,5 +889,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testhttp.c 12028 2014-07-15 14:01:27Z msweet $".
|
||||
* End of "$Id: testhttp.c 12678 2015-05-28 19:09:48Z msweet $".
|
||||
*/
|
||||
|
||||
+54
-3
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: testppd.c 12604 2015-05-06 01:43:05Z msweet $"
|
||||
* "$Id: testppd.c 12603 2015-05-06 01:42:51Z msweet $"
|
||||
*
|
||||
* PPD test program for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -51,6 +51,11 @@ static const char *default_code =
|
||||
"%%EndFeature\n"
|
||||
"} stopped cleartomark\n"
|
||||
"[{\n"
|
||||
"%%BeginFeature: *OutputBin Tray1\n"
|
||||
"OutputBin=Tray1\n"
|
||||
"%%EndFeature\n"
|
||||
"} stopped cleartomark\n"
|
||||
"[{\n"
|
||||
"%%BeginFeature: *MediaType Plain\n"
|
||||
"MediaType=Plain\n"
|
||||
"%%EndFeature\n"
|
||||
@@ -80,6 +85,11 @@ static const char *custom_code =
|
||||
"%%EndFeature\n"
|
||||
"} stopped cleartomark\n"
|
||||
"[{\n"
|
||||
"%%BeginFeature: *OutputBin Tray1\n"
|
||||
"OutputBin=Tray1\n"
|
||||
"%%EndFeature\n"
|
||||
"} stopped cleartomark\n"
|
||||
"[{\n"
|
||||
"%%BeginFeature: *IntOption None\n"
|
||||
"%%EndFeature\n"
|
||||
"} stopped cleartomark\n"
|
||||
@@ -853,6 +863,47 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
status ++;
|
||||
}
|
||||
}
|
||||
else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7))
|
||||
{
|
||||
/*
|
||||
* ipp://... or ipps://...
|
||||
*/
|
||||
|
||||
http_t *http; /* Connection to printer */
|
||||
ipp_t *request, /* Get-Printer-Attributes request */
|
||||
*response; /* Get-Printer-Attributes response */
|
||||
char scheme[32], /* URI scheme */
|
||||
userpass[256], /* Username:password */
|
||||
host[256], /* Hostname */
|
||||
resource[256]; /* Resource path */
|
||||
int port; /* Port number */
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
{
|
||||
printf("Bad URI \"%s\".\n", argv[1]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
|
||||
if (!http)
|
||||
{
|
||||
printf("Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
|
||||
return (1);
|
||||
}
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]);
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
if (_ppdCreateFromIPP(buffer, sizeof(buffer), response))
|
||||
printf("Created PPD: %s\n", buffer);
|
||||
else
|
||||
puts("Unable to create PPD.");
|
||||
|
||||
ippDelete(response);
|
||||
httpClose(http);
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *filename; /* PPD filename */
|
||||
@@ -1119,5 +1170,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testppd.c 12604 2015-05-06 01:43:05Z msweet $".
|
||||
* End of "$Id: testppd.c 12603 2015-05-06 01:42:51Z msweet $".
|
||||
*/
|
||||
|
||||
+69
-16
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: tls-darwin.c 12481 2015-02-03 12:45:14Z msweet $"
|
||||
* "$Id: tls-darwin.c 12675 2015-05-28 01:14:32Z msweet $"
|
||||
*
|
||||
* TLS support code for CUPS on OS X.
|
||||
*
|
||||
@@ -26,14 +26,6 @@
|
||||
extern char **environ;
|
||||
|
||||
|
||||
/*
|
||||
* Test define - set to 1 to use SSLSetEnabledCiphers. Currently disabled (0)
|
||||
* because of <rdar://problem/18707430>.
|
||||
*/
|
||||
|
||||
#define USE_SET_ENABLED_CIPHERS 0
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
@@ -49,8 +41,8 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = 0;/* Options for TLS connections */
|
||||
#endif /* HAVE_SECKEYCHAINOPEN */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1017,7 +1009,14 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
http_credential_t *credential; /* Credential data */
|
||||
|
||||
|
||||
DEBUG_printf(("7_httpTLSStart(http=%p)", http));
|
||||
DEBUG_printf(("3_httpTLSStart(http=%p)", http));
|
||||
|
||||
if (tls_options < 0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting defaults.");
|
||||
_cupsSetDefaults();
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
|
||||
}
|
||||
|
||||
#ifdef HAVE_SECKEYCHAINOPEN
|
||||
if (http->mode == _HTTP_MODE_SERVER && !tls_keychain)
|
||||
@@ -1061,11 +1060,20 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
|
||||
if (!error)
|
||||
{
|
||||
error = SSLSetProtocolVersionMin(http->tls, (tls_options & _HTTP_TLS_ALLOW_SSL3) ? kSSLProtocol3 : kTLSProtocol1);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin, error=%d", (int)error));
|
||||
SSLProtocol minProtocol;
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
minProtocol = kTLSProtocol11;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
minProtocol = kSSLProtocol3;
|
||||
else
|
||||
minProtocol = kTLSProtocol1;
|
||||
|
||||
error = SSLSetProtocolVersionMin(http->tls, minProtocol);
|
||||
DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", minProtocol, (int)error));
|
||||
}
|
||||
|
||||
# if USE_SET_ENABLED_CIPHERS
|
||||
# if HAVE_SSLSETENABLEDCIPHERS
|
||||
if (!error)
|
||||
{
|
||||
SSLCipherSuite supported[100]; /* Supported cipher suites */
|
||||
@@ -1130,6 +1138,7 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
case TLS_RSA_PSK_WITH_NULL_SHA256 :
|
||||
case TLS_RSA_PSK_WITH_NULL_SHA384 :
|
||||
case SSL_RSA_WITH_DES_CBC_MD5 :
|
||||
DEBUG_printf(("4_httpTLSStart: Excluding insecure cipher suite %d", supported[i]));
|
||||
break;
|
||||
|
||||
/* RC4 cipher suites that should only be used as a last resort */
|
||||
@@ -1144,8 +1153,52 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
case TLS_RSA_PSK_WITH_RC4_128_SHA :
|
||||
if (tls_options & _HTTP_TLS_ALLOW_RC4)
|
||||
enabled[num_enabled ++] = supported[i];
|
||||
else
|
||||
DEBUG_printf(("4_httpTLSStart: Excluding RC4 cipher suite %d", supported[i]));
|
||||
break;
|
||||
|
||||
/* DH/DHE cipher suites that are problematic with parameters < 1024 bits */
|
||||
case TLS_DH_DSS_WITH_AES_128_CBC_SHA :
|
||||
case TLS_DH_RSA_WITH_AES_128_CBC_SHA :
|
||||
case TLS_DHE_DSS_WITH_AES_128_CBC_SHA :
|
||||
case TLS_DHE_RSA_WITH_AES_128_CBC_SHA :
|
||||
case TLS_DH_DSS_WITH_AES_256_CBC_SHA :
|
||||
case TLS_DH_RSA_WITH_AES_256_CBC_SHA :
|
||||
case TLS_DHE_DSS_WITH_AES_256_CBC_SHA :
|
||||
case TLS_DHE_RSA_WITH_AES_256_CBC_SHA :
|
||||
case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA :
|
||||
case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA :
|
||||
// case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA :
|
||||
case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA :
|
||||
case TLS_DH_DSS_WITH_AES_128_CBC_SHA256 :
|
||||
case TLS_DH_RSA_WITH_AES_128_CBC_SHA256 :
|
||||
case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 :
|
||||
case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 :
|
||||
case TLS_DH_DSS_WITH_AES_256_CBC_SHA256 :
|
||||
case TLS_DH_RSA_WITH_AES_256_CBC_SHA256 :
|
||||
case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 :
|
||||
case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 :
|
||||
case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA :
|
||||
case TLS_DHE_PSK_WITH_AES_128_CBC_SHA :
|
||||
case TLS_DHE_PSK_WITH_AES_256_CBC_SHA :
|
||||
// case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 :
|
||||
// case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 :
|
||||
case TLS_DH_RSA_WITH_AES_128_GCM_SHA256 :
|
||||
case TLS_DH_RSA_WITH_AES_256_GCM_SHA384 :
|
||||
// case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 :
|
||||
// case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 :
|
||||
case TLS_DH_DSS_WITH_AES_128_GCM_SHA256 :
|
||||
case TLS_DH_DSS_WITH_AES_256_GCM_SHA384 :
|
||||
case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 :
|
||||
case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 :
|
||||
case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 :
|
||||
case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 :
|
||||
if (tls_options & _HTTP_TLS_ALLOW_DH)
|
||||
enabled[num_enabled ++] = supported[i];
|
||||
else
|
||||
DEBUG_printf(("4_httpTLSStart: Excluding DH/DHE cipher suite %d", supported[i]));
|
||||
break;
|
||||
|
||||
/* Anything else we'll assume is secure */
|
||||
default :
|
||||
enabled[num_enabled ++] = supported[i];
|
||||
@@ -1157,7 +1210,7 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
error = SSLSetEnabledCiphers(http->tls, enabled, num_enabled);
|
||||
}
|
||||
}
|
||||
#endif /* USE_SET_ENABLED_CIPHERS */
|
||||
#endif /* HAVE_SSLSETENABLEDCIPHERS */
|
||||
|
||||
if (!error && http->mode == _HTTP_MODE_CLIENT)
|
||||
{
|
||||
@@ -1782,5 +1835,5 @@ http_cdsa_write(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: tls-darwin.c 12481 2015-02-03 12:45:14Z msweet $".
|
||||
* End of "$Id: tls-darwin.c 12675 2015-05-28 01:14:32Z msweet $".
|
||||
*/
|
||||
|
||||
+29
-20
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: tls-gnutls.c 12481 2015-02-03 12:45:14Z msweet $"
|
||||
* "$Id: tls-gnutls.c 12670 2015-05-27 19:48:05Z msweet $"
|
||||
*
|
||||
* TLS support code for CUPS using GNU TLS.
|
||||
*
|
||||
@@ -36,7 +36,7 @@ static char *tls_keypath = NULL;
|
||||
/* Server cert keychain path */
|
||||
static _cups_mutex_t tls_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex for keychain/certs */
|
||||
static int tls_options = 0;/* Options for TLS connections */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1028,9 +1028,18 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
int status; /* Status of handshake */
|
||||
gnutls_certificate_credentials_t *credentials;
|
||||
/* TLS credentials */
|
||||
char priority_string[1024];
|
||||
/* Priority string */
|
||||
|
||||
|
||||
DEBUG_printf(("7_httpTLSStart(http=%p)", http));
|
||||
DEBUG_printf(("3_httpTLSStart(http=%p)", http));
|
||||
|
||||
if (tls_options < 0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting defaults.");
|
||||
_cupsSetDefaults();
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
|
||||
}
|
||||
|
||||
if (http->mode == _HTTP_MODE_SERVER && !tls_keypath)
|
||||
{
|
||||
@@ -1199,28 +1208,28 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
|
||||
return (-1);
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT
|
||||
if (!tls_options)
|
||||
gnutls_priority_set_direct(http->tls, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
|
||||
else if ((tls_options & _HTTP_TLS_ALLOW_SSL3) && (tls_options & _HTTP_TLS_ALLOW_RC4))
|
||||
gnutls_priority_set_direct(http->tls, "NORMAL", NULL);
|
||||
strlcpy(priority_string, "NORMAL", sizeof(priority_string));
|
||||
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-TLS1.0:-VERS-SSL3.0", sizeof(priority_string));
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
gnutls_priority_set_direct(http->tls, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL", NULL);
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL", sizeof(priority_string));
|
||||
else
|
||||
gnutls_priority_set_direct(http->tls, "NORMAL:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
|
||||
strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-SSL3.0", sizeof(priority_string));
|
||||
|
||||
if (!(tls_options & _HTTP_TLS_ALLOW_RC4))
|
||||
strlcat(priority_string, ":-ARCFOUR-128", sizeof(priority_string));
|
||||
|
||||
if (!(tls_options & _HTTP_TLS_ALLOW_DH))
|
||||
strlcat(priority_string, ":!ANON-DH", sizeof(priority_string));
|
||||
|
||||
#ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT
|
||||
gnutls_priority_set_direct(http->tls, priority_string, NULL);
|
||||
|
||||
#else
|
||||
gnutls_priority_t priority; /* Priority */
|
||||
|
||||
if (!tls_options)
|
||||
gnutls_priority_init(&priority, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
|
||||
else if ((tls_options & _HTTP_TLS_ALLOW_SSL3) && (tls_options & _HTTP_TLS_ALLOW_RC4))
|
||||
gnutls_priority_init(&priority, "NORMAL", NULL);
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
gnutls_priority_init(&priority, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL", NULL);
|
||||
else
|
||||
gnutls_priority_init(&priority, "NORMAL:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
|
||||
|
||||
gnutls_priority_init(&priority, priority_string, NULL);
|
||||
gnutls_priority_set(http->tls, priority);
|
||||
gnutls_priority_deinit(priority);
|
||||
#endif /* HAVE_GNUTLS_PRIORITY_SET_DIRECT */
|
||||
@@ -1332,5 +1341,5 @@ _httpTLSWrite(http_t *http, /* I - Connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: tls-gnutls.c 12481 2015-02-03 12:45:14Z msweet $".
|
||||
* End of "$Id: tls-gnutls.c 12670 2015-05-27 19:48:05Z msweet $".
|
||||
*/
|
||||
|
||||
+18
-7
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: tls-sspi.c 12481 2015-02-03 12:45:14Z msweet $"
|
||||
* "$Id: tls-sspi.c 12647 2015-05-20 18:37:52Z msweet $"
|
||||
*
|
||||
* TLS support for CUPS on Windows using the Security Support Provider
|
||||
* Interface (SSPI).
|
||||
@@ -54,7 +54,7 @@
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static int tls_options = 0;/* Options for TLS connections */
|
||||
static int tls_options = -1;/* Options for TLS connections */
|
||||
|
||||
|
||||
/*
|
||||
@@ -930,7 +930,14 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
|
||||
*hostptr; /* Pointer into hostname */
|
||||
|
||||
|
||||
DEBUG_printf(("7_httpTLSStart(http=%p)", http));
|
||||
DEBUG_printf(("3_httpTLSStart(http=%p)", http));
|
||||
|
||||
if (tls_options < 0)
|
||||
{
|
||||
DEBUG_puts("4_httpTLSStart: Setting defaults.");
|
||||
_cupsSetDefaults();
|
||||
DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
|
||||
}
|
||||
|
||||
if ((http->tls = http_sspi_alloc()) == NULL)
|
||||
return (-1);
|
||||
@@ -1756,14 +1763,18 @@ http_sspi_find_credentials(
|
||||
#ifdef SP_PROT_TLS1_2_SERVER
|
||||
if (http->mode == _HTTP_MODE_SERVER)
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER | SP_PROT_SSL3_SERVER;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
if (tls_options & _HTTP_TLS_DENY_TLS10)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
|
||||
else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_SSL3_CLIENT;
|
||||
else
|
||||
SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT;
|
||||
@@ -1786,7 +1797,7 @@ http_sspi_find_credentials(
|
||||
}
|
||||
#endif /* SP_PROT_TLS1_2_SERVER */
|
||||
|
||||
/* TODO: Support _HTTP_TLS_ALLOW_RC4 option; right now we'll rely on Windows registry to enable/disable RC4... */
|
||||
/* TODO: Support _HTTP_TLS_ALLOW_RC4 and _HTTP_TLS_ALLOW_DH options; right now we'll rely on Windows registry to enable/disable RC4/DH... */
|
||||
|
||||
/*
|
||||
* Create an SSPI credential.
|
||||
@@ -2416,5 +2427,5 @@ http_sspi_verify(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: tls-sspi.c 12481 2015-02-03 12:45:14Z msweet $".
|
||||
* End of "$Id: tls-sspi.c 12647 2015-05-20 18:37:52Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,739 @@
|
||||
/*
|
||||
* "$Id: tlscheck.c 12688 2015-06-03 17:31:30Z msweet $"
|
||||
*
|
||||
* TLS check program for CUPS.
|
||||
*
|
||||
* Copyright 2007-2015 by Apple Inc.
|
||||
* Copyright 1997-2006 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/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups-private.h"
|
||||
|
||||
|
||||
#ifndef HAVE_SSL
|
||||
int main(void) { puts("Sorry, no TLS support compiled in."); return (1); }
|
||||
#else
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void usage(void);
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry.
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* HTTP connection */
|
||||
const char *server = NULL; /* Hostname from command-line */
|
||||
int port = 0; /* Port number */
|
||||
const char *cipherName = "UNKNOWN";/* Cipher suite name */
|
||||
int dhBits = 0; /* Diffie-Hellman bits */
|
||||
int tlsVersion = 0; /* TLS version number */
|
||||
char uri[1024], /* Printer URI */
|
||||
scheme[32], /* URI scheme */
|
||||
host[256], /* Hostname */
|
||||
userpass[256], /* Username/password */
|
||||
resource[256]; /* Resource path */
|
||||
int tls_options = _HTTP_TLS_NONE,
|
||||
/* TLS options */
|
||||
verbose = 0; /* Verbosity */
|
||||
ipp_t *request, /* IPP Get-Printer-Attributes request */
|
||||
*response; /* IPP Get-Printer-Attributes response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
const char *name; /* Attribute name */
|
||||
char value[1024]; /* Attribute (string) value */
|
||||
static const char * const pattrs[] = /* Requested attributes */
|
||||
{
|
||||
"color-supported",
|
||||
"compression-supported",
|
||||
"document-format-supported",
|
||||
"pages-per-minute",
|
||||
"printer-location",
|
||||
"printer-make-and-model",
|
||||
"printer-state",
|
||||
"printer-state-reasons",
|
||||
"sides-supported",
|
||||
"uri-authentication-supported",
|
||||
"uri-security-supported"
|
||||
};
|
||||
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
{
|
||||
if (!strcmp(argv[i], "--dh"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_ALLOW_DH;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--no-tls10"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_DENY_TLS10;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--rc4"))
|
||||
{
|
||||
tls_options |= _HTTP_TLS_ALLOW_RC4;
|
||||
}
|
||||
else if (!strcmp(argv[i], "--verbose") || !strcmp(argv[i], "-v"))
|
||||
{
|
||||
verbose = 1;
|
||||
}
|
||||
else if (argv[i][0] == '-')
|
||||
{
|
||||
printf("tlscheck: Unknown option '%s'.\n", argv[i]);
|
||||
usage();
|
||||
}
|
||||
else if (!server)
|
||||
{
|
||||
if (!strncmp(argv[i], "ipps://", 7))
|
||||
{
|
||||
httpSeparateURI(HTTP_URI_CODING_ALL, argv[i], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource));
|
||||
server = host;
|
||||
}
|
||||
else
|
||||
{
|
||||
server = argv[i];
|
||||
strlcpy(resource, "/ipp/print", sizeof(resource));
|
||||
}
|
||||
}
|
||||
else if (!port && (argv[i][0] == '=' || isdigit(argv[i][0] & 255)))
|
||||
{
|
||||
if (argv[i][0] == '=')
|
||||
port = atoi(argv[i] + 1);
|
||||
else
|
||||
port = atoi(argv[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("tlscheck: Unexpected argument '%s'.\n", argv[i]);
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
if (!server)
|
||||
usage();
|
||||
|
||||
if (!port)
|
||||
port = 631;
|
||||
|
||||
_httpTLSSetOptions(tls_options);
|
||||
|
||||
http = httpConnect2(server, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
|
||||
if (!http)
|
||||
{
|
||||
printf("%s: ERROR (%s)\n", server, cupsLastErrorString());
|
||||
return (1);
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
SSLProtocol protocol;
|
||||
SSLCipherSuite cipher;
|
||||
char unknownCipherName[256];
|
||||
int paramsNeeded = 0;
|
||||
const void *params;
|
||||
size_t paramsLen;
|
||||
OSStatus err;
|
||||
|
||||
if ((err = SSLGetNegotiatedProtocolVersion(http->tls, &protocol)) != noErr)
|
||||
{
|
||||
printf("%s: ERROR (No protocol version - %d)\n", server, (int)err);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
switch (protocol)
|
||||
{
|
||||
default :
|
||||
tlsVersion = 0;
|
||||
break;
|
||||
case kSSLProtocol3 :
|
||||
tlsVersion = 30;
|
||||
break;
|
||||
case kTLSProtocol1 :
|
||||
tlsVersion = 10;
|
||||
break;
|
||||
case kTLSProtocol11 :
|
||||
tlsVersion = 11;
|
||||
break;
|
||||
case kTLSProtocol12 :
|
||||
tlsVersion = 12;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((err = SSLGetNegotiatedCipher(http->tls, &cipher)) != noErr)
|
||||
{
|
||||
printf("%s: ERROR (No cipher suite - %d)\n", server, (int)err);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
switch (cipher)
|
||||
{
|
||||
case TLS_NULL_WITH_NULL_NULL:
|
||||
cipherName = "TLS_NULL_WITH_NULL_NULL";
|
||||
break;
|
||||
case TLS_RSA_WITH_NULL_MD5:
|
||||
cipherName = "TLS_RSA_WITH_NULL_MD5";
|
||||
break;
|
||||
case TLS_RSA_WITH_NULL_SHA:
|
||||
cipherName = "TLS_RSA_WITH_NULL_SHA";
|
||||
break;
|
||||
case TLS_RSA_WITH_RC4_128_MD5:
|
||||
cipherName = "TLS_RSA_WITH_RC4_128_MD5";
|
||||
break;
|
||||
case TLS_RSA_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_RSA_WITH_RC4_128_SHA";
|
||||
break;
|
||||
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
|
||||
break;
|
||||
case TLS_RSA_WITH_NULL_SHA256:
|
||||
cipherName = "TLS_RSA_WITH_NULL_SHA256";
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA256";
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA256";
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_RC4_128_MD5:
|
||||
cipherName = "TLS_DH_anon_WITH_RC4_128_MD5";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_256_CBC_SHA256:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_PSK_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_PSK_WITH_RC4_128_SHA";
|
||||
break;
|
||||
case TLS_PSK_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA";
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA";
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_DHE_PSK_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_RSA_PSK_WITH_RC4_128_SHA";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
|
||||
break;
|
||||
case TLS_PSK_WITH_NULL_SHA:
|
||||
cipherName = "TLS_PSK_WITH_NULL_SHA";
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_NULL_SHA:
|
||||
cipherName = "TLS_DHE_PSK_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_NULL_SHA:
|
||||
cipherName = "TLS_RSA_PSK_WITH_NULL_SHA";
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_RSA_WITH_AES_128_GCM_SHA256";
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_RSA_WITH_AES_256_GCM_SHA384";
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_PSK_WITH_AES_128_GCM_SHA256";
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_PSK_WITH_AES_256_GCM_SHA384";
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA256";
|
||||
break;
|
||||
case TLS_PSK_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA384";
|
||||
break;
|
||||
case TLS_PSK_WITH_NULL_SHA256:
|
||||
cipherName = "TLS_PSK_WITH_NULL_SHA256";
|
||||
break;
|
||||
case TLS_PSK_WITH_NULL_SHA384:
|
||||
cipherName = "TLS_PSK_WITH_NULL_SHA384";
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_NULL_SHA256:
|
||||
cipherName = "TLS_DHE_PSK_WITH_NULL_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_PSK_WITH_NULL_SHA384:
|
||||
cipherName = "TLS_DHE_PSK_WITH_NULL_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_NULL_SHA256:
|
||||
cipherName = "TLS_RSA_PSK_WITH_NULL_SHA256";
|
||||
break;
|
||||
case TLS_RSA_PSK_WITH_NULL_SHA384:
|
||||
cipherName = "TLS_RSA_PSK_WITH_NULL_SHA384";
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA";
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_RSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA";
|
||||
break;
|
||||
case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_DH_anon_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_NULL_SHA:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_NULL_SHA:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_NULL_SHA:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_NULL_SHA:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_anon_WITH_NULL_SHA:
|
||||
cipherName = "TLS_ECDH_anon_WITH_NULL_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_anon_WITH_RC4_128_SHA:
|
||||
cipherName = "TLS_ECDH_anon_WITH_RC4_128_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_anon_WITH_AES_128_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
case TLS_ECDH_anon_WITH_AES_256_CBC_SHA:
|
||||
cipherName = "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
|
||||
paramsNeeded = 1;
|
||||
break;
|
||||
default :
|
||||
snprintf(unknownCipherName, sizeof(unknownCipherName), "UNKNOWN_%04X", cipher);
|
||||
cipherName = unknownCipherName;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cipher == TLS_RSA_WITH_RC4_128_MD5 ||
|
||||
cipher == TLS_RSA_WITH_RC4_128_SHA)
|
||||
{
|
||||
printf("%s: ERROR (Printers MUST NOT negotiate RC4 cipher suites.)\n", server);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
if ((err = SSLGetDiffieHellmanParams(http->tls, ¶ms, ¶msLen)) != noErr && paramsNeeded)
|
||||
{
|
||||
printf("%s: ERROR (Unable to get Diffie-Hellman parameters - %d)\n", server, (int)err);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (paramsLen < 128 && paramsLen != 0)
|
||||
{
|
||||
printf("%s: ERROR (Diffie-Hellman parameters MUST be at least 2048 bits, but Printer uses only %d bits/%d bytes)\n", server, (int)paramsLen * 8, (int)paramsLen);
|
||||
httpClose(http);
|
||||
return (1);
|
||||
}
|
||||
|
||||
dhBits = (int)paramsLen * 8;
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
if (dhBits > 0)
|
||||
printf("%s: OK (TLS: %d.%d, %s, %d DH bits)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName, dhBits);
|
||||
else
|
||||
printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName);
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource);
|
||||
request = ippNewRequest(IPP_OP_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());
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
|
||||
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
|
||||
for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response))
|
||||
{
|
||||
if (ippGetGroupTag(attr) != IPP_TAG_PRINTER)
|
||||
continue;
|
||||
|
||||
if ((name = ippGetName(attr)) == NULL)
|
||||
continue;
|
||||
|
||||
ippAttributeString(attr, value, sizeof(value));
|
||||
printf(" %s=%s\n", name, value);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
httpClose(http);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'usage()' - Show program usage.
|
||||
*/
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
puts("Usage: ./tlscheck [options] server [port]");
|
||||
puts(" ./tlscheck [options] ipps://server[:port]/path");
|
||||
puts("");
|
||||
puts("Options:");
|
||||
puts(" --dh Allow DH/DHE key exchange");
|
||||
puts(" --no-tls10 Disable TLS/1.0");
|
||||
puts(" --rc4 Allow RC4 encryption");
|
||||
puts(" --verbose Be verbose");
|
||||
puts(" -v Be verbose");
|
||||
puts("");
|
||||
puts("The default port is 631.");
|
||||
|
||||
exit(1);
|
||||
}
|
||||
#endif /* !HAVE_SSL */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: tlscheck.c 12688 2015-06-03 17:31:30Z msweet $".
|
||||
*/
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: transcode.c 12332 2014-12-09 20:58:45Z msweet $"
|
||||
* "$Id: transcode.c 12330 2014-12-09 20:57:28Z msweet $"
|
||||
*
|
||||
* Transcoding support for CUPS.
|
||||
*
|
||||
@@ -716,5 +716,5 @@ cupsUTF32ToUTF8(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: transcode.c 12332 2014-12-09 20:58:45Z msweet $"
|
||||
* End of "$Id: transcode.c 12330 2014-12-09 20:57:28Z msweet $"
|
||||
*/
|
||||
|
||||
+11
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usersys.c 12481 2015-02-03 12:45:14Z msweet $"
|
||||
* "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $"
|
||||
*
|
||||
* User, system, and password routines for CUPS.
|
||||
*
|
||||
@@ -1209,10 +1209,10 @@ cups_set_ssl_options(
|
||||
const char *value) /* I - Value */
|
||||
{
|
||||
/*
|
||||
* SSLOptions [AllowRC4] [AllowSSL3] [None]
|
||||
* SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyTLS1.0] [None]
|
||||
*/
|
||||
|
||||
int options = 0; /* SSL/TLS options */
|
||||
int options = _HTTP_TLS_NONE; /* SSL/TLS options */
|
||||
char temp[256], /* Copy of value */
|
||||
*start, /* Start of option */
|
||||
*end; /* End of option */
|
||||
@@ -1241,11 +1241,17 @@ cups_set_ssl_options(
|
||||
options |= _HTTP_TLS_ALLOW_RC4;
|
||||
else if (!_cups_strcasecmp(start, "AllowSSL3"))
|
||||
options |= _HTTP_TLS_ALLOW_SSL3;
|
||||
else if (!_cups_strcasecmp(start, "AllowDH"))
|
||||
options |= _HTTP_TLS_ALLOW_DH;
|
||||
else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
|
||||
options |= _HTTP_TLS_DENY_TLS10;
|
||||
else if (!_cups_strcasecmp(start, "None"))
|
||||
options = 0;
|
||||
options = _HTTP_TLS_NONE;
|
||||
}
|
||||
|
||||
cc->ssl_options = options;
|
||||
|
||||
DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x", cc, value, options));
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
@@ -1264,5 +1270,5 @@ cups_set_user(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usersys.c 12481 2015-02-03 12:45:14Z msweet $".
|
||||
* End of "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: util.c 12449 2015-01-29 20:32:16Z msweet $"
|
||||
* "$Id: util.c 12448 2015-01-29 20:32:07Z msweet $"
|
||||
*
|
||||
* Printing utilities for CUPS.
|
||||
*
|
||||
@@ -1655,5 +1655,5 @@ cups_get_printer_uri(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: util.c 12449 2015-01-29 20:32:16Z msweet $".
|
||||
* End of "$Id: util.c 12448 2015-01-29 20:32:07Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: versioning.h 12419 2015-01-22 15:51:20Z msweet $"
|
||||
* "$Id: versioning.h 12418 2015-01-22 15:49:23Z msweet $"
|
||||
*
|
||||
* API versioning definitions for CUPS.
|
||||
*
|
||||
@@ -162,5 +162,5 @@
|
||||
#endif /* !_CUPS_VERSIONING_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: versioning.h 12419 2015-01-22 15:51:20Z msweet $".
|
||||
* End of "$Id: versioning.h 12418 2015-01-22 15:49:23Z msweet $".
|
||||
*/
|
||||
|
||||
+3
-26
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 12278 2014-12-01 13:53:56Z msweet $"
|
||||
#
|
||||
# Datafile makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2011 by Apple Inc.
|
||||
# Copyright 2007-2014 by Apple Inc.
|
||||
# Copyright 1993-2006 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -19,17 +19,6 @@ include ../Makedefs
|
||||
# Data files...
|
||||
#
|
||||
|
||||
BANNERS = \
|
||||
classified \
|
||||
confidential \
|
||||
secret \
|
||||
standard \
|
||||
topsecret \
|
||||
unclassified
|
||||
|
||||
DATAFILES = \
|
||||
testprint
|
||||
|
||||
PPDCFILES = \
|
||||
epson.h \
|
||||
font.defs \
|
||||
@@ -87,13 +76,7 @@ install: all install-data install-headers install-libs install-exec
|
||||
|
||||
install-data:
|
||||
$(INSTALL_DIR) -m 755 $(DATADIR)/banners
|
||||
for file in $(BANNERS); do \
|
||||
$(INSTALL_DATA) $$file $(DATADIR)/banners; \
|
||||
done
|
||||
$(INSTALL_DIR) -m 755 $(DATADIR)/data
|
||||
for file in $(DATAFILES); do \
|
||||
$(INSTALL_DATA) $$file $(DATADIR)/data; \
|
||||
done
|
||||
$(INSTALL_DIR) -m 755 $(DATADIR)/model
|
||||
$(INSTALL_DIR) -m 755 $(DATADIR)/ppdc
|
||||
for file in $(PPDCFILES); do \
|
||||
@@ -128,12 +111,6 @@ install-libs:
|
||||
#
|
||||
|
||||
uninstall:
|
||||
for file in $(BANNERS); do \
|
||||
$(RM) $(DATADIR)/banners/$$file; \
|
||||
done
|
||||
for file in $(DATAFILES); do \
|
||||
$(RM) $(DATADIR)/data/$$file; \
|
||||
done
|
||||
for file in $(PPDCFILES); do \
|
||||
$(RM) $(DATADIR)/ppdc/$$file; \
|
||||
done
|
||||
@@ -146,5 +123,5 @@ uninstall:
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 12278 2014-12-01 13:53:56Z msweet $".
|
||||
#
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Classified
|
||||
Footer Classified
|
||||
Image images/cups.png
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Confidential
|
||||
Footer Confidential
|
||||
Image images/cups.png
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Secret
|
||||
Footer Secret
|
||||
Image images/cups.png
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Cover Page
|
||||
Footer Cover Page
|
||||
Image images/cups.png
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show printer-name printer-info printer-location printer-make-and-model printer-driver-name printer-driver-version paper-size imageable-area
|
||||
Header Printer Test Page
|
||||
Footer Printer Test Page
|
||||
Notice CUPS @CUPS_VERSION@.
|
||||
Image images/cups.png
|
||||
Image images/color-wheel.png
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Top Secret
|
||||
Footer Top Secret
|
||||
Image images/cups.png
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#CUPS-BANNER
|
||||
Show job-id job-name job-originating-user-name job-originating-host-name job-billing
|
||||
Header Unclassified
|
||||
Footer Unclassified
|
||||
Image images/cups.png
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Array API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>CGI API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>CUPS API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>File and Directory APIs </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Filter and Backend Programming </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>HTTP and IPP APIs </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
@@ -6331,6 +6331,18 @@ are server-oriented...</p>
|
||||
<p class="description">IPP operations</p>
|
||||
<h4 class="constants">Constants</h4>
|
||||
<dl>
|
||||
<dt>IPP_OP_ACKNOWLEDGE_DOCUMENT </dt>
|
||||
<dd class="description">Acknowledge-Document</dd>
|
||||
<dt>IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER </dt>
|
||||
<dd class="description">Acknowledge-Identify-Printer</dd>
|
||||
<dt>IPP_OP_ACKNOWLEDGE_JOB </dt>
|
||||
<dd class="description">Acknowledge-Job</dd>
|
||||
<dt>IPP_OP_ACTIVATE_PRINTER </dt>
|
||||
<dd class="description">Start a printer</dd>
|
||||
<dt>IPP_OP_CANCEL_CURRENT_JOB </dt>
|
||||
<dd class="description">Cancel the current job</dd>
|
||||
<dt>IPP_OP_CANCEL_DOCUMENT </dt>
|
||||
<dd class="description">Cancel-Document</dd>
|
||||
<dt>IPP_OP_CANCEL_JOB </dt>
|
||||
<dd class="description">Cancel a job</dd>
|
||||
<dt>IPP_OP_CANCEL_JOBS </dt>
|
||||
@@ -6381,16 +6393,34 @@ are server-oriented...</p>
|
||||
<dd class="description">Reject new jobs on a printer</dd>
|
||||
<dt>IPP_OP_CUPS_SET_DEFAULT </dt>
|
||||
<dd class="description">Set the default printer</dd>
|
||||
<dt>IPP_OP_DEACTIVATE_PRINTER </dt>
|
||||
<dd class="description">Stop a printer</dd>
|
||||
<dt>IPP_OP_DELETE_DOCUMENT </dt>
|
||||
<dd class="description">Delete-Document</dd>
|
||||
<dt>IPP_OP_DEREGISTER_OUTPUT_DEVICE </dt>
|
||||
<dd class="description">Deregister-Output-Device</dd>
|
||||
<dt>IPP_OP_DISABLE_PRINTER </dt>
|
||||
<dd class="description">Stop a printer</dd>
|
||||
<dt>IPP_OP_ENABLE_PRINTER </dt>
|
||||
<dd class="description">Start a printer</dd>
|
||||
<dt>IPP_OP_FETCH_DOCUMENT </dt>
|
||||
<dd class="description">Fetch-Document</dd>
|
||||
<dt>IPP_OP_FETCH_JOB </dt>
|
||||
<dd class="description">Fetch-Job</dd>
|
||||
<dt>IPP_OP_GET_DOCUMENTS </dt>
|
||||
<dd class="description">Get-Documents</dd>
|
||||
<dt>IPP_OP_GET_DOCUMENT_ATTRIBUTES </dt>
|
||||
<dd class="description">Get-Document-Attributes</dd>
|
||||
<dt>IPP_OP_GET_JOBS </dt>
|
||||
<dd class="description">Get a list of jobs</dd>
|
||||
<dt>IPP_OP_GET_JOB_ATTRIBUTES </dt>
|
||||
<dd class="description">Get job attributes</dd>
|
||||
<dt>IPP_OP_GET_NEXT_DOCUMENT_DATA </dt>
|
||||
<dd class="description">Get-Next-Document-Data</dd>
|
||||
<dt>IPP_OP_GET_NOTIFICATIONS <span class="info"> CUPS 1.2/OS X 10.5 </span></dt>
|
||||
<dd class="description">Get notification events </dd>
|
||||
<dt>IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES </dt>
|
||||
<dd class="description">Get-Output-Device-Attributes</dd>
|
||||
<dt>IPP_OP_GET_PRINTER_ATTRIBUTES </dt>
|
||||
<dd class="description">Get printer attributes</dd>
|
||||
<dt>IPP_OP_GET_PRINTER_SUPPORTED_VALUES </dt>
|
||||
@@ -6401,26 +6431,70 @@ are server-oriented...</p>
|
||||
<dd class="description">Get subscription attributes </dd>
|
||||
<dt>IPP_OP_HOLD_JOB </dt>
|
||||
<dd class="description">Hold a job for printing</dd>
|
||||
<dt>IPP_OP_HOLD_NEW_JOBS </dt>
|
||||
<dd class="description">Hold new jobs</dd>
|
||||
<dt>IPP_OP_IDENTIFY_PRINTER </dt>
|
||||
<dd class="description">Identify-Printer</dd>
|
||||
<dt>IPP_OP_PAUSE_PRINTER </dt>
|
||||
<dd class="description">Stop a printer</dd>
|
||||
<dt>IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB </dt>
|
||||
<dd class="description">Stop printer after the current job</dd>
|
||||
<dt>IPP_OP_PRINT_JOB </dt>
|
||||
<dd class="description">Print a single file</dd>
|
||||
<dt>IPP_OP_PRINT_URI </dt>
|
||||
<dd class="description">Print a single URL</dd>
|
||||
<dt>IPP_OP_PROMOTE_JOB </dt>
|
||||
<dd class="description">Promote a job to print sooner</dd>
|
||||
<dt>IPP_OP_PURGE_JOBS </dt>
|
||||
<dd class="description">Cancel all jobs</dd>
|
||||
<dt>IPP_OP_RELEASE_HELD_NEW_JOBS </dt>
|
||||
<dd class="description">Release new jobs</dd>
|
||||
<dt>IPP_OP_RELEASE_JOB </dt>
|
||||
<dd class="description">Release a job for printing</dd>
|
||||
<dt>IPP_OP_RENEW_SUBSCRIPTION <span class="info"> CUPS 1.2/OS X 10.5 </span></dt>
|
||||
<dd class="description">Renew a printer subscription </dd>
|
||||
<dt>IPP_OP_REPROCESS_JOB </dt>
|
||||
<dd class="description">Reprint a job</dd>
|
||||
<dt>IPP_OP_RESTART_JOB </dt>
|
||||
<dd class="description">Reprint a job</dd>
|
||||
<dt>IPP_OP_RESTART_PRINTER </dt>
|
||||
<dd class="description">Restart a printer</dd>
|
||||
<dt>IPP_OP_RESUBMIT_JOB </dt>
|
||||
<dd class="description">Resubmit-Job</dd>
|
||||
<dt>IPP_OP_RESUME_JOB </dt>
|
||||
<dd class="description">Resume the current job</dd>
|
||||
<dt>IPP_OP_RESUME_PRINTER </dt>
|
||||
<dd class="description">Start a printer</dd>
|
||||
<dt>IPP_OP_SCHEDULE_JOB_AFTER </dt>
|
||||
<dd class="description">Schedule a job to print after another</dd>
|
||||
<dt>IPP_OP_SEND_DOCUMENT </dt>
|
||||
<dd class="description">Add a file to a job</dd>
|
||||
<dt>IPP_OP_SEND_HARDCOPY_DOCUMENT </dt>
|
||||
<dd class="description">Send-Hardcopy-Document</dd>
|
||||
<dt>IPP_OP_SEND_URI </dt>
|
||||
<dd class="description">Add a URL to a job</dd>
|
||||
<dt>IPP_OP_SET_DOCUMENT_ATTRIBUTES </dt>
|
||||
<dd class="description">Set-Document-Attributes</dd>
|
||||
<dt>IPP_OP_SET_JOB_ATTRIBUTES </dt>
|
||||
<dd class="description">Set job attributes</dd>
|
||||
<dt>IPP_OP_SET_PRINTER_ATTRIBUTES </dt>
|
||||
<dd class="description">Set printer attributes</dd>
|
||||
<dt>IPP_OP_SHUTDOWN_PRINTER </dt>
|
||||
<dd class="description">Turn a printer off</dd>
|
||||
<dt>IPP_OP_STARTUP_PRINTER </dt>
|
||||
<dd class="description">Turn a printer on</dd>
|
||||
<dt>IPP_OP_SUSPEND_CURRENT_JOB </dt>
|
||||
<dd class="description">Suspend the current job</dd>
|
||||
<dt>IPP_OP_UPDATE_ACTIVE_JOBS </dt>
|
||||
<dd class="description">Update-Active-Jobs</dd>
|
||||
<dt>IPP_OP_UPDATE_DOCUMENT_STATUS </dt>
|
||||
<dd class="description">Update-Document-Status</dd>
|
||||
<dt>IPP_OP_UPDATE_JOB_STATUS </dt>
|
||||
<dd class="description">Update-Job-Status</dd>
|
||||
<dt>IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES </dt>
|
||||
<dd class="description">Update-Output-Device-Attributes</dd>
|
||||
<dt>IPP_OP_VALIDATE_DOCUMENT </dt>
|
||||
<dd class="description">Validate-Document</dd>
|
||||
<dt>IPP_OP_VALIDATE_JOB </dt>
|
||||
<dd class="description">Validate job options</dd>
|
||||
</dl>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>MIME API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Introduction to CUPS Programming </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>PPD API (DEPRECATED) </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>PPD Compiler API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Raster API </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -12,7 +12,7 @@ client.conf - client configuration file for cups (deprecated)
|
||||
<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
|
||||
The <b>client.conf</b> file configures the CUPS client and is normally located in the <i>/etc/cups</i> and/or <i>~/.cups</i> directories.
|
||||
Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.
|
||||
<p><b>Note:</b> Starting with OS X 10.7, this file is only used by command-line and X11 applications.
|
||||
<p><b>Note:</b> Starting with OS X 10.7, this file is only used by command-line and X11 applications plus the IPP backend.
|
||||
The <b>ServerName</b> directive is not supported on OS X at all.
|
||||
<h3><a name="DIRECTIVES">Directives</a></h3>
|
||||
The following directives are understood by the client. Consult the online help for detailed descriptions:
|
||||
@@ -38,12 +38,14 @@ CUPS adds the remote hostname ("name@server.example.com") for you. The default n
|
||||
<b>Note: This directive it not supported on OS X 10.7 or later.</b>
|
||||
<dt><b>ServerName </b><i>hostname-or-ip-address</i>[<i>:port</i>]<b>/version=1.1</b>
|
||||
<dd style="margin-left: 5.0em">Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
|
||||
<dt><b>SSLOptions </b>[<i>AllowRC4</i>] [<i>AllowSSL3</i>]
|
||||
<dt><b>SSLOptions </b>[<i>AllowDH</i>] [<i>AllowRC4</i>] [<i>AllowSSL3</i>] [<i>DenyTLS1.0</i>]
|
||||
<dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
|
||||
<dd style="margin-left: 5.0em">Sets encryption options (only in /etc/cups/client.conf).
|
||||
By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
|
||||
The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation.
|
||||
The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
|
||||
The <i>AllowSSL3</i> option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
|
||||
The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
|
||||
<dt><b>User </b><i>name</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the default user name to use for requests.
|
||||
<dt><b>ValidateCerts Yes</b>
|
||||
@@ -57,7 +59,7 @@ The <b>client.conf</b> file is deprecated and will no longer be supported in a f
|
||||
<a href="man-cups.html?TOPIC=Man+Pages"><b>cups</b>(1),</a>
|
||||
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2014 by Apple Inc.
|
||||
Copyright © 2007-2015 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,9 +23,11 @@ The following directives are understood by
|
||||
<dl class="man">
|
||||
<dt><a name="AccessLog"></a><b>AccessLog</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>AccessLog </b><i>filename</i>
|
||||
<dd style="margin-left: 5.0em"><dt><b>AccessLog stderr</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>AccessLog syslog</b>
|
||||
<dd style="margin-left: 5.0em">Defines the access log filename.
|
||||
Specifying a blank filename disables access log generation.
|
||||
The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
|
||||
The value "syslog" causes log entries to be sent to the system log daemon.
|
||||
The server name may be included in filenames using the string "%s", for example:
|
||||
<pre class="man">
|
||||
@@ -50,9 +52,11 @@ The default is usually "/usr/share/cups".
|
||||
The default is usually "/usr/share/doc/cups".
|
||||
<dt><a name="ErrorLog"></a><b>ErrorLog</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>ErrorLog </b><i>filename</i>
|
||||
<dd style="margin-left: 5.0em"><dt><b>ErrorLog stderr</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>ErrorLog syslog</b>
|
||||
<dd style="margin-left: 5.0em">Defines the error log filename.
|
||||
Specifying a blank filename disables error log generation.
|
||||
The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
|
||||
The value "syslog" causes log entries to be sent to the system log daemon.
|
||||
The server name may be included in filenames using the string "%s", for example:
|
||||
<pre class="man">
|
||||
@@ -95,8 +99,10 @@ The default group is operating system specific but is usually "lp" or "nobody".
|
||||
<dd style="margin-left: 5.0em">Specifies the permissions of all log files that the scheduler writes.
|
||||
The default is "0644".
|
||||
<dt><a name="PageLog"></a><b>PageLog </b>[ <i>filename</i> ]
|
||||
<dd style="margin-left: 5.0em"><dt><b>PageLog stderr</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>PageLog syslog</b>
|
||||
<dd style="margin-left: 5.0em">Defines the page log filename.
|
||||
The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
|
||||
The value "syslog" causes log entries to be sent to the system log daemon.
|
||||
Specifying a blank filename disables page log generation.
|
||||
The server name may be included in filenames using the string "%s", for example:
|
||||
@@ -112,8 +118,7 @@ The default is "remroot".
|
||||
<dt><a name="RequestRoot"></a><b>RequestRoot </b><i>directory</i>
|
||||
<dd style="margin-left: 5.0em">Specifies the directory that contains print jobs and other HTTP request data.
|
||||
The default is "/var/spool/cups".
|
||||
<dt><a name="Sandboxing"></a><b>Sandboxing off</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>Sandboxing relaxed</b>
|
||||
<dt><a name="Sandboxing"></a><b>Sandboxing relaxed</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>Sandboxing strict</b>
|
||||
<dd style="margin-left: 5.0em">Specifies the level of security sandboxing that is applied to print filters, backends, and other child processes of the scheduler.
|
||||
The default is "strict".
|
||||
|
||||
@@ -215,7 +215,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp\-registrations)"
|
||||
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp">http://www.pwg.org/ipp</a>)
|
||||
RFC 2911 (<a href="http://tools.ietf.org/html/rfc2911)">http://tools.ietf.org/html/rfc2911)</a>,
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2014 by Apple Inc.
|
||||
Copyright © 2007-2015 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -131,6 +131,9 @@ test report.
|
||||
<dd style="margin-left: 5.0em"><dt><b>EXPECT ?</b><i>attribute-name predicate(s)</i>
|
||||
<dd style="margin-left: 5.0em"><dt><b>EXPECT !</b><i>attribute-name</i>
|
||||
<dd style="margin-left: 5.0em">Specifies that the response must/may/must not include the named attribute. Additional requirements can be added as predicates - see the "EXPECT PREDICATES" section for more information on predicates. Attribute names can specify member attributes by separating the attribute and member names with the forward slash, for example "media-col/media-size/x-dimension".
|
||||
<dt><b>EXPECT-ALL </b><i>attribute-name </i>[ <i>predicate(s) </i>]
|
||||
<dd style="margin-left: 5.0em"><dt><b>EXPECT-ALL ?</b><i>attribute-name predicate(s)</i>
|
||||
<dd style="margin-left: 5.0em">Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates.
|
||||
<dt><b>FILE filename</b>
|
||||
<dd style="margin-left: 5.0em">Specifies a file to include at the end of the request. This is typically used when sending a test print file.
|
||||
<dt><b>GROUP tag</b>
|
||||
@@ -247,6 +250,9 @@ Specifies the maximum number of times to repeat if the <b>REPEAT-MATCH</b> or <b
|
||||
<dd style="margin-left: 5.0em">Requires that at least one value of the <b>EXPECT</b> attribute matches the boolean value given.
|
||||
<dt><b>WITH-VALUE "/</b><i>regular expression</i><b>/"</b>
|
||||
<dd style="margin-left: 5.0em">Requires that at least one value of the <b>EXPECT</b> attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
|
||||
<dt><b>WITH-VALUE-FROM </b><i>attribute-name</i>
|
||||
<dd style="margin-left: 5.0em">Requires that the value(s) of the <b>EXPECT</b> attribute matches the value(s) in the specified attribute.
|
||||
For example, "EXPECT job-sheets WITH-VALUE-FROM job-sheets-supported" requires that the "job-sheets" value is listed as a value of the "job-sheets-supported" attribute.
|
||||
</dl>
|
||||
<h3><a name="STATUS_PREDICATES">Status Predicates</a></h3>
|
||||
The following predicates are understood following the <b>STATUS</b> test directive:
|
||||
@@ -495,7 +501,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">
|
||||
PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
|
||||
RFC 2911 (<a href="http://tools.ietf.org/html/rfc3911">http://tools.ietf.org/html/rfc3911</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2014 by Apple Inc.
|
||||
Copyright © 2007-2015 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -79,6 +79,7 @@ This option cannot be specified with the <i>-P</i> option (PPD file) and is inte
|
||||
Use the <i>-m</i> option with the
|
||||
<a href="man-lpinfo.html?TOPIC=Man+Pages"><b>lpinfo</b>(8)</a>
|
||||
command to get a list of supported models.
|
||||
The model "raw" clears any existing interface script or PPD file and the model "everywhere" queries the printer referred to by the specified IPP <i>device-uri</i>.
|
||||
<dt><b>-o cupsIPPSupplies=true</b>
|
||||
<dd style="margin-left: 5.0em"><dt><b>-o cupsIPPSupplies=false</b>
|
||||
<dd style="margin-left: 5.0em">Specifies whether IPP supply level values should be reported.
|
||||
@@ -161,6 +162,13 @@ Finally, the CUPS version of <b>lpadmin</b> may ask the user for an access passw
|
||||
This differs from the System V version which requires the root user to execute this command.
|
||||
<h2 class="title"><a name="NOTES">Notes</a></h2>
|
||||
The CUPS version of <b>lpadmin</b> does not support all of the System V or Solaris printing system configuration options.
|
||||
<h2 class="title"><a name="EXAMPLE">Example</a></h2>
|
||||
Create an IPP Everywhere print queue:
|
||||
<pre class="man">
|
||||
|
||||
lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere
|
||||
|
||||
</pre>
|
||||
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
|
||||
<a href="man-cupsaccept.html?TOPIC=Man+Pages"><b>cupsaccept</b>(8),</a>
|
||||
<a href="man-cupsenable.html?TOPIC=Man+Pages"><b>cupsenable</b>(8),</a>
|
||||
@@ -168,7 +176,7 @@ The CUPS version of <b>lpadmin</b> does not support all of the System V or Solar
|
||||
<a href="man-lpoptions.html?TOPIC=Man+Pages"><b>lpoptions</b>(1),</a>
|
||||
CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
|
||||
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
|
||||
Copyright © 2007-2014 by Apple Inc.
|
||||
Copyright © 2007-2015 by Apple Inc.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Developing PostScript Printer Drivers </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Introduction to the PPD Compiler </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>Developing Raster Printer Drivers </title>
|
||||
<meta name="keywords" content="Programming">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<title>CUPS PPD Extensions </title>
|
||||
<meta name="keywords" content="Specifications">
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="creator" content="Mini-XML v2.7">
|
||||
<meta name="creator" content="Mini-XML v2.8">
|
||||
<style type="text/css"><!--
|
||||
BODY {
|
||||
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
|
||||
|
||||
+8
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $"
|
||||
#
|
||||
# Filter makefile for CUPS.
|
||||
#
|
||||
@@ -367,6 +367,12 @@ rastertopwg: rastertopwg.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE)
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ rastertopwg.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS)
|
||||
|
||||
rastertopwg-static: rastertopwg.o ../cups/$(LIBCUPSSTATIC) libcupsimage.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ rastertopwg.o libcupsimage.a \
|
||||
../cups/$(LIBCUPSSTATIC) $(IMGLIBS) $(DSOLIBS) $(COMMONLIBS) \
|
||||
$(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI)
|
||||
|
||||
|
||||
#
|
||||
# testraster
|
||||
@@ -398,5 +404,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: gziptoany.c 12656 2015-05-22 17:27:37Z msweet $"
|
||||
* "$Id: gziptoany.c 12655 2015-05-22 17:26:40Z msweet $"
|
||||
*
|
||||
* GZIP/raw pre-filter for CUPS.
|
||||
*
|
||||
@@ -112,5 +112,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: gziptoany.c 12656 2015-05-22 17:27:37Z msweet $".
|
||||
* End of "$Id: gziptoany.c 12655 2015-05-22 17:26:40Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: pstops.c 12656 2015-05-22 17:27:37Z msweet $"
|
||||
* "$Id: pstops.c 12655 2015-05-22 17:26:40Z msweet $"
|
||||
*
|
||||
* PostScript filter for CUPS.
|
||||
*
|
||||
@@ -3405,5 +3405,5 @@ write_options(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: pstops.c 12656 2015-05-22 17:27:37Z msweet $".
|
||||
* End of "$Id: pstops.c 12655 2015-05-22 17:26:40Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: raster.c 12679 2015-05-28 19:09:57Z msweet $"
|
||||
* "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $"
|
||||
*
|
||||
* Raster file routines for CUPS.
|
||||
*
|
||||
@@ -1457,5 +1457,5 @@ cups_write_fd(void *ctx, /* I - File descriptor pointer */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: raster.c 12679 2015-05-28 19:09:57Z msweet $".
|
||||
* End of "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: rastertoepson.c 12618 2015-05-06 20:28:48Z msweet $"
|
||||
* "$Id: rastertoepson.c 12617 2015-05-06 20:28:22Z msweet $"
|
||||
*
|
||||
* EPSON ESC/P and ESC/P2 filter for CUPS.
|
||||
*
|
||||
@@ -1150,5 +1150,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: rastertoepson.c 12618 2015-05-06 20:28:48Z msweet $".
|
||||
* End of "$Id: rastertoepson.c 12617 2015-05-06 20:28:22Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: rastertohp.c 12575 2015-03-26 16:36:54Z msweet $"
|
||||
* "$Id: rastertohp.c 12574 2015-03-26 16:36:18Z msweet $"
|
||||
*
|
||||
* Hewlett-Packard Page Control Language filter for CUPS.
|
||||
*
|
||||
@@ -871,5 +871,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: rastertohp.c 12575 2015-03-26 16:36:54Z msweet $".
|
||||
* End of "$Id: rastertohp.c 12574 2015-03-26 16:36:18Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: rastertopwg.c 12610 2015-05-06 12:24:54Z msweet $"
|
||||
* "$Id: rastertopwg.c 12609 2015-05-06 12:24:47Z msweet $"
|
||||
*
|
||||
* CUPS raster to PWG raster format filter for CUPS.
|
||||
*
|
||||
@@ -459,5 +459,5 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: rastertopwg.c 12610 2015-05-06 12:24:54Z msweet $".
|
||||
* End of "$Id: rastertopwg.c 12609 2015-05-06 12:24:47Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 12347 2014-12-09 21:47:23Z msweet $"
|
||||
# "$Id: Makefile 12233 2014-10-25 00:03:02Z msweet $"
|
||||
#
|
||||
# Locale file makefile for CUPS.
|
||||
#
|
||||
@@ -204,5 +204,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 12347 2014-12-09 21:47:23Z msweet $".
|
||||
# End of "$Id: Makefile 12233 2014-10-25 00:03:02Z msweet $".
|
||||
#
|
||||
|
||||
+684
-650
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -366,6 +366,7 @@
|
||||
// TRANSLATORS: Message is "subject: error"
|
||||
"%s: %s" = "%s: %s";
|
||||
"%s: %s failed: %s" = "%s: %s failed: %s";
|
||||
"%s: Bad printer URI \"%s\"." = "%s: Bad printer URI \"%s\".";
|
||||
"%s: Bad version %s for \"-V\"." = "%s: Bad version %s for \"-V\".";
|
||||
"%s: Don't know what to do." = "%s: Don't know what to do.";
|
||||
"%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination \"%s\".";
|
||||
@@ -414,13 +415,16 @@
|
||||
"%s: No filter to convert from %s/%s to %s/%s." = "%s: No filter to convert from %s/%s to %s/%s.";
|
||||
"%s: Operation failed: %s" = "%s: Operation failed: %s";
|
||||
"%s: Sorry, no encryption support." = "%s: Sorry, no encryption support.";
|
||||
"%s: Unable to connect to \"%s:%d\": %s" = "%s: Unable to connect to \"%s:%d\": %s";
|
||||
"%s: Unable to connect to server." = "%s: Unable to connect to server.";
|
||||
"%s: Unable to contact server." = "%s: Unable to contact server.";
|
||||
"%s: Unable to create PPD file: %s" = "%s: Unable to create PPD file: %s";
|
||||
"%s: Unable to determine MIME type of \"%s\"." = "%s: Unable to determine MIME type of \"%s\".";
|
||||
"%s: Unable to open \"%s\": %s" = "%s: Unable to open \"%s\": %s";
|
||||
"%s: Unable to open %s: %s" = "%s: Unable to open %s: %s";
|
||||
"%s: Unable to open PPD file: %s on line %d." = "%s: Unable to open PPD file: %s on line %d.";
|
||||
"%s: Unable to read MIME database from \"%s\" or \"%s\"." = "%s: Unable to read MIME database from \"%s\" or \"%s\".";
|
||||
"%s: Unable to resolve \"%s\"." = "%s: Unable to resolve \"%s\".";
|
||||
"%s: Unknown destination \"%s\"." = "%s: Unknown destination \"%s\".";
|
||||
"%s: Unknown destination MIME type %s/%s." = "%s: Unknown destination MIME type %s/%s.";
|
||||
"%s: Unknown option \"%c\"." = "%s: Unknown option \"%c\".";
|
||||
@@ -849,6 +853,7 @@
|
||||
"Environment Variables:" = "Environment Variables:";
|
||||
"Epson" = "Epson";
|
||||
"Error Policy" = "Error Policy";
|
||||
"Error reading raster data." = "Error reading raster data.";
|
||||
"Error sending raster data." = "Error sending raster data.";
|
||||
"Error: need hostname after \"-h\" option." = "Error: need hostname after \"-h\" option.";
|
||||
"Every 10 Labels" = "Every 10 Labels";
|
||||
@@ -1181,7 +1186,7 @@
|
||||
"Tear-Off Adjust Position" = "Tear-Off Adjust Position";
|
||||
"The \"%s\" attribute is required for print jobs." = "The \"%s\" attribute is required for print jobs.";
|
||||
"The %s attribute cannot be provided with job-ids." = "The %s attribute cannot be provided with job-ids.";
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation request." = "The '%s' Job Description attribute cannot be supplied in a job creation request.";
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request." = "The '%s' Job Status attribute cannot be supplied in a job creation request.";
|
||||
"The '%s' operation attribute cannot be supplied in a Create-Job request." = "The '%s' operation attribute cannot be supplied in a Create-Job request.";
|
||||
"The PPD file \"%s\" could not be found." = "The PPD file \"%s\" could not be found.";
|
||||
"The PPD file \"%s\" could not be opened: %s" = "The PPD file \"%s\" could not be opened: %s";
|
||||
@@ -1318,6 +1323,7 @@
|
||||
"Unable to open raster file" = "Unable to open raster file";
|
||||
"Unable to print test page" = "Unable to print test page";
|
||||
"Unable to read print data." = "Unable to read print data.";
|
||||
"Unable to rename job document file." = "Unable to rename job document file.";
|
||||
"Unable to resolve printer-uri." = "Unable to resolve printer-uri.";
|
||||
"Unable to run \"%s\": %s" = "Unable to run \"%s\": %s";
|
||||
"Unable to see in file" = "Unable to see in file";
|
||||
@@ -1485,6 +1491,7 @@
|
||||
"lpadmin: Unable to connect to server: %s" = "lpadmin: Unable to connect to server: %s";
|
||||
"lpadmin: Unable to create temporary file" = "lpadmin: Unable to create temporary file";
|
||||
"lpadmin: Unable to delete option:\n You must specify a printer name first." = "lpadmin: Unable to delete option:\n You must specify a printer name first.";
|
||||
"lpadmin: Unable to open PPD \"%s\": %s on line %d." = "lpadmin: Unable to open PPD \"%s\": %s on line %d.";
|
||||
"lpadmin: Unable to open PPD file \"%s\" - %s" = "lpadmin: Unable to open PPD file \"%s\" - %s";
|
||||
"lpadmin: Unable to remove a printer from the class:\n You must specify a printer name first." = "lpadmin: Unable to remove a printer from the class:\n You must specify a printer name first.";
|
||||
"lpadmin: Unable to set the printer options:\n You must specify a printer name first." = "lpadmin: Unable to set the printer options:\n You must specify a printer name first.";
|
||||
|
||||
+28
-3
@@ -32,7 +32,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.4.6\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2014-08-29 22:25-0400\n"
|
||||
"POT-Creation-Date: 2015-06-08 17:14-0400\n"
|
||||
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
|
||||
"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
|
||||
"Language-Team: Catalan <ca@dodds.net>\n"
|
||||
@@ -1637,6 +1637,10 @@ msgstr "%s: %s"
|
||||
msgid "%s: %s failed: %s"
|
||||
msgstr "%s: %s ha fallat: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad printer URI \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad version %s for \"-V\"."
|
||||
msgstr ""
|
||||
@@ -1840,6 +1844,10 @@ msgstr "%s: ha fallat l'operació: %s"
|
||||
msgid "%s: Sorry, no encryption support."
|
||||
msgstr "%s: ho sento, no està compilada la compatibilitat pel xifrat."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to \"%s:%d\": %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to server."
|
||||
msgstr "%s: no es pot connectar al servidor."
|
||||
@@ -1848,6 +1856,10 @@ msgstr "%s: no es pot connectar al servidor."
|
||||
msgid "%s: Unable to contact server."
|
||||
msgstr "%s: no es pot contactar amb el servidor."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to create PPD file: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to determine MIME type of \"%s\"."
|
||||
msgstr "%s: no es pot determinar el tips de MIME de «%s»."
|
||||
@@ -1868,6 +1880,10 @@ msgstr "%s: no es pot obrir el fitxer PPD: %s a la línia %d."
|
||||
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
|
||||
msgstr "%s: no es pot llegir la base de dades MIME de «%s» o «%s»."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to resolve \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unknown destination \"%s\"."
|
||||
msgstr "%s: el destí «%s» és desconegut."
|
||||
@@ -3227,6 +3243,9 @@ msgstr "Epson"
|
||||
msgid "Error Policy"
|
||||
msgstr "Normes d'error"
|
||||
|
||||
msgid "Error reading raster data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error sending raster data."
|
||||
msgstr "S'ha produït un error quan s'enviaven les dades de la trama."
|
||||
|
||||
@@ -4277,8 +4296,7 @@ msgstr "No es pot fer servir l'atribut %s amb les job-ids."
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
"request."
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
@@ -4773,6 +4791,9 @@ msgstr "No es pot imprimir la pàgina de prova"
|
||||
msgid "Unable to read print data."
|
||||
msgstr "No es poden llegir les dades d'impressió."
|
||||
|
||||
msgid "Unable to rename job document file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to resolve printer-uri."
|
||||
msgstr ""
|
||||
|
||||
@@ -5384,6 +5405,10 @@ msgstr ""
|
||||
"lpadmin: no s'ha pogut esborrar l'opció:\n"
|
||||
" Heu d'especificar primer un nom d'impressora."
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
|
||||
msgstr "lpadmin: no s'ha pogut obrir el fitxer PPD «%s» - %s"
|
||||
|
||||
+28
-3
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2014-08-29 22:25-0400\n"
|
||||
"POT-Creation-Date: 2015-06-08 17:14-0400\n"
|
||||
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
|
||||
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
|
||||
"Language-Team: Czech\n"
|
||||
@@ -1459,6 +1459,10 @@ msgstr ""
|
||||
msgid "%s: %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad printer URI \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad version %s for \"-V\"."
|
||||
msgstr ""
|
||||
@@ -1654,6 +1658,10 @@ msgstr ""
|
||||
msgid "%s: Sorry, no encryption support."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to \"%s:%d\": %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to server."
|
||||
msgstr ""
|
||||
@@ -1662,6 +1670,10 @@ msgstr ""
|
||||
msgid "%s: Unable to contact server."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to create PPD file: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to determine MIME type of \"%s\"."
|
||||
msgstr ""
|
||||
@@ -1682,6 +1694,10 @@ msgstr ""
|
||||
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to resolve \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unknown destination \"%s\"."
|
||||
msgstr ""
|
||||
@@ -3024,6 +3040,9 @@ msgstr "Epson"
|
||||
msgid "Error Policy"
|
||||
msgstr "Chování při chybě"
|
||||
|
||||
msgid "Error reading raster data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error sending raster data."
|
||||
msgstr ""
|
||||
|
||||
@@ -4063,8 +4082,7 @@ msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
"request."
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
@@ -4522,6 +4540,9 @@ msgstr "Nelze vytisknout zkušební stránku"
|
||||
msgid "Unable to read print data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to rename job document file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to resolve printer-uri."
|
||||
msgstr ""
|
||||
|
||||
@@ -5108,6 +5129,10 @@ msgid ""
|
||||
" You must specify a printer name first."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
|
||||
msgstr ""
|
||||
|
||||
+59
-18
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 2.0\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2015-05-09 22:25+0100\n"
|
||||
"POT-Creation-Date: 2015-06-08 17:14-0400\n"
|
||||
"PO-Revision-Date: 2015-05-09 22:25+0100\n"
|
||||
"Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "\tNach einem Fehler: fortfahren"
|
||||
|
||||
#, c-format
|
||||
msgid "\tAlerts: %s"
|
||||
msgstr "\Alarme: %s"
|
||||
msgstr "\tAlarme: %s"
|
||||
|
||||
msgid "\tBanner required"
|
||||
msgstr "\tBanner erforderlich"
|
||||
@@ -807,7 +807,9 @@ msgid " --[no-]share-printers Turn printer sharing on/off."
|
||||
msgstr " --[no-]share-printers Druckerfreigabe ein/aus."
|
||||
|
||||
msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
|
||||
msgstr " --[no-]user-cancel-any Erlaube/sperre Benutzern das abbrechen eines Druckauftrags."
|
||||
msgstr ""
|
||||
" --[no-]user-cancel-any Erlaube/sperre Benutzern das abbrechen eines "
|
||||
"Druckauftrags."
|
||||
|
||||
msgid " --cr End lines with CR (Mac OS 9)."
|
||||
msgstr " --cr Zeilenenden mit CR (OS 9)"
|
||||
@@ -816,7 +818,8 @@ msgid " --crlf End lines with CR + LF (Windows)."
|
||||
msgstr " --crlf Zeilenenden mit CR+LF (Windows)"
|
||||
|
||||
msgid " --domain regex Match domain to regular expression."
|
||||
msgstr " --domain regex Prüfe auf Übereinstimmung mit Regulärem Ausdruck"
|
||||
msgstr ""
|
||||
" --domain regex Prüfe auf Übereinstimmung mit Regulärem Ausdruck"
|
||||
|
||||
msgid ""
|
||||
" --exec utility [argument ...] ;\n"
|
||||
@@ -833,7 +836,9 @@ msgid " --help Show this help."
|
||||
msgstr " --help Zeige diese Hilfe."
|
||||
|
||||
msgid " --host regex Match hostname to regular expression."
|
||||
msgstr " --host regex Prüfe den Hostnamen auf Übereinstimmung mit Regulärem Audruck"
|
||||
msgstr ""
|
||||
" --host regex Prüfe den Hostnamen auf Übereinstimmung mit "
|
||||
"Regulärem Audruck"
|
||||
|
||||
msgid " --lf End lines with LF (UNIX/Linux/OS X)."
|
||||
msgstr " --lf Zeilenenden mit LF (UNIX/Linux/OS X)"
|
||||
@@ -918,7 +923,8 @@ msgstr " -E Teste mit HTTP Upgrade auf TLS."
|
||||
msgid ""
|
||||
" -F Run in the foreground but detach from console."
|
||||
msgstr ""
|
||||
" -F Laufe im Vordergrund aber abgetrennt von der Konsole."
|
||||
" -F Laufe im Vordergrund aber abgetrennt von der "
|
||||
"Konsole."
|
||||
|
||||
msgid " -H samba-server Use the named SAMBA server."
|
||||
msgstr " -H samba-server Benutze den SAMBA Server."
|
||||
@@ -953,10 +959,14 @@ msgid " -S Test with SSL encryption."
|
||||
msgstr " -S Teste mit SSL Verschlüsselung."
|
||||
|
||||
msgid " -T seconds Set the browse timeout in seconds."
|
||||
msgstr " -T seconds Setze die Zeitüberschreitung für das Browsen in Sekunden."
|
||||
msgstr ""
|
||||
" -T seconds Setze die Zeitüberschreitung für das Browsen in "
|
||||
"Sekunden."
|
||||
|
||||
msgid " -T seconds Set the receive/send timeout in seconds."
|
||||
msgstr " -T seconds Setze die Zeitüberschreitung für das Senden/Empfangen in Sekunden."
|
||||
msgstr ""
|
||||
" -T seconds Setze die Zeitüberschreitung für das Senden/"
|
||||
"Empfangen in Sekunden."
|
||||
|
||||
msgid " -U username Specify username."
|
||||
msgstr " -U username Gebe den Benutzernamen an."
|
||||
@@ -985,7 +995,8 @@ msgid " -c catalog.po Load the specified message catalog."
|
||||
msgstr ""
|
||||
|
||||
msgid " -c cups-files.conf Set cups-files.conf file to use."
|
||||
msgstr " -c cups-files.conf Setze die zu benutzende Datei cups-files.conf"
|
||||
msgstr ""
|
||||
" -c cups-files.conf Setze die zu benutzende Datei cups-files.conf"
|
||||
|
||||
msgid " -c cupsd.conf Set cupsd.conf file to use."
|
||||
msgstr " -c cups.conf Setze die zu benutzende Datei cups.conf"
|
||||
@@ -1134,7 +1145,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid " -z Compress PPD files using GNU zip."
|
||||
msgstr " -z Komprimiere PPD Datei unter Verwendung von GNU zip."
|
||||
msgstr ""
|
||||
" -z Komprimiere PPD Datei unter Verwendung von GNU zip."
|
||||
|
||||
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
|
||||
msgstr ""
|
||||
@@ -1460,6 +1472,10 @@ msgstr ""
|
||||
msgid "%s: %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad printer URI \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad version %s for \"-V\"."
|
||||
msgstr ""
|
||||
@@ -1655,6 +1671,10 @@ msgstr ""
|
||||
msgid "%s: Sorry, no encryption support."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to \"%s:%d\": %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to server."
|
||||
msgstr ""
|
||||
@@ -1663,6 +1683,10 @@ msgstr ""
|
||||
msgid "%s: Unable to contact server."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to create PPD file: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to determine MIME type of \"%s\"."
|
||||
msgstr ""
|
||||
@@ -1683,6 +1707,10 @@ msgstr ""
|
||||
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to resolve \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unknown destination \"%s\"."
|
||||
msgstr "%s: Unbekanntes Druckziel \"%s\"."
|
||||
@@ -1845,6 +1873,7 @@ msgstr "1"
|
||||
|
||||
msgid "1 inch/sec."
|
||||
msgstr "1 inch/s"
|
||||
|
||||
# Die Verwendung des x ist nur ersatzweise erlaubt, typografisch korrekt und in UTF-8 auch möglich ist ×
|
||||
# Keine Leerzeichen zwischen Zahl und ×!
|
||||
# Die Verwendung von " für die Einheit Inch ist nicht zulässig (ISO 80000).
|
||||
@@ -2109,7 +2138,7 @@ msgid "3.25x5.00\""
|
||||
msgstr "3,25×5,00 inch"
|
||||
|
||||
msgid "3.25x5.50\""
|
||||
msgstr "3,25×5,50 inch
|
||||
msgstr "3,25×5,50 inch"
|
||||
|
||||
msgid "3.25x5.83\""
|
||||
msgstr "3,25×5,83 inch"
|
||||
@@ -3033,6 +3062,9 @@ msgstr "Epson"
|
||||
msgid "Error Policy"
|
||||
msgstr "Fehlerbehandlung"
|
||||
|
||||
msgid "Error reading raster data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error sending raster data."
|
||||
msgstr "Fehler beim Senden von Rasterdaten."
|
||||
|
||||
@@ -3594,7 +3626,8 @@ msgid "No destinations added."
|
||||
msgstr "Keine Druckziele hinzugefügt."
|
||||
|
||||
msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
|
||||
msgstr "Keine Geräte-URI in argv[0] oder der Umgebungsvariablen DEVICE_URI gefunden."
|
||||
msgstr ""
|
||||
"Keine Geräte-URI in argv[0] oder der Umgebungsvariablen DEVICE_URI gefunden."
|
||||
|
||||
msgid "No error-index"
|
||||
msgstr "Kein Fehlerindex"
|
||||
@@ -3684,7 +3717,8 @@ msgid ""
|
||||
"Note: this program only validates the DSC comments, not the PostScript "
|
||||
"itself."
|
||||
msgstr ""
|
||||
"Hinweis: dieses Programme validiert nur die DSC Kommentare, nicht PostScript selber"
|
||||
"Hinweis: dieses Programme validiert nur die DSC Kommentare, nicht PostScript "
|
||||
"selber"
|
||||
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
@@ -4074,8 +4108,7 @@ msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
"request."
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
@@ -4229,8 +4262,8 @@ msgid ""
|
||||
"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
|
||||
"enable it."
|
||||
msgstr ""
|
||||
"Die Web-Schnittstelle ist derzeit abgeschaltet. Das Einschalten kann mit"
|
||||
"dem Befehl \"cupsctl WebInterface=yes\" erfolgen."
|
||||
"Die Web-Schnittstelle ist derzeit abgeschaltet. Das Einschalten kann mitdem "
|
||||
"Befehl \"cupsctl WebInterface=yes\" erfolgen."
|
||||
|
||||
#, c-format
|
||||
msgid "The which-jobs value \"%s\" is not supported."
|
||||
@@ -4540,6 +4573,9 @@ msgstr "Die Testseite kann nicht gedruckt werden"
|
||||
msgid "Unable to read print data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to rename job document file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to resolve printer-uri."
|
||||
msgstr ""
|
||||
|
||||
@@ -5051,7 +5087,8 @@ msgid "lpadmin: Expected PPD after \"-P\" option."
|
||||
msgstr "lpadmin: Nach der \"-P\" Option PPD erwartet."
|
||||
|
||||
msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
|
||||
msgstr "lpadmin: Nach der \"-u\" Option wird eine allow/deny:userlist erwartet."
|
||||
msgstr ""
|
||||
"lpadmin: Nach der \"-u\" Option wird eine allow/deny:userlist erwartet."
|
||||
|
||||
msgid "lpadmin: Expected class after \"-r\" option."
|
||||
msgstr ""
|
||||
@@ -5128,6 +5165,10 @@ msgid ""
|
||||
" You must specify a printer name first."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
|
||||
msgstr "lpadmin: Kann PPD Datei \"%s\" - %s nicht öffnen"
|
||||
|
||||
+36
-1801
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+28
-3
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2014-08-29 22:25-0400\n"
|
||||
"POT-Creation-Date: 2015-06-08 17:14-0400\n"
|
||||
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
|
||||
"Last-Translator: denis meramdjougoma <dcmeram@libertysurf.fr>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1459,6 +1459,10 @@ msgstr ""
|
||||
msgid "%s: %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad printer URI \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad version %s for \"-V\"."
|
||||
msgstr ""
|
||||
@@ -1654,6 +1658,10 @@ msgstr ""
|
||||
msgid "%s: Sorry, no encryption support."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to \"%s:%d\": %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to server."
|
||||
msgstr ""
|
||||
@@ -1662,6 +1670,10 @@ msgstr ""
|
||||
msgid "%s: Unable to contact server."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to create PPD file: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to determine MIME type of \"%s\"."
|
||||
msgstr ""
|
||||
@@ -1682,6 +1694,10 @@ msgstr ""
|
||||
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to resolve \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unknown destination \"%s\"."
|
||||
msgstr ""
|
||||
@@ -3021,6 +3037,9 @@ msgstr "Epson"
|
||||
msgid "Error Policy"
|
||||
msgstr "Règles d’erreur"
|
||||
|
||||
msgid "Error reading raster data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error sending raster data."
|
||||
msgstr ""
|
||||
|
||||
@@ -4060,8 +4079,7 @@ msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
"request."
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
@@ -4524,6 +4542,9 @@ msgstr "Impossible d’imprimer la page de test :"
|
||||
msgid "Unable to read print data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to rename job document file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to resolve printer-uri."
|
||||
msgstr ""
|
||||
|
||||
@@ -5110,6 +5131,10 @@ msgid ""
|
||||
" You must specify a printer name first."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
|
||||
msgstr ""
|
||||
|
||||
+35
-5
@@ -29,7 +29,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: CUPS 1.6\n"
|
||||
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
|
||||
"POT-Creation-Date: 2014-08-29 22:25-0400\n"
|
||||
"POT-Creation-Date: 2015-06-08 17:14-0400\n"
|
||||
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
|
||||
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
|
||||
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
|
||||
@@ -1711,6 +1711,10 @@ msgstr "%s: %s"
|
||||
msgid "%s: %s failed: %s"
|
||||
msgstr "%s: %s non riuscito correttamente: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad printer URI \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Bad version %s for \"-V\"."
|
||||
msgstr "%s: la versione %s non è valida per \"-V\"."
|
||||
@@ -1917,6 +1921,10 @@ msgstr "%s: operazione non riuscita correttamente: %s"
|
||||
msgid "%s: Sorry, no encryption support."
|
||||
msgstr "%s: spiacenti, nessun supporto per la crittografia."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to \"%s:%d\": %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to connect to server."
|
||||
msgstr "%s: non è possibile connettersi al server."
|
||||
@@ -1925,6 +1933,10 @@ msgstr "%s: non è possibile connettersi al server."
|
||||
msgid "%s: Unable to contact server."
|
||||
msgstr "%s: non è possibile contattare il server."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to create PPD file: %s"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to determine MIME type of \"%s\"."
|
||||
msgstr "%s: non è possibile determinare il tipo di MIME di \"%s\"."
|
||||
@@ -1946,6 +1958,10 @@ msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
|
||||
msgstr ""
|
||||
"%s: non è possibile leggere il database del MIME da \"%s\" oppure da \"%s\"."
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unable to resolve \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s: Unknown destination \"%s\"."
|
||||
msgstr "%s: destinazione sconosciuta \"%s\"."
|
||||
@@ -3302,6 +3318,9 @@ msgstr "Epson"
|
||||
msgid "Error Policy"
|
||||
msgstr "Policy dell'errore"
|
||||
|
||||
msgid "Error reading raster data."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error sending raster data."
|
||||
msgstr "Si è verificato un errore durante l'invio dei dati raster."
|
||||
|
||||
@@ -4351,11 +4370,8 @@ msgstr "L'attributo %s non può essere fornito con job-ids."
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
"request."
|
||||
"The '%s' Job Status attribute cannot be supplied in a job creation request."
|
||||
msgstr ""
|
||||
"L'attributo della descrizione del processo '%s' non può essere fornito nella "
|
||||
"richiesta di creazione di un processo."
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -4845,6 +4861,9 @@ msgstr "Non è possibile stampare la pagina di prova"
|
||||
msgid "Unable to read print data."
|
||||
msgstr "Non è possibile leggere i dati della stampa."
|
||||
|
||||
msgid "Unable to rename job document file."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to resolve printer-uri."
|
||||
msgstr ""
|
||||
|
||||
@@ -5461,6 +5480,10 @@ msgstr ""
|
||||
"lpadmin: non è possibile eliminare l'opzione:\n"
|
||||
" Bisogna specificare prima un nome per la stampante."
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
|
||||
msgstr "lpadmin: non è possibile aprile il file PPD \"%s\" - %s"
|
||||
@@ -6126,6 +6149,13 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
|
||||
#~ msgid "Stylus Photo Series"
|
||||
#~ msgstr "Stylus Photo Series"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
|
||||
#~ "request."
|
||||
#~ msgstr ""
|
||||
#~ "L'attributo della descrizione del processo '%s' non può essere fornito "
|
||||
#~ "nella richiesta di creazione di un processo."
|
||||
|
||||
#~ msgid "The output bin is almost full."
|
||||
#~ msgstr "Il raccoglitore di uscita è quasi pieno."
|
||||
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário