--- /dev/null
+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)
-CHANGES.txt - 2.0.4 - 2015-07-31
+CHANGES.txt - 2.1b1 - 2015-06-03
--------------------------------
-CHANGES IN CUPS V2.0.4
+CHANGES IN CUPS V2.1b1
+
+ - 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)
- - Fixed a bug in cupsRasterWritePixels (STR #4650)
- - Fixed redirection in the web interface (STR #4538)
- - The IPP backend did not respond to side-channel requests (STR #4645)
- - The scheduler did not start all pending jobs at once (STR #4646)
- - The web search incorrectly searched time-at-xxx values (STR #4652)
- - Fixed an RPM spec file issue (STR #4657)
- - The scheduler incorrectly started jobs while canceling multiple jobs
- (STR #4648)
- - Fixed processing of server overrides without port numbers (STR #4675)
- - Documentation changes (STR #4651, STR #4674)
-
-
-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)
-INSTALL - CUPS v2.0.4 - 2015-07-31
+INSTALL - CUPS v2.1b1 - 2015-06-08
----------------------------------
This file describes how to compile and install CUPS from source code. For more
#
-# "$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.
#
#
-# 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 $"
#
#
-# "$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.
#
#
-# End of "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $".
+# End of "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $".
#
-README - CUPS v2.0.4 - 2015-07-31
+README - CUPS v2.1b1 - 2015-06-08
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt" instead...
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$Id: ipp.c 12759 2015-06-24 20:06:30Z 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
"printer-alert",
"printer-alert-description",
"printer-is-accepting-jobs",
+ "printer-mandatory-job-attributes",
"printer-state",
"printer-state-message",
"printer-state-reasons"
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 */
/*
* 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
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);
FD_ZERO(&input);
FD_SET(fd, &input);
FD_SET(snmp_fd, &input);
- FD_SET(CUPS_SC_FD, &input);
while (select(fd > snmp_fd ? fd + 1 : snmp_fd + 1, &input, NULL, NULL,
NULL) <= 0 && !job_canceled);
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",
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)
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 */
* 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 */
{
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...
{
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 */
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)
{
}
/*
- * End of "$Id: ipp.c 12759 2015-06-24 20:06:30Z msweet $".
+ * End of "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
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);
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)
}
mach_port_deallocate(mach_task_self(), masterPort);
}
-
+
Iterating = 0;
}
{
iterator_reference_t *reference = userdata;
io_service_t device;
-
+
while (reference->keepRunning && (device = IOIteratorNext(iterator)) != 0x0)
{
UInt32 locationID = 0;
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);
}
}
- IOUSBInterfaceDescriptor *intfDesc = nil;
+ IOUSBInterfaceDescriptor *intfDesc = NULL;
while (reference->keepRunning && (intfDesc = (IOUSBInterfaceDescriptor *)(*intf220)->FindNextAssociatedDescriptor(intf220, intfDesc, kUSBInterfaceDesc)))
{
intfClass = intfDesc->bInterfaceClass;
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);
}
(*intf220)->Release(intf220);
}
+ IOObjectRelease(intf);
}
device_added_done:
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());
}
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;
}
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)
{
IOObjectRetain(obj);
g.printer_obj = obj;
+ g.location = deviceLocation;
g.alternateSetting = alternateSetting;
keepLooking = false;
}
{
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);
}
}
}
-
+
if (!keepLooking && g.status_timer != NULL)
{
fputs("STATE: -offline-report\n", stderr);
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);
}
}
-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...
#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;
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 */
}
CFStringRef manufacturer = deviceIDCopyManufacturer(ret);
- CFStringRef model = deviceIDCopyManufacturer(ret);
+ CFStringRef model = deviceIDCopyModel(ret);
CFStringRef serial = deviceIDCopySerialNumber(ret);
if (manufacturer == NULL || serial == NULL || model == NULL)
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);
}
}
}
- 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)
ret = deviceIDString;
CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
}
+ }
+
+ if (manufacturer != NULL)
+ CFRelease(manufacturer);
+
+ if (model != NULL)
+ CFRelease(model);
+
+ if (serial != NULL)
+ CFRelease(serial);
- return (CFStringGetLength(ret) > 0 ? ret : nil);
+ 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
err = (*printer)->ControlRequestTO(printer, 0, &request);
if (err != kIOReturnSuccess && err != kIOReturnUnderrun)
- return nil;
+ return NULL;
}
unsigned int length = description[0];
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;
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;
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);
}
}
*datalen = (int)strlen(data);
else
*datalen = 0;
-
+
CFRelease(deviceIDString);
}
else
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
#
-# "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $"
+# "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $"
#
# CGI makefile for CUPS.
#
#
-# End of "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $".
+# End of "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $".
#
/*
- * "$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
*/
#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>
* 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);
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);
/*
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 */
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);
}
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/"));
/*
- * 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 $".
*/
/*
- * "$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
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;
/*
- * 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 $".
*/
/*
- * "$Id: ipp-var.c 12769 2015-06-30 16:13:48Z msweet $"
+ * "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $"
*
* CGI <-> IPP variable routines for CUPS.
*
break;
case IPP_TAG_INTEGER :
- if (!strncmp(ippGetName(attr), "time-at-", 8))
- break; /* Ignore time-at-xxx */
-
for (i = 0; !add && i < attr->num_values; i ++)
{
char buf[255]; /* Number buffer */
/*
- * End of "$Id: ipp-var.c 12769 2015-06-30 16:13:48Z msweet $".
+ * End of "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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
while (*cookie)
{
+ int skip = 0; /* Skip this cookie? */
+
/*
* Skip leading whitespace...
*/
for (ptr = name; *cookie && *cookie != '=';)
if (ptr < (name + sizeof(name) - 1))
+ {
*ptr++ = *cookie++;
+ }
else
- break;
+ {
+ skip = 1;
+ cookie ++;
+ }
if (*cookie != '=')
break;
{
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';
* "$"...
*/
- if (name[0] != '$')
+ if (name[0] != '$' && !skip)
num_cookies = cupsAddOption(name, value, num_cookies, &cookies);
}
}
/*
- * 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 $".
*/
#
-# "$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
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 \
#
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12533 2015-02-27 12:30:26Z msweet $".
#
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
AC_CONFIG_HEADER(config.h)
dnl Version number information...
-CUPS_VERSION=2.0.4
+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'`"
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,
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
dnl
-dnl "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $"
+dnl "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $"
dnl
dnl Compiler stuff for CUPS.
dnl
# Add useful warning options for tracking down problems...
OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
- AC_MSG_CHECKING(whether compiler supports -Wno-unused-result)
- OLDCFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Werror -Wno-unused-result"
- AC_TRY_COMPILE(,,
- [OPTIM="$OPTIM -Wno-unused-result"
- AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))
- CFLAGS="$OLDCFLAGS"
-
AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wsign-conversion"
esac
dnl
-dnl End of "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $".
+dnl End of "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $".
dnl
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
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
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
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
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
AC_DEFINE(HAVE_CSSMERRORSTRING)
AC_DEFINE(HAVE_SECKEYCHAINOPEN)])
+
+ if test $uversion -ge 150; then
+ AC_DEFINE(HAVE_SSLSETENABLEDCIPHERS)
+ fi
fi
fi
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
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
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
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
/*
- * "$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
#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?
*/
#undef HAVE_SECKEYCHAINOPEN
+/*
+ * Do we have (a working) SSLSetEnabledCiphers function?
+ */
+
+#undef HAVE_SSLSETENABLEDCIPHERS
+
+
/*
* Do we have libpaper?
*/
#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 $".
*/
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.68.
#
#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
else
exitcode=1; echo positional parameters were not saved.
fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
+test x\$exitcode = x0 || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ # Preserve -v and -x to the replacement shell.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+ esac
+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
fi
if test x$as_have_required = xno; then :
} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
+ # In both cases, we have to default to `cp -p'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
fi
else
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
as_mkdir_p=false
fi
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
if $ac_init_version; then
cat <<\_ACEOF
configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.68
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
+ $as_test_x conftest$ac_exeext
}; then :
ac_retval=0
else
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION=2.0.4
+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'`"
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_AWK="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
/* end confdefs.h. */
#include <stdarg.h>
#include <stdio.h>
-struct stat;
+#include <sys/types.h>
+#include <sys/stat.h>
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int);
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_LD="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_RMDIR="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_XDGOPEN="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
for ac_prog in grep ggrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
# Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP
case `"$ac_path_GREP" --version 2>&1` in
for ac_prog in egrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
case `"$ac_path_EGREP" --version 2>&1` in
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 :
# Add useful warning options for tracking down problems...
OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-unused-result" >&5
-$as_echo_n "checking whether compiler supports -Wno-unused-result... " >&6; }
- OLDCFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Werror -Wno-unused-result"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- OPTIM="$OPTIM -Wno-unused-result"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS="$OLDCFLAGS"
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5
$as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; }
OLDCFLAGS="$CFLAGS"
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ac_pt_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
+
+ if test $uversion -ge 150; then
+ $as_echo "#define HAVE_SSLSETENABLEDCIPHERS 1" >>confdefs.h
+
+ fi
fi
fi
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ac_pt_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
esac
rm -rf conftest*
fi
-
-
fi
{ $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
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PHPCGI="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
-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
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
+ # In both cases, we have to default to `cp -p'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
fi
else
- as_ln_s='cp -pR'
+ as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
as_mkdir_p=false
fi
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# values after options handling.
ac_log="
This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69. Invocation command line was
+generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
"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" ;;
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
conf/pam.std
conf/snmp.conf
cups-config
- data/testprint
desktop/cups.desktop
doc/index.html
man/client.conf.man
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
#
-# "$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.
#
testlang.o \
testppd.o \
testpwg.o \
- testsnmp.o
+ testsnmp.o \
+ tlscheck.o
OBJS = \
$(LIBOBJS) \
$(TESTOBJS)
testoptions \
testppd \
testpwg \
- testsnmp
+ testsnmp \
+ tlscheck
TARGETS = \
$(LIBTARGETS)
$(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...
#
#
-# End of "$Id: Makefile 12032 2014-07-15 20:37:32Z msweet $".
+# End of "$Id: Makefile 12635 2015-05-19 02:12:22Z msweet $".
#
/*
- * "$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.
*
* 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");
/*
- * 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 $".
*/
/*
- * "$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
#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 $".
*/
/*
- * "$Id: cups.h 12761 2015-06-24 20:10:19Z 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
# 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...
* Constants...
*/
-# define CUPS_VERSION 2.0004
+# define CUPS_VERSION 2.0100
# define CUPS_VERSION_MAJOR 2
-# define CUPS_VERSION_MINOR 0
-# define CUPS_VERSION_PATCH 4
+# define CUPS_VERSION_MINOR 1
+# define CUPS_VERSION_PATCH 0
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
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,
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,
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,
#endif /* !_CUPS_CUPS_H_ */
/*
- * End of "$Id: cups.h 12761 2015-06-24 20:10:19Z msweet $".
+ * End of "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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
{ 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,
{ 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 },
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
# ifndef WIN32
# include <net/if.h>
+# include <resolv.h>
# ifdef HAVE_GETIFADDRS
# include <ifaddrs.h>
# else
#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 */
/*
#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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
"Suspend-Current-Job",
"Resume-Job",
- /* 0x0030 - 0x003e */
+ /* 0x0030 - 0x003f */
"Promote-Job",
"Schedule-Job-After",
"0x0032",
"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[] =
{
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
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 */
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@ */
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 */
#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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
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);
}
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);
/*
- * 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 $".
*/
/*
- * "$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.
*
_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.
}
+/*
+ * '_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.
}
+
+/*
+ * '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.
*/
/*
- * 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 $".
*/
/*
- * "$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
* Constants...
*/
-# define _PPD_CACHE_VERSION 6 /* Version number in cache file */
+# define _PPD_CACHE_VERSION 7 /* Version number in cache file */
/*
* 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);
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);
#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 $".
*/
*%
*% 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"
*% 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"
*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"
*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
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
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);
/*
- * 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 $".
*/
/*
- * "$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
"%%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"
"%%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"
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 */
/*
- * 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 $".
*/
/*
- * "$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.
*
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...
*/
/* 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 */
/*
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)
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 */
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 */
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];
error = SSLSetEnabledCiphers(http->tls, enabled, num_enabled);
}
}
-#endif /* USE_SET_ENABLED_CIPHERS */
+#endif /* HAVE_SSLSETENABLEDCIPHERS */
if (!error && http->mode == _HTTP_MODE_CLIENT)
{
/*
- * 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 $".
*/
/*
- * "$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.
*
/* 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 */
/*
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)
{
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 */
/*
- * 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 $".
*/
/*
- * "$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).
* Local globals...
*/
-static int tls_options = 0;/* Options for TLS connections */
+static int tls_options = -1;/* Options for TLS connections */
/*
*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);
#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;
}
#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.
/*
- * 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 $".
*/
--- /dev/null
+/*
+ * "$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 $".
+ */
/*
- * "$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.
*
/*
- * 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 $"
*/
/*
- * "$Id: usersys.c 12813 2015-07-30 15:00:40Z msweet $"
+ * "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $"
*
* User, system, and password routines for CUPS.
*
static void cups_finalize_client_conf(_cups_client_conf_t *cc);
static void cups_init_client_conf(_cups_client_conf_t *cc);
static void cups_read_client_conf(cups_file_t *fp, _cups_client_conf_t *cc);
-static void cups_set_default_ipp_port(_cups_globals_t *cg);
static void cups_set_encryption(_cups_client_conf_t *cc, const char *value);
#ifdef HAVE_GSSAPI
static void cups_set_gss_service_name(_cups_client_conf_t *cc, const char *value);
cg->ipp_port = atoi(port);
}
- if (!cg->ipp_port)
- cups_set_default_ipp_port(cg);
-
if (cg->server[0] == '/')
strlcpy(cg->servername, "localhost", sizeof(cg->servername));
else
cg->server[0] = '\0';
cg->servername[0] = '\0';
cg->server_version = 20;
- cg->ipp_port = 0;
}
if (cg->http)
cupsSetServer(cc.server_name);
if (!cg->ipp_port)
- cups_set_default_ipp_port(cg);
+ {
+ const char *ipp_port; /* IPP_PORT environment variable */
+
+ if ((ipp_port = getenv("IPP_PORT")) != NULL)
+ {
+ if ((cg->ipp_port = atoi(ipp_port)) <= 0)
+ cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+ }
+ else
+ cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+ }
if (!cg->user[0])
strlcpy(cg->user, cc.user, sizeof(cg->user));
}
-/*
- * 'cups_set_default_ipp_port()' - Set the default IPP port value.
- */
-
-static void
-cups_set_default_ipp_port(
- _cups_globals_t *cg) /* I - Global data */
-{
- const char *ipp_port; /* IPP_PORT environment variable */
-
-
- if ((ipp_port = getenv("IPP_PORT")) != NULL)
- {
- if ((cg->ipp_port = atoi(ipp_port)) <= 0)
- cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
- }
- else
- cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
-}
-
/*
* 'cups_set_encryption()' - Set the Encryption value.
*/
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 */
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 */
/*
- * End of "$Id: usersys.c 12813 2015-07-30 15:00:40Z msweet $".
+ * End of "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
#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 $".
*/
#
-# "$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
# Data files...
#
-BANNERS = \
- classified \
- confidential \
- secret \
- standard \
- topsecret \
- unclassified
-
-DATAFILES = \
- testprint
-
PPDCFILES = \
epson.h \
font.defs \
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 \
#
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
#
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12278 2014-12-01 13:53:56Z msweet $".
#
+++ /dev/null
-#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
-
+++ /dev/null
-#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
-
+++ /dev/null
-#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
-
+++ /dev/null
-#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
-
+++ /dev/null
-#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
+++ /dev/null
-#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
-
+++ /dev/null
-#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
-
<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;
<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;
<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;
<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;
<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;
<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;
<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>
<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>
<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>
<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;
<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;
<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;
<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;
<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;
<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:
<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>
<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>
<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">
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">
<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:
<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".
"%u" inserts the username.
</pre>
-The default is the empty string, which disables page logging.
-The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
+The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
<dt><a name="PassEnv"></a><b>PassEnv </b><i>variable </i>[ ... <i>variable </i>]
<dd style="margin-left: 5.0em">Passes the specified environment variable(s) to child processes.
<dt><a name="Policy"></a><b><Policy </b><i>name</i><b>> </b>... <b></Policy></b>
<a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</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-2015 by Apple Inc.
+Copyright © 2007-2014 by Apple Inc.
</body>
</html>
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>
<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>
<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:
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>
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.
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>
<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>
<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;
<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;
<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;
<H2 CLASS="title"><A NAME="OVERVIEW">Overview</A></H2>
-<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow linking to OpenSSL (which has a GPL-incompatible license) and for developers on Apple's operating systems to develop CUPS-based software under alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
+<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow linking to OpenSSL (which has a GPL-incompatible license) and for developers on Apple's operating systems to develop CUPS-based software until alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
<P>Apple releases updates to the CUPS software approximately every three months. Each release has a version number consisting of the major version (currently 1), minor version (currently 6), and patch version (starting at 0) separated by the period, for example "1.6.0". Releases where only the patch version number changes will contain only bug fixes to the previous release, for example "1.6.1" includes bug fixes for the "1.6.0" release. New features require the major or minor version numbers to change, for example "1.6.0" release contains new features compared to the "1.5.3" release. Multiple beta and "candidate" releases generally precede each new feature release, for example "1.5b1", "1.5b2", and "1.5rc1" preceded the "1.5.0" release. Finally, we also post regular Subversion snapshot releases, for example "1.6svn-r10486", which represent a snapshot of the development for the next feature release.</P>
<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;
#
-# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
+# "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $"
#
# Filter makefile for CUPS.
#
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
#
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $".
#
/*
- * "$Id: error.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $"
*
* Raster error handling for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
* Copyright 2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
ssize_t bytes; /* Bytes in message string */
- DEBUG_printf(("_cupsRasterAddError(f=\"%s\", ...)", f));
-
va_start(ap, f);
bytes = vsnprintf(s, sizeof(s), f, ap);
va_end(ap);
if (bytes <= 0)
return;
- DEBUG_printf(("1_cupsRasterAddError: %s", s));
-
bytes ++;
if ((size_t)bytes >= sizeof(s))
* Initialize the global data exactly once...
*/
- DEBUG_puts("3get_error_buffer()");
+ DEBUG_puts("get_error_buffer()");
pthread_once(&raster_key_once, raster_init);
if ((buf = (_cups_raster_error_t *)pthread_getspecific(raster_key))
== NULL)
{
- DEBUG_puts("4get_error_buffer: allocating memory for thread.");
+ DEBUG_puts("get_error_buffer: allocating memory for thread...");
/*
* No, allocate memory as set the pointer for the key...
buf = calloc(1, sizeof(_cups_raster_error_t));
pthread_setspecific(raster_key, buf);
- DEBUG_printf(("4get_error_buffer: buf=%p", buf));
+ DEBUG_printf((" buf=%p\n", buf));
}
/*
{
pthread_key_create(&raster_key, raster_destructor);
- DEBUG_printf(("3raster_init(): raster_key=%x(%u)", (unsigned)raster_key, (unsigned)raster_key));
+ DEBUG_printf(("raster_init(): raster_key=%x(%u)\n", (unsigned)raster_key,
+ (unsigned)raster_key));
}
/* Error buffer */
- DEBUG_printf(("3raster_destructor(value=%p)", value));
+ DEBUG_printf(("raster_destructor(value=%p)\n", value));
if (buf->start)
free(buf->start);
/*
- * End of "$Id: error.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$Id: interpret.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $"
*
* PPD command interpreter for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
* Copyright 1993-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
cups_page_header2_t *h,
int *preferred_bits);
#ifdef DEBUG
-static void DEBUG_object(const char *prefix, _cups_ps_obj_t *obj);
-static void DEBUG_stack(const char *prefix, _cups_ps_stack_t *st);
+static void DEBUG_object(_cups_ps_obj_t *obj);
+static void DEBUG_stack(_cups_ps_stack_t *st);
#endif /* DEBUG */
while ((obj = scan_ps(st, &codeptr)) != NULL)
{
#ifdef DEBUG
- DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)", st->num_objs));
- DEBUG_object("_cupsRasterExecPS", obj);
+ DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)\n", st->num_objs));
+ DEBUG_object(obj);
#endif /* DEBUG */
switch (obj->type)
pop_stack(st);
if (cleartomark_stack(st))
- _cupsRasterAddError("cleartomark: Stack underflow.\n");
+ _cupsRasterAddError("cleartomark: Stack underflow!\n");
#ifdef DEBUG
- DEBUG_puts("1_cupsRasterExecPS: dup");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_puts(" dup: ");
+ DEBUG_stack(st);
#endif /* DEBUG */
break;
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: copy");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
}
break;
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: dup");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
break;
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: index");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
}
break;
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: pop");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
break;
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: roll");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
}
}
#ifdef DEBUG
DEBUG_puts("_cupsRasterExecPS: setpagedevice");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_stack(st);
#endif /* DEBUG */
break;
break;
case CUPS_PS_OTHER :
- _cupsRasterAddError("Unknown operator \"%s\".\n", obj->value.other);
+ _cupsRasterAddError("Unknown operator \"%s\"!\n", obj->value.other);
error = 1;
- DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\".", obj->value.other));
+ DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\"!\n",
+ obj->value.other));
break;
}
error_stack(st, "Stack not empty:");
#ifdef DEBUG
- DEBUG_puts("_cupsRasterExecPS: Stack not empty");
- DEBUG_stack("_cupsRasterExecPS", st);
+ DEBUG_puts("_cupsRasterExecPS: Stack not empty:");
+ DEBUG_stack(st);
#endif /* DEBUG */
delete_stack(st);
int n; /* Index into array */
- DEBUG_printf(("3roll_stack(st=%p, s=%d, c=%d)", st, s, c));
+ DEBUG_printf((" roll_stack(st=%p, s=%d, c=%d)\n", st, s, c));
/*
* Range check input...
* Now pull /name and value pairs from the dictionary...
*/
- DEBUG_puts("3setpagedevice: Dictionary:");
+ DEBUG_puts("setpagedevice: Dictionary:");
for (obj ++; obj < end; obj ++)
{
obj ++;
#ifdef DEBUG
- DEBUG_printf(("4setpagedevice: /%s ", name));
- DEBUG_object("setpagedevice", obj);
+ DEBUG_printf(("setpagedevice: /%s ", name));
+ DEBUG_object(obj);
#endif /* DEBUG */
/*
* Ignore unknown name+value...
*/
- DEBUG_printf(("4setpagedevice: Unknown name (\"%s\") or value...\n", name));
+ DEBUG_printf((" Unknown name (\"%s\") or value...\n", name));
while (obj[1].type != CUPS_PS_NAME && obj < end)
obj ++;
*/
static void
-DEBUG_object(const char *prefix, /* I - Prefix string */
- _cups_ps_obj_t *obj) /* I - Object to print */
+DEBUG_object(_cups_ps_obj_t *obj) /* I - Object to print */
{
switch (obj->type)
{
case CUPS_PS_NAME :
- DEBUG_printf(("4%s: /%s\n", prefix, obj->value.name));
+ DEBUG_printf(("/%s\n", obj->value.name));
break;
case CUPS_PS_NUMBER :
- DEBUG_printf(("4%s: %g\n", prefix, obj->value.number));
+ DEBUG_printf(("%g\n", obj->value.number));
break;
case CUPS_PS_STRING :
- DEBUG_printf(("4%s: (%s)\n", prefix, obj->value.string));
+ DEBUG_printf(("(%s)\n", obj->value.string));
break;
case CUPS_PS_BOOLEAN :
if (obj->value.boolean)
- DEBUG_printf(("4%s: true", prefix));
+ DEBUG_puts("true");
else
- DEBUG_printf(("4%s: false", prefix));
+ DEBUG_puts("false");
break;
case CUPS_PS_NULL :
- DEBUG_printf(("4%s: null", prefix));
+ DEBUG_puts("null");
break;
case CUPS_PS_START_ARRAY :
- DEBUG_printf(("4%s: [", prefix));
+ DEBUG_puts("[");
break;
case CUPS_PS_END_ARRAY :
- DEBUG_printf(("4%s: ]", prefix));
+ DEBUG_puts("]");
break;
case CUPS_PS_START_DICT :
- DEBUG_printf(("4%s: <<", prefix));
+ DEBUG_puts("<<");
break;
case CUPS_PS_END_DICT :
- DEBUG_printf(("4%s: >>", prefix));
+ DEBUG_puts(">>");
break;
case CUPS_PS_START_PROC :
- DEBUG_printf(("4%s: {", prefix));
+ DEBUG_puts("{");
break;
case CUPS_PS_END_PROC :
- DEBUG_printf(("4%s: }", prefix));
+ DEBUG_puts("}");
break;
case CUPS_PS_CLEARTOMARK :
- DEBUG_printf(("4%s: --cleartomark--", prefix));
+ DEBUG_puts("--cleartomark--");
break;
case CUPS_PS_COPY :
- DEBUG_printf(("4%s: --copy--", prefix));
+ DEBUG_puts("--copy--");
break;
case CUPS_PS_DUP :
- DEBUG_printf(("4%s: --dup--", prefix));
+ DEBUG_puts("--dup--");
break;
case CUPS_PS_INDEX :
- DEBUG_printf(("4%s: --index--", prefix));
+ DEBUG_puts("--index--");
break;
case CUPS_PS_POP :
- DEBUG_printf(("4%s: --pop--", prefix));
+ DEBUG_puts("--pop--");
break;
case CUPS_PS_ROLL :
- DEBUG_printf(("4%s: --roll--", prefix));
+ DEBUG_puts("--roll--");
break;
case CUPS_PS_SETPAGEDEVICE :
- DEBUG_printf(("4%s: --setpagedevice--", prefix));
+ DEBUG_puts("--setpagedevice--");
break;
case CUPS_PS_STOPPED :
- DEBUG_printf(("4%s: --stopped--", prefix));
+ DEBUG_puts("--stopped--");
break;
case CUPS_PS_OTHER :
- DEBUG_printf(("4%s: --%s--", prefix, obj->value.other));
+ DEBUG_printf(("--%s--\n", obj->value.other));
break;
}
}
*/
static void
-DEBUG_stack(const char *prefix, /* I - Prefix string */
- _cups_ps_stack_t *st) /* I - Stack */
+DEBUG_stack(_cups_ps_stack_t *st) /* I - Stack */
{
int c; /* Looping var */
_cups_ps_obj_t *obj; /* Current object on stack */
for (obj = st->objs, c = st->num_objs; c > 0; c --, obj ++)
- DEBUG_object(prefix, obj);
+ DEBUG_object(obj);
}
#endif /* DEBUG */
/*
- * End of "$Id: interpret.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$Id: raster.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $"
*
* Raster file routines for CUPS.
*
*bufptr, /* Current (read) position in buffer */
*bufend; /* End of current (read) buffer */
size_t bufsize; /* Buffer size */
-#ifdef DEBUG
- size_t iocount; /* Number of bytes read/written */
-#endif /* DEBUG */
};
r->sync == CUPS_RASTER_REVSYNCv2)
r->swapped = 1;
- DEBUG_printf(("1cupsRasterOpenIO: r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
+ DEBUG_printf(("r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
}
else
{
* Get the raster header...
*/
- DEBUG_printf(("cupsRasterReadHeader2(r=%p, h=%p)", r, h));
-
if (!cups_raster_read_header(r))
{
memset(h, 0, sizeof(cups_page_header2_t));
unsigned count; /* Repetition count */
- DEBUG_printf(("cupsRasterReadPixels(r=%p, p=%p, len=%u)", r, p, len));
-
if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0 ||
r->header.cupsBytesPerLine == 0)
- {
- DEBUG_puts("1cupsRasterReadPixels: Returning 0.");
return (0);
- }
-
- DEBUG_printf(("1cupsRasterReadPixels: compressed=%d, remaining=%u", r->compressed, r->remaining));
if (!r->compressed)
{
r->remaining -= len / r->header.cupsBytesPerLine;
if (cups_raster_io(r, p, len) < (ssize_t)len)
- {
- DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
return (0);
- }
/*
* Swap bytes as needed...
* Return...
*/
- DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
-
return (len);
}
*/
if (!cups_raster_read(r, &byte, 1))
- {
- DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
return (0);
- }
r->count = (unsigned)byte + 1;
*/
if (!cups_raster_read(r, &byte, 1))
- {
- DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
return (0);
- }
if (byte & 128)
{
count = (unsigned)bytes;
if (!cups_raster_read(r, temp, count))
- {
- DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
return (0);
- }
temp += count;
bytes -= count;
bytes -= count;
if (!cups_raster_read(r, temp, r->bpp))
- {
- DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
return (0);
- }
temp += r->bpp;
count -= r->bpp;
p += bytes;
}
- DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
-
return (len);
}
* Write the byte-swapped buffer...
*/
- bytes = cups_raster_io(r, r->buffer, len);
+ return ((unsigned)cups_raster_io(r, r->buffer, len));
}
else
- bytes = cups_raster_io(r, p, len);
-
- if (bytes < len)
- return (0);
- else
- return (len);
+ return ((unsigned)cups_raster_io(r, p, len));
}
/*
if (memcmp(p, r->pcurrent, (size_t)bytes))
{
- if (cups_raster_write(r, r->pixels) <= 0)
+ if (!cups_raster_write(r, r->pixels))
return (0);
r->count = 0;
r->remaining --;
if (r->remaining == 0)
- {
- if (cups_raster_write(r, r->pixels) <= 0)
- return (0);
- else
- return (len);
- }
+ return ((unsigned)cups_raster_write(r, r->pixels));
else if (r->count == 256)
{
- if (cups_raster_write(r, r->pixels) <= 0)
+ if (cups_raster_write(r, r->pixels) == 0)
return (0);
r->count = 0;
r->remaining --;
if (r->remaining == 0)
- {
- if (cups_raster_write(r, r->pixels) <= 0)
- return (0);
- }
+ return ((unsigned)cups_raster_write(r, r->pixels));
}
}
}
size_t len; /* Length for read/swap */
- DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%d", r, r ? r->mode : 0));
-
if (r == NULL || r->mode != CUPS_RASTER_READ)
return (0);
- DEBUG_printf(("4cups_raster_read_header: r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
-
/*
* Get the length of the raster header...
*/
else
len = sizeof(cups_page_header2_t);
- DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len));
-
/*
* Read the header...
*/
memset(&(r->header), 0, sizeof(r->header));
if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len)
- {
- DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
return (0);
- }
/*
* Swap bytes as needed...
temp; /* Temporary copy */
- DEBUG_puts("4cups_raster_read_header: Swapping header bytes.");
+ DEBUG_puts("Swapping header bytes...");
for (len = 81, s = &(r->header.AdvanceDistance);
len > 0;
len --, s ++)
{
+ DEBUG_printf(("%08x =>", *s));
+
temp = *s;
*s = ((temp & 0xff) << 24) |
((temp & 0xff00) << 8) |
((temp & 0xff0000) >> 8) |
((temp & 0xff000000) >> 24);
- DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s));
+ DEBUG_printf((" %08x\n", *s));
}
}
cups_raster_update(r);
- DEBUG_printf(("4cups_raster_read_header: cupsBitsPerPixel=%u, cupsBitsPerColor=%u, cupsBytesPerLine=%u, cupsWidth=%u, cupsHeight=%u, r->bpp=%d", r->header.cupsBitsPerPixel, r->header.cupsBitsPerColor, r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsHeight, r->bpp));
-
return (r->header.cupsBitsPerPixel != 0 && r->header.cupsBitsPerColor != 0 && r->header.cupsBytesPerLine != 0 && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0);
}
total; /* Total bytes read/written */
- DEBUG_printf(("5cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
+ DEBUG_printf(("4cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
for (total = 0; total < (ssize_t)bytes; total += count, buf += count)
{
count = (*r->iocb)(r->ctx, buf, bytes - (size_t)total);
- DEBUG_printf(("6cups_raster_io: count=%d, total=%d", (int)count, (int)total));
+ DEBUG_printf(("5cups_raster_io: count=%d, total=%d", (int)count,
+ (int)total));
if (count == 0)
- {
- DEBUG_puts("6cups_raster_io: Returning 0.");
return (0);
- }
else if (count < 0)
- {
- DEBUG_puts("6cups_raster_io: Returning -1 on error.");
return (-1);
- }
-
-#ifdef DEBUG
- r->iocount += (size_t)count;
-#endif /* DEBUG */
}
- DEBUG_printf(("6cups_raster_io: Returning " CUPS_LLFMT ".", CUPS_LLCAST total));
-
return (total);
}
total; /* Total bytes read */
- DEBUG_printf(("5cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
+ DEBUG_printf(("cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
if (!r->compressed)
return (cups_raster_io(r, buf, bytes));
*/
count = (ssize_t)(2 * r->header.cupsBytesPerLine);
- if (count < 65536)
- count = 65536;
if ((size_t)count > r->bufsize)
{
{
count = (ssize_t)bytes - total;
- DEBUG_printf(("6cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
+ DEBUG_printf(("count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p...\n", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
if (remaining == 0)
{
r->bufptr = r->buffer;
r->bufend = r->buffer + remaining;
-
-#ifdef DEBUG
- r->iocount += (size_t)remaining;
-#endif /* DEBUG */
}
else
{
if (count <= 0)
return (0);
-#ifdef DEBUG
- r->iocount += (size_t)count;
-#endif /* DEBUG */
-
continue;
}
}
}
}
- DEBUG_printf(("6cups_raster_read: Returning %ld", (long)total));
-
return (total);
}
count; /* Count */
- DEBUG_printf(("3cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
+ DEBUG_printf(("cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
/*
* Allocate a write buffer as needed...
*/
count = r->header.cupsBytesPerLine * 2;
- if (count < 65536)
- count = 65536;
+ if (count < 3)
+ count = 3;
if ((size_t)count > r->bufsize)
{
wptr = malloc(count);
if (!wptr)
- {
- DEBUG_printf(("4cups_raster_write: Unable to allocate " CUPS_LLFMT " bytes for raster buffer: %s", CUPS_LLCAST count, strerror(errno)));
return (-1);
- }
r->buffer = wptr;
r->bufsize = count;
}
}
- DEBUG_printf(("4cups_raster_write: Writing " CUPS_LLFMT " bytes.", CUPS_LLCAST (wptr - r->buffer)));
-
return (cups_raster_io(r, r->buffer, (size_t)(wptr - r->buffer)));
}
while ((count = read(fd, buf, bytes)) < 0)
#endif /* WIN32 */
if (errno != EINTR && errno != EAGAIN)
- {
- DEBUG_printf(("4cups_read_fd: %s", strerror(errno)));
return (-1);
- }
-
- DEBUG_printf(("4cups_read_fd: Returning %d bytes.", (int)count));
return (count);
}
while ((count = write(fd, buf, bytes)) < 0)
#endif /* WIN32 */
if (errno != EINTR && errno != EAGAIN)
- {
- DEBUG_printf(("4cups_write_fd: %s", strerror(errno)));
return (-1);
- }
return (count);
}
/*
- * End of "$Id: raster.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
/*
- * "$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.
*
/*
- * 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 $".
*/
#
-# "$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.
#
#
-# End of "$Id: Makefile 12347 2014-12-09 21:47:23Z msweet $".
+# End of "$Id: Makefile 12233 2014-10-25 00:03:02Z msweet $".
#
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: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "\treason unknown"
msgstr ""
-#: systemv/cupstestppd.c:454
+#: systemv/cupstestppd.c:434
msgid ""
"\n"
" DETAILED CONFORMANCE TEST RESULTS"
msgstr ""
-#: systemv/cupstestppd.c:3820
+#: systemv/cupstestppd.c:3864
msgid " Ignore specific warnings."
msgstr ""
-#: systemv/cupstestppd.c:3824
+#: systemv/cupstestppd.c:3868
msgid " Issue warnings instead of errors."
msgstr ""
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
+#: systemv/cupstestppd.c:390 systemv/cupstestppd.c:395
msgid " REF: Page 15, section 3.1."
msgstr ""
-#: systemv/cupstestppd.c:405
+#: systemv/cupstestppd.c:385
msgid " REF: Page 15, section 3.2."
msgstr ""
-#: systemv/cupstestppd.c:425
+#: systemv/cupstestppd.c:405
msgid " REF: Page 19, section 3.3."
msgstr ""
-#: systemv/cupstestppd.c:378
+#: systemv/cupstestppd.c:358
msgid " REF: Page 20, section 3.4."
msgstr ""
-#: systemv/cupstestppd.c:430
+#: systemv/cupstestppd.c:410
msgid " REF: Page 27, section 3.5."
msgstr ""
-#: systemv/cupstestppd.c:373
+#: systemv/cupstestppd.c:353
msgid " REF: Page 42, section 5.2."
msgstr ""
-#: systemv/cupstestppd.c:420
+#: systemv/cupstestppd.c:400
msgid " REF: Pages 16-17, section 3.2."
msgstr ""
-#: systemv/cupstestppd.c:390
+#: systemv/cupstestppd.c:370
msgid " REF: Pages 42-45, section 5.2."
msgstr ""
-#: systemv/cupstestppd.c:384
+#: systemv/cupstestppd.c:364
msgid " REF: Pages 45-46, section 5.2."
msgstr ""
-#: systemv/cupstestppd.c:395
+#: systemv/cupstestppd.c:375
msgid " REF: Pages 48-49, section 5.2."
msgstr ""
-#: systemv/cupstestppd.c:400
+#: systemv/cupstestppd.c:380
msgid " REF: Pages 52-54, section 5.2."
msgstr ""
msgid " %-39.39s %.0f bytes"
msgstr ""
-#: systemv/cupstestppd.c:589
+#: systemv/cupstestppd.c:569
#, c-format
msgid " PASS Default%s"
msgstr ""
-#: systemv/cupstestppd.c:524
+#: systemv/cupstestppd.c:504
msgid " PASS DefaultImageableArea"
msgstr ""
-#: systemv/cupstestppd.c:558
+#: systemv/cupstestppd.c:538
msgid " PASS DefaultPaperDimension"
msgstr ""
-#: systemv/cupstestppd.c:631
+#: systemv/cupstestppd.c:611
msgid " PASS FileVersion"
msgstr ""
-#: systemv/cupstestppd.c:675
+#: systemv/cupstestppd.c:655
msgid " PASS FormatVersion"
msgstr ""
-#: systemv/cupstestppd.c:695
+#: systemv/cupstestppd.c:675
msgid " PASS LanguageEncoding"
msgstr ""
-#: systemv/cupstestppd.c:715
+#: systemv/cupstestppd.c:695
msgid " PASS LanguageVersion"
msgstr ""
-#: systemv/cupstestppd.c:769
+#: systemv/cupstestppd.c:749
msgid " PASS Manufacturer"
msgstr ""
-#: systemv/cupstestppd.c:809
+#: systemv/cupstestppd.c:789
msgid " PASS ModelName"
msgstr ""
-#: systemv/cupstestppd.c:829
+#: systemv/cupstestppd.c:809
msgid " PASS NickName"
msgstr ""
-#: systemv/cupstestppd.c:889
+#: systemv/cupstestppd.c:869
msgid " PASS PCFileName"
msgstr ""
-#: systemv/cupstestppd.c:964
+#: systemv/cupstestppd.c:944
msgid " PASS PSVersion"
msgstr ""
-#: systemv/cupstestppd.c:869
+#: systemv/cupstestppd.c:849
msgid " PASS PageRegion"
msgstr ""
-#: systemv/cupstestppd.c:849
+#: systemv/cupstestppd.c:829
msgid " PASS PageSize"
msgstr ""
-#: systemv/cupstestppd.c:924
+#: systemv/cupstestppd.c:904
msgid " PASS Product"
msgstr ""
-#: systemv/cupstestppd.c:999
+#: systemv/cupstestppd.c:979
msgid " PASS ShortNickName"
msgstr ""
-#: systemv/cupstestppd.c:1374
+#: systemv/cupstestppd.c:1354
#, c-format
msgid " WARN %s has no corresponding options."
msgstr ""
-#: systemv/cupstestppd.c:1486
+#: systemv/cupstestppd.c:1466
#, c-format
msgid ""
" WARN %s shares a common prefix with %s\n"
" REF: Page 15, section 3.2."
msgstr ""
-#: systemv/cupstestppd.c:1345
+#: systemv/cupstestppd.c:1325
#, c-format
msgid ""
" WARN Duplex option keyword %s may not work as expected and should be named Duplex.\n"
" REF: Page 122, section 5.17"
msgstr ""
-#: systemv/cupstestppd.c:1744
+#: systemv/cupstestppd.c:1724
msgid " WARN File contains a mix of CR, LF, and CR LF line endings."
msgstr ""
-#: systemv/cupstestppd.c:1390
+#: systemv/cupstestppd.c:1370
msgid ""
" WARN LanguageEncoding required by PPD 4.3 spec.\n"
" REF: Pages 56-57, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1726
+#: systemv/cupstestppd.c:1706
#, c-format
msgid " WARN Line %d only contains whitespace."
msgstr ""
-#: systemv/cupstestppd.c:1398
+#: systemv/cupstestppd.c:1378
msgid ""
" WARN Manufacturer required by PPD 4.3 spec.\n"
" REF: Pages 58-59, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1749
+#: systemv/cupstestppd.c:1729
msgid " WARN Non-Windows PPD files should use lines ending with only LF, not CR LF."
msgstr ""
-#: systemv/cupstestppd.c:1382
+#: systemv/cupstestppd.c:1362
#, c-format
msgid ""
" WARN Obsolete PPD version %.1f.\n"
" REF: Page 42, section 5.2."
msgstr ""
-#: systemv/cupstestppd.c:1413
+#: systemv/cupstestppd.c:1393
msgid ""
" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
" REF: Pages 61-62, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1421
+#: systemv/cupstestppd.c:1401
msgid ""
" WARN PCFileName should contain a unique filename.\n"
" REF: Pages 61-62, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1456
+#: systemv/cupstestppd.c:1436
msgid ""
" WARN Protocols contains PJL but JCL attributes are not set.\n"
" REF: Pages 78-79, section 5.7."
msgstr ""
-#: systemv/cupstestppd.c:1447
+#: systemv/cupstestppd.c:1427
msgid ""
" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
" REF: Pages 78-79, section 5.7."
msgstr ""
-#: systemv/cupstestppd.c:1430
+#: systemv/cupstestppd.c:1410
msgid ""
" WARN ShortNickName required by PPD 4.3 spec.\n"
" REF: Pages 64-65, section 5.3."
msgid " cupstestdsc [options] -"
msgstr ""
-#: systemv/cupstestppd.c:3815
+#: systemv/cupstestppd.c:3859
msgid " program | cupstestppd [options] -"
msgstr ""
-#: systemv/cupstestppd.c:3747
+#: systemv/cupstestppd.c:3791
#, c-format
msgid ""
" %s \"%s %s\" conflicts with \"%s %s\"\n"
" (constraint=\"%s %s %s %s\")."
msgstr ""
-#: systemv/cupstestppd.c:2248
+#: systemv/cupstestppd.c:2228
#, c-format
msgid " %s %s %s does not exist."
msgstr ""
-#: systemv/cupstestppd.c:3904
+#: systemv/cupstestppd.c:3948
#, c-format
msgid " %s %s file \"%s\" has the wrong capitalization."
msgstr ""
-#: systemv/cupstestppd.c:2318
+#: systemv/cupstestppd.c:2298
#, c-format
msgid ""
" %s Bad %s choice %s.\n"
" REF: Page 122, section 5.17"
msgstr ""
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
+#: systemv/cupstestppd.c:3551 systemv/cupstestppd.c:3600
+#: systemv/cupstestppd.c:3639
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s."
msgstr ""
-#: systemv/cupstestppd.c:3461
+#: systemv/cupstestppd.c:3505
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s."
msgstr ""
-#: systemv/cupstestppd.c:2389
+#: systemv/cupstestppd.c:2369 systemv/cupstestppd.c:2391
#, c-format
msgid " %s Bad cupsFilter value \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:2475
+#: systemv/cupstestppd.c:2487 systemv/cupstestppd.c:2509
#, c-format
msgid " %s Bad cupsFilter2 value \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:2964
+#: systemv/cupstestppd.c:3008
#, c-format
msgid " %s Bad cupsICCProfile %s."
msgstr ""
-#: systemv/cupstestppd.c:2571
+#: systemv/cupstestppd.c:2615
#, c-format
msgid " %s Bad cupsPreFilter value \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:1822
+#: systemv/cupstestppd.c:1802
#, c-format
msgid " %s Bad cupsUIConstraints %s: \"%s\""
msgstr ""
-#: systemv/cupstestppd.c:3411
+#: systemv/cupstestppd.c:3455
#, c-format
msgid " %s Bad language \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
+#: systemv/cupstestppd.c:2445 systemv/cupstestppd.c:2573
+#: systemv/cupstestppd.c:2659 systemv/cupstestppd.c:2717
+#: systemv/cupstestppd.c:2772 systemv/cupstestppd.c:2827
+#: systemv/cupstestppd.c:2882 systemv/cupstestppd.c:2935
+#: systemv/cupstestppd.c:3057
#, c-format
msgid " %s Bad permissions on %s file \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
+#: systemv/cupstestppd.c:2353 systemv/cupstestppd.c:2471
+#: systemv/cupstestppd.c:2599 systemv/cupstestppd.c:2686
+#: systemv/cupstestppd.c:2741 systemv/cupstestppd.c:2796
+#: systemv/cupstestppd.c:2851 systemv/cupstestppd.c:2906
#, c-format
msgid " %s Bad spelling of %s - should be %s."
msgstr ""
-#: systemv/cupstestppd.c:2907
+#: systemv/cupstestppd.c:2951
#, c-format
msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID."
msgstr ""
-#: systemv/cupstestppd.c:2205
+#: systemv/cupstestppd.c:2185
#, c-format
msgid " %s Default choices conflicting."
msgstr ""
-#: systemv/cupstestppd.c:1803
+#: systemv/cupstestppd.c:1783
#, c-format
msgid " %s Empty cupsUIConstraints %s"
msgstr ""
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
+#: systemv/cupstestppd.c:3583 systemv/cupstestppd.c:3623
#, c-format
msgid " %s Missing \"%s\" translation string for option %s, choice %s."
msgstr ""
-#: systemv/cupstestppd.c:3447
+#: systemv/cupstestppd.c:3491
#, c-format
msgid " %s Missing \"%s\" translation string for option %s."
msgstr ""
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
+#: systemv/cupstestppd.c:2430 systemv/cupstestppd.c:2558
+#: systemv/cupstestppd.c:2644 systemv/cupstestppd.c:2702
+#: systemv/cupstestppd.c:2757 systemv/cupstestppd.c:2812
+#: systemv/cupstestppd.c:2867 systemv/cupstestppd.c:2919
+#: systemv/cupstestppd.c:3042
#, c-format
msgid " %s Missing %s file \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:3121
+#: systemv/cupstestppd.c:3165
#, c-format
msgid ""
" %s Missing REQUIRED PageRegion option.\n"
" REF: Page 100, section 5.14."
msgstr ""
-#: systemv/cupstestppd.c:3106
+#: systemv/cupstestppd.c:3150
#, c-format
msgid ""
" %s Missing REQUIRED PageSize option.\n"
" REF: Page 99, section 5.14."
msgstr ""
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
+#: systemv/cupstestppd.c:1993 systemv/cupstestppd.c:2034
#, c-format
msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
msgstr ""
-#: systemv/cupstestppd.c:1908
+#: systemv/cupstestppd.c:1888
#, c-format
msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
msgstr ""
-#: systemv/cupstestppd.c:1840
+#: systemv/cupstestppd.c:1820
#, c-format
msgid " %s Missing cupsUIResolver %s"
msgstr ""
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
+#: systemv/cupstestppd.c:1979 systemv/cupstestppd.c:2020
#, c-format
msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"."
msgstr ""
-#: systemv/cupstestppd.c:1892
+#: systemv/cupstestppd.c:1872
#, c-format
msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\""
msgstr ""
-#: systemv/cupstestppd.c:3633
+#: systemv/cupstestppd.c:3677
#, c-format
msgid " %s No base translation \"%s\" is included in file."
msgstr ""
-#: systemv/cupstestppd.c:2294
+#: systemv/cupstestppd.c:2274
#, c-format
msgid ""
" %s REQUIRED %s does not define choice None.\n"
" REF: Page 122, section 5.17"
msgstr ""
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
+#: systemv/cupstestppd.c:3224 systemv/cupstestppd.c:3238
#, c-format
msgid " %s Size \"%s\" defined for %s but not for %s."
msgstr ""
-#: systemv/cupstestppd.c:3160
+#: systemv/cupstestppd.c:3204
#, c-format
msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)."
msgstr ""
-#: systemv/cupstestppd.c:3351
+#: systemv/cupstestppd.c:3395
#, c-format
msgid " %s Size \"%s\" should be \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:3300
+#: systemv/cupstestppd.c:3344
#, c-format
msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"."
msgstr ""
-#: systemv/cupstestppd.c:3041
+#: systemv/cupstestppd.c:3085
#, c-format
msgid " %s cupsICCProfile %s hash value collides with %s."
msgstr ""
-#: systemv/cupstestppd.c:1963
+#: systemv/cupstestppd.c:1943
#, c-format
msgid " %s cupsUIResolver %s causes a loop."
msgstr ""
-#: systemv/cupstestppd.c:1945
+#: systemv/cupstestppd.c:1925
#, c-format
msgid " %s cupsUIResolver %s does not list at least two different options."
msgstr ""
-#: systemv/cupstestppd.c:1168
+#: systemv/cupstestppd.c:1148
#, c-format
msgid ""
" **FAIL** %s must be 1284DeviceID\n"
" REF: Page 72, section 5.5"
msgstr ""
-#: systemv/cupstestppd.c:580
+#: systemv/cupstestppd.c:560
#, c-format
msgid ""
" **FAIL** Bad Default%s %s\n"
" REF: Page 40, section 4.5."
msgstr ""
-#: systemv/cupstestppd.c:514
+#: systemv/cupstestppd.c:494
#, c-format
msgid ""
" **FAIL** Bad DefaultImageableArea %s\n"
" REF: Page 102, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:550
+#: systemv/cupstestppd.c:530
#, c-format
msgid ""
" **FAIL** Bad DefaultPaperDimension %s\n"
" REF: Page 103, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:623
+#: systemv/cupstestppd.c:603
#, c-format
msgid ""
" **FAIL** Bad FileVersion \"%s\"\n"
" REF: Page 56, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:667
+#: systemv/cupstestppd.c:647
#, c-format
msgid ""
" **FAIL** Bad FormatVersion \"%s\"\n"
" REF: Page 56, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1025
+#: systemv/cupstestppd.c:1005
msgid ""
" **FAIL** Bad JobPatchFile attribute in file\n"
" REF: Page 24, section 3.4."
msgstr ""
-#: systemv/cupstestppd.c:1213
+#: systemv/cupstestppd.c:1193
#, c-format
msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1."
msgstr ""
-#: systemv/cupstestppd.c:1227
+#: systemv/cupstestppd.c:1207
#, c-format
msgid " **FAIL** Bad LanguageVersion %s - must be English."
msgstr ""
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
+#: systemv/cupstestppd.c:723 systemv/cupstestppd.c:740
#, c-format
msgid ""
" **FAIL** Bad Manufacturer (should be \"%s\")\n"
" REF: Page 211, table D.1."
msgstr ""
-#: systemv/cupstestppd.c:800
+#: systemv/cupstestppd.c:780
#, c-format
msgid ""
" **FAIL** Bad ModelName - \"%c\" not allowed in string.\n"
" REF: Pages 59-60, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:956
+#: systemv/cupstestppd.c:936
msgid ""
" **FAIL** Bad PSVersion - not \"(string) int\".\n"
" REF: Pages 62-64, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:917
+#: systemv/cupstestppd.c:897
msgid ""
" **FAIL** Bad Product - not \"(string)\".\n"
" REF: Page 62, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:991
+#: systemv/cupstestppd.c:971
msgid ""
" **FAIL** Bad ShortNickName - longer than 31 chars.\n"
" REF: Pages 64-65, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1149
+#: systemv/cupstestppd.c:1129
#, c-format
msgid ""
" **FAIL** Bad option %s choice %s\n"
" REF: Page 84, section 5.9"
msgstr ""
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
+#: systemv/cupstestppd.c:3818 systemv/cupstestppd.c:3840
#, c-format
msgid " **FAIL** Default option code cannot be interpreted: %s"
msgstr ""
-#: systemv/cupstestppd.c:1286
+#: systemv/cupstestppd.c:1266
#, c-format
msgid " **FAIL** Default translation string for option %s choice %s contains 8-bit characters."
msgstr ""
-#: systemv/cupstestppd.c:1259
+#: systemv/cupstestppd.c:1239
#, c-format
msgid " **FAIL** Default translation string for option %s contains 8-bit characters."
msgstr ""
-#: systemv/cupstestppd.c:2101
+#: systemv/cupstestppd.c:2081
#, c-format
msgid " **FAIL** Group names %s and %s differ only by case."
msgstr ""
-#: systemv/cupstestppd.c:2146
+#: systemv/cupstestppd.c:2126
#, c-format
msgid " **FAIL** Multiple occurrences of option %s choice name %s."
msgstr ""
-#: systemv/cupstestppd.c:2163
+#: systemv/cupstestppd.c:2143
#, c-format
msgid " **FAIL** Option %s choice names %s and %s differ only by case."
msgstr ""
-#: systemv/cupstestppd.c:2123
+#: systemv/cupstestppd.c:2103
#, c-format
msgid " **FAIL** Option names %s and %s differ only by case."
msgstr ""
-#: systemv/cupstestppd.c:600
+#: systemv/cupstestppd.c:580
#, c-format
msgid ""
" **FAIL** REQUIRED Default%s\n"
" REF: Page 40, section 4.5."
msgstr ""
-#: systemv/cupstestppd.c:499
+#: systemv/cupstestppd.c:479
msgid ""
" **FAIL** REQUIRED DefaultImageableArea\n"
" REF: Page 102, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:535
+#: systemv/cupstestppd.c:515
msgid ""
" **FAIL** REQUIRED DefaultPaperDimension\n"
" REF: Page 103, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:641
+#: systemv/cupstestppd.c:621
msgid ""
" **FAIL** REQUIRED FileVersion\n"
" REF: Page 56, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:685
+#: systemv/cupstestppd.c:665
msgid ""
" **FAIL** REQUIRED FormatVersion\n"
" REF: Page 56, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1076
+#: systemv/cupstestppd.c:1056
#, c-format
msgid ""
" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
" REF: Page 102, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:705
+#: systemv/cupstestppd.c:685
msgid ""
" **FAIL** REQUIRED LanguageEncoding\n"
" REF: Pages 56-57, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:725
+#: systemv/cupstestppd.c:705
msgid ""
" **FAIL** REQUIRED LanguageVersion\n"
" REF: Pages 57-58, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:779
+#: systemv/cupstestppd.c:759
msgid ""
" **FAIL** REQUIRED Manufacturer\n"
" REF: Pages 58-59, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:819
+#: systemv/cupstestppd.c:799
msgid ""
" **FAIL** REQUIRED ModelName\n"
" REF: Pages 59-60, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:839
+#: systemv/cupstestppd.c:819
msgid ""
" **FAIL** REQUIRED NickName\n"
" REF: Page 60, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:899
+#: systemv/cupstestppd.c:879
msgid ""
" **FAIL** REQUIRED PCFileName\n"
" REF: Pages 61-62, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:974
+#: systemv/cupstestppd.c:954
msgid ""
" **FAIL** REQUIRED PSVersion\n"
" REF: Pages 62-64, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:879
+#: systemv/cupstestppd.c:859
msgid ""
" **FAIL** REQUIRED PageRegion\n"
" REF: Page 100, section 5.14."
msgstr ""
-#: systemv/cupstestppd.c:1045
+#: systemv/cupstestppd.c:1025
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Page 41, section 5.\n"
" REF: Page 99, section 5.14."
msgstr ""
-#: systemv/cupstestppd.c:859
+#: systemv/cupstestppd.c:839
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Pages 99-100, section 5.14."
msgstr ""
-#: systemv/cupstestppd.c:1098
+#: systemv/cupstestppd.c:1078
#, c-format
msgid ""
" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
" REF: Page 103, section 5.15."
msgstr ""
-#: systemv/cupstestppd.c:934
+#: systemv/cupstestppd.c:914
msgid ""
" **FAIL** REQUIRED Product\n"
" REF: Page 62, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:1009
+#: systemv/cupstestppd.c:989
msgid ""
" **FAIL** REQUIRED ShortNickName\n"
" REF: Page 64-65, section 5.3."
msgstr ""
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
+#: systemv/cupstestppd.c:314 systemv/cupstestppd.c:333
+#: systemv/cupstestppd.c:345
#, c-format
msgid " **FAIL** Unable to open PPD file - %s on line %d."
msgstr ""
-#: systemv/cupstestppd.c:1498
+#: systemv/cupstestppd.c:1478
#, c-format
msgid " %d ERRORS FOUND"
msgstr ""
" REF: Page 43, %%Pages:"
msgstr ""
-#: systemv/cupstestppd.c:1500
+#: systemv/cupstestppd.c:1480
msgid " NO ERRORS FOUND"
msgstr ""
msgid " Warning: obsolete DSC version %.1f in file."
msgstr ""
-#: test/ippfind.c:2788
+#: test/ippfind.c:2796
msgid " ! expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2787
+#: test/ippfind.c:2795
msgid " ( expressions ) Group expressions."
msgstr ""
msgid " --crlf End lines with CR + LF (Windows)."
msgstr ""
-#: test/ippfind.c:2769
+#: test/ippfind.c:2777
msgid " --domain regex Match domain to regular expression."
msgstr ""
-#: test/ippfind.c:2770
+#: test/ippfind.c:2778
msgid ""
" --exec utility [argument ...] ;\n"
" Execute program if true."
msgstr ""
-#: test/ippfind.c:2790
+#: test/ippfind.c:2798
msgid " --false Always false."
msgstr ""
-#: test/ipptool.c:4806
+#: test/ipptool.c:4858
msgid " --help Show help."
msgstr ""
-#: test/ippfind.c:2752
+#: test/ippfind.c:2760
msgid " --help Show this help."
msgstr ""
-#: test/ippfind.c:2772
+#: test/ippfind.c:2780
msgid " --host regex Match hostname to regular expression."
msgstr ""
msgid " --list-filters List filters that will be used."
msgstr ""
-#: test/ippfind.c:2774
+#: test/ippfind.c:2782
msgid " --local True if service is local."
msgstr ""
-#: test/ippfind.c:2773
+#: test/ippfind.c:2781
msgid " --ls List attributes."
msgstr ""
-#: test/ippfind.c:2775
+#: test/ippfind.c:2783
msgid " --name regex Match service name to regular expression."
msgstr ""
-#: test/ippfind.c:2789
+#: test/ippfind.c:2797
msgid " --not expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2776
+#: test/ippfind.c:2784
msgid " --path regex Match resource path to regular expression."
msgstr ""
-#: test/ippfind.c:2777
+#: test/ippfind.c:2785
msgid " --port number[-number] Match port to number or range."
msgstr ""
-#: test/ippfind.c:2778
+#: test/ippfind.c:2786
msgid " --print Print URI if true."
msgstr ""
-#: test/ippfind.c:2779
+#: test/ippfind.c:2787
msgid " --print-name Print service name if true."
msgstr ""
-#: test/ippfind.c:2780
+#: test/ippfind.c:2788
msgid " --quiet Quietly report match via exit code."
msgstr ""
-#: test/ippfind.c:2781
+#: test/ippfind.c:2789
msgid " --remote True if service is remote."
msgstr ""
-#: test/ipptool.c:4807
+#: test/ipptool.c:4859
msgid ""
" --stop-after-include-error\n"
" Stop tests after a failed INCLUDE."
msgstr ""
-#: test/ippfind.c:2791
+#: test/ippfind.c:2799
msgid " --true Always true."
msgstr ""
-#: test/ippfind.c:2782
+#: test/ippfind.c:2790
msgid " --txt key True if the TXT record contains the key."
msgstr ""
-#: test/ippfind.c:2783
+#: test/ippfind.c:2791
msgid " --txt-* regex Match TXT record key to regular expression."
msgstr ""
-#: test/ippfind.c:2784
+#: test/ippfind.c:2792
msgid " --uri regex Match URI to regular expression."
msgstr ""
-#: test/ippfind.c:2753
+#: test/ippfind.c:2761
msgid " --version Show program version."
msgstr ""
-#: test/ipptool.c:4809
+#: test/ipptool.c:4861
msgid " --version Show version."
msgstr ""
-#: test/ippfind.c:2746 test/ipptool.c:4810
+#: test/ippfind.c:2754 test/ipptool.c:4862
msgid " -4 Connect using IPv4."
msgstr ""
-#: test/ippfind.c:2747 test/ipptool.c:4811
+#: test/ippfind.c:2755 test/ipptool.c:4863
msgid " -6 Connect using IPv6."
msgstr ""
-#: test/ipptool.c:4812
+#: test/ipptool.c:4864
msgid " -C Send requests using chunking (default)."
msgstr ""
msgid " -D Remove the input file when finished."
msgstr ""
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
+#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:180 ppdc/ppdpo.cxx:250
msgid " -D name=value Set named variable to value."
msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-#: test/ipptool.c:4814
+#: test/ipptool.c:4866
msgid " -E Test with HTTP Upgrade to TLS."
msgstr ""
-#: scheduler/main.c:2149
+#: scheduler/main.c:2180
msgid " -F Run in the foreground but detach from console."
msgstr ""
msgid " -H samba-server Use the named SAMBA server."
msgstr ""
-#: test/ipptool.c:4816
+#: test/ipptool.c:4868
msgid " -I Ignore errors."
msgstr ""
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
+#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:182 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:252
msgid " -I include-dir Add include directory to search path."
msgstr ""
-#: systemv/cupstestppd.c:3819
+#: systemv/cupstestppd.c:3863
msgid " -I {filename,filters,none,profiles}"
msgstr ""
-#: test/ipptool.c:4817
+#: test/ipptool.c:4869
msgid " -L Send requests using content-length."
msgstr ""
-#: test/ipptool.c:4819
+#: test/ipptool.c:4871
msgid " -P filename.plist Produce XML plist to a file and test report to standard output."
msgstr ""
msgid " -P filename.ppd Set PPD file."
msgstr ""
-#: test/ippfind.c:2756
+#: test/ippfind.c:2764
msgid " -P number[-number] Match port to number or range."
msgstr ""
-#: systemv/cupstestppd.c:3821
+#: systemv/cupstestppd.c:3865
msgid " -R root-directory Set alternate root."
msgstr ""
-#: test/ipptool.c:4820
+#: test/ipptool.c:4872
msgid " -S Test with SSL encryption."
msgstr ""
-#: test/ippfind.c:2748
+#: test/ippfind.c:2756
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
-#: test/ipptool.c:4822
+#: test/ipptool.c:4874
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
msgid " -U username Specify username."
msgstr ""
-#: test/ippfind.c:2750 test/ipptool.c:4824
+#: test/ippfind.c:2758 test/ipptool.c:4876
msgid " -V version Set default IPP version."
msgstr ""
-#: systemv/cupstestppd.c:3822
+#: systemv/cupstestppd.c:3866
msgid " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
msgstr ""
-#: test/ipptool.c:4826
+#: test/ipptool.c:4878
msgid " -X Produce XML plist instead of plain text."
msgstr ""
msgid " -a Export all printers."
msgstr ""
-#: test/ipptool.c:4828
+#: test/ipptool.c:4880
msgid " -c Produce CSV output."
msgstr ""
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: scheduler/main.c:2147
+#: scheduler/main.c:2178
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr ""
msgid " -d domain Browse/resolve in specified domain."
msgstr ""
-#: test/ipptool.c:4829
+#: test/ipptool.c:4881
msgid " -d name=value Set named variable to value."
msgstr ""
msgid " -d printer Use the named printer."
msgstr ""
-#: test/ippfind.c:2757
+#: test/ippfind.c:2765
msgid " -d regex Match domain to regular expression."
msgstr ""
msgid " -e Use every filter from the PPD file."
msgstr ""
-#: scheduler/main.c:2148
+#: scheduler/main.c:2179
msgid " -f Run in the foreground."
msgstr ""
-#: test/ipptool.c:4831
+#: test/ipptool.c:4883
msgid " -f filename Set default request filename."
msgstr ""
-#: scheduler/main.c:2151
+#: scheduler/main.c:2182
msgid " -h Show this usage message."
msgstr ""
-#: test/ippfind.c:2758
+#: test/ippfind.c:2766
msgid " -h regex Match hostname to regular expression."
msgstr ""
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
-#: test/ipptool.c:4833
+#: test/ipptool.c:4885
msgid " -i seconds Repeat the last file with the given time interval."
msgstr ""
msgid " -j job-id[,N] Filter file N from the specified job (default is file 1)."
msgstr ""
-#: test/ippfind.c:2759
+#: test/ippfind.c:2767
msgid " -l List attributes."
msgstr ""
-#: test/ipptool.c:4835
+#: test/ipptool.c:4887
msgid " -l Produce plain text output."
msgstr ""
-#: scheduler/main.c:2152
+#: scheduler/main.c:2183
msgid " -l Run cupsd on demand."
msgstr ""
msgid " -n copies Set number of copies."
msgstr ""
-#: test/ipptool.c:4836
+#: test/ipptool.c:4888
msgid " -n count Repeat the last file the given number of times."
msgstr ""
-#: test/ippfind.c:2760
+#: test/ippfind.c:2768
msgid " -n regex Match service name to regular expression."
msgstr ""
msgid " -o name=value Set option(s)."
msgstr ""
-#: test/ippfind.c:2761
+#: test/ippfind.c:2769
msgid " -p Print URI if true."
msgstr ""
msgid " -p program Run specified program for each service."
msgstr ""
-#: test/ippfind.c:2762
+#: test/ippfind.c:2770
msgid " -q Quietly report match via exit code."
msgstr ""
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
+#: systemv/cupstestppd.c:3870 test/ipptool.c:4890
msgid " -q Run silently."
msgstr ""
-#: test/ippfind.c:2763
+#: test/ippfind.c:2771
msgid " -r True if service is remote."
msgstr ""
-#: systemv/cupstestppd.c:3827
+#: systemv/cupstestppd.c:3871
msgid " -r Use 'relaxed' open mode."
msgstr ""
-#: test/ippfind.c:2764
+#: test/ippfind.c:2772
msgid " -s Print service name if true."
msgstr ""
-#: test/ipptool.c:4839
+#: test/ipptool.c:4891
msgid " -t Produce a test report."
msgstr ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2153
+#: scheduler/main.c:2184
msgid " -t Test the configuration file."
msgstr ""
-#: test/ippfind.c:2765
+#: test/ippfind.c:2773
msgid " -t key True if the TXT record contains the key."
msgstr ""
msgid " -u Remove the PPD file when finished."
msgstr ""
-#: test/ippfind.c:2766
+#: test/ippfind.c:2774
msgid " -u regex Match URI to regular expression."
msgstr ""
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
+#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3872 test/ipptool.c:4892
+#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:254
msgid " -v Be verbose."
msgstr ""
-#: systemv/cupstestppd.c:3829
+#: systemv/cupstestppd.c:3873
msgid " -vv Be very verbose."
msgstr ""
-#: test/ippfind.c:2767
+#: test/ippfind.c:2775
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
msgid " -z Compress PPD files using GNU zip."
msgstr ""
-#: test/ippfind.c:2810
+#: test/ippfind.c:2818
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
msgstr ""
-#: test/ippfind.c:2811
+#: test/ippfind.c:2819
msgid ""
" IPPFIND_SERVICE_HOSTNAME\n"
" Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2813
+#: test/ippfind.c:2821
msgid " IPPFIND_SERVICE_NAME Service instance name"
msgstr ""
-#: test/ippfind.c:2814
+#: test/ippfind.c:2822
msgid " IPPFIND_SERVICE_PORT Port number"
msgstr ""
-#: test/ippfind.c:2815
+#: test/ippfind.c:2823
msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2816
+#: test/ippfind.c:2824
msgid " IPPFIND_SERVICE_SCHEME URI scheme"
msgstr ""
-#: test/ippfind.c:2817
+#: test/ippfind.c:2825
msgid " IPPFIND_SERVICE_URI URI"
msgstr ""
-#: test/ippfind.c:2818
+#: test/ippfind.c:2826
msgid " IPPFIND_TXT_* Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2793
+#: test/ippfind.c:2801
msgid ""
" expression --and expression\n"
" Logical AND."
msgstr ""
-#: test/ippfind.c:2795
+#: test/ippfind.c:2803
msgid ""
" expression --or expression\n"
" Logical OR."
msgstr ""
-#: test/ippfind.c:2792
+#: test/ippfind.c:2800
msgid " expression expression Logical AND."
msgstr ""
-#: test/ippfind.c:2800
+#: test/ippfind.c:2808
msgid " {service_domain} Domain name"
msgstr ""
-#: test/ippfind.c:2801
+#: test/ippfind.c:2809
msgid " {service_hostname} Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2802
+#: test/ippfind.c:2810
msgid " {service_name} Service instance name"
msgstr ""
-#: test/ippfind.c:2803
+#: test/ippfind.c:2811
msgid " {service_port} Port number"
msgstr ""
-#: test/ippfind.c:2804
+#: test/ippfind.c:2812
msgid " {service_regtype} DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2805
+#: test/ippfind.c:2813
msgid " {service_scheme} URI scheme"
msgstr ""
-#: test/ippfind.c:2806
+#: test/ippfind.c:2814
msgid " {service_uri} URI"
msgstr ""
-#: test/ippfind.c:2807
+#: test/ippfind.c:2815
msgid " {txt_*} Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2799
+#: test/ippfind.c:2807
msgid " {} URI"
msgstr ""
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
+#: systemv/cupstestppd.c:312 systemv/cupstestppd.c:331
+#: systemv/cupstestppd.c:343 systemv/cupstestppd.c:476
+#: systemv/cupstestppd.c:491 systemv/cupstestppd.c:512
+#: systemv/cupstestppd.c:527 systemv/cupstestppd.c:557
+#: systemv/cupstestppd.c:577 systemv/cupstestppd.c:600
+#: systemv/cupstestppd.c:618 systemv/cupstestppd.c:644
+#: systemv/cupstestppd.c:662 systemv/cupstestppd.c:682
+#: systemv/cupstestppd.c:702 systemv/cupstestppd.c:720
+#: systemv/cupstestppd.c:737 systemv/cupstestppd.c:756
+#: systemv/cupstestppd.c:777 systemv/cupstestppd.c:796
+#: systemv/cupstestppd.c:816 systemv/cupstestppd.c:836
+#: systemv/cupstestppd.c:856 systemv/cupstestppd.c:876
+#: systemv/cupstestppd.c:894 systemv/cupstestppd.c:911
+#: systemv/cupstestppd.c:933 systemv/cupstestppd.c:951
+#: systemv/cupstestppd.c:968 systemv/cupstestppd.c:986
+#: systemv/cupstestppd.c:1002 systemv/cupstestppd.c:1022
+#: systemv/cupstestppd.c:1053 systemv/cupstestppd.c:1075
+#: systemv/cupstestppd.c:1126 systemv/cupstestppd.c:1145
+#: systemv/cupstestppd.c:1189 systemv/cupstestppd.c:1203
+#: systemv/cupstestppd.c:1235 systemv/cupstestppd.c:1262
+#: systemv/cupstestppd.c:1780 systemv/cupstestppd.c:1799
+#: systemv/cupstestppd.c:1817 systemv/cupstestppd.c:1869
+#: systemv/cupstestppd.c:1885 systemv/cupstestppd.c:1922
+#: systemv/cupstestppd.c:1940 systemv/cupstestppd.c:1976
+#: systemv/cupstestppd.c:1990 systemv/cupstestppd.c:2017
+#: systemv/cupstestppd.c:2031 systemv/cupstestppd.c:2077
+#: systemv/cupstestppd.c:2099 systemv/cupstestppd.c:2122
+#: systemv/cupstestppd.c:2139 systemv/cupstestppd.c:2181
+#: systemv/cupstestppd.c:2224 systemv/cupstestppd.c:2271
+#: systemv/cupstestppd.c:2295 systemv/cupstestppd.c:2349
+#: systemv/cupstestppd.c:2365 systemv/cupstestppd.c:2387
+#: systemv/cupstestppd.c:2427 systemv/cupstestppd.c:2441
+#: systemv/cupstestppd.c:2467 systemv/cupstestppd.c:2483
+#: systemv/cupstestppd.c:2505 systemv/cupstestppd.c:2555
+#: systemv/cupstestppd.c:2569 systemv/cupstestppd.c:2595
+#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2641
+#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2682
+#: systemv/cupstestppd.c:2699 systemv/cupstestppd.c:2713
+#: systemv/cupstestppd.c:2737 systemv/cupstestppd.c:2754
+#: systemv/cupstestppd.c:2768 systemv/cupstestppd.c:2792
+#: systemv/cupstestppd.c:2809 systemv/cupstestppd.c:2823
+#: systemv/cupstestppd.c:2847 systemv/cupstestppd.c:2864
+#: systemv/cupstestppd.c:2878 systemv/cupstestppd.c:2902
+#: systemv/cupstestppd.c:2916 systemv/cupstestppd.c:2931
+#: systemv/cupstestppd.c:2948 systemv/cupstestppd.c:3004
+#: systemv/cupstestppd.c:3039 systemv/cupstestppd.c:3053
+#: systemv/cupstestppd.c:3081 systemv/cupstestppd.c:3146
+#: systemv/cupstestppd.c:3161 systemv/cupstestppd.c:3200
+#: systemv/cupstestppd.c:3220 systemv/cupstestppd.c:3234
+#: systemv/cupstestppd.c:3451 systemv/cupstestppd.c:3487
+#: systemv/cupstestppd.c:3501 systemv/cupstestppd.c:3547
+#: systemv/cupstestppd.c:3579 systemv/cupstestppd.c:3596
+#: systemv/cupstestppd.c:3619 systemv/cupstestppd.c:3635
+#: systemv/cupstestppd.c:3673 systemv/cupstestppd.c:3814
+#: systemv/cupstestppd.c:3836 systemv/cupstestppd.c:3944
msgid " FAIL"
msgstr ""
-#: systemv/cupstestppd.c:1306
+#: systemv/cupstestppd.c:1286
msgid " PASS"
msgstr ""
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:9952
+#: scheduler/ipp.c:9984
#, c-format
msgid "%s cannot be changed."
msgstr ""
msgid "%s is ready and printing"
msgstr ""
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
+#: filter/rastertoepson.c:982 filter/rastertohp.c:700
#: filter/rastertolabel.c:1120
#, c-format
msgid "%s job-id user title copies options [file]"
msgid "%s not accepting requests since %s -"
msgstr ""
-#: scheduler/ipp.c:618
+#: scheduler/ipp.c:617
#, c-format
msgid "%s not supported."
msgstr ""
msgstr ""
#. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
+#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:803
+#: systemv/lpadmin.c:854 systemv/lpadmin.c:904 systemv/lpadmin.c:960
+#: systemv/lpadmin.c:1058 systemv/lpadmin.c:1110 systemv/lpadmin.c:1166
+#: systemv/lpadmin.c:1581
#, c-format
msgid "%s: %s"
msgstr ""
msgid "%s: %s failed: %s"
msgstr ""
-#: test/ippfind.c:777 test/ipptool.c:378
+#: systemv/lpadmin.c:1216
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
+#: test/ippfind.c:777 test/ipptool.c:381
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr ""
msgstr ""
#: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
+#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:426
#: systemv/lpstat.c:124
#, c-format
msgid "%s: Error - expected username after \"-U\" option."
msgid "%s: Invalid filter string \"%s\"."
msgstr ""
-#: test/ipptool.c:309
+#: test/ipptool.c:312
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr ""
-#: test/ippfind.c:749 test/ipptool.c:346
+#: test/ippfind.c:749 test/ipptool.c:349
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr ""
-#: test/ippfind.c:762 test/ipptool.c:360
+#: test/ippfind.c:762 test/ipptool.c:363
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr ""
#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
+#: systemv/lpadmin.c:230 systemv/lpinfo.c:88 systemv/lpmove.c:73
+#: systemv/lpstat.c:88 test/ipptool.c:294 test/ipptool.c:338
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr ""
+#: systemv/lpadmin.c:1223
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
#: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
#: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
#, c-format
msgid "%s: Unable to contact server."
msgstr ""
+#: systemv/lpadmin.c:1236
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
#: scheduler/cupsfilter.c:416
#, c-format
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr ""
-#: test/ipptool.c:318
+#: test/ipptool.c:321
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr ""
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
msgstr ""
+#: systemv/lpadmin.c:1207
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
#: berkeley/lpq.c:140 systemv/lpstat.c:575
#, c-format
msgid "%s: Unknown destination \"%s\"."
msgid "?Invalid help command unknown."
msgstr ""
-#: cgi-bin/admin.c:2348
+#: cgi-bin/admin.c:2354
msgid "A Samba password is required to export printer drivers"
msgstr ""
-#: cgi-bin/admin.c:2344
+#: cgi-bin/admin.c:2350
msgid "A Samba username is required to export printer drivers"
msgstr ""
-#: scheduler/ipp.c:2274
+#: scheduler/ipp.c:2252
#, c-format
msgid "A class named \"%s\" already exists."
msgstr ""
-#: scheduler/ipp.c:916
+#: scheduler/ipp.c:915
#, c-format
msgid "A printer named \"%s\" already exists."
msgstr ""
msgid "Accepted"
msgstr ""
-#: cgi-bin/admin.c:548
+#: cgi-bin/admin.c:546
msgid "Add Class"
msgstr ""
-#: cgi-bin/admin.c:860
+#: cgi-bin/admin.c:859
msgid "Add Printer"
msgstr ""
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
+#: cgi-bin/admin.c:420 cgi-bin/admin.c:453 cgi-bin/admin.c:501
+#: cgi-bin/admin.c:511
msgid "Add RSS Subscription"
msgstr ""
msgid "Address"
msgstr ""
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
+#: cgi-bin/admin.c:186 cgi-bin/admin.c:260 cgi-bin/admin.c:2731
msgid "Administration"
msgstr ""
msgid "Applicator"
msgstr ""
-#: scheduler/ipp.c:991
+#: scheduler/ipp.c:998
#, c-format
msgid "Attempt to set %s printer-state to bad value %d."
msgstr ""
msgid "B9"
msgstr ""
-#: scheduler/ipp.c:10877
+#: scheduler/ipp.c:10929
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
-#: cups/dest.c:1736
+#: cups/dest.c:1737
msgid "Bad NULL dests pointer"
msgstr ""
msgid "Bad OrderDependency"
msgstr ""
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
+#: cups/ppd-cache.c:434 cups/ppd-cache.c:481 cups/ppd-cache.c:566
+#: cups/ppd-cache.c:572 cups/ppd-cache.c:588 cups/ppd-cache.c:604
+#: cups/ppd-cache.c:613 cups/ppd-cache.c:621 cups/ppd-cache.c:638
+#: cups/ppd-cache.c:646 cups/ppd-cache.c:661 cups/ppd-cache.c:669
+#: cups/ppd-cache.c:690 cups/ppd-cache.c:702 cups/ppd-cache.c:717
+#: cups/ppd-cache.c:729 cups/ppd-cache.c:751 cups/ppd-cache.c:759
+#: cups/ppd-cache.c:777 cups/ppd-cache.c:785 cups/ppd-cache.c:800
+#: cups/ppd-cache.c:808 cups/ppd-cache.c:826 cups/ppd-cache.c:834
+#: cups/ppd-cache.c:861 cups/ppd-cache.c:931 cups/ppd-cache.c:939
+#: cups/ppd-cache.c:947
msgid "Bad PPD cache file."
msgstr ""
msgid "Bad arguments to function"
msgstr ""
-#: scheduler/ipp.c:1352
+#: scheduler/ipp.c:1368
#, c-format
msgid "Bad copies value %d."
msgstr ""
msgid "Bad custom parameter"
msgstr ""
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
+#: cups/http-support.c:1598 scheduler/ipp.c:2347
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2399
+#: scheduler/ipp.c:2386
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
+#: scheduler/ipp.c:8141 scheduler/ipp.c:8159 scheduler/ipp.c:9385
#, c-format
msgid "Bad document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9376
+#: scheduler/ipp.c:9403
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr ""
msgid "Bad hostname/address in URI"
msgstr ""
-#: scheduler/ipp.c:1527
+#: scheduler/ipp.c:1543
#, c-format
msgid "Bad job-name value: %s"
msgstr ""
-#: scheduler/ipp.c:1520
+#: scheduler/ipp.c:1536
msgid "Bad job-name value: Wrong type or count."
msgstr ""
-#: scheduler/ipp.c:9967
+#: scheduler/ipp.c:9999
msgid "Bad job-priority value."
msgstr ""
-#: scheduler/ipp.c:1382
+#: scheduler/ipp.c:1398
#, c-format
msgid "Bad job-sheets value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1366
+#: scheduler/ipp.c:1382
msgid "Bad job-sheets value type."
msgstr ""
-#: scheduler/ipp.c:9997
+#: scheduler/ipp.c:10029
msgid "Bad job-state value."
msgstr ""
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
+#: scheduler/ipp.c:2970 scheduler/ipp.c:3430 scheduler/ipp.c:5935
+#: scheduler/ipp.c:6082 scheduler/ipp.c:7570 scheduler/ipp.c:7839
+#: scheduler/ipp.c:8703 scheduler/ipp.c:8927 scheduler/ipp.c:9279
+#: scheduler/ipp.c:9892
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
+#: scheduler/ipp.c:2018 scheduler/ipp.c:5473
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
+#: scheduler/ipp.c:1982 scheduler/ipp.c:5437
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1398
+#: scheduler/ipp.c:1414
#, c-format
msgid "Bad number-up value %d."
msgstr ""
msgid "Bad option + choice on line %d."
msgstr ""
-#: scheduler/ipp.c:1415
+#: scheduler/ipp.c:1431
#, c-format
msgid "Bad page-ranges values %d-%d."
msgstr ""
msgid "Bad port number in URI"
msgstr ""
-#: scheduler/ipp.c:2442
+#: scheduler/ipp.c:2429
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2503
+#: scheduler/ipp.c:2490
#, c-format
msgid "Bad printer-state value %d."
msgstr ""
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
+#: cups/dest.c:610 cups/dest.c:1297 cups/dest.c:1344
msgid "Bad printer-uri."
msgstr ""
msgid "Bad scheme in URI"
msgstr ""
-#: cgi-bin/admin.c:1464
+#: cgi-bin/admin.c:1470
msgid "Bad subscription ID"
msgstr ""
msgid "Bad/empty URI"
msgstr ""
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
+#: cgi-bin/admin.c:3276 cgi-bin/admin.c:3522
msgid "Banners"
msgstr ""
msgid "Bond Paper"
msgstr ""
-#: backend/usb-darwin.c:1874
+#: backend/usb-darwin.c:2024
#, c-format
msgid "Boolean expected for waiteof option \"%s\"."
msgstr ""
-#: filter/pstops.c:2029
+#: filter/pstops.c:2034
msgid "Buffer overflow detected, aborting."
msgstr ""
msgid "Cancel Jobs"
msgstr ""
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
+#: cgi-bin/admin.c:1471 cgi-bin/admin.c:1510 cgi-bin/admin.c:1520
msgid "Cancel RSS Subscription"
msgstr ""
-#: backend/ipp.c:2198
+#: backend/ipp.c:2205
msgid "Canceling print job."
msgstr ""
-#: scheduler/ipp.c:2483
+#: scheduler/ipp.c:2470
msgid "Cannot share a remote Kerberized printer."
msgstr ""
msgid "Cassette"
msgstr ""
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
+#: cgi-bin/admin.c:1641 cgi-bin/admin.c:1783 cgi-bin/admin.c:1796
+#: cgi-bin/admin.c:1807
msgid "Change Settings"
msgstr ""
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
+#: scheduler/ipp.c:2030 scheduler/ipp.c:5485
#, c-format
msgid "Character set \"%s\" not supported."
msgstr ""
msgid "Clean Print Heads"
msgstr ""
-#: scheduler/ipp.c:3893
+#: scheduler/ipp.c:3882
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
msgid "Community name uses indefinite length"
msgstr ""
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
+#: backend/ipp.c:858 backend/lpd.c:879 backend/socket.c:400
msgid "Connected to printer."
msgstr ""
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
+#: backend/ipp.c:763 backend/lpd.c:702 backend/socket.c:319
msgid "Connecting to printer."
msgstr ""
msgid "Control file sent successfully."
msgstr ""
-#: backend/ipp.c:1349 backend/lpd.c:472
+#: backend/ipp.c:1358 backend/lpd.c:472
msgid "Copying print data."
msgstr ""
msgid "Data file sent successfully."
msgstr ""
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
+#: cgi-bin/admin.c:2080 cgi-bin/admin.c:2091 cgi-bin/admin.c:2136
msgid "Delete Class"
msgstr ""
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
+#: cgi-bin/admin.c:2165 cgi-bin/admin.c:2176 cgi-bin/admin.c:2221
msgid "Delete Printer"
msgstr ""
msgid "DeskJet Series"
msgstr ""
-#: scheduler/ipp.c:1276
+#: scheduler/ipp.c:1297
#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr ""
msgid "Disabled"
msgstr ""
-#: scheduler/ipp.c:5979
+#: scheduler/ipp.c:5984
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr ""
msgid "EPL2 Label Printer"
msgstr ""
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
+#: cgi-bin/admin.c:1835 cgi-bin/admin.c:1847 cgi-bin/admin.c:1901
+#: cgi-bin/admin.c:1908 cgi-bin/admin.c:1943 cgi-bin/admin.c:1956
+#: cgi-bin/admin.c:1980 cgi-bin/admin.c:2053
msgid "Edit Configuration File"
msgstr ""
msgid "Empty PPD file."
msgstr ""
-#: cups/http.c:4624
+#: cups/http.c:4648
msgid "Encryption is not supported."
msgstr ""
#. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
+#: cgi-bin/admin.c:3547
msgid "Ending Banner"
msgstr ""
msgid "English"
msgstr ""
-#: scheduler/client.c:2209
+#: scheduler/client.c:2219
msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
msgstr ""
msgid "Envelope You4 Long Edge"
msgstr ""
-#: test/ippfind.c:2809
+#: test/ippfind.c:2817
msgid "Environment Variables:"
msgstr ""
msgid "Epson"
msgstr ""
-#: cgi-bin/admin.c:3584
+#: cgi-bin/admin.c:3590
msgid "Error Policy"
msgstr ""
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+#: filter/rastertopwg.c:423
+msgid "Error reading raster data."
+msgstr ""
+
+#: filter/rastertopwg.c:395 filter/rastertopwg.c:413 filter/rastertopwg.c:431
+#: filter/rastertopwg.c:442
msgid "Error sending raster data."
msgstr ""
msgid "Expectation Failed"
msgstr ""
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
+#: cgi-bin/admin.c:2342 cgi-bin/admin.c:2361
msgid "Export Printers to Samba"
msgstr ""
-#: test/ippfind.c:2755
+#: test/ippfind.c:2763
msgid "Expressions:"
msgstr ""
msgid "File Folder "
msgstr ""
-#: scheduler/ipp.c:2378
+#: scheduler/ipp.c:2365
#, c-format
msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
msgstr ""
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
+#: filter/rastertoepson.c:1114 filter/rastertohp.c:834
#: filter/rastertolabel.c:1259
#, c-format
msgid "Finished page %d."
msgid "Glossy Paper"
msgstr ""
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
+#: scheduler/ipp.c:2948 scheduler/ipp.c:3356 scheduler/ipp.c:3894
+#: scheduler/ipp.c:5913 scheduler/ipp.c:6060 scheduler/ipp.c:7547
+#: scheduler/ipp.c:8681 scheduler/ipp.c:8905 scheduler/ipp.c:9257
+#: scheduler/ipp.c:9870
msgid "Got a printer-uri attribute but no job-id."
msgstr ""
msgid "IPP attribute has no name."
msgstr ""
-#: cups/ipp.c:7000
+#: cups/ipp.c:7016
msgid "IPP attribute is not a member of the message."
msgstr ""
msgid "Internet Postage 3-Part"
msgstr ""
-#: backend/ipp.c:319
+#: backend/ipp.c:323
msgid "Internet Printing Protocol"
msgstr ""
msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:8954
+#: scheduler/ipp.c:8977
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
+#: scheduler/ipp.c:2988 scheduler/ipp.c:3222 scheduler/ipp.c:3281
+#: scheduler/ipp.c:3458 scheduler/ipp.c:3904 scheduler/ipp.c:5571
+#: scheduler/ipp.c:5953 scheduler/ipp.c:6100 scheduler/ipp.c:6438
+#: scheduler/ipp.c:7394 scheduler/ipp.c:7416 scheduler/ipp.c:7588
+#: scheduler/ipp.c:7813 scheduler/ipp.c:7856 scheduler/ipp.c:8721
+#: scheduler/ipp.c:8945 scheduler/ipp.c:9297 scheduler/ipp.c:9910
#, c-format
msgid "Job #%d does not exist."
msgstr ""
-#: scheduler/ipp.c:3501
+#: scheduler/ipp.c:3490
#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr ""
-#: scheduler/ipp.c:3495
+#: scheduler/ipp.c:3484
#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr ""
-#: scheduler/ipp.c:3507
+#: scheduler/ipp.c:3496
#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
+#: scheduler/ipp.c:7614 scheduler/ipp.c:7898 scheduler/ipp.c:9925
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:8936
+#: scheduler/ipp.c:8959
#, c-format
msgid "Job #%d is not complete."
msgstr ""
-#: scheduler/ipp.c:3014
+#: scheduler/ipp.c:3003
#, c-format
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:8710
+#: scheduler/ipp.c:8735
#, c-format
msgid "Job #%d is not held."
msgstr ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:9975
+#: scheduler/ipp.c:10007
msgid "Job is completed and cannot be changed."
msgstr ""
msgid "Job operation failed"
msgstr ""
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
+#: scheduler/ipp.c:10043 scheduler/ipp.c:10060 scheduler/ipp.c:10071
msgid "Job state cannot be changed."
msgstr ""
-#: scheduler/ipp.c:8802
+#: scheduler/ipp.c:8825
msgid "Job subscriptions cannot be renewed."
msgstr ""
msgid "Label Top"
msgstr ""
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
+#: scheduler/ipp.c:2039 scheduler/ipp.c:5494
#, c-format
msgid "Language \"%s\" not supported."
msgstr ""
msgid "Line longer than the maximum allowed (255 characters)"
msgstr ""
-#: cgi-bin/admin.c:2373
+#: cgi-bin/admin.c:2379
msgid "List Available Printers"
msgstr ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:5971
+#: scheduler/ipp.c:5976
msgid "Missing document-number attribute."
msgstr ""
msgid "Missing double quote on line %d."
msgstr ""
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
+#: cgi-bin/admin.c:712 cgi-bin/admin.c:2092 cgi-bin/admin.c:2177
+#: cgi-bin/admin.c:2771 cgi-bin/admin.c:3025 cgi-bin/admin.c:3136
+#: cgi-bin/admin.c:3846
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9328
+#: scheduler/ipp.c:9351
msgid "Missing last-document attribute in request."
msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6574
+#: scheduler/ipp.c:6579
msgid "Missing notify-subscription-ids attribute."
msgstr ""
msgid "Missing option keyword"
msgstr ""
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
+#: scheduler/ipp.c:3129 scheduler/ipp.c:3154
msgid "Missing requesting-user-name attribute."
msgstr ""
" device-id = %s"
msgstr ""
-#: test/ippfind.c:2786
+#: test/ippfind.c:2794
msgid "Modifiers:"
msgstr ""
-#: cgi-bin/admin.c:548
+#: cgi-bin/admin.c:546
msgid "Modify Class"
msgstr ""
-#: cgi-bin/admin.c:860
+#: cgi-bin/admin.c:859
msgid "Modify Printer"
msgstr ""
msgid "Name OID uses indefinite length"
msgstr ""
-#: scheduler/ipp.c:1054
+#: scheduler/ipp.c:1061
msgid "Nested classes are not allowed."
msgstr ""
msgid "No active connection."
msgstr ""
-#: scheduler/ipp.c:3418
+#: scheduler/ipp.c:3407
#, c-format
msgid "No active jobs on %s."
msgstr ""
msgid "No attributes in request."
msgstr ""
-#: scheduler/ipp.c:3041
+#: scheduler/ipp.c:3030
msgid "No authentication information provided."
msgstr ""
msgid "No community name"
msgstr ""
-#: scheduler/ipp.c:5771
+#: scheduler/ipp.c:5776
msgid "No default printer."
msgstr ""
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
+#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7160
msgid "No destinations added."
msgstr ""
msgid "No error-status"
msgstr ""
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
+#: scheduler/ipp.c:8103 scheduler/ipp.c:9365
msgid "No file in print request."
msgstr ""
msgid "No name OID"
msgstr ""
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
+#: filter/rastertoepson.c:1144 filter/rastertohp.c:865
#: filter/rastertolabel.c:1288
msgid "No pages were found."
msgstr ""
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6179
+#: scheduler/ipp.c:6184
msgid "No printer-uri in request."
msgstr ""
msgid "No request-id"
msgstr ""
-#: scheduler/ipp.c:5374
+#: scheduler/ipp.c:5379
msgid "No subscription attributes in request."
msgstr ""
-#: scheduler/ipp.c:7476
+#: scheduler/ipp.c:7487
msgid "No subscriptions found."
msgstr ""
msgid "Not Supported"
msgstr ""
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
+#: scheduler/ipp.c:1506 scheduler/ipp.c:10624
msgid "Not allowed to print."
msgstr ""
msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
msgstr ""
-#: cgi-bin/admin.c:3611
+#: cgi-bin/admin.c:3617
msgid "Operation Policy"
msgstr ""
-#: filter/pstops.c:2177
+#: filter/pstops.c:2182
#, c-format
msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
msgstr ""
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
+#: cgi-bin/admin.c:3267 cgi-bin/admin.c:3351
msgid "Options Installed"
msgstr ""
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
+#: scheduler/cupsfilter.c:1482 scheduler/main.c:2177 systemv/cupsaddsmb.c:284
+#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3861
+#: test/ippfind.c:2753 test/ipptool.c:4857 ppdc/ppdc.cxx:432
+#: ppdc/ppdhtml.cxx:179 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
+#: ppdc/ppdpo.cxx:249
msgid "Options:"
msgstr ""
-#: cups/ppd-cache.c:125
+#: cups/ppd-cache.c:442
msgid "Out of date PPD cache file."
msgstr ""
-#: cups/ppd-cache.c:1410
+#: cups/ppd-cache.c:1810
msgid "Out of memory."
msgstr ""
msgid "Plain Paper"
msgstr ""
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
+#: cgi-bin/admin.c:3285 cgi-bin/admin.c:3566
msgid "Policies"
msgstr ""
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
+#: cgi-bin/admin.c:3292 cgi-bin/admin.c:3635 cgi-bin/admin.c:3648
msgid "Port Monitor"
msgstr ""
msgid "Postcard Long Edge"
msgstr ""
-#: backend/ipp.c:961 backend/ipp.c:969
+#: backend/ipp.c:965 backend/ipp.c:973
msgid "Preparing to print."
msgstr ""
msgid "Print file sent."
msgstr ""
-#: backend/ipp.c:2172
+#: backend/ipp.c:2179
msgid "Print job canceled at printer."
msgstr ""
-#: backend/ipp.c:2164
+#: backend/ipp.c:2171
msgid "Print job too large."
msgstr ""
-#: backend/ipp.c:1642
+#: backend/ipp.c:1653
msgid "Print job was not accepted."
msgstr ""
msgid "Printer Settings"
msgstr ""
-#: backend/ipp.c:2167
+#: backend/ipp.c:2174
msgid "Printer cannot print supplied content."
msgstr ""
-#: backend/ipp.c:2170
+#: backend/ipp.c:2177
msgid "Printer cannot print with supplied options."
msgstr ""
msgid "Printers"
msgstr ""
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
+#: filter/rastertoepson.c:1090 filter/rastertohp.c:806
#: filter/rastertolabel.c:1235
#, c-format
msgid "Printing page %d, %u%% complete."
msgid "Quarto"
msgstr ""
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
+#: scheduler/ipp.c:1501 scheduler/ipp.c:10619
msgid "Quota limit reached."
msgstr ""
msgid "See Other"
msgstr ""
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
+#: backend/usb-darwin.c:564 backend/usb-libusb.c:346
msgid "Sending data to printer."
msgstr ""
msgid "Server Stopped"
msgstr ""
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
+#: cups/tls-darwin.c:1030 cups/tls-gnutls.c:1049
msgid "Server credentials not set."
msgstr ""
msgid "Service Unavailable"
msgstr ""
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
+#: cgi-bin/admin.c:2772 cgi-bin/admin.c:2818 cgi-bin/admin.c:2975
+#: cgi-bin/admin.c:2994
msgid "Set Allowed Users"
msgstr ""
-#: cgi-bin/admin.c:3015
+#: cgi-bin/admin.c:3021
msgid "Set As Server Default"
msgstr ""
-#: cgi-bin/admin.c:3115
+#: cgi-bin/admin.c:3121
msgid "Set Class Options"
msgstr ""
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
+#: cgi-bin/admin.c:3121 cgi-bin/admin.c:3295 cgi-bin/admin.c:3677
msgid "Set Printer Options"
msgstr ""
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
+#: cgi-bin/admin.c:3847 cgi-bin/admin.c:3891 cgi-bin/admin.c:3909
msgid "Set Publishing"
msgstr ""
msgstr ""
#. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
+#: cgi-bin/admin.c:3538
msgid "Starting Banner"
msgstr ""
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
+#: filter/rastertoepson.c:1066 filter/rastertohp.c:782
#: filter/rastertolabel.c:1211
#, c-format
msgid "Starting page %d."
msgid "Statement"
msgstr ""
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
+#: scheduler/ipp.c:3553 scheduler/ipp.c:6595 scheduler/ipp.c:7300
+#: scheduler/ipp.c:8813
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
-#: test/ippfind.c:2798
+#: test/ippfind.c:2806
msgid "Substitutions:"
msgstr ""
msgid "Tear-Off Adjust Position"
msgstr ""
-#: scheduler/ipp.c:1321
+#: scheduler/ipp.c:1337
#, c-format
msgid "The \"%s\" attribute is required for print jobs."
msgstr ""
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
+#: scheduler/ipp.c:6255 scheduler/ipp.c:6335 scheduler/ipp.c:6348
+#: scheduler/ipp.c:6360 scheduler/ipp.c:6375
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr ""
-#: scheduler/ipp.c:1297
+#: scheduler/ipp.c:1316
#, c-format
-msgid "The '%s' Job Description attribute cannot be supplied in a job creation request."
+msgid "The '%s' Job Status attribute cannot be supplied in a job creation request."
msgstr ""
-#: scheduler/ipp.c:5183
+#: scheduler/ipp.c:5188
#, c-format
msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr ""
-#: scheduler/ipp.c:6820
+#: scheduler/ipp.c:6825
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr ""
-#: scheduler/ipp.c:6807
+#: scheduler/ipp.c:6812
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr ""
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
+#: filter/rastertoepson.c:1035 filter/rastertohp.c:753
#: filter/rastertolabel.c:1175
msgid "The PPD file could not be opened."
msgstr ""
-#: cgi-bin/admin.c:727
+#: cgi-bin/admin.c:725
msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
msgstr ""
msgid "The fuser's temperature is low."
msgstr ""
-#: scheduler/ipp.c:2088
+#: scheduler/ipp.c:2066
msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
+#: scheduler/ipp.c:2049 scheduler/ipp.c:5504
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr ""
msgid "The optical photoconductor will need to be replaced soon."
msgstr ""
-#: backend/ipp.c:981
+#: backend/ipp.c:985
msgid "The printer configuration is incorrect or the printer no longer exists."
msgstr ""
msgid "The printer did not respond."
msgstr ""
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
+#: backend/ipp.c:829 backend/ipp.c:948 backend/ipp.c:1062 backend/ipp.c:1459
+#: backend/ipp.c:1625 backend/lpd.c:836 backend/socket.c:379
#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
msgid "The printer is in use."
msgstr ""
msgid "The printer is not connected."
msgstr ""
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
+#: backend/ipp.c:807 backend/ipp.c:840 backend/ipp.c:944 backend/lpd.c:815
#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
msgid "The printer is not responding."
msgstr ""
msgid "The printer is now connected."
msgstr ""
-#: backend/usb-darwin.c:1300
+#: backend/usb-darwin.c:1342
msgid "The printer is now online."
msgstr ""
-#: backend/usb-darwin.c:1321
+#: backend/usb-darwin.c:1381
msgid "The printer is offline."
msgstr ""
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
+#: backend/ipp.c:822 backend/lpd.c:829 backend/socket.c:372
msgid "The printer is unreachable at this time."
msgstr ""
msgid "The printer may be out of toner."
msgstr ""
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
+#: backend/ipp.c:816 backend/lpd.c:823 backend/socket.c:366
msgid "The printer may not exist or is unavailable at this time."
msgstr ""
-#: cgi-bin/admin.c:909
+#: cgi-bin/admin.c:908
msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
msgstr ""
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
+#: scheduler/ipp.c:787 scheduler/ipp.c:1055 scheduler/ipp.c:3194
+#: scheduler/ipp.c:3373 scheduler/ipp.c:5171 scheduler/ipp.c:5338
+#: scheduler/ipp.c:5652 scheduler/ipp.c:6221 scheduler/ipp.c:7030
+#: scheduler/ipp.c:7086 scheduler/ipp.c:7406 scheduler/ipp.c:7672
+#: scheduler/ipp.c:7761 scheduler/ipp.c:7794 scheduler/ipp.c:8118
+#: scheduler/ipp.c:8525 scheduler/ipp.c:8607 scheduler/ipp.c:9779
+#: scheduler/ipp.c:10231 scheduler/ipp.c:10582 scheduler/ipp.c:10664
+#: scheduler/ipp.c:11039
msgid "The printer or class does not exist."
msgstr ""
-#: scheduler/ipp.c:1234
+#: scheduler/ipp.c:1255
msgid "The printer or class is not shared."
msgstr ""
msgid "The printer's waste bin is full."
msgstr ""
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
+#: scheduler/ipp.c:893 scheduler/ipp.c:2230
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr ""
-#: scheduler/ipp.c:3182
+#: scheduler/ipp.c:3171
msgid "The printer-uri attribute is required."
msgstr ""
-#: scheduler/ipp.c:878
+#: scheduler/ipp.c:877
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
-#: scheduler/ipp.c:2236
+#: scheduler/ipp.c:2214
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
-#: cgi-bin/admin.c:452
+#: cgi-bin/admin.c:450
msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
msgstr ""
-#: scheduler/client.c:2232
+#: scheduler/client.c:2242
msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
msgstr ""
-#: scheduler/ipp.c:6314
+#: scheduler/ipp.c:6319
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr ""
-#: scheduler/ipp.c:5577
+#: scheduler/ipp.c:5582
msgid "There are too many subscriptions."
msgstr ""
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
+#: backend/usb-darwin.c:398 backend/usb-darwin.c:457 backend/usb-darwin.c:526
+#: backend/usb-darwin.c:547 backend/usb-libusb.c:271 backend/usb-libusb.c:325
msgid "There was an unrecoverable USB error."
msgstr ""
msgid "Thermal Transfer Media"
msgstr ""
-#: scheduler/ipp.c:1479
+#: scheduler/ipp.c:1495
msgid "Too many active jobs."
msgstr ""
-#: scheduler/ipp.c:1373
+#: scheduler/ipp.c:1389
#, c-format
msgid "Too many job-sheets values (%d > 2)."
msgstr ""
-#: scheduler/ipp.c:2537
+#: scheduler/ipp.c:2524
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr ""
msgid "US Letter Small"
msgstr ""
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
+#: cgi-bin/admin.c:1945 cgi-bin/admin.c:1958 cgi-bin/admin.c:1982
msgid "Unable to access cupsd.conf file"
msgstr ""
msgid "Unable to access help file."
msgstr ""
-#: cgi-bin/admin.c:504
+#: cgi-bin/admin.c:502
msgid "Unable to add RSS subscription"
msgstr ""
-#: cgi-bin/admin.c:792
+#: cgi-bin/admin.c:790
msgid "Unable to add class"
msgstr ""
-#: backend/ipp.c:1796
+#: backend/ipp.c:1807
msgid "Unable to add document to print job."
msgstr ""
-#: scheduler/ipp.c:1537
+#: scheduler/ipp.c:1553
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr ""
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
+#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1405
msgid "Unable to add printer"
msgstr ""
-#: scheduler/ipp.c:1164
+#: scheduler/ipp.c:1173
msgid "Unable to allocate memory for file types."
msgstr ""
-#: filter/pstops.c:418
+#: filter/pstops.c:423
msgid "Unable to allocate memory for page info"
msgstr ""
-#: filter/pstops.c:412
+#: filter/pstops.c:417
msgid "Unable to allocate memory for pages array"
msgstr ""
-#: cgi-bin/admin.c:1505
+#: cgi-bin/admin.c:1511
msgid "Unable to cancel RSS subscription"
msgstr ""
-#: backend/ipp.c:2077 backend/ipp.c:2512
+#: backend/ipp.c:2084 backend/ipp.c:2532
msgid "Unable to cancel print job."
msgstr ""
-#: cgi-bin/admin.c:2970
+#: cgi-bin/admin.c:2976
msgid "Unable to change printer"
msgstr ""
-#: cgi-bin/admin.c:3886
+#: cgi-bin/admin.c:3892
msgid "Unable to change printer-is-shared attribute"
msgstr ""
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
+#: cgi-bin/admin.c:1643 cgi-bin/admin.c:1785
msgid "Unable to change server settings"
msgstr ""
msgid "Unable to connect to host."
msgstr ""
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
+#: backend/ipp.c:785 backend/ipp.c:1258 backend/lpd.c:795 backend/socket.c:338
#: backend/usb-unix.c:110
msgid "Unable to contact printer, queuing on next printer in class."
msgstr ""
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2657
+#: scheduler/ipp.c:2644
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr ""
-#: scheduler/ipp.c:2712
+#: scheduler/ipp.c:2699
msgid "Unable to copy PPD file."
msgstr ""
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2634
+#: scheduler/ipp.c:2621
#, c-format
msgid "Unable to copy interface script - %s"
msgstr ""
msgid "Unable to create printer-uri"
msgstr ""
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
+#: cups/tls-darwin.c:1291 cups/tls-gnutls.c:1181
msgid "Unable to create server credentials."
msgstr ""
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
+#: cgi-bin/admin.c:1836 cgi-bin/admin.c:1848 scheduler/cupsfilter.c:1290
msgid "Unable to create temporary file"
msgstr ""
-#: cgi-bin/admin.c:2133
+#: cgi-bin/admin.c:2139
msgid "Unable to delete class"
msgstr ""
-#: cgi-bin/admin.c:2218
+#: cgi-bin/admin.c:2224
msgid "Unable to delete printer"
msgstr ""
msgid "Unable to do maintenance command"
msgstr ""
-#: cgi-bin/admin.c:1954
+#: cgi-bin/admin.c:1960
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr ""
-#: cups/tls-darwin.c:1284
+#: cups/tls-darwin.c:1459
msgid "Unable to establish a secure connection to host (certificate chain invalid)."
msgstr ""
-#: cups/tls-darwin.c:1274
+#: cups/tls-darwin.c:1449
msgid "Unable to establish a secure connection to host (certificate not yet valid)."
msgstr ""
-#: cups/tls-darwin.c:1269
+#: cups/tls-darwin.c:1444
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr ""
-#: cups/tls-darwin.c:1279
+#: cups/tls-darwin.c:1454
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr ""
-#: cups/tls-darwin.c:1289
+#: cups/tls-darwin.c:1464
msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
msgstr ""
-#: cups/tls-darwin.c:1264
+#: cups/tls-darwin.c:1439
msgid "Unable to establish a secure connection to host (self-signed certificate)."
msgstr ""
-#: cups/tls-darwin.c:1259
+#: cups/tls-darwin.c:1434
msgid "Unable to establish a secure connection to host (untrusted certificate)."
msgstr ""
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
+#: cups/tls-darwin.c:1491 cups/tls-sspi.c:1279 cups/tls-sspi.c:1296
msgid "Unable to establish a secure connection to host."
msgstr ""
msgid "Unable to find printer."
msgstr ""
-#: cups/tls-darwin.c:1130
+#: cups/tls-darwin.c:1305
msgid "Unable to find server credentials."
msgstr ""
-#: backend/ipp.c:3493
+#: backend/ipp.c:3220
msgid "Unable to get backend exit status."
msgstr ""
msgid "Unable to get class status"
msgstr ""
-#: cgi-bin/admin.c:1300
+#: cgi-bin/admin.c:1299
msgid "Unable to get list of printer drivers"
msgstr ""
-#: cgi-bin/admin.c:2820
+#: cgi-bin/admin.c:2826
msgid "Unable to get printer attributes"
msgstr ""
msgid "Unable to get printer status"
msgstr ""
-#: backend/ipp.c:1005
+#: backend/ipp.c:1009
msgid "Unable to get printer status."
msgstr ""
msgid "Unable to load help index."
msgstr ""
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
+#: backend/ipp.c:672 backend/lpd.c:426 backend/socket.c:277
#, c-format
msgid "Unable to locate printer \"%s\"."
msgstr ""
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
+#: backend/dnssd.c:787 backend/ipp.c:340 backend/lpd.c:196
#: backend/socket.c:163
msgid "Unable to locate printer."
msgstr ""
-#: cgi-bin/admin.c:791
+#: cgi-bin/admin.c:789
msgid "Unable to modify class"
msgstr ""
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
+#: cgi-bin/admin.c:1035 cgi-bin/admin.c:1404
msgid "Unable to modify printer"
msgstr ""
msgid "Unable to move jobs"
msgstr ""
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
+#: cgi-bin/admin.c:3172 cups/ppd.c:297
msgid "Unable to open PPD file"
msgstr ""
-#: cgi-bin/admin.c:2588
+#: cgi-bin/admin.c:2594
msgid "Unable to open cupsd.conf file:"
msgstr ""
msgid "Unable to open device file"
msgstr ""
-#: scheduler/ipp.c:5992
+#: scheduler/ipp.c:5997
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr ""
msgid "Unable to open help file."
msgstr ""
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
+#: backend/ipp.c:382 backend/ipp.c:1554 backend/ipp.c:1762 backend/lpd.c:496
+#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:73
+#: filter/pstops.c:270
msgid "Unable to open print file"
msgstr ""
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
+#: filter/rastertoepson.c:995 filter/rastertohp.c:713
#: filter/rastertolabel.c:1133
msgid "Unable to open raster file"
msgstr ""
msgid "Unable to print test page"
msgstr ""
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
+#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:634
+#: backend/usb-darwin.c:678 backend/usb-libusb.c:416 backend/usb-libusb.c:451
msgid "Unable to read print data."
msgstr ""
-#: cups/dest.c:3445
+#: scheduler/ipp.c:8277 scheduler/ipp.c:9518
+msgid "Unable to rename job document file."
+msgstr ""
+
+#: cups/dest.c:3446
msgid "Unable to resolve printer-uri."
msgstr ""
msgid "Unable to run \"%s\": %s"
msgstr ""
-#: filter/pstops.c:530
+#: filter/pstops.c:535
msgid "Unable to see in file"
msgstr ""
msgid "Unable to send command to printer driver"
msgstr ""
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
+#: backend/usb-darwin.c:756 backend/usb-libusb.c:527
msgid "Unable to send data to printer."
msgstr ""
msgid "Unable to set Windows printer driver (%d)."
msgstr ""
-#: cgi-bin/admin.c:3787
+#: cgi-bin/admin.c:3793
msgid "Unable to set options"
msgstr ""
-#: cgi-bin/admin.c:3057
+#: cgi-bin/admin.c:3063
msgid "Unable to set server default"
msgstr ""
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
+#: backend/ipp.c:3079 backend/ipp.c:3156 backend/ipp.c:3164
msgid "Unable to start backend process."
msgstr ""
-#: cgi-bin/admin.c:1892
+#: cgi-bin/admin.c:1898
msgid "Unable to upload cupsd.conf file"
msgstr ""
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
+#: backend/usb-darwin.c:2166 backend/usb-darwin.c:2190
msgid "Unable to use legacy USB class driver."
msgstr ""
msgid "Unable to write print data"
msgstr ""
-#: filter/gziptoany.c:86
+#: filter/gziptoany.c:92
#, c-format
msgid "Unable to write uncompressed print data: %s"
msgstr ""
msgid "Unauthorized"
msgstr ""
-#: cgi-bin/admin.c:3483
+#: cgi-bin/admin.c:3489
msgid "Units"
msgstr ""
msgid "Unknown"
msgstr ""
-#: filter/pstops.c:2185
+#: filter/pstops.c:2190
#, c-format
msgid "Unknown choice \"%s\" for option \"%s\"."
msgstr ""
-#: backend/ipp.c:520
+#: backend/ipp.c:524
#, c-format
msgid "Unknown encryption option value: \"%s\"."
msgstr ""
msgid "Unknown media size name."
msgstr ""
-#: backend/ipp.c:584
+#: backend/ipp.c:588
#, c-format
msgid "Unknown option \"%s\" with value \"%s\"."
msgstr ""
-#: filter/pstops.c:2168
+#: filter/pstops.c:2173
#, c-format
msgid "Unknown option \"%s\"."
msgstr ""
msgid "Unknown print mode: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10401
+#: scheduler/ipp.c:10453
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10384
+#: scheduler/ipp.c:10436
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr ""
msgid "Unknown service name."
msgstr ""
-#: backend/ipp.c:549
+#: backend/ipp.c:553
#, c-format
msgid "Unknown version option value: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10858
+#: scheduler/ipp.c:10910
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10888
+#: scheduler/ipp.c:10940
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10963
+#: scheduler/ipp.c:11015
msgid "Unsupported 'job-name' value."
msgstr ""
msgid "Unsupported character set \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
+#: scheduler/ipp.c:8084 scheduler/ipp.c:9330
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
+#: scheduler/ipp.c:8220 scheduler/ipp.c:9483
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9440
+#: scheduler/ipp.c:9466
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr ""
-#: scheduler/ipp.c:1339
+#: scheduler/ipp.c:1355
#, c-format
msgid "Unsupported format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:1437
+#: scheduler/ipp.c:1453
msgid "Unsupported margins."
msgstr ""
msgid "Unsupported media value."
msgstr ""
-#: filter/pstops.c:2450
+#: filter/pstops.c:2455
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
msgstr ""
-#: filter/pstops.c:2484
+#: filter/pstops.c:2489
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
msgstr ""
-#: filter/pstops.c:2535
+#: filter/pstops.c:2540
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
msgstr ""
msgid "Upgrade Required"
msgstr ""
-#: systemv/lpadmin.c:654
+#: systemv/lpadmin.c:666
msgid ""
"Usage:\n"
"\n"
" [-u allow:user,user] [-u deny:user,user]"
msgstr ""
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
+#: backend/dnssd.c:227 backend/ipp.c:329 backend/lpd.c:183
#: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
#: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
#: monitor/tbcp.c:55
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2145
+#: scheduler/main.c:2176
msgid "Usage: cupsd [options]"
msgstr ""
msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
msgstr ""
-#: systemv/cupstestppd.c:3813
+#: systemv/cupstestppd.c:3857
msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
msgstr ""
"Options:"
msgstr ""
-#: test/ippfind.c:2738
+#: test/ippfind.c:2746
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
" ippfind --version"
msgstr ""
-#: test/ipptool.c:4803
+#: test/ipptool.c:4855
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr ""
msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
msgstr ""
-#: ppdc/ppdhtml.cxx:172
+#: ppdc/ppdhtml.cxx:177
msgid "Usage: ppdhtml [options] filename.drv >filename.html"
msgstr ""
msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
msgstr ""
-#: ppdc/ppdpo.cxx:252
+#: ppdc/ppdpo.cxx:247
msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
msgstr ""
msgid "Version uses indefinite length"
msgstr ""
-#: backend/ipp.c:1913
+#: backend/ipp.c:1924
msgid "Waiting for job to complete."
msgstr ""
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
+#: backend/usb-darwin.c:481 backend/usb-libusb.c:223
msgid "Waiting for printer to become available."
msgstr ""
msgid "Yes"
msgstr ""
-#: scheduler/client.c:2219
+#: scheduler/client.c:2229
#, c-format
msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
msgstr ""
msgid "completed"
msgstr ""
-#: scheduler/ipp.c:5864
+#: scheduler/ipp.c:5869
msgid "cups-deviced failed to execute."
msgstr ""
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
+#: scheduler/ipp.c:6748 scheduler/ipp.c:6997
msgid "cups-driverd failed to execute."
msgstr ""
msgid "cupsctl: Unknown option \"-%c\""
msgstr ""
-#: scheduler/main.c:171
+#: scheduler/main.c:182
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr ""
-#: scheduler/main.c:258
+#: scheduler/main.c:278
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
-#: scheduler/main.c:236
+#: scheduler/main.c:252
msgid "cupsd: On-demand support not compiled in, running in normal mode."
msgstr ""
-#: scheduler/main.c:269
+#: scheduler/main.c:289
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr ""
-#: scheduler/main.c:202 scheduler/main.c:209
+#: scheduler/main.c:213 scheduler/main.c:220
msgid "cupsd: Unable to get current directory."
msgstr ""
-#: scheduler/main.c:316 scheduler/main.c:325
+#: scheduler/main.c:338 scheduler/main.c:347
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr ""
-#: scheduler/main.c:298
+#: scheduler/main.c:320
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr ""
-#: scheduler/main.c:291
+#: scheduler/main.c:313
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr ""
msgid "cupsfilter: Unable to get job file - %s"
msgstr ""
-#: systemv/cupstestppd.c:261
+#: systemv/cupstestppd.c:241
msgid "cupstestppd: The -q option is incompatible with the -v option."
msgstr ""
-#: systemv/cupstestppd.c:277
+#: systemv/cupstestppd.c:257
msgid "cupstestppd: The -v option is incompatible with the -q option."
msgstr ""
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr ""
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
+#: test/ipptool.c:329 test/ipptool.c:392 test/ipptool.c:547 test/ipptool.c:570
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
msgstr ""
-#: test/ipptool.c:623
+#: test/ipptool.c:626
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr ""
-#: test/ipptool.c:537
+#: test/ipptool.c:540
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:604
+#: test/ipptool.c:607
msgid "ipptool: May only specify a single URI."
msgstr ""
-#: test/ipptool.c:559
+#: test/ipptool.c:562
msgid "ipptool: Missing count for \"-n\"."
msgstr ""
-#: test/ipptool.c:423
+#: test/ipptool.c:426
msgid "ipptool: Missing filename for \"-f\"."
msgstr ""
-#: test/ipptool.c:404
+#: test/ipptool.c:407
msgid "ipptool: Missing name=value for \"-d\"."
msgstr ""
-#: test/ipptool.c:527
+#: test/ipptool.c:530
msgid "ipptool: Missing seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:649
+#: test/ipptool.c:652
msgid "ipptool: URI required before test file."
msgstr ""
-#: test/ipptool.c:585
+#: test/ipptool.c:588
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:7739
+#: scheduler/ipp.c:7750
msgid "job-printer-uri attribute missing."
msgstr ""
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
+#: systemv/lpadmin.c:123 systemv/lpadmin.c:364
msgid "lpadmin: Class name can only contain printable characters."
msgstr ""
-#: systemv/lpadmin.c:600
+#: systemv/lpadmin.c:601
msgid "lpadmin: Expected PPD after \"-P\" option."
msgstr ""
-#: systemv/lpadmin.c:443
+#: systemv/lpadmin.c:445
msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
msgstr ""
-#: systemv/lpadmin.c:350
+#: systemv/lpadmin.c:353
msgid "lpadmin: Expected class after \"-r\" option."
msgstr ""
-#: systemv/lpadmin.c:106
+#: systemv/lpadmin.c:112
msgid "lpadmin: Expected class name after \"-c\" option."
msgstr ""
-#: systemv/lpadmin.c:544
+#: systemv/lpadmin.c:545
msgid "lpadmin: Expected description after \"-D\" option."
msgstr ""
-#: systemv/lpadmin.c:477
+#: systemv/lpadmin.c:479
msgid "lpadmin: Expected device URI after \"-v\" option."
msgstr ""
-#: systemv/lpadmin.c:560
+#: systemv/lpadmin.c:561
msgid "lpadmin: Expected file type(s) after \"-I\" option."
msgstr ""
-#: systemv/lpadmin.c:188
+#: systemv/lpadmin.c:193
msgid "lpadmin: Expected hostname after \"-h\" option."
msgstr ""
-#: systemv/lpadmin.c:207
+#: systemv/lpadmin.c:212
msgid "lpadmin: Expected interface after \"-i\" option."
msgstr ""
-#: systemv/lpadmin.c:580
+#: systemv/lpadmin.c:581
msgid "lpadmin: Expected location after \"-L\" option."
msgstr ""
-#: systemv/lpadmin.c:260
+#: systemv/lpadmin.c:264
msgid "lpadmin: Expected model after \"-m\" option."
msgstr ""
-#: systemv/lpadmin.c:403
+#: systemv/lpadmin.c:405
msgid "lpadmin: Expected name after \"-R\" option."
msgstr ""
-#: systemv/lpadmin.c:280
+#: systemv/lpadmin.c:284
msgid "lpadmin: Expected name=value after \"-o\" option."
msgstr ""
-#: systemv/lpadmin.c:299
+#: systemv/lpadmin.c:303
msgid "lpadmin: Expected printer after \"-p\" option."
msgstr ""
-#: systemv/lpadmin.c:150
+#: systemv/lpadmin.c:155
msgid "lpadmin: Expected printer name after \"-d\" option."
msgstr ""
-#: systemv/lpadmin.c:511
+#: systemv/lpadmin.c:512
msgid "lpadmin: Expected printer or class after \"-x\" option."
msgstr ""
-#: systemv/lpadmin.c:961
+#: systemv/lpadmin.c:973
msgid "lpadmin: No member names were seen."
msgstr ""
-#: systemv/lpadmin.c:748
+#: systemv/lpadmin.c:760
#, c-format
msgid "lpadmin: Printer %s is already a member of class %s."
msgstr ""
-#: systemv/lpadmin.c:975
+#: systemv/lpadmin.c:987
#, c-format
msgid "lpadmin: Printer %s is not a member of class %s."
msgstr ""
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
+#: systemv/lpadmin.c:166 systemv/lpadmin.c:314 systemv/lpadmin.c:523
msgid "lpadmin: Printer name can only contain printable characters."
msgstr ""
-#: systemv/lpadmin.c:91
+#: systemv/lpadmin.c:97
msgid ""
"lpadmin: Unable to add a printer to the class:\n"
" You must specify a printer name first."
msgstr ""
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
+#: systemv/lpadmin.c:88 systemv/lpadmin.c:140 systemv/lpadmin.c:243
+#: systemv/lpadmin.c:328 systemv/lpadmin.c:381 systemv/lpadmin.c:497
+#: systemv/lpadmin.c:642
#, c-format
msgid "lpadmin: Unable to connect to server: %s"
msgstr ""
-#: systemv/lpadmin.c:1314
+#: systemv/lpadmin.c:1427
msgid "lpadmin: Unable to create temporary file"
msgstr ""
-#: systemv/lpadmin.c:388
+#: systemv/lpadmin.c:390
msgid ""
"lpadmin: Unable to delete option:\n"
" You must specify a printer name first."
msgstr ""
-#: systemv/lpadmin.c:1324
+#: systemv/lpadmin.c:1419
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
+#: systemv/lpadmin.c:1439
#, c-format
msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
msgstr ""
-#: systemv/lpadmin.c:334
+#: systemv/lpadmin.c:337
msgid ""
"lpadmin: Unable to remove a printer from the class:\n"
" You must specify a printer name first."
msgstr ""
-#: systemv/lpadmin.c:642
+#: systemv/lpadmin.c:651
msgid ""
"lpadmin: Unable to set the printer options:\n"
" You must specify a printer name first."
msgstr ""
-#: systemv/lpadmin.c:460
+#: systemv/lpadmin.c:462
#, c-format
msgid "lpadmin: Unknown allow/deny option \"%s\"."
msgstr ""
-#: systemv/lpadmin.c:615
+#: systemv/lpadmin.c:616
#, c-format
msgid "lpadmin: Unknown argument \"%s\"."
msgstr ""
-#: systemv/lpadmin.c:610
+#: systemv/lpadmin.c:611
#, c-format
msgid "lpadmin: Unknown option \"%c\"."
msgstr ""
-#: systemv/lpadmin.c:566
+#: systemv/lpadmin.c:567
msgid "lpadmin: Warning - content type list ignored."
msgstr ""
msgid "no system default destination"
msgstr ""
-#: scheduler/ipp.c:5548
+#: scheduler/ipp.c:5553
msgid "notify-events not specified."
msgstr ""
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
+#: scheduler/ipp.c:2003 scheduler/ipp.c:5458
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr ""
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
+#: scheduler/ipp.c:1993 scheduler/ipp.c:5448
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr ""
msgid "pending"
msgstr ""
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
+#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:87
#, c-format
msgid "ppdc: Adding include directory \"%s\"."
msgstr ""
-#: ppdc/ppdpo.cxx:134
+#: ppdc/ppdpo.cxx:130
#, c-format
msgid "ppdc: Adding/updating UI text from %s."
msgstr ""
msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
msgstr ""
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
+#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:117
#, c-format
msgid "ppdc: Loading driver information file \"%s\"."
msgstr ""
// 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\".";
"%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\".";
"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";
"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";
"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";
"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.";
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"
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 ""
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."
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»."
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."
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."
#, 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
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 ""
"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"
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"
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 ""
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 ""
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 ""
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 ""
msgid "Error Policy"
msgstr "Chování při chybě"
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
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
msgid "Unable to read print data."
msgstr ""
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr ""
" 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 ""
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"
#, c-format
msgid "\tAlerts: %s"
-msgstr "\Alarme: %s"
+msgstr "\tAlarme: %s"
msgid "\tBanner required"
msgstr "\tBanner erforderlich"
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)"
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"
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)"
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."
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."
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"
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 ""
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 ""
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 ""
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 ""
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\"."
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).
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"
msgid "Error Policy"
msgstr "Fehlerbehandlung"
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
msgstr "Fehler beim Senden von Rasterdaten."
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"
"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"
#, 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
"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."
msgid "Unable to read print data."
msgstr ""
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr ""
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 ""
" 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"
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: 2014-09-23 23:45+0100\n"
"Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
msgid "\t\t(all)"
msgstr "\t\t(todos)"
-#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
-#: systemv/lpstat.c:1996
msgid "\t\t(none)"
msgstr "\t\t(ninguno)"
-#: berkeley/lpc.c:426
#, c-format
msgid "\t%d entries"
msgstr "\t%d entradas"
-#: systemv/lpstat.c:783 systemv/lpstat.c:799
#, c-format
msgid "\t%s"
msgstr "\t%s"
-#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
msgid "\tAfter fault: continue"
msgstr "\tTras fallo: continuar"
-#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
#, c-format
msgid "\tAlerts: %s"
msgstr "\tAlertas: %s"
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
msgid "\tBanner required"
msgstr "\tSe necesita un rótulo"
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
msgid "\tCharset sets:"
msgstr "\tJuegos de caracteres:"
-#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
msgid "\tConnection: direct"
msgstr "\tConexión: directa"
-#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
msgid "\tConnection: remote"
msgstr "\tConexión: remota"
-#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
msgid "\tContent types: any"
msgstr "\tTipos de contenido: cualesquiera"
-#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
msgid "\tDefault page size:"
msgstr "\tTamaño de página predeterminado:"
-#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
msgid "\tDefault pitch:"
msgstr "\tPaso predeterminado:"
-#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
msgid "\tDefault port settings:"
msgstr "\tAjustes del puerto predeterminados:"
-#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
#, c-format
msgid "\tDescription: %s"
msgstr "\tDescripción: %s"
-#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
msgid "\tForm mounted:"
msgstr "\tFormulario montado:"
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
msgid "\tForms allowed:"
msgstr "\tFormularios permitidos:"
-#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
#, c-format
msgid "\tInterface: %s.ppd"
msgstr "\tInterfaz: %s.ppd"
-#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
#, c-format
msgid "\tInterface: %s/interfaces/%s"
msgstr "\tInterfaz: %s/interfaces/%s"
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
#, c-format
msgid "\tInterface: %s/ppd/%s.ppd"
msgstr "\tInterfaz: %s/ppd/%s.ppd"
-#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
#, c-format
msgid "\tLocation: %s"
msgstr "\tUbicación: %s"
-#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
msgid "\tOn fault: no alert"
msgstr "\tEn fallo: no alertar"
-#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
msgid "\tPrinter types: unknown"
msgstr "\tTipos de impresora: desconocidos"
-#: systemv/lpstat.c:1454
#, c-format
msgid "\tStatus: %s"
msgstr "\tEstado: %s"
-#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
-#: systemv/lpstat.c:1989
msgid "\tUsers allowed:"
msgstr "\tUsuarios permitidos:"
-#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
msgid "\tUsers denied:"
msgstr "\tUsuarios denegados:"
-#: berkeley/lpc.c:428
msgid "\tdaemon present"
msgstr "\tdemonio presente"
-#: berkeley/lpc.c:424
msgid "\tno entries"
msgstr "\tno hay entradas"
-#: berkeley/lpc.c:396 berkeley/lpc.c:408
#, c-format
msgid "\tprinter is on device '%s' speed -1"
msgstr "\tla impresora está conectada a '%s' velocidad -1"
-#: berkeley/lpc.c:421
msgid "\tprinting is disabled"
msgstr "\tla impresión está desactivada"
-#: berkeley/lpc.c:419
msgid "\tprinting is enabled"
msgstr "\tla impresión está activada"
-#: systemv/lpstat.c:1474
#, c-format
msgid "\tqueued for %s"
msgstr "\ten cola para %s"
-#: berkeley/lpc.c:416
msgid "\tqueuing is disabled"
msgstr "\tla cola está desactivada"
-#: berkeley/lpc.c:414
msgid "\tqueuing is enabled"
msgstr "\tla cola está activada"
-#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
msgid "\treason unknown"
msgstr "\trazón desconocida"
-#: systemv/cupstestppd.c:454
msgid ""
"\n"
" DETAILED CONFORMANCE TEST RESULTS"
"\n"
" RESULTADOS DETALLADOS DE LA PRUEBA DE CONFORMIDAD"
-#: systemv/cupstestppd.c:3820
msgid " Ignore specific warnings."
msgstr " Ignorar advertencias (warnings) específicas."
-#: systemv/cupstestppd.c:3824
msgid " Issue warnings instead of errors."
msgstr ""
" Emitir advertencias (warnings) en vez de errores."
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
msgid " REF: Page 15, section 3.1."
msgstr " REF: Página 15, sección 3.1."
-#: systemv/cupstestppd.c:405
msgid " REF: Page 15, section 3.2."
msgstr " REF: Página 15, sección 3.2."
-#: systemv/cupstestppd.c:425
msgid " REF: Page 19, section 3.3."
msgstr " REF: Página 19, sección 3.3."
-#: systemv/cupstestppd.c:378
msgid " REF: Page 20, section 3.4."
msgstr " REF: Página 20, sección 3.4."
-#: systemv/cupstestppd.c:430
msgid " REF: Page 27, section 3.5."
msgstr " REF: Página 27, sección 3.5."
-#: systemv/cupstestppd.c:373
msgid " REF: Page 42, section 5.2."
msgstr " REF: Página 42, sección 5.2."
-#: systemv/cupstestppd.c:420
msgid " REF: Pages 16-17, section 3.2."
msgstr " REF: Páginas 16-17, sección 3.2."
-#: systemv/cupstestppd.c:390
msgid " REF: Pages 42-45, section 5.2."
msgstr " REF: Páginas 42-45, sección 5.2."
-#: systemv/cupstestppd.c:384
msgid " REF: Pages 45-46, section 5.2."
msgstr " REF: Páginas 45-46, sección 5.2."
-#: systemv/cupstestppd.c:395
msgid " REF: Pages 48-49, section 5.2."
msgstr " REF: Páginas 48-49, sección 5.2."
-#: systemv/cupstestppd.c:400
msgid " REF: Pages 52-54, section 5.2."
msgstr " REF: Páginas 52-54, sección 5.2."
-#: berkeley/lpq.c:528
#, c-format
msgid " %-39.39s %.0f bytes"
msgstr " %-39.39s %.0f bytes"
-#: systemv/cupstestppd.c:589
#, c-format
msgid " PASS Default%s"
msgstr " PASA Default%s"
-#: systemv/cupstestppd.c:524
msgid " PASS DefaultImageableArea"
msgstr " PASA DefaultImageableArea"
-#: systemv/cupstestppd.c:558
msgid " PASS DefaultPaperDimension"
msgstr " PASA DefaultPaperDimension"
-#: systemv/cupstestppd.c:631
msgid " PASS FileVersion"
msgstr " PASA FileVersion"
-#: systemv/cupstestppd.c:675
msgid " PASS FormatVersion"
msgstr " PASA FormatVersion"
-#: systemv/cupstestppd.c:695
msgid " PASS LanguageEncoding"
msgstr " PASA LanguageEncoding"
-#: systemv/cupstestppd.c:715
msgid " PASS LanguageVersion"
msgstr " PASA LanguageVersion"
-#: systemv/cupstestppd.c:769
msgid " PASS Manufacturer"
msgstr " PASA Manufacturer"
-#: systemv/cupstestppd.c:809
msgid " PASS ModelName"
msgstr " PASA ModelName"
-#: systemv/cupstestppd.c:829
msgid " PASS NickName"
msgstr " PASA NickName"
-#: systemv/cupstestppd.c:889
msgid " PASS PCFileName"
msgstr " PASA PCFileName"
-#: systemv/cupstestppd.c:964
msgid " PASS PSVersion"
msgstr " PASA PSVersion"
-#: systemv/cupstestppd.c:869
msgid " PASS PageRegion"
msgstr " PASA PageRegion"
-#: systemv/cupstestppd.c:849
msgid " PASS PageSize"
msgstr " PASA PageSize"
-#: systemv/cupstestppd.c:924
msgid " PASS Product"
msgstr " PASA Product"
-#: systemv/cupstestppd.c:999
msgid " PASS ShortNickName"
msgstr " PASA ShortNickName"
-#: systemv/cupstestppd.c:1374
#, c-format
msgid " WARN %s has no corresponding options."
msgstr " ADVERTENCIA %s tiene opciones que no corresponden."
-#: systemv/cupstestppd.c:1486
#, c-format
msgid ""
" WARN %s shares a common prefix with %s\n"
" ADVERTENCIA %s comparte un prefijo común con %s\n"
" REF: Página 15, sección 3.2."
-#: systemv/cupstestppd.c:1345
#, c-format
msgid ""
" WARN Duplex option keyword %s may not work as expected and should "
"como se espera y debería llamarse Duplex.\n"
" REF: Página 122, sección 5.17"
-#: systemv/cupstestppd.c:1744
msgid " WARN File contains a mix of CR, LF, and CR LF line endings."
msgstr ""
" ADVERTENCIA El archivo contiene una mezcla de líneas acabadas en "
"CR, LF y CR LF."
-#: systemv/cupstestppd.c:1390
msgid ""
" WARN LanguageEncoding required by PPD 4.3 spec.\n"
" REF: Pages 56-57, section 5.3."
"PPD 4.3.\n"
" REF: Páginas 56-57, sección 5.3."
-#: systemv/cupstestppd.c:1726
#, c-format
msgid " WARN Line %d only contains whitespace."
msgstr " ADVERTENCIA La línea %d solo contiene espacios en blanco."
-#: systemv/cupstestppd.c:1398
msgid ""
" WARN Manufacturer required by PPD 4.3 spec.\n"
" REF: Pages 58-59, section 5.3."
"4.3.\n"
" REF: Páginas 58-59, sección 5.3."
-#: systemv/cupstestppd.c:1749
msgid ""
" WARN Non-Windows PPD files should use lines ending with only LF, "
"not CR LF."
" ADVERTENCIA Los archivos PPD que no sean de Windows deben tener "
"líneas que acaben sólo en LF, no en CR LF."
-#: systemv/cupstestppd.c:1382
#, c-format
msgid ""
" WARN Obsolete PPD version %.1f.\n"
" ADVERTENCIA Versión de PPD %.1f anticuada.\n"
" REF: Página 42, sección 5.2."
-#: systemv/cupstestppd.c:1413
msgid ""
" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
" REF: Pages 61-62, section 5.3."
"especificación PPD.\n"
" REF: Páginas 61-62, sección 5.3."
-#: systemv/cupstestppd.c:1421
msgid ""
" WARN PCFileName should contain a unique filename.\n"
" REF: Pages 61-62, section 5.3."
" ADVERTENCIA PCFileName debe contener un único nombre de archivo.\n"
" REF: Páginas 61-62, sección 5.3."
-#: systemv/cupstestppd.c:1456
msgid ""
" WARN Protocols contains PJL but JCL attributes are not set.\n"
" REF: Pages 78-79, section 5.7."
"los atributos JCL.\n"
" REF: Páginas 78-79, sección 5.7."
-#: systemv/cupstestppd.c:1447
msgid ""
" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
" REF: Pages 78-79, section 5.7."
"esperaba TBCP.\n"
" REF: Páginas 78-79, sección 5.7."
-#: systemv/cupstestppd.c:1430
msgid ""
" WARN ShortNickName required by PPD 4.3 spec.\n"
" REF: Pages 64-65, section 5.3."
"4.3.\n"
" REF: Páginas 64-65, sección 5.3."
-#: systemv/cupsaddsmb.c:282
msgid " cupsaddsmb [options] -a"
msgstr " cupsaddsmb [opciones] -a"
-#: systemv/cupstestdsc.c:427
msgid " cupstestdsc [options] -"
msgstr " cupstestdsc [opciones] -"
-#: systemv/cupstestppd.c:3815
msgid " program | cupstestppd [options] -"
msgstr " programa | cupstestppd [opciones] -"
-#: systemv/cupstestppd.c:3747
#, c-format
msgid ""
" %s \"%s %s\" conflicts with \"%s %s\"\n"
" %s \"%s %s\" está en conflictocon \"%s %s\"\n"
" (restricción=\"%s %s %s %s\")."
-#: systemv/cupstestppd.c:2248
#, c-format
msgid " %s %s %s does not exist."
msgstr " %s %s %s no existe."
-#: systemv/cupstestppd.c:3904
#, c-format
msgid " %s %s file \"%s\" has the wrong capitalization."
msgstr " %s %s archivo \"%s\" tiene las mayúsculas equivocadas."
-#: systemv/cupstestppd.c:2318
#, c-format
msgid ""
" %s Bad %s choice %s.\n"
" %s Preferencia %s incorrecta %s.\n"
" REF: Página 122, sección 5.17"
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s."
msgstr ""
" %s Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s, "
"preferencia %s."
-#: systemv/cupstestppd.c:3461
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s."
msgstr " %s Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s."
-#: systemv/cupstestppd.c:2389
#, c-format
msgid " %s Bad cupsFilter value \"%s\"."
msgstr " %s Valor cupsFilter \"%s\" incorrecto."
-#: systemv/cupstestppd.c:2475
#, c-format
msgid " %s Bad cupsFilter2 value \"%s\"."
msgstr " %s Valor cupsFilter2 \"%s\" incorrecto."
-#: systemv/cupstestppd.c:2964
#, c-format
msgid " %s Bad cupsICCProfile %s."
msgstr " %s cupsICCProfile %s incorrecto."
-#: systemv/cupstestppd.c:2571
#, c-format
msgid " %s Bad cupsPreFilter value \"%s\"."
msgstr " %s Valor cupsPreFilter \"%s\" incorrecto."
-#: systemv/cupstestppd.c:1822
#, c-format
msgid " %s Bad cupsUIConstraints %s: \"%s\""
msgstr " %s cupsUIConstraints %s: \"%s\" incorrecto"
-#: systemv/cupstestppd.c:3411
#, c-format
msgid " %s Bad language \"%s\"."
msgstr " %s Idioma incorrecto \"%s\"."
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
#, c-format
msgid " %s Bad permissions on %s file \"%s\"."
msgstr " %s Permisos incorrectos en el archivo %s \"%s\"."
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
#, c-format
msgid " %s Bad spelling of %s - should be %s."
msgstr " %s %s mal escrito - debería ser %s."
-#: systemv/cupstestppd.c:2907
#, c-format
msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID."
msgstr " %s No puede proporcionar APScanAppPath y APScanAppBundleID."
-#: systemv/cupstestppd.c:2205
#, c-format
msgid " %s Default choices conflicting."
msgstr " %s Las preferencias predeterminadas están en conflicto."
-#: systemv/cupstestppd.c:1803
#, c-format
msgid " %s Empty cupsUIConstraints %s"
msgstr " %s cupsUIConstraints vacío %s"
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
#, c-format
msgid " %s Missing \"%s\" translation string for option %s, choice %s."
msgstr ""
" %s Falta cadena de traducción \"%s\" para opción %s, preferencia %s."
-#: systemv/cupstestppd.c:3447
#, c-format
msgid " %s Missing \"%s\" translation string for option %s."
msgstr " %s Falta cadena de traducción \"%s\" para opción %s."
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
#, c-format
msgid " %s Missing %s file \"%s\"."
msgstr " %s Falta archivo %s \"%s\"."
-#: systemv/cupstestppd.c:3121
#, c-format
msgid ""
" %s Missing REQUIRED PageRegion option.\n"
" %s Falta la opción NECESARIA PageRegion.\n"
" REF: Página 100, sección 5.14."
-#: systemv/cupstestppd.c:3106
#, c-format
msgid ""
" %s Missing REQUIRED PageSize option.\n"
" %s Falta la opción NECESARIA PageSize.\n"
" REF: Página 99, sección 5.14."
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
#, c-format
msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
msgstr ""
" %s Falta la preferencia *%s %s en UIConstraint \"*%s %s *%s %s\"."
-#: systemv/cupstestppd.c:1908
#, c-format
msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
msgstr " %s Falta la preferencia *%s %s en cupsUIConstraints %s: \"%s\""
-#: systemv/cupstestppd.c:1840
#, c-format
msgid " %s Missing cupsUIResolver %s"
msgstr " %s Falta cupsUIResolver %s"
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
#, c-format
msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"."
msgstr " %s Falta la opción %s en UIConstraints \"*%s %s *%s %s\"."
-#: systemv/cupstestppd.c:1892
#, c-format
msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\""
msgstr " %s Falta la opción %s en cupsUIConstraints %s: \"%s\""
-#: systemv/cupstestppd.c:3633
#, c-format
msgid " %s No base translation \"%s\" is included in file."
msgstr " %s No hay traducción base \"%s\" incluida en el archivo."
-#: systemv/cupstestppd.c:2294
#, c-format
msgid ""
" %s REQUIRED %s does not define choice None.\n"
" %s NECESARIA %s no define la opción None.\n"
" REF: Página 122, sección 5.17"
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
#, c-format
msgid " %s Size \"%s\" defined for %s but not for %s."
msgstr " %s Tamaño \"%s\" definido para %s pero no para %s."
-#: systemv/cupstestppd.c:3160
#, c-format
msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)."
msgstr " %s El tamaño \"%s\" tiene dimensiones inesperadas (%gx%g)."
-#: systemv/cupstestppd.c:3351
#, c-format
msgid " %s Size \"%s\" should be \"%s\"."
msgstr " %s Tamaño \"%s\" debería ser \"%s\"."
-#: systemv/cupstestppd.c:3300
#, c-format
msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"."
msgstr ""
" %s Tamaño \"%s\" debería ser el nombre estandar de Adobe \"%s\"."
-#: systemv/cupstestppd.c:3041
#, c-format
msgid " %s cupsICCProfile %s hash value collides with %s."
msgstr " %s Valor hash de cupsICCProfile %s colisiona con %s."
-#: systemv/cupstestppd.c:1963
#, c-format
msgid " %s cupsUIResolver %s causes a loop."
msgstr " %s cupsUIResolver %s genera un bucle."
-#: systemv/cupstestppd.c:1945
#, c-format
msgid ""
" %s cupsUIResolver %s does not list at least two different options."
msgstr " %s cupsUIResolver %s no lista al menos dos opciones diferentes."
-#: systemv/cupstestppd.c:1168
#, c-format
msgid ""
" **FAIL** %s must be 1284DeviceID\n"
" **FALLO** %s debe ser 1284DeviceID\n"
" REF: Página 72, sección 5.5"
-#: systemv/cupstestppd.c:580
#, c-format
msgid ""
" **FAIL** Bad Default%s %s\n"
" **FALLO** Default%s %s incorrecto\n"
" REF: Página 40, sección 4.5."
-#: systemv/cupstestppd.c:514
#, c-format
msgid ""
" **FAIL** Bad DefaultImageableArea %s\n"
" **FALLO** DefaultImageableArea %s incorrecto\n"
" REF: Página 102, sección 5.15."
-#: systemv/cupstestppd.c:550
#, c-format
msgid ""
" **FAIL** Bad DefaultPaperDimension %s\n"
" **FALLO** DefaultPaperDimension %s incorrecto\n"
" REF: Página 103, sección 5.15."
-#: systemv/cupstestppd.c:623
#, c-format
msgid ""
" **FAIL** Bad FileVersion \"%s\"\n"
" **FALLO** FileVersion \"%s\" incorrecto\n"
" REF: Página 56, sección 5.3."
-#: systemv/cupstestppd.c:667
#, c-format
msgid ""
" **FAIL** Bad FormatVersion \"%s\"\n"
" **FALLO** FormatVersion \"%s\" incorrecto\n"
" REF: Página 56, sección 5.3."
-#: systemv/cupstestppd.c:1025
msgid ""
" **FAIL** Bad JobPatchFile attribute in file\n"
" REF: Page 24, section 3.4."
" **FALLO** Atributo JobPatchFile en archivo, incorrecto\n"
" REF: Página 24, sección 3.4."
-#: systemv/cupstestppd.c:1213
#, c-format
msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1."
msgstr ""
" **FALLO** LanguageEncoding %s incorrecto: debería ser ISOLatin1."
-#: systemv/cupstestppd.c:1227
#, c-format
msgid " **FAIL** Bad LanguageVersion %s - must be English."
msgstr ""
" **FALLO** LanguageVersion %s incorrecto: debería ser English (Inglés)."
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
#, c-format
msgid ""
" **FAIL** Bad Manufacturer (should be \"%s\")\n"
" **FALLO** Fabricante incorrecto (debería ser \"%s\")\n"
" REF: Página 211, tabla D.1."
-#: systemv/cupstestppd.c:800
#, c-format
msgid ""
" **FAIL** Bad ModelName - \"%c\" not allowed in string.\n"
" **FALLO** ModelName incorrecto - \"%c\" no permitido en la cadena.\n"
" REF: Páginas 59-60, sección 5.3."
-#: systemv/cupstestppd.c:956
msgid ""
" **FAIL** Bad PSVersion - not \"(string) int\".\n"
" REF: Pages 62-64, section 5.3."
" **FALLO** PSVersion incorrecto - no es \"(string) int\".\n"
" REF: Páginas 62-64, sección 5.3."
-#: systemv/cupstestppd.c:917
msgid ""
" **FAIL** Bad Product - not \"(string)\".\n"
" REF: Page 62, section 5.3."
" **FALLO** Product incorrecto - no es \"(string)\".\n"
" REF: Página 62, sección 5.3."
-#: systemv/cupstestppd.c:991
msgid ""
" **FAIL** Bad ShortNickName - longer than 31 chars.\n"
" REF: Pages 64-65, section 5.3."
" **FALLO** ShortNickName incorrecto - mayor de 31 caracteres.\n"
" REF: Páginas 64-65, sección 5.3."
-#: systemv/cupstestppd.c:1149
#, c-format
msgid ""
" **FAIL** Bad option %s choice %s\n"
" **FALLO** Opción %s, preferencia %s incorrecta\n"
" REF: Página 84, sección 5.9"
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
#, c-format
msgid " **FAIL** Default option code cannot be interpreted: %s"
msgstr ""
" **FALLO** El código de opción predeterminado no puede ser "
"interpretado: %s"
-#: systemv/cupstestppd.c:1286
#, c-format
msgid ""
" **FAIL** Default translation string for option %s choice %s contains "
" **FALLO** Cadena de traducción predeterminada para opción %s "
"preferencia %s contiene caracteres de 8-bits."
-#: systemv/cupstestppd.c:1259
#, c-format
msgid ""
" **FAIL** Default translation string for option %s contains 8-bit "
" **FALLO** Cadena de traducción predeterminada para opción %s contiene "
"caracteres de 8-bits."
-#: systemv/cupstestppd.c:2101
#, c-format
msgid " **FAIL** Group names %s and %s differ only by case."
msgstr ""
" **FALLO** Nombres de grupo %s y %s se diferencian sólo en la "
"capitalización."
-#: systemv/cupstestppd.c:2146
#, c-format
msgid " **FAIL** Multiple occurrences of option %s choice name %s."
msgstr ""
" **FALLO** Múltiples apariciones de opción %s nombre de preferencia %s."
-#: systemv/cupstestppd.c:2163
#, c-format
msgid " **FAIL** Option %s choice names %s and %s differ only by case."
msgstr ""
" **FALLO** Opción %s nombres de preferencia %s y %s se diferencian "
"sólo en la capitalización."
-#: systemv/cupstestppd.c:2123
#, c-format
msgid " **FAIL** Option names %s and %s differ only by case."
msgstr ""
" **FALLO** Nombres de opción %s y %s se diferencian sólo en la "
"capitalización."
-#: systemv/cupstestppd.c:600
#, c-format
msgid ""
" **FAIL** REQUIRED Default%s\n"
" **FALLO** SE NECESITA Default%s\n"
" REF: Página 40, sección 4.5."
-#: systemv/cupstestppd.c:499
msgid ""
" **FAIL** REQUIRED DefaultImageableArea\n"
" REF: Page 102, section 5.15."
" **FALLO** SE NECESITA DefaultImageableArea\n"
" REF: Página 102, sección 5.15."
-#: systemv/cupstestppd.c:535
msgid ""
" **FAIL** REQUIRED DefaultPaperDimension\n"
" REF: Page 103, section 5.15."
" **FALLO** SE NECESITA DefaultPaperDimension\n"
" REF: Página 103, sección 5.15."
-#: systemv/cupstestppd.c:641
msgid ""
" **FAIL** REQUIRED FileVersion\n"
" REF: Page 56, section 5.3."
" **FALLO** SE NECESITA FileVersion\n"
" REF: Página 56, sección 5.3."
-#: systemv/cupstestppd.c:685
msgid ""
" **FAIL** REQUIRED FormatVersion\n"
" REF: Page 56, section 5.3."
" **FALLO** SE NECESITA FormatVersion\n"
" REF: Página 56, sección 5.3."
-#: systemv/cupstestppd.c:1076
#, c-format
msgid ""
" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
" REF: Página 41, sección 5.\n"
" REF: Página 102, sección 5.15."
-#: systemv/cupstestppd.c:705
msgid ""
" **FAIL** REQUIRED LanguageEncoding\n"
" REF: Pages 56-57, section 5.3."
" **FALLO** SE NECESITA LanguageEncoding\n"
" REF: Páginas 56-57, sección 5.3."
-#: systemv/cupstestppd.c:725
msgid ""
" **FAIL** REQUIRED LanguageVersion\n"
" REF: Pages 57-58, section 5.3."
" **FALLO** SE NECESITA LanguageVersion\n"
" REF: Páginas 57-58, sección 5.3."
-#: systemv/cupstestppd.c:779
msgid ""
" **FAIL** REQUIRED Manufacturer\n"
" REF: Pages 58-59, section 5.3."
" **FALLO** SE NECESITA Manufacturer\n"
" REF: Páginas 58-59, sección 5.3."
-#: systemv/cupstestppd.c:819
msgid ""
" **FAIL** REQUIRED ModelName\n"
" REF: Pages 59-60, section 5.3."
" **FALLO** SE NECESITA ModelName\n"
" REF: Páginas 59-60, sección 5.3."
-#: systemv/cupstestppd.c:839
msgid ""
" **FAIL** REQUIRED NickName\n"
" REF: Page 60, section 5.3."
" **FALLO** SE NECESITA NickName\n"
" REF: Página 60, sección 5.3."
-#: systemv/cupstestppd.c:899
msgid ""
" **FAIL** REQUIRED PCFileName\n"
" REF: Pages 61-62, section 5.3."
" **FALLO** SE NECESITA PCFileName\n"
" REF: Páginas 61-62, sección 5.3."
-#: systemv/cupstestppd.c:974
msgid ""
" **FAIL** REQUIRED PSVersion\n"
" REF: Pages 62-64, section 5.3."
" **FALLO** SE NECESITA PSVersion\n"
" REF: Páginas 62-64, sección 5.3."
-#: systemv/cupstestppd.c:879
msgid ""
" **FAIL** REQUIRED PageRegion\n"
" REF: Page 100, section 5.14."
" **FALLO** SE NECESITA PageRegion\n"
" REF: Página 100, sección 5.14."
-#: systemv/cupstestppd.c:1045
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Page 41, section 5.\n"
" REF: Página 41, sección 5.\n"
" REF: Página 99, sección 5.14."
-#: systemv/cupstestppd.c:859
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Pages 99-100, section 5.14."
" **FALLO** SE NECESITA PageSize\n"
" REF: Páginas 99-100, sección 5.14."
-#: systemv/cupstestppd.c:1098
#, c-format
msgid ""
" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
" REF: Página 41, sección 5.\n"
" REF: Página 103, sección 5.15."
-#: systemv/cupstestppd.c:934
msgid ""
" **FAIL** REQUIRED Product\n"
" REF: Page 62, section 5.3."
" **FALLO** SE NECESITA Product\n"
" REF: Página 62, sección 5.3."
-#: systemv/cupstestppd.c:1009
msgid ""
" **FAIL** REQUIRED ShortNickName\n"
" REF: Page 64-65, section 5.3."
" **FALLO** SE NECESITA ShortNickName\n"
" REF: Página 64-65, sección 5.3."
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
#, c-format
msgid " **FAIL** Unable to open PPD file - %s on line %d."
msgstr ""
" **FALLO** No se ha podido abrir el archivo PPD - %s en la línea %d."
-#: systemv/cupstestppd.c:1498
#, c-format
msgid " %d ERRORS FOUND"
msgstr " %d ERRORES ENCONTRADOS"
-#: systemv/cupstestdsc.c:431
msgid " -h Show program usage"
msgstr " -h Mostrar el uso del programa"
-#: systemv/cupstestdsc.c:234 systemv/cupstestdsc.c:276
#, c-format
msgid ""
" Bad %%%%BoundingBox: on line %d.\n"
" %%%%BoundingBox: incorrecto en línea %d.\n"
" REF: Página 39, %%%%BoundingBox:"
-#: systemv/cupstestdsc.c:305
#, c-format
msgid ""
" Bad %%%%Page: on line %d.\n"
" %%%%Page: incorrecto en línea %d.\n"
" REF: Página 53, %%%%Page:"
-#: systemv/cupstestdsc.c:218 systemv/cupstestdsc.c:258
#, c-format
msgid ""
" Bad %%%%Pages: on line %d.\n"
" %%%%Pages: incorrecto en línea %d.\n"
" REF: Página 43, %%%%Pages:"
-#: systemv/cupstestdsc.c:176
#, c-format
msgid ""
" Line %d is longer than 255 characters (%d).\n"
" La línea %d es más larga de 255 caracteres (%d).\n"
" REF: Página 25, Longitud de Línea"
-#: systemv/cupstestdsc.c:192
msgid ""
" Missing %!PS-Adobe-3.0 on first line.\n"
" REF: Page 17, 3.1 Conforming Documents"
" Falta %!PS-Adobe-3.0 en la primera línea.\n"
" REF: Página 17, 3.1 Conformidad de documentos"
-#: systemv/cupstestdsc.c:362
#, c-format
msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments"
msgstr ""
" Falta comentario %%EndComments. REF: Página 41, %%EndComments"
-#: systemv/cupstestdsc.c:342
#, c-format
msgid ""
" Missing or bad %%BoundingBox: comment.\n"
" Falta comentario %%BoundingBox: o incorrecto.\n"
" REF: Página 39, %%BoundingBox:"
-#: systemv/cupstestdsc.c:372
#, c-format
msgid ""
" Missing or bad %%Page: comments.\n"
" Falta comentario %%Page: o incorrecto.\n"
" REF: Página 53, %%Page:"
-#: systemv/cupstestdsc.c:352
#, c-format
msgid ""
" Missing or bad %%Pages: comment.\n"
" Falta comentario %%Pages: o incorrecto.\n"
" REF: Página 43, %%Pages:"
-#: systemv/cupstestppd.c:1500
msgid " NO ERRORS FOUND"
msgstr " NO SE HAN ENCONTRADO ERRORES"
-#: systemv/cupstestdsc.c:395
#, c-format
msgid " Saw %d lines that exceeded 255 characters."
msgstr " Se han visto %d líneas que exceden de 255 caracteres."
-#: systemv/cupstestdsc.c:390
#, c-format
msgid " Too many %%BeginDocument comments."
msgstr " Demasiados comentarios %%BeginDocument."
-#: systemv/cupstestdsc.c:382
#, c-format
msgid " Too many %%EndDocument comments."
msgstr " Demasiados comentarios %%EndDocument."
-#: systemv/cupstestdsc.c:402
msgid " Warning: file contains binary data."
msgstr " Advertencia: el archivo contiene datos binarios."
-#: systemv/cupstestdsc.c:410
#, c-format
msgid " Warning: no %%EndComments comment in file."
msgstr " Advertencia: no hay comentario %%EndComments en el archivo."
-#: systemv/cupstestdsc.c:406
#, c-format
msgid " Warning: obsolete DSC version %.1f in file."
msgstr " Advertencia: versión DSC %.1f obsoleta en el archivo."
-#: test/ippfind.c:2788
msgid " ! expression Unary NOT of expression."
msgstr " ! expresión NOT unario de la expresión."
-#: test/ippfind.c:2787
msgid " ( expressions ) Group expressions."
msgstr " ( expresiones ) Agrupar expresiones."
-#: systemv/cupsctl.c:210
msgid " --[no-]debug-logging Turn debug logging on/off."
msgstr " --[no-]debug-logging Activar/desactivar registro de depuración."
-#: systemv/cupsctl.c:212
msgid " --[no-]remote-admin Turn remote administration on/off."
msgstr " --[no-]remote-admin Activar/desactivar administración remota."
-#: systemv/cupsctl.c:214
msgid " --[no-]remote-any Allow/prevent access from the Internet."
msgstr " --[no-]remote-any Permitir/evitar acceso desde Internet."
-#: systemv/cupsctl.c:216
msgid " --[no-]share-printers Turn printer sharing on/off."
msgstr ""
" --[no-]share-printers Activar/desactivar compartición de impresoras."
-#: systemv/cupsctl.c:218
msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
msgstr ""
" --[no-]user-cancel-any Permitir/evitar a usuarios que cancelen cualquier "
"trabajo."
-#: ppdc/ppdc.cxx:450
msgid " --cr End lines with CR (Mac OS 9)."
msgstr " --cr Finalizar líneas con CR (Mac OS 9)."
-#: ppdc/ppdc.cxx:452
msgid " --crlf End lines with CR + LF (Windows)."
msgstr " --crlf Finalizar líneas con CR + LF (Windows)."
-#: test/ippfind.c:2769
msgid " --domain regex Match domain to regular expression."
msgstr ""
" --domain regex Hacer coincidir el dominio con la expresión "
"regular."
-#: test/ippfind.c:2770
msgid ""
" --exec utility [argument ...] ;\n"
" Execute program if true."
" --exec utilidad [argumento ...] ;\n"
" Ejecutar programa si es cierto."
-#: test/ippfind.c:2790
msgid " --false Always false."
msgstr " --false Siempre falso."
-#: test/ipptool.c:4806
msgid " --help Show help."
msgstr " --help Muestra ayuda."
-#: test/ippfind.c:2752
msgid " --help Show this help."
msgstr " --help Muestra esta ayuda."
-#: test/ippfind.c:2772
msgid " --host regex Match hostname to regular expression."
msgstr ""
" --host regex Hacer coincidir el nombre del equipo con la "
"expresión regular."
-#: ppdc/ppdc.cxx:454
msgid " --lf End lines with LF (UNIX/Linux/OS X)."
msgstr " --lf Finalizar líneas con LF (UNIX/Linux/OS X)."
-#: scheduler/cupsfilter.c:1483
msgid " --list-filters List filters that will be used."
msgstr " --list-filters Listar los filtros a usar."
-#: test/ippfind.c:2774
msgid " --local True if service is local."
msgstr " --local Cierto si el servicio es local."
-#: test/ippfind.c:2773
msgid " --ls List attributes."
msgstr " --ls Lista atributos."
-#: test/ippfind.c:2775
msgid " --name regex Match service name to regular expression."
msgstr ""
" --name regex Hacer coincidir el servicio con la expresión "
"regular."
-#: test/ippfind.c:2789
msgid " --not expression Unary NOT of expression."
msgstr " [parcial]expresión NOT unario de la expresión."
-#: test/ippfind.c:2776
msgid " --path regex Match resource path to regular expression."
msgstr ""
" --path regex Hacer coincidir la ruta del recurso con la "
"expresión regular."
-#: test/ippfind.c:2777
msgid " --port number[-number] Match port to number or range."
msgstr ""
" --port número[-número] Hacer coincidir el puerto con un número o "
"intervalo de números."
-#: test/ippfind.c:2778
msgid " --print Print URI if true."
msgstr " --print Imprimir URI si es cierto."
-#: test/ippfind.c:2779
msgid " --print-name Print service name if true."
msgstr " --print-name Imprimir nombre del servicio si es cierto."
-#: test/ippfind.c:2780
msgid " --quiet Quietly report match via exit code."
msgstr ""
" --quiet Silenciosamente informar de la coincidencia via "
"código de salida."
-#: test/ippfind.c:2781
msgid " --remote True if service is remote."
msgstr " --remote Cierto si el servicio es remoto."
-#: test/ipptool.c:4807
msgid ""
" --stop-after-include-error\n"
" Stop tests after a failed INCLUDE."
" --stop-after-include-error\n"
" Detiene las pruebas tras un INCLUDE fallido."
-#: test/ippfind.c:2791
msgid " --true Always true."
msgstr " --true Siempre cierto."
-#: test/ippfind.c:2782
msgid " --txt key True if the TXT record contains the key."
msgstr ""
" --txt clave Cierto si el registro TXT contiene la clave."
-#: test/ippfind.c:2783
msgid " --txt-* regex Match TXT record key to regular expression."
msgstr ""
" --txt-* regex Hacer coincidir la clave del registro TXT a la "
"expresión regular."
-#: test/ippfind.c:2784
msgid " --uri regex Match URI to regular expression."
msgstr ""
" --uri regex Hacer coincidir la URI a la expresión regular."
-#: test/ippfind.c:2753
msgid " --version Show program version."
msgstr " --version Muestra la versión del programa."
-#: test/ipptool.c:4809
msgid " --version Show version."
msgstr " --version Muestra la versión."
-#: test/ippfind.c:2746 test/ipptool.c:4810
msgid " -4 Connect using IPv4."
msgstr " -4 Conectar usando IPv4."
-#: test/ippfind.c:2747 test/ipptool.c:4811
msgid " -6 Connect using IPv6."
msgstr " -6 Conectar usando IPv6."
-#: test/ipptool.c:4812
msgid " -C Send requests using chunking (default)."
msgstr ""
" -C Enviar peticiones usando fragmentación "
"(predeterminado)."
-#: scheduler/cupsfilter.c:1484
msgid " -D Remove the input file when finished."
msgstr " -D Eliminar el archivo de entrada al terminar."
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
msgid " -D name=value Set named variable to value."
msgstr " -D nombre=valor Establece la variable nombre al valor."
-#: systemv/cupsaddsmb.c:285 systemv/cupsctl.c:205
msgid " -E Encrypt the connection."
msgstr " -E Cifra la conexión."
-#: test/ipptool.c:4814
msgid " -E Test with HTTP Upgrade to TLS."
msgstr " -E Prueba con actualización HTTP a TLS."
-#: scheduler/main.c:2149
msgid ""
" -F Run in the foreground but detach from console."
msgstr ""
" -F Ejecuta en primer plano pero separado de la "
"consola."
-#: systemv/cupsaddsmb.c:286
msgid " -H samba-server Use the named SAMBA server."
msgstr " -H servidor-samba Usa el servidor SAMBA nombrado."
-#: test/ipptool.c:4816
msgid " -I Ignore errors."
msgstr " -I Ignora errores."
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
msgid " -I include-dir Add include directory to search path."
msgstr ""
" -I include-dir Añade directorio include a la ruta de búsqueda."
-#: systemv/cupstestppd.c:3819
msgid " -I {filename,filters,none,profiles}"
msgstr " -I {filename,filters,none,profiles}"
-#: test/ipptool.c:4817
msgid " -L Send requests using content-length."
msgstr " -L Envía peticiones usando content-length."
-#: test/ipptool.c:4819
msgid ""
" -P filename.plist Produce XML plist to a file and test report to "
"standard output."
" -P filename.plist Produce plist XML a un archivo y un informe de "
"prueba a la salida estandar."
-#: scheduler/cupsfilter.c:1485
msgid " -P filename.ppd Set PPD file."
msgstr " -P nombre_archivo.ppd Establece archivo PPD."
-#: test/ippfind.c:2756
msgid " -P number[-number] Match port to number or range."
msgstr ""
" -P número[-número] Hacer coincidir el puerto con un número o intervalo "
"de números."
-#: systemv/cupstestppd.c:3821
msgid " -R root-directory Set alternate root."
msgstr " -R directorio-raíz Establece directorio raíz alternativo."
-#: test/ipptool.c:4820
msgid " -S Test with SSL encryption."
msgstr " -S Prueba con cifrado SSL."
-#: test/ippfind.c:2748
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
" -T segundos Establece el tiempo de espera de navegación en "
"segundos."
-#: test/ipptool.c:4822
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
" -T segundos Establece el tiempo de espera de recepción/envío "
"en segundos."
-#: scheduler/cupsfilter.c:1486 systemv/cupsaddsmb.c:288 systemv/cupsctl.c:206
msgid " -U username Specify username."
msgstr " -U nombre_usuario Especifica el nombre de usuario."
-#: test/ippfind.c:2750 test/ipptool.c:4824
msgid " -V version Set default IPP version."
msgstr " -V versión Establece la versión IPP predeterminada."
-#: systemv/cupstestppd.c:3822
msgid ""
" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
"translations}"
" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
"translations}"
-#: test/ipptool.c:4826
msgid " -X Produce XML plist instead of plain text."
msgstr ""
" -X Produce XML plist en vez de texto sin formato."
-#: test/ippdiscover.c:818
msgid " -a Browse for all services."
msgstr " -a Explorar todos los servicios."
-#: systemv/cupsaddsmb.c:289
msgid " -a Export all printers."
msgstr " -a Exporta todas las impresoras."
-#: test/ipptool.c:4828
msgid " -c Produce CSV output."
msgstr " -c Produce salida CSV."
-#: ppdc/ppdc.cxx:437
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catálogo.po Carga el catálogo de mensajes especificado."
-#: scheduler/cupsfilter.c:1487
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr " -c cups-files.conf Establece el archivo cups-files.conf a usar."
-#: scheduler/main.c:2147
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr " -c cupsd.conf Establece el archivo cupsd.conf a usar."
-#: test/ippdiscover.c:819
msgid " -d domain Browse/resolve in specified domain."
msgstr ""
" -d dominio Explora/resuelve en el dominio especificado."
-#: test/ipptool.c:4829
msgid " -d name=value Set named variable to value."
msgstr " -d nombre=valor Establece la variable al valor."
-#: ppdc/ppdc.cxx:439
msgid " -d output-dir Specify the output directory."
msgstr " -d dir-salida Especifica el directorio de salida."
-#: scheduler/cupsfilter.c:1488
msgid " -d printer Use the named printer."
msgstr " -d impresora Usa la impresora especificada."
-#: test/ippfind.c:2757
msgid " -d regex Match domain to regular expression."
msgstr ""
" -d regex Hacer coincidir el dominio con la expresión regular."
-#: scheduler/cupsfilter.c:1489
msgid " -e Use every filter from the PPD file."
msgstr " -e Usa cada filtro desde el archivo PPD."
-#: scheduler/main.c:2148
msgid " -f Run in the foreground."
msgstr " -f Ejecuta en primer plano."
-#: test/ipptool.c:4831
msgid " -f filename Set default request filename."
msgstr ""
" -f nombre_archivo Establece nombre de archivo predeterminado."
-#: scheduler/main.c:2151
msgid " -h Show this usage message."
msgstr " -h Muestra este mensaje de uso."
-#: test/ippfind.c:2758
msgid " -h regex Match hostname to regular expression."
msgstr ""
" -h regex Hacer coincidir el nombre del equipo con la "
"expresión regular."
-#: systemv/cupsaddsmb.c:290 systemv/cupsctl.c:207
msgid " -h server[:port] Specify server address."
msgstr " -h servidor[:puerto] Especifica la dirección del servidor."
-#: scheduler/cupsfilter.c:1490
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
" -i tipo/mime Establece el tipo MIME de entrada (si no, auto-"
"typed)."
-#: test/ipptool.c:4833
msgid ""
" -i seconds Repeat the last file with the given time interval."
msgstr ""
" -i segundos Repite el último archivo con el intervalo de "
"tiempo dado."
-#: scheduler/cupsfilter.c:1491
msgid ""
" -j job-id[,N] Filter file N from the specified job (default is "
"file 1)."
" -j id-trabajo[,N] Filtra el archivo N desde el trabajo "
"especificado (predeterminado archivo 1)."
-#: test/ippfind.c:2759
msgid " -l List attributes."
msgstr " -l Lista atributos."
-#: test/ipptool.c:4835
msgid " -l Produce plain text output."
msgstr " -l Produce salida en texto plano."
-#: scheduler/main.c:2152
msgid " -l Run cupsd on demand."
msgstr " -l Ejecuta cupsd según demanda."
-#: ppdc/ppdc.cxx:441
msgid " -l lang[,lang,...] Specify the output language(s) (locale)."
msgstr ""
" -l idioma[,idioma,...] Especifica los idiomas de salida (código "
"regional)."
-#: ppdc/ppdc.cxx:443
msgid " -m Use the ModelName value as the filename."
msgstr ""
" -m Usa el valor ModelName como nombre de archivo."
-#: scheduler/cupsfilter.c:1492
msgid ""
" -m mime/type Set output MIME type (otherwise application/pdf)."
msgstr ""
" -m tipo/mime Establece el tipo MIME de salida (si no, "
"application/pdf)."
-#: scheduler/cupsfilter.c:1493
msgid " -n copies Set number of copies."
msgstr " -n copias Establece el número de copias."
-#: test/ipptool.c:4836
msgid ""
" -n count Repeat the last file the given number of times."
msgstr ""
" -n contador Repite el último archivo el número de veces "
"especificado."
-#: test/ippfind.c:2760
msgid " -n regex Match service name to regular expression."
msgstr ""
" -n regex Hacer coincidir el nombre del servicio con la "
"expresión regular."
-#: ppdc/ppdi.cxx:133
msgid ""
" -o filename.drv Set driver information file (otherwise ppdi.drv)."
msgstr ""
" -o nombre_archivo.drv Establece el archivo de información del "
"controlador (si no, ppdi.drv)."
-#: ppdc/ppdmerge.cxx:364
msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
msgstr ""
" -o nombre_archivo.ppd[.gz] Establece el archivo de salida (si no, "
"stdout)."
-#: scheduler/cupsfilter.c:1494
msgid " -o name=value Set option(s)."
msgstr " -o nombre=valor Establece opciones."
-#: test/ippfind.c:2761
msgid " -p Print URI if true."
msgstr " -p Imprimir URI si es cierto."
-#: scheduler/cupsfilter.c:1495
msgid " -p filename.ppd Set PPD file."
msgstr " -p nombre_archivo.ppd Establece archivo PPD."
-#: test/ippdiscover.c:820
msgid " -p program Run specified program for each service."
msgstr ""
" -p program Ejecuta el programa especificado para cada "
"servicio."
-#: test/ippfind.c:2762
msgid " -q Quietly report match via exit code."
msgstr ""
" -q Silenciosamente informar de la coincidencia via "
"código de salida."
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
msgid " -q Run silently."
msgstr " -q Ejecución silenciosa."
-#: test/ippfind.c:2763
msgid " -r True if service is remote."
msgstr " -r Cierto si el servicio es remoto."
-#: systemv/cupstestppd.c:3827
msgid " -r Use 'relaxed' open mode."
msgstr " -r Usa modo abierto 'relajado'."
-#: test/ippfind.c:2764
msgid " -s Print service name if true."
msgstr " -s Imprimir nombre del servicio si es cierto."
-#: test/ipptool.c:4839
msgid " -t Produce a test report."
msgstr " -t Produce un informe de la prueba."
-#: ppdc/ppdc.cxx:445
msgid " -t Test PPDs instead of generating them."
msgstr " -t Prueba los PPDs en vez de generarlos."
-#: scheduler/main.c:2153
msgid " -t Test the configuration file."
msgstr " -t Prueba el archivo de configuración."
-#: test/ippfind.c:2765
msgid " -t key True if the TXT record contains the key."
msgstr " -t clave Cierto si el registro TXT contiene la clave."
-#: scheduler/cupsfilter.c:1496
msgid " -t title Set title."
msgstr " -t título Establece título."
-#: test/ippdiscover.c:821
msgid " -t type Browse/resolve with specified type."
msgstr " -t tipo Explora/resuelve con el tipo especificado."
-#: scheduler/cupsfilter.c:1497
msgid " -u Remove the PPD file when finished."
msgstr " -u Borra el archivo PPD tras terminar."
-#: test/ippfind.c:2766
msgid " -u regex Match URI to regular expression."
msgstr ""
" -u regex Hacer coincidir la URI a la expresión regular."
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
msgid " -v Be verbose."
msgstr " -v Ser detallado."
-#: systemv/cupstestppd.c:3829
msgid " -vv Be very verbose."
msgstr " -vv Ser muy detallado."
-#: test/ippfind.c:2767
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
" -x utilidad [argumento ...] ;\n"
" Ejecutar programa si es cierto."
-#: ppdc/ppdc.cxx:448
msgid " -z Compress PPD files using GNU zip."
msgstr " -z Comprimir archivos PPD usando GNU zip."
-#: test/ippfind.c:2810
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
msgstr " IPPFIND_SERVICE_DOMAIN Nombre de dominio"
-#: test/ippfind.c:2811
msgid ""
" IPPFIND_SERVICE_HOSTNAME\n"
" Fully-qualified domain name"
" IPPFIND_SERVICE_HOSTNAME\n"
" Nombre de dominio completo"
-#: test/ippfind.c:2813
msgid " IPPFIND_SERVICE_NAME Service instance name"
msgstr " IPPFIND_SERVICE_NAME Nombre de la instancia del servicio"
-#: test/ippfind.c:2814
msgid " IPPFIND_SERVICE_PORT Port number"
msgstr " IPPFIND_SERVICE_PORT Número del puerto"
-#: test/ippfind.c:2815
msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
msgstr " IPPFIND_SERVICE_REGTYPE Tipo de registro DNS-SD"
-#: test/ippfind.c:2816
msgid " IPPFIND_SERVICE_SCHEME URI scheme"
msgstr " IPPFIND_SERVICE_SCHEME Esquema URI"
-#: test/ippfind.c:2817
msgid " IPPFIND_SERVICE_URI URI"
msgstr " IPPFIND_SERVICE_URI URI"
-#: test/ippfind.c:2818
msgid " IPPFIND_TXT_* Value of TXT record key"
msgstr " IPPFIND_TXT_* Valor de la clave del registro TXT"
-#: test/ippfind.c:2793
msgid ""
" expression --and expression\n"
" Logical AND."
" expresión --and expresión\n"
" AND lógico."
-#: test/ippfind.c:2795
msgid ""
" expression --or expression\n"
" Logical OR."
" expresión --or expresión\n"
" OR lógico."
-#: test/ippfind.c:2792
msgid " expression expression Logical AND."
msgstr " expresión expresión AND lógico."
-#: test/ippfind.c:2800
msgid " {service_domain} Domain name"
msgstr " {service_domain} Nombre de dominio"
-#: test/ippfind.c:2801
msgid " {service_hostname} Fully-qualified domain name"
msgstr " {service_hostname} Nombre de dominio completo"
-#: test/ippfind.c:2802
msgid " {service_name} Service instance name"
msgstr " {service_name} Nombre de la instancia del servicio"
-#: test/ippfind.c:2803
msgid " {service_port} Port number"
msgstr " {service_port} Número de puerto"
-#: test/ippfind.c:2804
msgid " {service_regtype} DNS-SD registration type"
msgstr " {service_regtype} Tipo de registro DNS-SD"
-#: test/ippfind.c:2805
msgid " {service_scheme} URI scheme"
msgstr " {service_scheme} Esquema URI"
-#: test/ippfind.c:2806
msgid " {service_uri} URI"
msgstr " {service_uri} URI"
-#: test/ippfind.c:2807
msgid " {txt_*} Value of TXT record key"
msgstr " {txt_*} Valor de la clave del registro TXT"
-#: test/ippfind.c:2799
msgid " {} URI"
msgstr " {} URI"
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
msgid " FAIL"
msgstr " FALLO"
-#: systemv/cupstestppd.c:1306
msgid " PASS"
msgstr " PASA"
-#: cups/ipp.c:5227
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
msgstr "\"%s\": Valor URI \"%s\" incorrecto - %s (RFC 2911 sección 4.1.5)."
-#: cups/ipp.c:5238
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
msgstr ""
"\"%s\": Valor URI \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.5)."
-#: cups/ipp.c:4858
#, c-format
msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
msgstr ""
"\"%s\": Nombre de atributo incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.3)."
-#: cups/ipp.c:4850
#, c-format
msgid ""
"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
"\"%s\": Nombre de atributo incorrecto - carácter inválido (RFC 2911 sección "
"4.1.3)."
-#: cups/ipp.c:4876
#, c-format
msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
msgstr "\"%s\": Valor lógico \"%d\" incorrecto (RFC 2911 sección 4.1.11)."
-#: cups/ipp.c:5290
#, c-format
msgid ""
"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
"\"%s\": Valor del juego de caracteres \"%s\" incorrecto - caracteres "
"incorrectos (RFC 2911 sección 4.1.7)."
-#: cups/ipp.c:5299
#, c-format
msgid ""
"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
"\"%s\": Valor del juego de caracteres \"%s\" incorrecto - longitud %d "
"incorrecta (RFC 2911 sección 4.1.7)."
-#: cups/ipp.c:4976
#, c-format
msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Horas dateTime UTC %u incorrectas (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4984
#, c-format
msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Minutos dateTime UTC %u incorrectos (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4968
#, c-format
msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Signo dateTime UTC %c incorrecto (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4928
#, c-format
msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Día dateTime %u incorrecto (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4960
#, c-format
msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
msgstr ""
"\"%s\": Décimas de segundo dateTime %u incorrectas (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4936
#, c-format
msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Horas dateTime %u incorrectas (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4944
#, c-format
msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Minutos dateTime %u incorrectos (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4920
#, c-format
msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Mes dateTime %u incorrecto (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4952
#, c-format
msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": Segundos dateTime %u incorrectos (RFC 2911 sección 4.1.14)."
-#: cups/ipp.c:4890
#, c-format
msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
msgstr ""
"\"%s\": Valor enumerado %d incorrecto - fuera de intervalo (RFC 2911 sección "
"4.1.4)."
-#: cups/ipp.c:5205
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
"\"%s\": Valor clave \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.3)."
-#: cups/ipp.c:5196
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
"\"%s\": Valor clave \"%s\" incorrecto - carácter inválido (RFC 2911 sección "
"4.1.3)."
-#: cups/ipp.c:5399
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
"\"%s\": Valor mimeMediaType \"%s\" incorrecto - caracteres incorrectos (RFC "
"2911 sección 4.1.9)."
-#: cups/ipp.c:5409
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
"\"%s\": Valor mimeMediaType \"%s\" incorrecto - longitud %d incorrecta (RFC "
"2911 sección 4.1.9)."
-#: cups/ipp.c:5167
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
"\"%s\": Valor del nombre \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
"2911 sección 4.1.2)."
-#: cups/ipp.c:5176
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
msgstr ""
"\"%s\": Valor del nombre \"%s\" incorrecto - longitud %d incorrecta (RFC "
"2911 sección 4.1.2)."
-#: cups/ipp.c:5345
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
"\"%s\": Valor naturalLanguage \"%s\" incorrecto - caracteres incorrectos "
"(RFC 2911 sección 4.1.8)."
-#: cups/ipp.c:5355
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
"\"%s\": Valor naturalLanguage \"%s\" incorrecto - longitud %d incorrecta "
"(RFC 2911 sección 4.1.8)."
-#: cups/ipp.c:4904
#, c-format
msgid ""
"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
"\"%s\": Valor octetString incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.10)."
-#: cups/ipp.c:5047
#, c-format
msgid ""
"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
"\"%s\": Valor rangeOfInteger %d-%d incorrecto - el más bajo es mayor que el "
"más alto (RFC 2911 section 4.1.13)."
-#: cups/ipp.c:5028
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
"\"%s\": Valor de resolución %dx%d%s incorrecto - valores de unidades "
"incorrectas (RFC 2911 section 4.1.15)."
-#: cups/ipp.c:4997
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
"\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la "
"alimentación cruzada debe ser positiva (RFC 2911 sección 4.1.15)."
-#: cups/ipp.c:5012
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
"\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la "
"alimentación debe ser positiva (RFC 2911 sección 4.1.15)."
-#: cups/ipp.c:5109
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
"\"%s\": Valor del texto \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
"2911 sección 4.1.1)."
-#: cups/ipp.c:5118
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
msgstr ""
"\"%s\": Valor del texto \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.1)."
-#: cups/ipp.c:5261
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
"\"%s\": Valor uriScheme \"%s\" incorrecto - caracteres incorrectos (RFC 2911 "
"sección 4.1.6)."
-#: cups/ipp.c:5270
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
"\"%s\": Valor uriScheme \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
"sección 4.1.6)."
-#: berkeley/lpq.c:533
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
-#: cups/dest-localization.c:114
#, c-format
msgid "%d x %d mm"
msgstr "%d x %d mm"
-#: cups/dest-localization.c:106
#, c-format
msgid "%g x %g"
msgstr "%g x %g"
-#: cups/dest-localization.c:169 cups/dest-localization.c:176
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: cups/dest-localization.c:183
#, c-format
msgid "%s (%s, %s)"
msgstr "%s (%s, %s)"
-#: cups/dest-localization.c:160
#, c-format
msgid "%s (Borderless)"
msgstr "%s (Sin bordes)"
-#: cups/dest-localization.c:167 cups/dest-localization.c:174
#, c-format
msgid "%s (Borderless, %s)"
msgstr "%s (Sin bordes, %s)"
-#: cups/dest-localization.c:181
#, c-format
msgid "%s (Borderless, %s, %s)"
msgstr "%s (Sin bordes, %s, %s)"
-#: systemv/lpstat.c:777
#, c-format
msgid "%s accepting requests since %s"
msgstr "%s aceptando peticiones desde %s"
-#: scheduler/ipp.c:9952
#, c-format
msgid "%s cannot be changed."
msgstr "%s no puede ser cambiado."
-#: berkeley/lpc.c:181
#, c-format
msgid "%s is not implemented by the CUPS version of lpc."
msgstr "%s no está implementado en la versión de CUPS de lpc."
-#: berkeley/lpq.c:618
#, c-format
msgid "%s is not ready"
msgstr "%s no está preparada"
-#: berkeley/lpq.c:611
#, c-format
msgid "%s is ready"
msgstr "%s está preparada"
-#: berkeley/lpq.c:614
#, c-format
msgid "%s is ready and printing"
msgstr "%s está preparada e imprimiendo"
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
-#: filter/rastertolabel.c:1120
#, c-format
msgid "%s job-id user title copies options [file]"
msgstr "%s job-id usuario título copias opciones [archivo]"
-#: systemv/lpstat.c:781
#, c-format
msgid "%s not accepting requests since %s -"
msgstr "%s no acepta peticiones desde %s -"
-#: scheduler/ipp.c:618
#, c-format
msgid "%s not supported."
msgstr "%s no está implementado."
-#: systemv/lpstat.c:792
#, c-format
msgid "%s/%s accepting requests since %s"
msgstr "%s/%s aceptando peticiones desde %s"
-#: systemv/lpstat.c:797
#, c-format
msgid "%s/%s not accepting requests since %s -"
msgstr "%s/%s no acepta peticiones desde %s -"
-#: berkeley/lpq.c:526
#, c-format
msgid "%s: %-33.33s [job %d localhost]"
msgstr "%s: %-33.33s [trabajo %d localhost]"
#. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: systemv/cancel.c:305 systemv/cancel.c:368
#, c-format
msgid "%s: %s failed: %s"
msgstr "%s: %s ha fallado: %s"
-#: test/ippfind.c:777 test/ipptool.c:378
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr "%s: Versión %s incorrecta para \"-V\"."
-#: systemv/cupsaccept.c:68
#, c-format
msgid "%s: Don't know what to do."
msgstr "%s: No sé que hay que hacer."
-#: berkeley/lpq.c:225 berkeley/lpr.c:358 systemv/lp.c:602
#, c-format
msgid ""
"%s: Error - %s environment variable names non-existent destination \"%s\"."
msgstr ""
"%s: Error - %s nombres de variables de entorno no existen en destino \"%s\"."
-#: berkeley/lpq.c:133 berkeley/lpq.c:203 berkeley/lpr.c:230 berkeley/lpr.c:333
-#: systemv/lp.c:157 systemv/lp.c:577 systemv/lp.c:697 systemv/lp.c:746
-#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
-#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
-#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
-#: systemv/lpstat.c:1579
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
msgstr "%s: Error - añada '/version=1.1' al nombre del servidor."
-#: systemv/lp.c:234
#, c-format
msgid "%s: Error - bad job ID."
msgstr "%s: Error - ID de trabajo incorrecta."
-#: systemv/lp.c:222
#, c-format
msgid "%s: Error - cannot print files and alter jobs simultaneously."
msgstr ""
"%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
"tiempo."
-#: systemv/lp.c:515
#, c-format
msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
msgstr ""
"%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
"una ID de trabajo."
-#: systemv/lp.c:464
#, c-format
msgid "%s: Error - expected character set after \"-S\" option."
msgstr "%s: Error - se esperaba un juego de caracteres tras la opción \"-S\"."
-#: systemv/lp.c:483
#, c-format
msgid "%s: Error - expected content type after \"-T\" option."
msgstr "%s: Error - se esperaba un tipo de contenido tras la opción \"-T\"."
-#: berkeley/lpr.c:245
#, c-format
msgid "%s: Error - expected copies after \"-#\" option."
msgstr "%s: Error - se esperaba número de copias tras la opción \"-#\"."
-#: systemv/lp.c:267
#, c-format
msgid "%s: Error - expected copies after \"-n\" option."
msgstr "%s: Error - se esperaba número de copias tras la opción \"-n\"."
-#: berkeley/lpr.c:206
#, c-format
msgid "%s: Error - expected destination after \"-P\" option."
msgstr "%s: Error - se esperaba un destino tras la opción \"-P\"."
-#: systemv/lp.c:132
#, c-format
msgid "%s: Error - expected destination after \"-d\" option."
msgstr "%s: Error - se esperaba un destino tras la opción \"-d\"."
-#: systemv/lp.c:171
#, c-format
msgid "%s: Error - expected form after \"-f\" option."
msgstr "%s: Error - se esperaba un formulario tras la opción \"-f\"."
-#: systemv/lp.c:394
#, c-format
msgid "%s: Error - expected hold name after \"-H\" option."
msgstr "%s: Error - se esperaba un nombre de retención tras la opción \"-H\"."
-#: berkeley/lpr.c:100
#, c-format
msgid "%s: Error - expected hostname after \"-H\" option."
msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-H\"."
-#: berkeley/lpq.c:169 berkeley/lprm.c:123 systemv/cancel.c:124
-#: systemv/cupsaccept.c:123 systemv/lp.c:192 systemv/lpstat.c:266
#, c-format
msgid "%s: Error - expected hostname after \"-h\" option."
msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-h\"."
-#: systemv/lp.c:374
#, c-format
msgid "%s: Error - expected mode list after \"-y\" option."
msgstr "%s: Error - se esperaba una lista de modos tras la opción \"-y\"."
-#: berkeley/lpr.c:268
#, c-format
msgid "%s: Error - expected name after \"-%c\" option."
msgstr "%s: Error - se esperaba un nombre tras la opción \"-%c\"."
-#: berkeley/lpr.c:150 systemv/lp.c:291
#, c-format
msgid "%s: Error - expected option=value after \"-o\" option."
msgstr "%s: Error - se esperaba opción=valor tras la opción \"-o\"."
-#: systemv/lp.c:444
#, c-format
msgid "%s: Error - expected page list after \"-P\" option."
msgstr "%s: Error - se esperaba una lista de páginas tras la opción \"-P\"."
-#: systemv/lp.c:311
#, c-format
msgid "%s: Error - expected priority after \"-%c\" option."
msgstr "%s: Error - se esperaba un valor de prioridad tras la opción \"-%c\"."
-#: systemv/cupsaccept.c:141
#, c-format
msgid "%s: Error - expected reason text after \"-r\" option."
msgstr "%s: Error - se esperaba un texto con una razón tras la opción \"-r\"."
-#: systemv/lp.c:357
#, c-format
msgid "%s: Error - expected title after \"-t\" option."
msgstr "%s: Error - se esperaba un título tras la opción \"-t\"."
-#: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
-#: systemv/lpstat.c:124
#, c-format
msgid "%s: Error - expected username after \"-U\" option."
msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-U\"."
-#: systemv/cancel.c:145
#, c-format
msgid "%s: Error - expected username after \"-u\" option."
msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-u\"."
-#: berkeley/lpr.c:122
#, c-format
msgid "%s: Error - expected value after \"-%c\" option."
msgstr "%s: Error - se esperaba un valor tras la opción \"-%c\"."
-#: systemv/lpstat.c:144 systemv/lpstat.c:158
#, c-format
msgid ""
"%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" "
"%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
"opción \"-W\"."
-#: berkeley/lpq.c:230 berkeley/lpr.c:363 systemv/lp.c:607
#, c-format
msgid "%s: Error - no default destination available."
msgstr "%s: Error - destino predeterminado no disponible."
-#: systemv/lp.c:333
#, c-format
msgid "%s: Error - priority must be between 1 and 100."
msgstr "%s: Error - la prioridad debe estar entre 1 y 100."
-#: berkeley/lpr.c:366 systemv/lp.c:610
#, c-format
msgid "%s: Error - scheduler not responding."
msgstr "%s: Error - el programa planificador de tareas no responde."
-#: berkeley/lpr.c:311 systemv/lp.c:547
#, c-format
msgid "%s: Error - too many files - \"%s\"."
msgstr "%s: Error - demasiados archivos - \"%s\"."
-#: berkeley/lpr.c:293 systemv/lp.c:530
#, c-format
msgid "%s: Error - unable to access \"%s\" - %s"
msgstr "%s: Error - no se ha podido acceder a \"%s\" - %s"
-#: berkeley/lpr.c:409 systemv/lp.c:641
#, c-format
msgid "%s: Error - unable to queue from stdin - %s."
msgstr "%s: Error - no se ha podido poner en cola desde stdin - %s."
-#: berkeley/lprm.c:87 berkeley/lprm.c:172 systemv/cancel.c:222
#, c-format
msgid "%s: Error - unknown destination \"%s\"."
msgstr "%s: Error - destino \"%s\" desconocido."
-#: berkeley/lpq.c:137
#, c-format
msgid "%s: Error - unknown destination \"%s/%s\"."
msgstr "%s: Error - destino \"%s/%s\" desconocido."
-#: berkeley/lpr.c:279 berkeley/lprm.c:139 systemv/cancel.c:163
-#: systemv/cupsaccept.c:164 systemv/lp.c:506 systemv/lpstat.c:456
#, c-format
msgid "%s: Error - unknown option \"%c\"."
msgstr "%s: Error - opción \"%c\" desconocida."
-#: systemv/cupsaccept.c:157 systemv/lp.c:497
#, c-format
msgid "%s: Error - unknown option \"%s\"."
msgstr "%s: Error - opción \"%s\" desconocida."
-#: systemv/lp.c:211
#, c-format
msgid "%s: Expected job ID after \"-i\" option."
msgstr "%s: Se esperaba una ID de trabajo tras la opción \"-i\"."
-#: systemv/lpstat.c:514 systemv/lpstat.c:554
#, c-format
msgid "%s: Invalid destination name in list \"%s\"."
msgstr "%s: Nombre de destino no válido en la lista \"%s\"."
-#: scheduler/cupsfilter.c:579
#, c-format
msgid "%s: Invalid filter string \"%s\"."
msgstr "%s: Cadena de filtro \"%s\" no válida."
-#: test/ipptool.c:309
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr "%s: Falta el nombre del archivo para \"-P\"."
-#: test/ippfind.c:749 test/ipptool.c:346
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr "%s: Falta el tiempo de espera para \"-T\"."
-#: test/ippfind.c:762 test/ipptool.c:360
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr "%s: Falta la versión para \"-V\"."
-#: systemv/lp.c:421
#, c-format
msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
msgstr ""
"%s: Se necesita un ID de trabajo (\"-i id_trabajo\") antes de \"-H restart\"."
-#: scheduler/cupsfilter.c:451
#, c-format
msgid "%s: No filter to convert from %s/%s to %s/%s."
msgstr "%s: No hay ningún filtro para convertir de %s/%s a %s/%s."
-#: systemv/cupsaccept.c:198
#, c-format
msgid "%s: Operation failed: %s"
msgstr "%s: La operación ha fallado: %s"
-#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
-#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr "%s: Lo siento, no está implementado el cifrado."
-#: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
-#: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
#, c-format
msgid "%s: Unable to connect to server."
msgstr "%s: No se ha podido conectar al servidor."
-#: systemv/cancel.c:328
#, c-format
msgid "%s: Unable to contact server."
msgstr "%s: No se ha podido contactar con el servidor."
-#: scheduler/cupsfilter.c:416
+#, 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 se ha podido determinar el tipo MIME de \"%s\"."
-#: test/ipptool.c:318
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr "%s: No se pudo abrir \"%s\": %s"
-#: ppdc/ppdmerge.cxx:90
#, c-format
msgid "%s: Unable to open %s: %s"
msgstr "%s: No se pudo abrir %s: %s"
-#: scheduler/cupsfilter.c:674 ppdc/ppdmerge.cxx:106
#, c-format
msgid "%s: Unable to open PPD file: %s on line %d."
msgstr "%s: No se ha podido abrir el archivo PPD: %s en la línea %d."
-#: scheduler/cupsfilter.c:383
#, c-format
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
msgstr "%s: No se pudo leer base de datos MIME desde \"%s\" o \"%s\"."
-#: berkeley/lpq.c:140 systemv/lpstat.c:575
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
#, c-format
msgid "%s: Unknown destination \"%s\"."
msgstr "%s: Destino \"%s\" desconocido."
-#: scheduler/cupsfilter.c:428
#, c-format
msgid "%s: Unknown destination MIME type %s/%s."
msgstr "%s: Tipo MIME de destino %s/%s desconocido."
-#: scheduler/cupsfilter.c:1479
#, c-format
msgid "%s: Unknown option \"%c\"."
msgstr "%s: Opción \"%c\" desconocida."
-#: test/ippfind.c:648
#, c-format
msgid "%s: Unknown option \"%s\"."
msgstr "%s: Opción \"%s\" desconocida."
-#: test/ippfind.c:928
#, c-format
msgid "%s: Unknown option \"-%c\"."
msgstr "%s: Opción \"-%c\" desconocida."
-#: scheduler/cupsfilter.c:408
#, c-format
msgid "%s: Unknown source MIME type %s/%s."
msgstr "%s: Tipo MIME de origen %s/%s desconocido."
-#: berkeley/lpr.c:136
#, c-format
msgid ""
"%s: Warning - \"%c\" format modifier not supported - output may not be "
"%s: Advertencia - no se admite el uso del modificador de formato \"%c\" - la "
"salida puede no ser correcta."
-#: systemv/lp.c:471
#, c-format
msgid "%s: Warning - character set option ignored."
msgstr "%s: Advertencia - opción de juego de caracteres no tenida en cuenta."
-#: systemv/lp.c:490
#, c-format
msgid "%s: Warning - content type option ignored."
msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta."
-#: systemv/lp.c:178
#, c-format
msgid "%s: Warning - form option ignored."
msgstr "%s: Advertencia - opción de formulario no tenida en cuenta."
-#: systemv/lp.c:381
#, c-format
msgid "%s: Warning - mode option ignored."
msgstr "%s: Advertencia - opción de modo no tenida en cuenta."
-#: ppdc/sample.c:305
msgid "-1"
msgstr "-1"
-#: ppdc/sample.c:296
msgid "-10"
msgstr "-10"
-#: ppdc/sample.c:388
msgid "-100"
msgstr "-100"
-#: ppdc/sample.c:387
msgid "-105"
msgstr "-105"
-#: ppdc/sample.c:295
msgid "-11"
msgstr "-11"
-#: ppdc/sample.c:386
msgid "-110"
msgstr "-110"
-#: ppdc/sample.c:385
msgid "-115"
msgstr "-115"
-#: ppdc/sample.c:294
msgid "-12"
msgstr "-12"
-#: ppdc/sample.c:384
msgid "-120"
msgstr "-120"
-#: ppdc/sample.c:293
msgid "-13"
msgstr "-13"
-#: ppdc/sample.c:292
msgid "-14"
msgstr "-14"
-#: ppdc/sample.c:291
msgid "-15"
msgstr "-15"
-#: ppdc/sample.c:304
msgid "-2"
msgstr "-2"
-#: ppdc/sample.c:404
msgid "-20"
msgstr "-20"
-#: ppdc/sample.c:403
msgid "-25"
msgstr "-25"
-#: ppdc/sample.c:303
msgid "-3"
msgstr "-3"
-#: ppdc/sample.c:402
msgid "-30"
msgstr "-30"
-#: ppdc/sample.c:401
msgid "-35"
msgstr "-35"
-#: ppdc/sample.c:302
msgid "-4"
msgstr "-4"
-#: ppdc/sample.c:400
msgid "-40"
msgstr "-40"
-#: ppdc/sample.c:399
msgid "-45"
msgstr "-45"
-#: ppdc/sample.c:301
msgid "-5"
msgstr "-5"
-#: ppdc/sample.c:398
msgid "-50"
msgstr "-50"
-#: ppdc/sample.c:397
msgid "-55"
msgstr "-55"
-#: ppdc/sample.c:300
msgid "-6"
msgstr "-6"
-#: ppdc/sample.c:396
msgid "-60"
msgstr "-60"
-#: ppdc/sample.c:395
msgid "-65"
msgstr "-65"
-#: ppdc/sample.c:299
msgid "-7"
msgstr "-7"
-#: ppdc/sample.c:394
msgid "-70"
msgstr "-70"
-#: ppdc/sample.c:393
msgid "-75"
msgstr "-75"
-#: ppdc/sample.c:298
msgid "-8"
msgstr "-8"
-#: ppdc/sample.c:392
msgid "-80"
msgstr "-80"
-#: ppdc/sample.c:391
msgid "-85"
msgstr "-85"
-#: ppdc/sample.c:297
msgid "-9"
msgstr "-9"
-#: ppdc/sample.c:390
msgid "-90"
msgstr "-90"
-#: ppdc/sample.c:389
msgid "-95"
msgstr "-95"
-#: ppdc/sample.c:306
msgid "0"
msgstr "0"
-#: ppdc/sample.c:307
msgid "1"
msgstr "1"
-#: ppdc/sample.c:379
msgid "1 inch/sec."
msgstr "1 pulg./seg"
-#: ppdc/sample.c:172
msgid "1.25x0.25\""
msgstr "1.25x0.25 pulg."
-#: ppdc/sample.c:173
msgid "1.25x2.25\""
msgstr "1.25x2.25 pulg."
-#: ppdc/sample.c:427
msgid "1.5 inch/sec."
msgstr "1.5 pulg./seg"
-#: ppdc/sample.c:174
msgid "1.50x0.25\""
msgstr "1.50x0.25 pulg."
-#: ppdc/sample.c:175
msgid "1.50x0.50\""
msgstr "1.50x0.50 pulg."
-#: ppdc/sample.c:176
msgid "1.50x1.00\""
msgstr "1.50x1.00 pulg."
-#: ppdc/sample.c:177
msgid "1.50x2.00\""
msgstr "1.50x2.00 pulg."
-#: ppdc/sample.c:316
msgid "10"
msgstr "10"
-#: ppdc/sample.c:438
msgid "10 inches/sec."
msgstr "10 pulg./seg"
-#: ppdc/sample.c:6
msgid "10 x 11"
msgstr "10 x 11"
-#: ppdc/sample.c:7
msgid "10 x 13"
msgstr "10 x 13"
-#: ppdc/sample.c:8
msgid "10 x 14"
msgstr "10 x 14"
-#: ppdc/sample.c:418
msgid "100"
msgstr "100"
-#: ppdc/sample.c:329
msgid "100 mm/sec."
msgstr "100 mm/seg"
-#: ppdc/sample.c:419
msgid "105"
msgstr "105"
-#: ppdc/sample.c:317
msgid "11"
msgstr "11"
-#: ppdc/sample.c:439
msgid "11 inches/sec."
msgstr "11 pulg./seg"
-#: ppdc/sample.c:420
msgid "110"
msgstr "110"
-#: ppdc/sample.c:421
msgid "115"
msgstr "115"
-#: ppdc/sample.c:318
msgid "12"
msgstr "12"
-#: ppdc/sample.c:440
msgid "12 inches/sec."
msgstr "12 pulg./seg"
-#: ppdc/sample.c:9
msgid "12 x 11"
msgstr "12 x 11"
-#: ppdc/sample.c:422
msgid "120"
msgstr "120"
-#: ppdc/sample.c:330
msgid "120 mm/sec."
msgstr "120 mm/seg"
-#: ppdc/sample.c:243
msgid "120x60dpi"
msgstr "120x60ppp"
-#: ppdc/sample.c:249
msgid "120x72dpi"
msgstr "120x72ppp"
-#: ppdc/sample.c:319
msgid "13"
msgstr "13"
-#: ppdc/sample.c:232
msgid "136dpi"
msgstr "136ppp"
-#: ppdc/sample.c:320
msgid "14"
msgstr "14"
-#: ppdc/sample.c:321
msgid "15"
msgstr "15"
-#: ppdc/sample.c:323
msgid "15 mm/sec."
msgstr "15 mm/seg"
-#: ppdc/sample.c:10
msgid "15 x 11"
msgstr "15 x 11"
-#: ppdc/sample.c:331
msgid "150 mm/sec."
msgstr "150 mm/seg"
-#: ppdc/sample.c:278
msgid "150dpi"
msgstr "150ppp"
-#: ppdc/sample.c:363
msgid "16"
msgstr "16"
-#: ppdc/sample.c:364
msgid "17"
msgstr "17"
-#: ppdc/sample.c:365
msgid "18"
msgstr "18"
-#: ppdc/sample.c:244
msgid "180dpi"
msgstr "180ppp"
-#: ppdc/sample.c:366
msgid "19"
msgstr "19"
-#: ppdc/sample.c:308
msgid "2"
msgstr "2"
-#: ppdc/sample.c:380
msgid "2 inches/sec."
msgstr "2 pulg./seg"
-#: ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr "Dúplex"
-#: ppdc/sample.c:178
msgid "2.00x0.37\""
msgstr "2.00x0.37 pulg."
-#: ppdc/sample.c:179
msgid "2.00x0.50\""
msgstr "2.00x0.50 pulg."
-#: ppdc/sample.c:180
msgid "2.00x1.00\""
msgstr "2.00x1.00 pulg."
-#: ppdc/sample.c:181
msgid "2.00x1.25\""
msgstr "2.00x1.25 pulg."
-#: ppdc/sample.c:182
msgid "2.00x2.00\""
msgstr "2.00x2.00 pulg."
-#: ppdc/sample.c:183
msgid "2.00x3.00\""
msgstr "2.00x3.00 pulg."
-#: ppdc/sample.c:184
msgid "2.00x4.00\""
msgstr "2.00x4.00 pulg."
-#: ppdc/sample.c:185
msgid "2.00x5.50\""
msgstr "2.00x5.50 pulg."
-#: ppdc/sample.c:186
msgid "2.25x0.50\""
msgstr "2.25x0.50 pulg."
-#: ppdc/sample.c:187
msgid "2.25x1.25\""
msgstr "2.25x1.25 pulg."
-#: ppdc/sample.c:188
msgid "2.25x4.00\""
msgstr "2.25x4.00 pulg."
-#: ppdc/sample.c:189
msgid "2.25x5.50\""
msgstr "2.25x5.50 pulg."
-#: ppdc/sample.c:190
msgid "2.38x5.50\""
msgstr "2.38x5.50 pulg."
-#: ppdc/sample.c:428
msgid "2.5 inches/sec."
msgstr "2.5 pulg./seg"
-#: ppdc/sample.c:191
msgid "2.50x1.00\""
msgstr "2.50x1.00 pulg."
-#: ppdc/sample.c:192
msgid "2.50x2.00\""
msgstr "2.50x2.00 pulg."
-#: ppdc/sample.c:193
msgid "2.75x1.25\""
msgstr "2.75x1.25 pulg."
-#: ppdc/sample.c:194
msgid "2.9 x 1\""
msgstr "2.9 x 1 pulg."
-#: ppdc/sample.c:367
msgid "20"
msgstr "20"
-#: ppdc/sample.c:324
msgid "20 mm/sec."
msgstr "20 mm/seg"
-#: ppdc/sample.c:332
msgid "200 mm/sec."
msgstr "200 mm/seg"
-#: ppdc/sample.c:233
msgid "203dpi"
msgstr "203ppp"
-#: ppdc/sample.c:368
msgid "21"
msgstr "21"
-#: ppdc/sample.c:369
msgid "22"
msgstr "22"
-#: ppdc/sample.c:370
msgid "23"
msgstr "23"
-#: ppdc/sample.c:371
msgid "24"
msgstr "24"
-#: ppdc/sample.c:241
msgid "24-Pin Series"
msgstr "24-Pin Series"
-#: ppdc/sample.c:250
msgid "240x72dpi"
msgstr "240x72ppp"
-#: ppdc/sample.c:372
msgid "25"
msgstr "25"
-#: ppdc/sample.c:333
msgid "250 mm/sec."
msgstr "250 mm/seg"
-#: ppdc/sample.c:373
msgid "26"
msgstr "26"
-#: ppdc/sample.c:374
msgid "27"
msgstr "27"
-#: ppdc/sample.c:375
msgid "28"
msgstr "28"
-#: ppdc/sample.c:376
msgid "29"
msgstr "29"
-#: ppdc/sample.c:309
msgid "3"
msgstr "3"
-#: ppdc/sample.c:381
msgid "3 inches/sec."
msgstr "3 pulg./seg"
-#: ppdc/sample.c:3
msgid "3 x 5"
msgstr "3 x 5"
-#: ppdc/sample.c:195
msgid "3.00x1.00\""
msgstr "3.00x1.00 pulg."
-#: ppdc/sample.c:196
msgid "3.00x1.25\""
msgstr "3.00x1.25 pulg."
-#: ppdc/sample.c:197
msgid "3.00x2.00\""
msgstr "3.00x2.00 pulg."
-#: ppdc/sample.c:198
msgid "3.00x3.00\""
msgstr "3.00x3.00 pulg."
-#: ppdc/sample.c:199
msgid "3.00x5.00\""
msgstr "3.00x5.00 pulg."
-#: ppdc/sample.c:200
msgid "3.25x2.00\""
msgstr "3.25x2.00 pulg."
-#: ppdc/sample.c:201
msgid "3.25x5.00\""
msgstr "3.25x5.00 pulg."
-#: ppdc/sample.c:202
msgid "3.25x5.50\""
msgstr "3.25x5.50 pulg."
-#: ppdc/sample.c:203
msgid "3.25x5.83\""
msgstr "3.25x5.83 pulg."
-#: ppdc/sample.c:204
msgid "3.25x7.83\""
msgstr "3.25x7.83 pulg."
-#: ppdc/sample.c:4
msgid "3.5 x 5"
msgstr "3.5 x 5"
-#: ppdc/sample.c:171
msgid "3.5\" Disk"
msgstr "Disco de 3.5 pulg."
-#: ppdc/sample.c:205
msgid "3.50x1.00\""
msgstr "3.50x1.00 pulg."
-#: ppdc/sample.c:377
msgid "30"
msgstr "30"
-#: ppdc/sample.c:325
msgid "30 mm/sec."
msgstr "30 mm/seg"
-#: ppdc/sample.c:334
msgid "300 mm/sec."
msgstr "300 mm/seg"
-#: ppdc/sample.c:234
msgid "300dpi"
msgstr "300ppp"
-#: ppdc/sample.c:405
msgid "35"
msgstr "35"
-#: ppdc/sample.c:246
msgid "360dpi"
msgstr "360ppp"
-#: ppdc/sample.c:245
msgid "360x180dpi"
msgstr "360x180ppp"
-#: ppdc/sample.c:310
msgid "4"
msgstr "4"
-#: ppdc/sample.c:382
msgid "4 inches/sec."
msgstr "4 pulg./seg"
-#: ppdc/sample.c:206
msgid "4.00x1.00\""
msgstr "4.00x1.00 pulg."
-#: ppdc/sample.c:214
msgid "4.00x13.00\""
msgstr "4.00x13.00 pulg."
-#: ppdc/sample.c:207
msgid "4.00x2.00\""
msgstr "4.00x2.00 pulg."
-#: ppdc/sample.c:208
msgid "4.00x2.50\""
msgstr "4.00x2.50 pulg."
-#: ppdc/sample.c:209
msgid "4.00x3.00\""
msgstr "4.00x3.00 pulg."
-#: ppdc/sample.c:210
msgid "4.00x4.00\""
msgstr "4.00x4.00 pulg."
-#: ppdc/sample.c:211
msgid "4.00x5.00\""
msgstr "4.00x5.00 pulg."
-#: ppdc/sample.c:212
msgid "4.00x6.00\""
msgstr "4.00x6.00 pulg."
-#: ppdc/sample.c:213
msgid "4.00x6.50\""
msgstr "4.00x6.50 pulg."
-#: ppdc/sample.c:406
msgid "40"
msgstr "40"
-#: ppdc/sample.c:326
msgid "40 mm/sec."
msgstr "40 mm/seg"
-#: ppdc/sample.c:407
msgid "45"
msgstr "45"
-#: ppdc/sample.c:311
msgid "5"
msgstr "5"
-#: ppdc/sample.c:432
msgid "5 inches/sec."
msgstr "5 pulg./seg"
-#: ppdc/sample.c:5
msgid "5 x 7"
msgstr "5 x 7"
-#: ppdc/sample.c:408
msgid "50"
msgstr "50"
-#: ppdc/sample.c:409
msgid "55"
msgstr "55"
-#: ppdc/sample.c:312
msgid "6"
msgstr "6"
-#: ppdc/sample.c:433
msgid "6 inches/sec."
msgstr "6 pulg./seg"
-#: ppdc/sample.c:215
msgid "6.00x1.00\""
msgstr "6.00x1.00 pulg."
-#: ppdc/sample.c:216
msgid "6.00x2.00\""
msgstr "6.00x2.00 pulg."
-#: ppdc/sample.c:217
msgid "6.00x3.00\""
msgstr "6.00x3.00 pulg."
-#: ppdc/sample.c:218
msgid "6.00x4.00\""
msgstr "6.00x4.00 pulg."
-#: ppdc/sample.c:219
msgid "6.00x5.00\""
msgstr "6.00x5.00 pulg."
-#: ppdc/sample.c:220
msgid "6.00x6.00\""
msgstr "6.00x6.00 pulg."
-#: ppdc/sample.c:221
msgid "6.00x6.50\""
msgstr "6.00x6.50 pulg."
-#: ppdc/sample.c:410
msgid "60"
msgstr "60"
-#: ppdc/sample.c:327
msgid "60 mm/sec."
msgstr "60 mm/seg"
-#: ppdc/sample.c:253
msgid "600dpi"
msgstr "600ppp"
-#: ppdc/sample.c:242
msgid "60dpi"
msgstr "60ppp"
-#: ppdc/sample.c:248
msgid "60x72dpi"
msgstr "60x72ppp"
-#: ppdc/sample.c:411
msgid "65"
msgstr "65"
-#: ppdc/sample.c:313
msgid "7"
msgstr "7"
-#: ppdc/sample.c:435
msgid "7 inches/sec."
msgstr "7 pulg./seg"
-#: ppdc/sample.c:11
msgid "7 x 9"
msgstr "7 x 9"
-#: ppdc/sample.c:412
msgid "70"
msgstr "70"
-#: ppdc/sample.c:413
msgid "75"
msgstr "75"
-#: ppdc/sample.c:314
msgid "8"
msgstr "8"
-#: ppdc/sample.c:436
msgid "8 inches/sec."
msgstr "8 pulg./seg"
-#: ppdc/sample.c:12
msgid "8 x 10"
msgstr "8 x 10"
-#: ppdc/sample.c:222
msgid "8.00x1.00\""
msgstr "8.00x1.00 pulg."
-#: ppdc/sample.c:223
msgid "8.00x2.00\""
msgstr "8.00x2.00 pulg."
-#: ppdc/sample.c:224
msgid "8.00x3.00\""
msgstr "8.00x3.00 pulg."
-#: ppdc/sample.c:225
msgid "8.00x4.00\""
msgstr "8.00x4.00 pulg."
-#: ppdc/sample.c:226
msgid "8.00x5.00\""
msgstr "8.00x5.00 pulg."
-#: ppdc/sample.c:227
msgid "8.00x6.00\""
msgstr "8.00x6.00 pulg."
-#: ppdc/sample.c:228
msgid "8.00x6.50\""
msgstr "8.00x6.50 pulg."
-#: ppdc/sample.c:414
msgid "80"
msgstr "80"
-#: ppdc/sample.c:328
msgid "80 mm/sec."
msgstr "80 mm/seg"
-#: ppdc/sample.c:415
msgid "85"
msgstr "85"
-#: ppdc/sample.c:315
msgid "9"
msgstr "9"
-#: ppdc/sample.c:437
msgid "9 inches/sec."
msgstr "9 pulg./seg"
-#: ppdc/sample.c:13
msgid "9 x 11"
msgstr "9 x 11"
-#: ppdc/sample.c:14
msgid "9 x 12"
msgstr "9 x 12"
-#: ppdc/sample.c:247
msgid "9-Pin Series"
msgstr "9-Pin Series"
-#: ppdc/sample.c:416
msgid "90"
msgstr "90"
-#: ppdc/sample.c:417
msgid "95"
msgstr "95"
-#: berkeley/lpc.c:205
msgid "?Invalid help command unknown."
msgstr "?Comando de ayuda no válido desconocido."
-#: cgi-bin/admin.c:2348
msgid "A Samba password is required to export printer drivers"
msgstr ""
"Se requiere una contraseña Samba para exportar los controladores de impresora"
-#: cgi-bin/admin.c:2344
msgid "A Samba username is required to export printer drivers"
msgstr ""
"Se requiere un nombre de usuario Samba para exportar los controladores de "
"impresora"
-#: scheduler/ipp.c:2274
#, c-format
msgid "A class named \"%s\" already exists."
msgstr "Ya existe una clase llamada \"%s\"."
-#: scheduler/ipp.c:916
#, c-format
msgid "A printer named \"%s\" already exists."
msgstr "Ya existe una impresora llamada \"%s\"."
-#: ppdc/sample.c:15
msgid "A0"
msgstr "A0"
-#: ppdc/sample.c:16
msgid "A0 Long Edge"
msgstr "A0 lado largo"
-#: ppdc/sample.c:17
msgid "A1"
msgstr "A1"
-#: ppdc/sample.c:18
msgid "A1 Long Edge"
msgstr "A1 lado largo"
-#: ppdc/sample.c:37
msgid "A10"
msgstr "A10"
-#: ppdc/sample.c:19
msgid "A2"
msgstr "A2"
-#: ppdc/sample.c:20
msgid "A2 Long Edge"
msgstr "A2 lado largo"
-#: ppdc/sample.c:21
msgid "A3"
msgstr "A3"
-#: ppdc/sample.c:22
msgid "A3 Long Edge"
msgstr "A3 lado largo"
-#: ppdc/sample.c:23
msgid "A3 Oversize"
msgstr "A3 Extragrande"
-#: ppdc/sample.c:24
msgid "A3 Oversize Long Edge"
msgstr "A3 Extragrande lado largo"
-#: ppdc/sample.c:25
msgid "A4"
msgstr "A4"
-#: ppdc/sample.c:27
msgid "A4 Long Edge"
msgstr "A4 lado largo"
-#: ppdc/sample.c:26
msgid "A4 Oversize"
msgstr "A4 Extragrande"
-#: ppdc/sample.c:28
msgid "A4 Small"
msgstr "A4 Pequeño"
-#: ppdc/sample.c:29
msgid "A5"
msgstr "A5"
-#: ppdc/sample.c:31
msgid "A5 Long Edge"
msgstr "A5 lado largo"
-#: ppdc/sample.c:30
msgid "A5 Oversize"
msgstr "A5 Extragrande"
-#: ppdc/sample.c:32
msgid "A6"
msgstr "A6"
-#: ppdc/sample.c:33
msgid "A6 Long Edge"
msgstr "A6 lado largo"
-#: ppdc/sample.c:34
msgid "A7"
msgstr "A7"
-#: ppdc/sample.c:35
msgid "A8"
msgstr "A8"
-#: ppdc/sample.c:36
msgid "A9"
msgstr "A9"
-#: ppdc/sample.c:38
msgid "ANSI A"
msgstr "ANSI A"
-#: ppdc/sample.c:39
msgid "ANSI B"
msgstr "ANSI B"
-#: ppdc/sample.c:40
msgid "ANSI C"
msgstr "ANSI C"
-#: ppdc/sample.c:41
msgid "ANSI D"
msgstr "ANSI D"
-#: ppdc/sample.c:42
msgid "ANSI E"
msgstr "ANSI E"
-#: ppdc/sample.c:47
msgid "ARCH C"
msgstr "ARCH C"
-#: ppdc/sample.c:48
msgid "ARCH C Long Edge"
msgstr "ARCH C lado largo"
-#: ppdc/sample.c:49
msgid "ARCH D"
msgstr "ARCH D"
-#: ppdc/sample.c:50
msgid "ARCH D Long Edge"
msgstr "ARCH D lado largo"
-#: ppdc/sample.c:51
msgid "ARCH E"
msgstr "ARCH E"
-#: ppdc/sample.c:52
msgid "ARCH E Long Edge"
msgstr "ARCH E lado largo"
-#: cgi-bin/classes.c:161 cgi-bin/printers.c:164
msgid "Accept Jobs"
msgstr "Aceptar trabajos"
-#: cups/http-support.c:1347
msgid "Accepted"
msgstr "Aceptado"
-#: cgi-bin/admin.c:548
msgid "Add Class"
msgstr "Añadir clase"
-#: cgi-bin/admin.c:860
msgid "Add Printer"
msgstr "Añadir impresora"
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
msgid "Add RSS Subscription"
msgstr "Añadir subscripción RSS"
-#: ppdc/sample.c:163
msgid "Address"
msgstr "Dirección"
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
msgid "Administration"
msgstr "Administración"
-#: ppdc/sample.c:424
msgid "Always"
msgstr "Siempre"
-#: backend/socket.c:121
msgid "AppSocket/HP JetDirect"
msgstr "AppSocket/HP JetDirect"
-#: ppdc/sample.c:445
msgid "Applicator"
msgstr "Aplicador"
-#: scheduler/ipp.c:991
#, c-format
msgid "Attempt to set %s printer-state to bad value %d."
msgstr ""
"Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto "
"%d."
-#: scheduler/ipp.c:239
#, c-format
msgid "Attribute groups are out of order (%x < %x)."
msgstr "Los grupos de atributos están desordenados (%x < %x)."
-#: ppdc/sample.c:126
msgid "B0"
msgstr "B0"
-#: ppdc/sample.c:127
msgid "B1"
msgstr "B1"
-#: ppdc/sample.c:137
msgid "B10"
msgstr "B10"
-#: ppdc/sample.c:128
msgid "B2"
msgstr "B2"
-#: ppdc/sample.c:129
msgid "B3"
msgstr "B3"
-#: ppdc/sample.c:130
msgid "B4"
msgstr "B4"
-#: ppdc/sample.c:131
msgid "B5"
msgstr "B5"
-#: ppdc/sample.c:132
msgid "B5 Oversize"
msgstr "A5 Extragrande"
-#: ppdc/sample.c:133
msgid "B6"
msgstr "B6"
-#: ppdc/sample.c:134
msgid "B7"
msgstr "B7"
-#: ppdc/sample.c:135
msgid "B8"
msgstr "B8"
-#: ppdc/sample.c:136
msgid "B9"
msgstr "B9"
-#: scheduler/ipp.c:10877
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "Valor 'document-format' \"%s\" incorrecto."
-#: cups/dest.c:1736
msgid "Bad NULL dests pointer"
msgstr "Puntero destino NULLincorrecto"
-#: cups/ppd.c:303
msgid "Bad OpenGroup"
msgstr "OpenGroup incorrecto"
-#: cups/ppd.c:305
msgid "Bad OpenUI/JCLOpenUI"
msgstr "OpenUI/JCLOpenUI incorrecto"
-#: cups/ppd.c:307
msgid "Bad OrderDependency"
msgstr "OrderDependency incorrecto"
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
msgid "Bad PPD cache file."
msgstr "Archivo de caché PPD incorrecto."
-#: cups/http-support.c:1362
msgid "Bad Request"
msgstr "Petición incorrecta"
-#: cups/snmp.c:954
msgid "Bad SNMP version number"
msgstr "Número de versión SNMP incorrecto"
-#: cups/ppd.c:308
msgid "Bad UIConstraints"
msgstr "UIConstraints incorrecto"
-#: cups/http-support.c:1456
msgid "Bad arguments to function"
msgstr "Argumentos de la función incorrectos"
-#: scheduler/ipp.c:1352
#, c-format
msgid "Bad copies value %d."
msgstr "Valor de copias %d incorrecto."
-#: cups/ppd.c:316
msgid "Bad custom parameter"
msgstr "Parámetro a medida incorrecto"
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr "device-uri \"%s\" incorrecto."
-#: scheduler/ipp.c:2399
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr "Esquema device-uri \"%s\" incorrecto."
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
#, c-format
msgid "Bad document-format \"%s\"."
msgstr "document-format \"%s\" incorrecto."
-#: scheduler/ipp.c:9376
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr "document-format-default \"%s\" incorrecto."
-#: cups/util.c:823
msgid "Bad filename buffer"
msgstr "Nombre de archivo del búfer incorrecto"
-#: cups/http-support.c:1465
msgid "Bad hostname/address in URI"
msgstr "Nombre de equipo/dirección incorrecto en la URI"
-#: scheduler/ipp.c:1527
#, c-format
msgid "Bad job-name value: %s"
msgstr "Valor job-name incorrecto: %s"
-#: scheduler/ipp.c:1520
msgid "Bad job-name value: Wrong type or count."
msgstr "Valor job-name incorrecto: tipo o contador equivocado."
-#: scheduler/ipp.c:9967
msgid "Bad job-priority value."
msgstr "Valor job-priority incorrecto."
-#: scheduler/ipp.c:1382
#, c-format
msgid "Bad job-sheets value \"%s\"."
msgstr "Valor de job-sheets \"%s\" incorrecto."
-#: scheduler/ipp.c:1366
msgid "Bad job-sheets value type."
msgstr "Tipo de valor de job-sheets incorrecto."
-#: scheduler/ipp.c:9997
msgid "Bad job-state value."
msgstr "Valor job-state incorrecto."
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr "job-uri \"%s\" incorrecto."
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr "notify-pull-method \"%s\" incorrecto."
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "notify-recipient-uri \"%s\" incorrecto."
-#: scheduler/ipp.c:1398
#, c-format
msgid "Bad number-up value %d."
msgstr "Valor number-up (páginas por hoja) %d incorrecto."
-#: cups/adminutil.c:281
#, c-format
msgid "Bad option + choice on line %d."
msgstr "Opción + preferencia incorrectas en línea %d."
-#: scheduler/ipp.c:1415
#, c-format
msgid "Bad page-ranges values %d-%d."
msgstr "Valores de page-ranges %d-%d incorrectos."
-#: cups/http-support.c:1462
msgid "Bad port number in URI"
msgstr "Número de puerto incorrecto en URI"
-#: scheduler/ipp.c:2442
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr "port-monitor \"%s\" incorrecto."
-#: scheduler/ipp.c:2503
#, c-format
msgid "Bad printer-state value %d."
msgstr "Valor printer-state %d incorrecto."
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
msgid "Bad printer-uri."
msgstr "printer-uri incorrecto."
-#: scheduler/ipp.c:207
#, c-format
msgid "Bad request ID %d."
msgstr "Petición incorrecta de ID %d."
-#: scheduler/ipp.c:192
#, c-format
msgid "Bad request version number %d.%d."
msgstr "Petición incorrecta de número de versión %d.%d."
-#: cups/http-support.c:1459
msgid "Bad resource in URI"
msgstr "Recurso incorrecto en URI"
-#: cups/http-support.c:1471
msgid "Bad scheme in URI"
msgstr "Esquema incorrecto en URI"
-#: cgi-bin/admin.c:1464
msgid "Bad subscription ID"
msgstr "ID de subscripción incorrecto"
-#: cups/http-support.c:1468
msgid "Bad username in URI"
msgstr "Nombre de usuario incorrecto en URI"
-#: cups/ppd.c:318
msgid "Bad value string"
msgstr "Cadena de valores incorrecta"
-#: cups/http-support.c:1474
msgid "Bad/empty URI"
msgstr "URI incorrecta/vacía"
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
msgid "Banners"
msgstr "Rótulos"
-#: ppdc/sample.c:282
msgid "Bond Paper"
msgstr "Papel de cartas"
-#: backend/usb-darwin.c:1874
#, c-format
msgid "Boolean expected for waiteof option \"%s\"."
msgstr "Se esperaba un valor lógico para la opción waiteof \"%s\"."
-#: filter/pstops.c:2029
msgid "Buffer overflow detected, aborting."
msgstr "Se ha detectado un desbordamiento de buffer, cancelando."
-#: ppdc/sample.c:277
msgid "CMYK"
msgstr "CMYK"
-#: ppdc/sample.c:358
msgid "CPCL Label Printer"
msgstr "Impresora de etiquetas CPCL"
-#: cgi-bin/classes.c:165 cgi-bin/printers.c:168
msgid "Cancel Jobs"
msgstr "Cancelar trabajos"
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
msgid "Cancel RSS Subscription"
msgstr "Cancelar subscripción RSS"
-#: backend/ipp.c:2198
msgid "Canceling print job."
msgstr "Cancelando trabajo de impresión."
-#: scheduler/ipp.c:2483
msgid "Cannot share a remote Kerberized printer."
msgstr "No se puede compartir una impresora remota Kerberizada."
-#: ppdc/sample.c:271
msgid "Cassette"
msgstr "Casete"
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
msgid "Change Settings"
msgstr "Cambiar configuración"
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
#, c-format
msgid "Character set \"%s\" not supported."
msgstr "No se admite el juego de caracteres \"%s\"."
-#: cgi-bin/classes.c:187 cgi-bin/classes.c:314
msgid "Classes"
msgstr "Clases"
-#: cgi-bin/printers.c:174
msgid "Clean Print Heads"
msgstr "Limpiar cabezales de impresión"
-#: scheduler/ipp.c:3893
msgid "Close-Job doesn't support the job-uri attribute."
msgstr "Close-Job no admite el atributo job-uri."
-#: ppdc/sample.c:276
msgid "Color"
msgstr "Color"
-#: ppdc/sample.c:274
msgid "Color Mode"
msgstr "Modo de color"
-#: berkeley/lpc.c:196
msgid ""
"Commands may be abbreviated. Commands are:\n"
"\n"
"\n"
"exit help quit status ?"
-#: cups/snmp.c:958
msgid "Community name uses indefinite length"
msgstr "Nombre de comunidad usa una longitud indefinida"
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
msgid "Connected to printer."
msgstr "Conectado a la impresora."
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
msgid "Connecting to printer."
msgstr "Conectando a la impresora."
-#: cups/http-support.c:1335
msgid "Continue"
msgstr "Continuar"
-#: ppdc/sample.c:360
msgid "Continuous"
msgstr "Continuo"
-#: backend/lpd.c:1028 backend/lpd.c:1160
msgid "Control file sent successfully."
msgstr "Archivo de control enviado correctamente."
-#: backend/ipp.c:1349 backend/lpd.c:472
msgid "Copying print data."
msgstr "Copiando datos de impresión."
-#: cups/http-support.c:1344
msgid "Created"
msgstr "Creado"
-#: cups/ppd.c:1069 cups/ppd.c:1109 cups/ppd.c:1354 cups/ppd.c:1457
msgid "Custom"
msgstr "A medida"
-#: ppdc/sample.c:354
msgid "CustominCutInterval"
msgstr "CustominCutInterval"
-#: ppdc/sample.c:352
msgid "CustominTearInterval"
msgstr "CustominTearInterval"
-#: ppdc/sample.c:338
msgid "Cut"
msgstr "Cortar"
-#: ppdc/sample.c:446
msgid "Cutter"
msgstr "Cortadora"
-#: ppdc/sample.c:239
msgid "Dark"
msgstr "Oscuro"
-#: ppdc/sample.c:235
msgid "Darkness"
msgstr "Oscuridad"
-#: backend/lpd.c:1113
msgid "Data file sent successfully."
msgstr "Archivo de datos enviado correctamente."
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
msgid "Delete Class"
msgstr "Borrar clase"
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
msgid "Delete Printer"
msgstr "Borrar impresora"
-#: ppdc/sample.c:273
msgid "DeskJet Series"
msgstr "DeskJet Series"
-#: scheduler/ipp.c:1276
#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr "El destino %s no acepta trabajos."
-#: systemv/lpinfo.c:300
#, c-format
msgid ""
"Device: uri = %s\n"
" id dispositivo= %s\n"
" ubicación = %s"
-#: ppdc/sample.c:431
msgid "Direct Thermal Media"
msgstr "Soporte térmico directo"
-#: cups/file.c:258
#, c-format
msgid "Directory \"%s\" contains a relative path."
msgstr "El directorio \"%s\" contiene una ruta relativa."
-#: cups/file.c:230
#, c-format
msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr "El directorio \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)."
-#: cups/file.c:247
#, c-format
msgid "Directory \"%s\" is a file."
msgstr "El directorio \"%s\" es un archivo."
-#: cups/file.c:218
#, c-format
msgid "Directory \"%s\" not available: %s"
msgstr "Directorio \"%s\" no disponible: %s"
-#: cups/file.c:203
#, c-format
msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr "Permisos del directorio \"%s\" OK (0%o/uid=%d/gid=%d)."
-#: ppdc/sample.c:340
msgid "Disabled"
msgstr "Deshabilitado"
-#: scheduler/ipp.c:5979
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr "El documento #%d no existe en el trabajo #%d."
-#: ppdc/sample.c:267
msgid "Duplexer"
msgstr "Unidad de impresión dúplex"
-#: ppdc/sample.c:229
msgid "Dymo"
msgstr "Dymo"
-#: ppdc/sample.c:426
msgid "EPL1 Label Printer"
msgstr "Impresora de etiquetas EPL1"
-#: ppdc/sample.c:429
msgid "EPL2 Label Printer"
msgstr "Impresora de etiquetas EPL2"
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
msgid "Edit Configuration File"
msgstr "Editar archivo de configuración"
-#: cups/adminutil.c:326
msgid "Empty PPD file."
msgstr "Archivo PPD vacío."
-#: cups/http.c:4624
msgid "Encryption is not supported."
msgstr "El cifrado no está implementado."
#. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
msgid "Ending Banner"
msgstr "Rótulo final"
-#: ppdc/sample.c:2
msgid "English"
msgstr "Spanish"
-#: scheduler/client.c:2209
msgid ""
"Enter your username and password or the root username and password to access "
"this page. If you are using Kerberos authentication, make sure you have a "
"contraseña de root para poder acceder a esta página. Si está usando "
"autentificación Kerberos, asegúrese de que tiene un ticket Kerberos válido."
-#: ppdc/sample.c:73
msgid "Envelope #10 "
msgstr "Sobre #10 "
-#: ppdc/sample.c:74
msgid "Envelope #11"
msgstr "Sobre #11"
-#: ppdc/sample.c:75
msgid "Envelope #12"
msgstr "Sobre #12"
-#: ppdc/sample.c:76
msgid "Envelope #14"
msgstr "Sobre #14"
-#: ppdc/sample.c:77
msgid "Envelope #9"
msgstr "Sobre #9"
-#: ppdc/sample.c:89
msgid "Envelope B4"
msgstr "Sobre B4"
-#: ppdc/sample.c:90
msgid "Envelope B5"
msgstr "Sobre B5"
-#: ppdc/sample.c:91
msgid "Envelope B6"
msgstr "Sobre B6"
-#: ppdc/sample.c:78
msgid "Envelope C0"
msgstr "Sobre C0"
-#: ppdc/sample.c:79
msgid "Envelope C1"
msgstr "Sobre C1"
-#: ppdc/sample.c:80
msgid "Envelope C2"
msgstr "Sobre C2"
-#: ppdc/sample.c:81
msgid "Envelope C3"
msgstr "Sobre C3"
-#: ppdc/sample.c:67
msgid "Envelope C4"
msgstr "Sobre C4"
-#: ppdc/sample.c:68
msgid "Envelope C5"
msgstr "Sobre C5"
-#: ppdc/sample.c:69
msgid "Envelope C6"
msgstr "Sobre C6"
-#: ppdc/sample.c:82
msgid "Envelope C65"
msgstr "Sobre C65"
-#: ppdc/sample.c:83
msgid "Envelope C7"
msgstr "Sobre C7"
-#: ppdc/sample.c:84
msgid "Envelope Choukei 3"
msgstr "Sobre Choukei 3"
-#: ppdc/sample.c:85
msgid "Envelope Choukei 3 Long Edge"
msgstr "Sobre Choukei 3 lado largo"
-#: ppdc/sample.c:86
msgid "Envelope Choukei 4"
msgstr "Sobre Choukei 4"
-#: ppdc/sample.c:87
msgid "Envelope Choukei 4 Long Edge"
msgstr "Sobre Choukei 4 lado largo"
-#: ppdc/sample.c:70
msgid "Envelope DL"
msgstr "Sobre DL"
-#: ppdc/sample.c:261
msgid "Envelope Feed"
msgstr "Alimentador de sobre"
-#: ppdc/sample.c:88
msgid "Envelope Invite"
msgstr "Sobre Invitación"
-#: ppdc/sample.c:92
msgid "Envelope Italian"
msgstr "Sobre Italiano"
-#: ppdc/sample.c:93
msgid "Envelope Kaku2"
msgstr "Sobre Kaku2"
-#: ppdc/sample.c:94
msgid "Envelope Kaku2 Long Edge"
msgstr "Sobre Kaku2 lado largo"
-#: ppdc/sample.c:95
msgid "Envelope Kaku3"
msgstr "Sobre Kaku3"
-#: ppdc/sample.c:96
msgid "Envelope Kaku3 Long Edge"
msgstr "Sobre Kaku3 lado largo"
-#: ppdc/sample.c:97
msgid "Envelope Monarch"
msgstr "Sobre Monarch"
-#: ppdc/sample.c:99
msgid "Envelope PRC1 "
msgstr "Sobre PRC1 "
-#: ppdc/sample.c:100
msgid "Envelope PRC1 Long Edge"
msgstr "Sobre PRC1 lado largo"
-#: ppdc/sample.c:117
msgid "Envelope PRC10"
msgstr "Sobre PRC10"
-#: ppdc/sample.c:118
msgid "Envelope PRC10 Long Edge"
msgstr "Sobre PRC10 lado largo"
-#: ppdc/sample.c:101
msgid "Envelope PRC2"
msgstr "Sobre PRC2"
-#: ppdc/sample.c:102
msgid "Envelope PRC2 Long Edge"
msgstr "Sobre PRC2 lado largo"
-#: ppdc/sample.c:103
msgid "Envelope PRC3"
msgstr "Sobre PRC3"
-#: ppdc/sample.c:104
msgid "Envelope PRC3 Long Edge"
msgstr "Sobre PRC3 lado largo"
-#: ppdc/sample.c:105
msgid "Envelope PRC4"
msgstr "Sobre PRC4"
-#: ppdc/sample.c:106
msgid "Envelope PRC4 Long Edge"
msgstr "Sobre PRC4 lado largo"
-#: ppdc/sample.c:108
msgid "Envelope PRC5 Long Edge"
msgstr "Sobre PRC5 lado largo"
-#: ppdc/sample.c:107
msgid "Envelope PRC5PRC5"
msgstr "Sobre PRC5PRC5"
-#: ppdc/sample.c:109
msgid "Envelope PRC6"
msgstr "Sobre PRC6"
-#: ppdc/sample.c:110
msgid "Envelope PRC6 Long Edge"
msgstr "Sobre PRC6 lado largo"
-#: ppdc/sample.c:111
msgid "Envelope PRC7"
msgstr "Sobre PRC7"
-#: ppdc/sample.c:112
msgid "Envelope PRC7 Long Edge"
msgstr "Sobre PRC7 lado largo"
-#: ppdc/sample.c:113
msgid "Envelope PRC8"
msgstr "Sobre PRC8"
-#: ppdc/sample.c:114
msgid "Envelope PRC8 Long Edge"
msgstr "Sobre PRC8 lado largo"
-#: ppdc/sample.c:115
msgid "Envelope PRC9"
msgstr "Sobre PRC9"
-#: ppdc/sample.c:116
msgid "Envelope PRC9 Long Edge"
msgstr "Sobre PRC9 lado largo"
-#: ppdc/sample.c:98
msgid "Envelope Personal"
msgstr "Sobre Personal"
-#: ppdc/sample.c:119
msgid "Envelope You4"
msgstr "Sobre You4"
-#: ppdc/sample.c:120
msgid "Envelope You4 Long Edge"
msgstr "Sobre You4 lado largo"
-#: test/ippfind.c:2809
msgid "Environment Variables:"
msgstr "Variables de entorno:"
-#: ppdc/sample.c:240
msgid "Epson"
msgstr "Epson"
-#: cgi-bin/admin.c:3584
msgid "Error Policy"
msgstr "Directiva de error"
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
msgstr "Error enviando trama de datos (raster)."
-#: systemv/lpinfo.c:103 systemv/lpmove.c:88
msgid "Error: need hostname after \"-h\" option."
msgstr "Error: se necesita un nombre de equipo tras la opción \"-h\"."
-#: ppdc/sample.c:350
msgid "Every 10 Labels"
msgstr "Cada 10 etiquetas"
-#: ppdc/sample.c:342
msgid "Every 2 Labels"
msgstr "Cada 2 etiquetas"
-#: ppdc/sample.c:343
msgid "Every 3 Labels"
msgstr "Cada 3 etiquetas"
-#: ppdc/sample.c:344
msgid "Every 4 Labels"
msgstr "Cada 4 etiquetas"
-#: ppdc/sample.c:345
msgid "Every 5 Labels"
msgstr "Cada 5 etiquetas"
-#: ppdc/sample.c:346
msgid "Every 6 Labels"
msgstr "Cada 6 etiquetas"
-#: ppdc/sample.c:347
msgid "Every 7 Labels"
msgstr "Cada 7 etiquetas"
-#: ppdc/sample.c:348
msgid "Every 8 Labels"
msgstr "Cada 8 etiquetas"
-#: ppdc/sample.c:349
msgid "Every 9 Labels"
msgstr "Cada 9 etiquetas"
-#: ppdc/sample.c:341
msgid "Every Label"
msgstr "Cada etiqueta"
-#: ppdc/sample.c:121
msgid "Executive"
msgstr "Ejecutivo"
-#: cups/http-support.c:1390
msgid "Expectation Failed"
msgstr "Lo que se esperaba, falló."
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
msgid "Export Printers to Samba"
msgstr "Exportar impresoras a Samba"
-#: test/ippfind.c:2755
msgid "Expressions:"
msgstr "Expresiones:"
-#: systemv/cupstestdsc.c:172 systemv/cupstestdsc.c:189
-#: systemv/cupstestdsc.c:214 systemv/cupstestdsc.c:231
-#: systemv/cupstestdsc.c:255 systemv/cupstestdsc.c:273
-#: systemv/cupstestdsc.c:302 systemv/cupstestdsc.c:339
-#: systemv/cupstestdsc.c:349 systemv/cupstestdsc.c:359
-#: systemv/cupstestdsc.c:369 systemv/cupstestdsc.c:379
-#: systemv/cupstestdsc.c:387
msgid "FAIL"
msgstr "FALLO"
-#: ppdc/sample.c:122
msgid "FanFold German"
msgstr "FanFold alemán"
-#: ppdc/sample.c:123
msgid "FanFold Legal German"
msgstr "FanFold Legal alemán"
-#: ppdc/sample.c:124
msgid "Fanfold US"
msgstr "FanFold de EE.UU"
-#: cups/file.c:262
#, c-format
msgid "File \"%s\" contains a relative path."
msgstr "El archivo \"%s\" contiene una ruta relativa."
-#: cups/file.c:237
#, c-format
msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr "El archivo \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)."
-#: cups/file.c:251
#, c-format
msgid "File \"%s\" is a directory."
msgstr "El archivo \"%s\" es un directorio."
-#: cups/file.c:223
#, c-format
msgid "File \"%s\" not available: %s"
msgstr "Archivo \"%s\" no disponible: %s"
-#: cups/file.c:209
#, c-format
msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr "Permisos del archivo \"%s\" OK (0%o/uid=%d/gid=%d)."
-#: ppdc/sample.c:169
msgid "File Folder "
msgstr "Carpeta de archivo "
-#: scheduler/ipp.c:2378
#, c-format
msgid ""
"File device URIs have been disabled. To enable, see the FileDevice directive "
"Los URIs del dispositivo de archivo han sido deshabilitados. Para "
"habilitarlos, vea la directiva FileDevice en \"%s/cups-files.conf\"."
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
-#: filter/rastertolabel.c:1259
#, c-format
msgid "Finished page %d."
msgstr "Acabada la página %d."
-#: ppdc/sample.c:125
msgid "Folio"
msgstr "Folio"
-#: cups/http-support.c:1369
msgid "Forbidden"
msgstr "Prohibido"
-#: cups/ppd.c:700 cups/ppd.c:1258
msgid "General"
msgstr "General"
-#: ppdc/sample.c:251
msgid "Generic"
msgstr "Genérico"
-#: cups/snmp.c:968
msgid "Get-Response-PDU uses indefinite length"
msgstr "Get-Response-PDU usa una longitud indefinida"
-#: ppdc/sample.c:285
msgid "Glossy Paper"
msgstr "Papel satinado"
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
msgid "Got a printer-uri attribute but no job-id."
msgstr "Se ha obtenido el atributo printer-uri pero no el job-id."
-#: ppdc/sample.c:275
msgid "Grayscale"
msgstr "Escale de grises"
-#: ppdc/sample.c:272
msgid "HP"
msgstr "HP"
-#: ppdc/sample.c:170
msgid "Hanging Folder"
msgstr "Carpeta colgante"
-#: cgi-bin/help.c:143
msgid "Help file not in index."
msgstr "El archivo de ayuda no está en el índice."
-#: cups/ipp.c:3183 cups/ipp.c:3210 cups/ipp.c:3233
msgid "IPP 1setOf attribute with incompatible value tags."
msgstr "Atributo IPP 1setOf con etiquetas de valor incompatibles."
-#: cups/ipp.c:3146
msgid "IPP attribute has no name."
msgstr "Atributo IPP sin nombre."
-#: cups/ipp.c:7000
msgid "IPP attribute is not a member of the message."
msgstr "El atributo IPP no es un miembro del mensaje."
-#: cups/ipp.c:3594
msgid "IPP begCollection value not 0 bytes."
msgstr "IPP el valor begCollection no es de 0 bytes."
-#: cups/ipp.c:3376
msgid "IPP boolean value not 1 byte."
msgstr "IPP el valor lógico no es de 1 byte."
-#: cups/ipp.c:3437
msgid "IPP date value not 11 bytes."
msgstr "IPP el valor de fecha no es de 11 bytes."
-#: cups/ipp.c:3615
msgid "IPP endCollection value not 0 bytes."
msgstr "IPP el valor endCollection no es de 0 bytes."
-#: cups/ipp.c:3351
msgid "IPP enum value not 4 bytes."
msgstr "IPP el valor enum no es de 4 bytes."
-#: cups/ipp.c:3075
msgid "IPP extension tag larger than 0x7FFFFFFF."
msgstr "IPP etiqueta de extensión mayor de 0x7FFFFFFF."
-#: cups/ipp.c:3348
msgid "IPP integer value not 4 bytes."
msgstr "IPP el valor entero no es de 4 bytes."
-#: cups/ipp.c:3547
msgid "IPP language length overflows value."
msgstr "IPP la longitud del idioma sobrepasa el valor."
-#: cups/ipp.c:3556
msgid "IPP language length too large."
msgstr "Longitud de idioma IPP demasiado larga."
-#: cups/ipp.c:3260
msgid "IPP member name is not empty."
msgstr "IPP el nombre del miembro no está vacío."
-#: cups/ipp.c:3641
msgid "IPP memberName value is empty."
msgstr "IPP el valor memberName está vacío."
-#: cups/ipp.c:3633
msgid "IPP memberName with no attribute."
msgstr "IPP memberName sin atributo."
-#: cups/ipp.c:3129
msgid "IPP name larger than 32767 bytes."
msgstr "IPP nombre mayor de 32767 bytes."
-#: cups/ipp.c:3514
msgid "IPP nameWithLanguage value less than minimum 4 bytes."
msgstr "IPP el valor nameWithLanguage menor del mínimo de 4 bytes."
-#: cups/ipp.c:3671
msgid "IPP octetString length too large."
msgstr "Longitud de IPP octetString demasiado larga."
-#: cups/ipp.c:3482
msgid "IPP rangeOfInteger value not 8 bytes."
msgstr "IPP el valor rangeOfInteger no es de 8 bytes."
-#: cups/ipp.c:3455
msgid "IPP resolution value not 9 bytes."
msgstr "IPP el valor de la resolución no es de 9 bytes."
-#: cups/ipp.c:3574
msgid "IPP string length overflows value."
msgstr "IPP la longitud de la cadena sobrepasa el valor."
-#: cups/ipp.c:3510
msgid "IPP textWithLanguage value less than minimum 4 bytes."
msgstr "IPP el valor textWithLanguage menor del mínimo de 4 bytes."
-#: cups/ipp.c:3334
msgid "IPP value larger than 32767 bytes."
msgstr "IPP valor mayor de 32767 bytes."
-#: ppdc/sample.c:1
msgid "ISOLatin1"
msgstr "UTF-8"
-#: cups/ppd.c:311
msgid "Illegal control character"
msgstr "Carácter de control ilegal"
-#: cups/ppd.c:312
msgid "Illegal main keyword string"
msgstr "Cadena de clave principal ilegal"
-#: cups/ppd.c:313
msgid "Illegal option keyword string"
msgstr "Cadena de clave de opción ilegal"
-#: cups/ppd.c:314
msgid "Illegal translation string"
msgstr "Cadena de traducción ilegal"
-#: cups/ppd.c:315
msgid "Illegal whitespace character"
msgstr "Carácter de espacio en blanco ilegal"
-#: ppdc/sample.c:266
msgid "Installable Options"
msgstr "Opciones instalables"
-#: ppdc/sample.c:269
msgid "Installed"
msgstr "Instalada"
-#: ppdc/sample.c:288
msgid "IntelliBar Label Printer"
msgstr "Impresora de etiquetas IntelliBar"
-#: ppdc/sample.c:287
msgid "Intellitech"
msgstr "Intellitech"
-#: cups/http-support.c:1396
msgid "Internal Server Error"
msgstr "Error interno del servidor"
-#: cups/ppd.c:302
msgid "Internal error"
msgstr "Error interno"
-#: ppdc/sample.c:167
msgid "Internet Postage 2-Part"
msgstr "Correo por Internet Parte-2"
-#: ppdc/sample.c:168
msgid "Internet Postage 3-Part"
msgstr "Correo por Internet Parte-3"
-#: backend/ipp.c:319
msgid "Internet Printing Protocol"
msgstr "Protocolo de Impresión de Internet IPP"
-#: cups/pwg-media.c:293 cups/pwg-media.c:312
msgid "Invalid media name arguments."
msgstr "Argumentos del nombre del papel no válidos."
-#: cups/dest-options.c:1032
msgid "Invalid media size."
msgstr "Tamaño de papel no válido."
-#: filter/commandtops.c:114
#, c-format
msgid "Invalid printer command \"%s\"."
msgstr "Comando de impresora \"%s\" no válido."
-#: cups/ppd.c:1376
msgid "JCL"
msgstr "JCL"
-#: ppdc/sample.c:53
msgid "JIS B0"
msgstr "JIS B0"
-#: ppdc/sample.c:55
msgid "JIS B1"
msgstr "JIS B1"
-#: ppdc/sample.c:54
msgid "JIS B10"
msgstr "JIS B10"
-#: ppdc/sample.c:56
msgid "JIS B2"
msgstr "JIS B2"
-#: ppdc/sample.c:57
msgid "JIS B3"
msgstr "JIS B3"
-#: ppdc/sample.c:58
msgid "JIS B4"
msgstr "JIS B4"
-#: ppdc/sample.c:59
msgid "JIS B4 Long Edge"
msgstr "JIS B4 lado largo"
-#: ppdc/sample.c:60
msgid "JIS B5"
msgstr "JIS B5"
-#: ppdc/sample.c:61
msgid "JIS B5 Long Edge"
msgstr "JIS B5 lado largo"
-#: ppdc/sample.c:62
msgid "JIS B6"
msgstr "JIS B6"
-#: ppdc/sample.c:63
msgid "JIS B6 Long Edge"
msgstr "JIS B6 lado largo"
-#: ppdc/sample.c:64
msgid "JIS B7"
msgstr "JIS B7"
-#: ppdc/sample.c:65
msgid "JIS B8"
msgstr "JIS B8"
-#: ppdc/sample.c:66
msgid "JIS B9"
msgstr "JIS B9"
-#: scheduler/ipp.c:8954
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr "El trabajo #%d no puede ser reiniciado - no hay archivos."
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
#, c-format
msgid "Job #%d does not exist."
msgstr "El trabajo #%d no existe."
-#: scheduler/ipp.c:3501
#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr "El trabajo #%d ya está anulado - no se puede cancelar."
-#: scheduler/ipp.c:3495
#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr "El trabajo #%d ya está cancelado - no se puede cancelar."
-#: scheduler/ipp.c:3507
#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar."
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr "El trabajo #%d ha terminado y no puede ser modificado."
-#: scheduler/ipp.c:8936
#, c-format
msgid "Job #%d is not complete."
msgstr "El trabajo #%d no ha sido completado."
-#: scheduler/ipp.c:3014
#, c-format
msgid "Job #%d is not held for authentication."
msgstr "El trabajo #%d no está retenido para autentificación."
-#: scheduler/ipp.c:8710
#, c-format
msgid "Job #%d is not held."
msgstr "El trabajo #%d no está retenido."
-#: cgi-bin/ipp-var.c:1035
msgid "Job Completed"
msgstr "Trabajo completado"
-#: cgi-bin/ipp-var.c:1033
msgid "Job Created"
msgstr "Trabajo creado"
-#: cgi-bin/ipp-var.c:1039
msgid "Job Options Changed"
msgstr "Opciones de trabajo cambiadas"
-#: cgi-bin/ipp-var.c:1037
msgid "Job Stopped"
msgstr "Trabajo detenido"
-#: scheduler/ipp.c:9975
msgid "Job is completed and cannot be changed."
msgstr "El trabajo está terminado y no puede ser cambiado."
-#: cgi-bin/jobs.c:192
msgid "Job operation failed"
msgstr "La operación del trabajo ha fallado"
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
msgid "Job state cannot be changed."
msgstr "No se puede cambiar el estado del trabajo."
-#: scheduler/ipp.c:8802
msgid "Job subscriptions cannot be renewed."
msgstr "Las suscripciones de trabajos no han podido ser renovadas."
-#: cgi-bin/jobs.c:97 cgi-bin/jobs.c:108 cgi-bin/jobs.c:189
msgid "Jobs"
msgstr "Trabajos"
-#: backend/lpd.c:177
msgid "LPD/LPR Host or Printer"
msgstr "Equipo o impresora LPD/LPR"
-#: ppdc/sample.c:230
msgid "Label Printer"
msgstr "Impresora de etiquetas"
-#: ppdc/sample.c:441
msgid "Label Top"
msgstr "Parte superior de la etiqueta"
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
#, c-format
msgid "Language \"%s\" not supported."
msgstr "No se admite el uso del idioma \"%s\"."
-#: ppdc/sample.c:164
msgid "Large Address"
msgstr "Dirección grande"
-#: ppdc/sample.c:286
msgid "LaserJet Series PCL 4/5"
msgstr "LaserJet Series PCL 4/5"
-#: ppdc/sample.c:43
msgid "Letter Oversize"
msgstr "Carta Extragrande"
-#: ppdc/sample.c:44
msgid "Letter Oversize Long Edge"
msgstr "Carta Extragrande lado largo"
-#: ppdc/sample.c:236
msgid "Light"
msgstr "Ligero"
-#: cups/ppd.c:310
msgid "Line longer than the maximum allowed (255 characters)"
msgstr "Línea más larga que el máximo permitido (255 caracteres)"
-#: cgi-bin/admin.c:2373
msgid "List Available Printers"
msgstr "Listar impresoras disponibles"
-#: cups/localize.c:291
msgid "Load paper."
msgstr "Cargar papel."
-#: ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr "Lado largo (retrato)"
-#: cups/http-support.c:1725
msgid "Looking for printer."
msgstr "Buscando impresora."
-#: ppdc/sample.c:260
msgid "Manual Feed"
msgstr "Alimentación manual"
-#: cups/ppd.c:747 cups/ppd.c:1313
msgid "Media Size"
msgstr "Tamaño de papel"
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
msgid "Media Source"
msgstr "Fuente del papel"
-#: ppdc/sample.c:359
msgid "Media Tracking"
msgstr "Seguimiento del medio"
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
msgid "Media Type"
msgstr "Tipo de papel"
-#: ppdc/sample.c:237
msgid "Medium"
msgstr "Media"
-#: cups/ppd.c:299
msgid "Memory allocation error"
msgstr "Error de reserva de memoria"
-#: cups/ppd.c:319
msgid "Missing CloseGroup"
msgstr "Falta CloseGroup"
-#: cups/ppd.c:300
msgid "Missing PPD-Adobe-4.x header"
msgstr "Falta cabecera PPD-Adobe-4.x"
-#: cups/ppd.c:309
msgid "Missing asterisk in column 1"
msgstr "Falta un asterisco en la columna 1"
-#: scheduler/ipp.c:5971
msgid "Missing document-number attribute."
msgstr "Falta el atributo document-number."
-#: cups/adminutil.c:262
#, c-format
msgid "Missing double quote on line %d."
msgstr "Faltan dobles comillas en línea %d."
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
msgid "Missing form variable"
msgstr "Falta una variable de formulario"
-#: scheduler/ipp.c:9328
msgid "Missing last-document attribute in request."
msgstr "Falta el atributo last-document en la petición."
-#: cups/pwg-media.c:555
msgid "Missing media or media-col."
msgstr "Falta media o media-col."
-#: cups/pwg-media.c:474
msgid "Missing media-size in media-col."
msgstr "Falta media-size en media-col."
-#: scheduler/ipp.c:6574
msgid "Missing notify-subscription-ids attribute."
msgstr "Falta el atributo notify-subscription-ids."
-#: cups/ppd.c:317
msgid "Missing option keyword"
msgstr "Falta cadena de clave de opción"
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
msgid "Missing requesting-user-name attribute."
msgstr "Falta el atributo requesting-user-name."
-#: scheduler/ipp.c:388
msgid "Missing required attributes."
msgstr "Faltan atributos necesarios."
-#: cups/http-support.c:1486
msgid "Missing resource in URI"
msgstr "Falta recurso en URI"
-#: cups/http-support.c:1480
msgid "Missing scheme in URI"
msgstr "Falta esquema en URI"
-#: cups/adminutil.c:243
#, c-format
msgid "Missing value on line %d."
msgstr "Falta un valor en la línea %d."
-#: cups/ppd.c:301
msgid "Missing value string"
msgstr "Falta cadena de valores"
-#: cups/pwg-media.c:462
msgid "Missing x-dimension in media-size."
msgstr "Falta x-dimension en media-size."
-#: cups/pwg-media.c:468
msgid "Missing y-dimension in media-size."
msgstr "Falta y-dimension en media-size."
-#: systemv/lpinfo.c:470
#, c-format
msgid ""
"Model: name = %s\n"
" make-and-model = %s\n"
" device-id = %s"
-#: test/ippfind.c:2786
msgid "Modifiers:"
msgstr "Modificadores:"
-#: cgi-bin/admin.c:548
msgid "Modify Class"
msgstr "Modificar clase"
-#: cgi-bin/admin.c:860
msgid "Modify Printer"
msgstr "Modificar impresora"
-#: cgi-bin/ipp-var.c:410 cgi-bin/ipp-var.c:501
msgid "Move All Jobs"
msgstr "Mover todos los trabajos"
-#: cgi-bin/ipp-var.c:349 cgi-bin/ipp-var.c:408 cgi-bin/ipp-var.c:499
msgid "Move Job"
msgstr "Mover trabajo"
-#: cups/http-support.c:1353
msgid "Moved Permanently"
msgstr "Movido permanentemente"
-#: cups/ppd.c:298
msgid "NULL PPD file pointer"
msgstr "Puntero de archivo PPD NULO"
-#: cups/snmp.c:1005
msgid "Name OID uses indefinite length"
msgstr "Nombre OID usa una longitud indefinida"
-#: scheduler/ipp.c:1054
msgid "Nested classes are not allowed."
msgstr "No se permiten clases anidadas."
-#: ppdc/sample.c:425
msgid "Never"
msgstr "Nunca"
-#: cups/ppd.c:1904
msgid "No"
msgstr "No"
-#: cups/http-support.c:1350
msgid "No Content"
msgstr "No hay contenido"
-#: cups/util.c:1123
msgid "No PPD name"
msgstr "No hay nombre de PPD"
-#: cups/snmp.c:999
msgid "No VarBind SEQUENCE"
msgstr "No hay Varbind SEQUENCE"
-#: cups/adminutil.c:777
msgid "No Windows printer drivers are installed."
msgstr "No está instalado ningún controlador de impresora de Windows."
-#: cups/request.c:570 cups/request.c:933
msgid "No active connection"
msgstr "No hay conexión activa"
-#: cups/request.c:350
msgid "No active connection."
msgstr "No hay conexión activa."
-#: scheduler/ipp.c:3418
#, c-format
msgid "No active jobs on %s."
msgstr "No hay trabajos activos en %s."
-#: scheduler/ipp.c:216
msgid "No attributes in request."
msgstr "No hay atributos en la solicitud."
-#: scheduler/ipp.c:3041
msgid "No authentication information provided."
msgstr "No se ha proporcionado información de autentificación."
-#: cups/snmp.c:956
msgid "No community name"
msgstr "No hay nombre de comunidad"
-#: scheduler/ipp.c:5771
msgid "No default printer."
msgstr "No hay impresora predeterminada."
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
msgid "No destinations added."
msgstr "No se han añadido destinos."
-#: backend/usb.c:200
msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
msgstr ""
"No se ha encontrado el URI del dispositivo en argv[0] o en la variable de "
"entorno DEVICE_URI."
-#: cups/snmp.c:986
msgid "No error-index"
msgstr "No hay error-index"
-#: cups/snmp.c:978
msgid "No error-status"
msgstr "No hay error-status"
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
msgid "No file in print request."
msgstr "No hay ningún archivo en la solicitud de impresión."
-#: cups/util.c:817
msgid "No modification time"
msgstr "No hay tiempo de modificación"
-#: cups/snmp.c:1003
msgid "No name OID"
msgstr "No hay nombre OID"
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
-#: filter/rastertolabel.c:1288
msgid "No pages were found."
msgstr "No se han encontrado páginas."
-#: cups/util.c:811
msgid "No printer name"
msgstr "No hay nombre de impresora"
-#: cups/util.c:1647
msgid "No printer-uri found"
msgstr "No se encontró printer-uri"
-#: cups/util.c:1631
msgid "No printer-uri found for class"
msgstr "No se encontró printer-uri para la clase"
-#: scheduler/ipp.c:6179
msgid "No printer-uri in request."
msgstr "No hay printer-uri en la solicitud."
-#: cups/http.c:2260
msgid "No request URI."
msgstr "No se ha solicitado URI."
-#: cups/http.c:2277
msgid "No request protocol version."
msgstr "No se ha solicitado versión del protocolo."
-#: cups/request.c:358
msgid "No request sent."
msgstr "No se ha enviado solicitud."
-#: cups/snmp.c:970
msgid "No request-id"
msgstr "No hay request-id"
-#: scheduler/ipp.c:5374
msgid "No subscription attributes in request."
msgstr "No hay atributos de subscripción en la solicitud."
-#: scheduler/ipp.c:7476
msgid "No subscriptions found."
msgstr "No se han encontrado subscripciones."
-#: cups/snmp.c:994
msgid "No variable-bindings SEQUENCE"
msgstr "No hay variable-bindings SEQUENCE"
-#: cups/snmp.c:949
msgid "No version number"
msgstr "No hay número de versión"
-#: ppdc/sample.c:362
msgid "Non-continuous (Mark sensing)"
msgstr "No continuo (sensible a señal)"
-#: ppdc/sample.c:361
msgid "Non-continuous (Web sensing)"
msgstr "No continuo (sensible a web)"
-#: ppdc/sample.c:238
msgid "Normal"
msgstr "Normal"
-#: cups/http-support.c:1372
msgid "Not Found"
msgstr "No encontrado"
-#: cups/http-support.c:1384
msgid "Not Implemented"
msgstr "No implementado"
-#: ppdc/sample.c:268
msgid "Not Installed"
msgstr "No instalado"
-#: cups/http-support.c:1359
msgid "Not Modified"
msgstr "No modificado"
-#: cups/http-support.c:1387
msgid "Not Supported"
msgstr "No implementado"
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
msgid "Not allowed to print."
msgstr "No se permite imprimir."
-#: ppdc/sample.c:146
msgid "Note"
msgstr "Nota"
-#: systemv/cupstestdsc.c:433
msgid ""
"Note: this program only validates the DSC comments, not the PostScript "
"itself."
msgstr ""
"Nota: este programa sólo valida los comentarios DSC, no los PostScript."
-#: cups/http-support.c:1341 cups/http-support.c:1477 cups/ppd.c:296
msgid "OK"
msgstr "OK"
-#: ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr "Desactivado (1 cara)"
-#: ppdc/sample.c:356
msgid "Oki"
msgstr "Oki"
-#: cgi-bin/help.c:91 cgi-bin/help.c:132 cgi-bin/help.c:142 cgi-bin/help.c:172
msgid "Online Help"
msgstr "Ayuda en línea"
-#: cups/adminutil.c:944
#, c-format
msgid "Open of %s failed: %s"
msgstr "La apertura de %s ha fallado: %s"
-#: cups/ppd.c:304
msgid "OpenGroup without a CloseGroup first"
msgstr "OpenGroup sin un CloseGroup previo"
-#: cups/ppd.c:306
msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
msgstr "OpenUI/JCLOpenUI sin un CloseUI/JCLCloseUI previo"
-#: cgi-bin/admin.c:3611
msgid "Operation Policy"
msgstr "Directiva de operación"
-#: filter/pstops.c:2177
#, c-format
msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
msgstr "La opción \"%s\" no puede incluirse via %%%%IncludeFeature."
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
msgid "Options Installed"
msgstr "Opciones instaladas"
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
msgid "Options:"
msgstr "Opciones:"
-#: cups/ppd-cache.c:125
msgid "Out of date PPD cache file."
msgstr "Archivo de caché PPD obsoleto."
-#: cups/ppd-cache.c:1410
msgid "Out of memory."
msgstr "Sin memoria."
-#: cups/ppd.c:753 cups/ppd.c:1319
msgid "Output Mode"
msgstr "Modo de salida"
-#: cups/localize.c:316
msgid "Output bin is almost full."
msgstr "El recipiente de salida está casi lleno."
-#: cups/localize.c:318
msgid "Output bin is full."
msgstr "El recipiente de salida está lleno."
-#: cups/localize.c:314
msgid "Output bin is missing."
msgstr "No se encuentra el recipiente de salida."
-#: systemv/cupstestdsc.c:399
msgid "PASS"
msgstr "PASA"
-#: ppdc/sample.c:252
msgid "PCL Laser Printer"
msgstr "Impresora Laser PCL"
-#: ppdc/sample.c:149
msgid "PRC16K"
msgstr "PRC16K"
-#: ppdc/sample.c:150
msgid "PRC16K Long Edge"
msgstr "PRC16K lado largo"
-#: ppdc/sample.c:151
msgid "PRC32K"
msgstr "PRC32K"
-#: ppdc/sample.c:154
msgid "PRC32K Long Edge"
msgstr "PRC32K lado largo"
-#: ppdc/sample.c:152
msgid "PRC32K Oversize"
msgstr "PRC32K Extragrande"
-#: ppdc/sample.c:153
msgid "PRC32K Oversize Long Edge"
msgstr "PRC32K Extragrande lado largo"
-#: cups/snmp.c:966
msgid "Packet does not contain a Get-Response-PDU"
msgstr "El paquete no contiene un Get-Response-PDU"
-#: cups/snmp.c:945
msgid "Packet does not start with SEQUENCE"
msgstr "El paquete no empieza por SEQUENCE"
-#: cups/localize.c:293
msgid "Paper jam."
msgstr "Atasco de papel."
-#: cups/localize.c:310
msgid "Paper tray is almost empty."
msgstr "La bandeja de papel está casi vacía."
-#: cups/localize.c:312
msgid "Paper tray is empty."
msgstr "La bandeja de papel está vacía."
-#: cups/localize.c:308
msgid "Paper tray is missing."
msgstr "No se encuentra la bandeja de papel."
-#: ppdc/sample.c:355
msgid "ParamCustominCutInterval"
msgstr "ParamCustominCutInterval"
-#: ppdc/sample.c:353
msgid "ParamCustominTearInterval"
msgstr "ParamCustominTearInterval"
-#: cups/auth.c:195 cups/auth.c:362
#, c-format
msgid "Password for %s on %s? "
msgstr "¿Contraseña de %s en %s? "
-#: systemv/cupsaddsmb.c:252
#, c-format
msgid "Password for %s required to access %s via SAMBA: "
msgstr "Se requiere la contraseña de %s para acceder a %s vía SAMBA: "
-#: cgi-bin/classes.c:159
msgid "Pause Class"
msgstr "Pausar clase"
-#: cgi-bin/printers.c:162
msgid "Pause Printer"
msgstr "Pausar impresora"
-#: ppdc/sample.c:443
msgid "Peel-Off"
msgstr "Despegar"
-#: ppdc/sample.c:160
msgid "Photo"
msgstr "Foto"
-#: ppdc/sample.c:161
msgid "Photo Labels"
msgstr "Foto pequeña"
-#: ppdc/sample.c:281
msgid "Plain Paper"
msgstr "Papel normal"
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
msgid "Policies"
msgstr "Reglas"
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
msgid "Port Monitor"
msgstr "Monitor de puerto"
-#: ppdc/sample.c:270
msgid "PostScript Printer"
msgstr "Impresora PostScript"
-#: ppdc/sample.c:147
msgid "Postcard"
msgstr "Postal"
-#: ppdc/sample.c:71
msgid "Postcard Double "
msgstr "Postal doble "
-#: ppdc/sample.c:72
msgid "Postcard Double Long Edge"
msgstr "Postal doble lado largo"
-#: ppdc/sample.c:148
msgid "Postcard Long Edge"
msgstr "Postal lado largo"
-#: backend/ipp.c:961 backend/ipp.c:969
msgid "Preparing to print."
msgstr "Preparando la impresión."
-#: ppdc/sample.c:290
msgid "Print Density"
msgstr "Densidad de impresión"
-#: cups/notify.c:82
msgid "Print Job:"
msgstr "Imprimir trabajo:"
-#: ppdc/sample.c:335
msgid "Print Mode"
msgstr "Modo de impresión"
-#: ppdc/sample.c:378
msgid "Print Rate"
msgstr "Tasa de impresión"
-#: cgi-bin/printers.c:171
msgid "Print Self-Test Page"
msgstr "Imprimir página de auto-prueba"
-#: ppdc/sample.c:322
msgid "Print Speed"
msgstr "Velocidad de impresión"
-#: cgi-bin/ipp-var.c:777
msgid "Print Test Page"
msgstr "Imprimir página de prueba"
-#: ppdc/sample.c:351
msgid "Print and Cut"
msgstr "Imprimir y cortar"
-#: ppdc/sample.c:339
msgid "Print and Tear"
msgstr "Imprimir y romper"
-#: backend/socket.c:429 backend/usb-unix.c:184
msgid "Print file sent."
msgstr "Archivo de impresión enviado."
-#: backend/ipp.c:2172
msgid "Print job canceled at printer."
msgstr "Trabajo de impresión cancelado en la impresora."
-#: backend/ipp.c:2164
msgid "Print job too large."
msgstr "Trabajo de impresión demasiado grande."
-#: backend/ipp.c:1642
msgid "Print job was not accepted."
msgstr "No se acepta el trabajo de impresión."
-#: cgi-bin/ipp-var.c:1027
msgid "Printer Added"
msgstr "Impresora añadida"
-#: ppdc/sample.c:255
msgid "Printer Default"
msgstr "Predeterminado de la impresora"
-#: cgi-bin/ipp-var.c:1031
msgid "Printer Deleted"
msgstr "Impresora borrada"
-#: cgi-bin/ipp-var.c:1029
msgid "Printer Modified"
msgstr "Impresora modificada"
-#: cgi-bin/ipp-var.c:1025
msgid "Printer Paused"
msgstr "Impresora en pausa"
-#: ppdc/sample.c:289
msgid "Printer Settings"
msgstr "Configuración de la impresora"
-#: backend/ipp.c:2167
msgid "Printer cannot print supplied content."
msgstr "La impresora no puede imprimir el contenido suministrado."
-#: backend/ipp.c:2170
msgid "Printer cannot print with supplied options."
msgstr "La impresora no puede imprimir con las opciones suministradas."
-#: cups/notify.c:126
msgid "Printer:"
msgstr "Impresora:"
-#: cgi-bin/printers.c:196 cgi-bin/printers.c:324
msgid "Printers"
msgstr "Impresoras"
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
-#: filter/rastertolabel.c:1235
#, c-format
msgid "Printing page %d, %u%% complete."
msgstr "Imprimiendo página %d, %u%% completado."
-#: ppdc/sample.c:155
msgid "Quarto"
msgstr "Quarto"
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
msgid "Quota limit reached."
msgstr "Se ha alcanzado el límite de cuota."
-#: berkeley/lpq.c:490
msgid "Rank Owner Job File(s) Total Size"
msgstr "Rango Propiet. Trabajo Archivo(s) Tamaño total"
-#: cgi-bin/classes.c:163 cgi-bin/printers.c:166
msgid "Reject Jobs"
msgstr "Rechazar trabajos"
-#: backend/lpd.c:1024 backend/lpd.c:1156
#, c-format
msgid "Remote host did not accept control file (%d)."
msgstr "El equipo remoto no ha aceptado el archivo de control (%d)."
-#: backend/lpd.c:1109
#, c-format
msgid "Remote host did not accept data file (%d)."
msgstr "El equipo remoto no ha aceptado el archivo de datos (%d)."
-#: ppdc/sample.c:423
msgid "Reprint After Error"
msgstr "Volver a imprimir tras un error"
-#: cups/http-support.c:1375
msgid "Request Entity Too Large"
msgstr "La entidad requerida es demasiado larga"
-#: cups/ppd.c:755 cups/ppd.c:1321 ppdc/sample.c:231
msgid "Resolution"
msgstr "Resolución"
-#: cgi-bin/classes.c:157
msgid "Resume Class"
msgstr "Reanudar clase"
-#: cgi-bin/printers.c:159
msgid "Resume Printer"
msgstr "Reanudar impresora"
-#: ppdc/sample.c:165
msgid "Return Address"
msgstr "Remite"
-#: ppdc/sample.c:444
msgid "Rewind"
msgstr "Rebobinar"
-#: cups/adminutil.c:2041
#, c-format
msgid "Running command: %s %s -N -A %s -c '%s'"
msgstr "Ejecutando comando: %s %s -N -A %s -c '%s'"
-#: cups/snmp.c:947
msgid "SEQUENCE uses indefinite length"
msgstr "SEQUENCE usa una longitud indefinida"
-#: cups/http-support.c:1399
msgid "SSL/TLS Negotiation Error"
msgstr "Error en negociación SSL/TLS"
-#: cups/http-support.c:1356
msgid "See Other"
msgstr "Ver otros"
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
msgid "Sending data to printer."
msgstr "Enviando datos a la impresora."
-#: cgi-bin/ipp-var.c:1041
msgid "Server Restarted"
msgstr "Servidor reiniciado"
-#: cgi-bin/ipp-var.c:1047
msgid "Server Security Auditing"
msgstr "Auditoría de seguridad del servidor"
-#: cgi-bin/ipp-var.c:1043
msgid "Server Started"
msgstr "Servidor iniciado"
-#: cgi-bin/ipp-var.c:1045
msgid "Server Stopped"
msgstr "Servidor parado"
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
msgid "Server credentials not set."
msgstr "Credenciales del servidor no establecidas."
-#: cups/http-support.c:1393
msgid "Service Unavailable"
msgstr "Servicio no disponible"
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
msgid "Set Allowed Users"
msgstr "Establecer usuarios permitidos"
-#: cgi-bin/admin.c:3015
msgid "Set As Server Default"
msgstr "Establecer como predeterminada del servidor"
-#: cgi-bin/admin.c:3115
msgid "Set Class Options"
msgstr "Cambiar opciones clase"
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
msgid "Set Printer Options"
msgstr "Cambiar opciones impresora"
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
msgid "Set Publishing"
msgstr "Hacer pública"
-#: ppdc/sample.c:166
msgid "Shipping Address"
msgstr "Dirección de envío"
-#: ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr "Lado corto (apaisado)"
-#: ppdc/sample.c:283
msgid "Special Paper"
msgstr "Papel especial"
-#: backend/lpd.c:1065
#, c-format
msgid "Spooling job, %.0f%% complete."
msgstr "Guardando trabajo en cola, %.0f%% completado."
-#: ppdc/sample.c:336
msgid "Standard"
msgstr "Estándar"
#. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
msgid "Starting Banner"
msgstr "Rótulo inicial"
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
-#: filter/rastertolabel.c:1211
#, c-format
msgid "Starting page %d."
msgstr "Iniciando página %d."
-#: ppdc/sample.c:156
msgid "Statement"
msgstr "Declaración"
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
#, c-format
msgid "Subscription #%d does not exist."
msgstr "Subscripción #%d no existe."
-#: test/ippfind.c:2798
msgid "Substitutions:"
msgstr "Substituciones:"
-#: ppdc/sample.c:157
msgid "Super A"
msgstr "Super A"
-#: ppdc/sample.c:158
msgid "Super B"
msgstr "Super B (13 x 19 pulg.)"
-#: ppdc/sample.c:162
msgid "Super B/A3"
msgstr "Super B/A3"
-#: cups/http-support.c:1338
msgid "Switching Protocols"
msgstr "Protocolos de conexión"
-#: ppdc/sample.c:159
msgid "Tabloid"
msgstr "Tabloide"
-#: ppdc/sample.c:45
msgid "Tabloid Oversize"
msgstr "Tabloide Extragrande"
-#: ppdc/sample.c:46
msgid "Tabloid Oversize Long Edge"
msgstr "Tabloide Extragrande lado largo"
-#: ppdc/sample.c:337
msgid "Tear"
msgstr "Pestaña"
-#: ppdc/sample.c:442
msgid "Tear-Off"
msgstr "Pestaña desprendible"
-#: ppdc/sample.c:383
msgid "Tear-Off Adjust Position"
msgstr "Ajuste de posición de la pestaña desprendible"
-#: scheduler/ipp.c:1321
#, c-format
msgid "The \"%s\" attribute is required for print jobs."
msgstr "Se necesita el atributo \"%s\" para los trabajos de impresión."
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr "El atributo %s no puede ser usado con jobs-ids."
-#: scheduler/ipp.c:1297
#, 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 ""
-"El atributo de descripción de trabajo '%s' no puede ser suministrado en una "
-"solicitud de creación de trabajo."
-#: scheduler/ipp.c:5183
#, c-format
msgid ""
"The '%s' operation attribute cannot be supplied in a Create-Job request."
"El atributo de operación '%s' no puede ser suministrado en una petición "
"Create-Job."
-#: scheduler/ipp.c:6820
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr "No se ha podido encontrar el archivo PPD \"%s\"."
-#: scheduler/ipp.c:6807
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr "No se ha podido abrir el archivo PPD \"%s\": %s"
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
-#: filter/rastertolabel.c:1175
msgid "The PPD file could not be opened."
msgstr "No se ha podido abrir el archivo PPD."
-#: cgi-bin/admin.c:727
msgid ""
"The class name may only contain up to 127 printable characters and may not "
"contain spaces, slashes (/), or the pound sign (#)."
"El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
"no puede contener espacios, barras (/), o la almohadilla (#)."
-#: cups/localize.c:338
msgid "The developer unit needs to be replaced."
msgstr "La unidad de revelado debe ser reemplazada."
-#: cups/localize.c:336
msgid "The developer unit will need to be replaced soon."
msgstr "La unidad de revelado necesitará ser cambiada pronto."
-#: cups/localize.c:328
msgid "The fuser's temperature is high."
msgstr "Temperatura del fusor alta."
-#: cups/localize.c:330
msgid "The fuser's temperature is low."
msgstr "Temperatura del fusor baja."
-#: scheduler/ipp.c:2088
msgid ""
"The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
"El atributo notify-lease-duration no puede ser usado con subscripciones de "
"trabajos."
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)."
-#: cups/localize.c:334
msgid "The optical photoconductor needs to be replaced."
msgstr "El fotoconductor óptico necesita ser cambiado."
-#: cups/localize.c:332
msgid "The optical photoconductor will need to be replaced soon."
msgstr "El fotoconductor óptico necesitará ser cambiado pronto."
-#: backend/ipp.c:981
msgid "The printer configuration is incorrect or the printer no longer exists."
msgstr ""
"La configuración de la impresora es incorrecta o la impresora ya no existe."
-#: backend/lpd.c:627 backend/lpd.c:1017 backend/lpd.c:1099 backend/lpd.c:1149
msgid "The printer did not respond."
msgstr "La impresora no respondió."
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
-#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
msgid "The printer is in use."
msgstr "La impresora está en uso."
-#: cups/localize.c:320
msgid "The printer is low on ink."
msgstr "La impresora tiene poca tinta."
-#: cups/localize.c:298
msgid "The printer is low on toner."
msgstr "La impresora tiene poco toner."
-#: backend/runloop.c:243 backend/runloop.c:363 cups/localize.c:296
msgid "The printer is not connected."
msgstr "La impresora no está conectada."
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
-#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
msgid "The printer is not responding."
msgstr "La impresora no responde."
-#: backend/runloop.c:385
msgid "The printer is now connected."
msgstr "La impresora está ahora conectada."
-#: backend/usb-darwin.c:1300
msgid "The printer is now online."
msgstr "La impresora está ahora en línea."
-#: backend/usb-darwin.c:1321
msgid "The printer is offline."
msgstr "La impresora está fuera de línea."
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
msgid "The printer is unreachable at this time."
msgstr "La impresora es inalcanzable en este momento."
-#: cups/localize.c:322
msgid "The printer may be out of ink."
msgstr "La impresora puede que no tenga tinta."
-#: cups/localize.c:300
msgid "The printer may be out of toner."
msgstr "La impresora puede que esté sin toner."
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
msgid "The printer may not exist or is unavailable at this time."
msgstr "La impresora puede no existir o no estar disponible en este momento."
-#: cgi-bin/admin.c:909
msgid ""
"The printer name may only contain up to 127 printable characters and may not "
"contain spaces, slashes (/), or the pound sign (#)."
"El nombre de la impresora sólo puede contener hasta 127 caracteres "
"imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
msgid "The printer or class does not exist."
msgstr "La impresora o clase no existe."
-#: scheduler/ipp.c:1234
msgid "The printer or class is not shared."
msgstr "La impresora o clase no está compartida."
-#: cups/localize.c:302
msgid "The printer's cover is open."
msgstr "La tapa de la impresora está abierta."
-#: cups/localize.c:306
msgid "The printer's door is open."
msgstr "La puerta de la impresora está abierta."
-#: cups/localize.c:304
msgid "The printer's interlock is open."
msgstr "El dispositivo de seguridad de la impresora está abierto."
-#: cups/localize.c:324
msgid "The printer's waste bin is almost full."
msgstr "Recipiente de residuos de la impresora está casi lleno."
-#: cups/localize.c:326
msgid "The printer's waste bin is full."
msgstr "Recipiente de residuos de la impresora está lleno."
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr "El printer-uri \"%s\" contiene caracteres no válidos."
-#: scheduler/ipp.c:3182
msgid "The printer-uri attribute is required."
msgstr "Se necesita el atributo printer-uri."
-#: scheduler/ipp.c:878
msgid ""
"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
"El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/classes/"
"NOMBRE_CLASE\"."
-#: scheduler/ipp.c:2236
msgid ""
"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
"El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/printers/"
"NOMBRE_IMPRESORA\"."
-#: cgi-bin/admin.c:452
msgid ""
"The subscription name may not contain spaces, slashes (/), question marks "
"(?), or the pound sign (#)."
"El nombre de la subscripción no puede contener espacios, barras (/), signos "
"de interrogación (?), o la almohadilla (#)."
-#: scheduler/client.c:2232
msgid ""
"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
"enable it."
"La interfaz web está desactivada en este momento. Ejecute \"cupsctl "
"WebInterface=yes\" para activarla."
-#: scheduler/ipp.c:6314
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr "No se admite el uso del valor which-jobs \"%s\"."
-#: scheduler/ipp.c:5577
msgid "There are too many subscriptions."
msgstr "Hay demasiadas subscripciones."
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
msgid "There was an unrecoverable USB error."
msgstr "Ha habido un error USB irrecuperable."
-#: ppdc/sample.c:430
msgid "Thermal Transfer Media"
msgstr "Soporte de transferencia térmica"
-#: scheduler/ipp.c:1479
msgid "Too many active jobs."
msgstr "Demasiados trabajos activos."
-#: scheduler/ipp.c:1373
#, c-format
msgid "Too many job-sheets values (%d > 2)."
msgstr "Demasiados valores de job-sheets (%d > 2)."
-#: scheduler/ipp.c:2537
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr "Demasiados valores printer-state-reasons (%d > %d)."
-#: ppdc/sample.c:284
msgid "Transparency"
msgstr "Transparencia"
-#: ppdc/sample.c:279
msgid "Tray"
msgstr "Bandeja"
-#: ppdc/sample.c:256
msgid "Tray 1"
msgstr "Bandeja 1"
-#: ppdc/sample.c:257
msgid "Tray 2"
msgstr "Bandeja 2"
-#: ppdc/sample.c:258
msgid "Tray 3"
msgstr "Bandeja 3"
-#: ppdc/sample.c:259
msgid "Tray 4"
msgstr "Bandeja 4"
-#: cups/http-support.c:1378
msgid "URI Too Long"
msgstr "URI demasiado largo"
-#: cups/http-support.c:1453
msgid "URI too large"
msgstr "URI demasiado grande"
-#: ppdc/sample.c:138
msgid "US Ledger"
msgstr "Libro Mayor, 17 x 11 pulg."
-#: ppdc/sample.c:139
msgid "US Legal"
msgstr "Legal EE.UU."
-#: ppdc/sample.c:140
msgid "US Legal Oversize"
msgstr "Legal EE.UU. Extragrande"
-#: ppdc/sample.c:141
msgid "US Letter"
msgstr "Carta EE.UU."
-#: ppdc/sample.c:142
msgid "US Letter Long Edge"
msgstr "Carta EE.UU. lado largo"
-#: ppdc/sample.c:143
msgid "US Letter Oversize"
msgstr "Carta EE.UU. Extragrande"
-#: ppdc/sample.c:144
msgid "US Letter Oversize Long Edge"
msgstr "Carta EE.UU. Extragrande lado largo"
-#: ppdc/sample.c:145
msgid "US Letter Small"
msgstr "Carta EE.UU. Pequeña"
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
msgid "Unable to access cupsd.conf file"
msgstr "No se ha podido acceder al archivo cupsd.conf"
-#: cgi-bin/help.c:133
msgid "Unable to access help file."
msgstr "No se ha podido acceder al archivo de ayuda."
-#: cgi-bin/admin.c:504
msgid "Unable to add RSS subscription"
msgstr "No se ha podido añadir la subscripción RSS"
-#: cgi-bin/admin.c:792
msgid "Unable to add class"
msgstr "No se ha podido añadir la clase"
-#: backend/ipp.c:1796
msgid "Unable to add document to print job."
msgstr "No se ha podido añadir el documento al trabajo de impresión."
-#: scheduler/ipp.c:1537
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr "No se ha podido añadir el trabajo para el destino \"%s\"."
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
msgid "Unable to add printer"
msgstr "No se ha podido añadir la impresora"
-#: scheduler/ipp.c:1164
msgid "Unable to allocate memory for file types."
msgstr "No se ha podido reservar memoria para tipos de archivo."
-#: filter/pstops.c:418
msgid "Unable to allocate memory for page info"
msgstr "No se ha podido reservar memoria para la información de página."
-#: filter/pstops.c:412
msgid "Unable to allocate memory for pages array"
msgstr "No se ha podido reservar memoria para la secuencia de páginas"
-#: cgi-bin/admin.c:1505
msgid "Unable to cancel RSS subscription"
msgstr "No se ha podido cancelar la subscripción RSS"
-#: backend/ipp.c:2077 backend/ipp.c:2512
msgid "Unable to cancel print job."
msgstr "No se ha podido cancelar el trabajo de impresión."
-#: cgi-bin/admin.c:2970
msgid "Unable to change printer"
msgstr "No se ha podido cambiar la impresora"
-#: cgi-bin/admin.c:3886
msgid "Unable to change printer-is-shared attribute"
msgstr "No se ha podido cambiar el atributo printer-is-shared"
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
msgid "Unable to change server settings"
msgstr "No se ha podido cambiar la configuración del servidor"
-#: cups/ipp.c:5389
#, c-format
msgid "Unable to compile mimeMediaType regular expression: %s."
msgstr "No se ha podido compilar la expresión regular mimeMediaType: %s."
-#: cups/ipp.c:5335
#, c-format
msgid "Unable to compile naturalLanguage regular expression: %s."
msgstr "No se ha podido compilar la expresión regular naturalLanguage: %s."
-#: filter/commandtops.c:407
msgid "Unable to configure printer options."
msgstr "No se han podido configurar las opciones de impresión."
-#: cups/adminutil.c:900 cups/request.c:1066
msgid "Unable to connect to host."
msgstr "No se ha podido conectar al equipo."
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
-#: backend/usb-unix.c:110
msgid "Unable to contact printer, queuing on next printer in class."
msgstr ""
"No se ha podido contactar con la impresora; poniendo en cola en la siguiente "
"impresora de la clase."
-#: cups/adminutil.c:715
#, c-format
msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
msgstr ""
"No se han podido copiar los archivos del controlador de impresora de 64-bit "
"de CUPS (%d)."
-#: cups/adminutil.c:680
#, c-format
msgid "Unable to copy 64-bit Windows printer driver files (%d)."
msgstr ""
"No se han podido copiar los archivos del controlador de impresora de 64-bit "
"de Windows (%d)."
-#: cups/adminutil.c:511
#, c-format
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr ""
"No se han podido copiar los archivos del controlador de impresora de CUPS "
"(%d)."
-#: scheduler/ipp.c:2657
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr "No se ha podido copiar el archivo PPD - %s"
-#: scheduler/ipp.c:2712
msgid "Unable to copy PPD file."
msgstr "No se ha podido copiar el archivo PPD."
-#: cups/adminutil.c:476
#, c-format
msgid "Unable to copy Windows 2000 printer driver files (%d)."
msgstr ""
"No se han podido copiar los archivos del controlador de impresora de Windows "
"2000 (%d)."
-#: cups/adminutil.c:599
#, c-format
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
"No se han podido copiar los archivos del controlador de impresora de Windows "
"9x (%d)."
-#: scheduler/ipp.c:2634
#, c-format
msgid "Unable to copy interface script - %s"
msgstr "No se ha podido copiar el script de interfaz - %s"
-#: cups/util.c:496 cups/util.c:1479
msgid "Unable to create printer-uri"
msgstr "No se ha podido crear printer-uri"
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
msgid "Unable to create server credentials."
msgstr "No se han podido crear las credenciales del servidor."
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
msgid "Unable to create temporary file"
msgstr "No se ha podido crear el archivo temporal"
-#: cgi-bin/admin.c:2133
msgid "Unable to delete class"
msgstr "No se ha podido borrar la clase"
-#: cgi-bin/admin.c:2218
msgid "Unable to delete printer"
msgstr "No se ha podido borrar la impresora"
-#: cgi-bin/classes.c:252 cgi-bin/printers.c:261
msgid "Unable to do maintenance command"
msgstr "No se ha podido realizar el comando de mantenimiento"
-#: cgi-bin/admin.c:1954
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr "No se pueden editar archivos cupsd.conf mayores de 1MB"
-#: cups/tls-darwin.c:1284
msgid ""
"Unable to establish a secure connection to host (certificate chain invalid)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (cadena "
"certificado incorrecta)."
-#: cups/tls-darwin.c:1274
msgid ""
"Unable to establish a secure connection to host (certificate not yet valid)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (el certificado "
"aún no es válido)."
-#: cups/tls-darwin.c:1269
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (certificado "
"caducado)."
-#: cups/tls-darwin.c:1279
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (el nombre de "
"equipo no coincide)."
-#: cups/tls-darwin.c:1289
msgid ""
"Unable to establish a secure connection to host (peer dropped connection "
"before responding)."
"No se ha podido establecer una conexión segura con el equipo (el par cortó "
"la conexión antes de responder)."
-#: cups/tls-darwin.c:1264
msgid ""
"Unable to establish a secure connection to host (self-signed certificate)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (certificado "
"auto-firmado)."
-#: cups/tls-darwin.c:1259
msgid ""
"Unable to establish a secure connection to host (untrusted certificate)."
msgstr ""
"No se ha podido establecer una conexión segura con el equipo (certificado no "
"seguro)."
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
msgid "Unable to establish a secure connection to host."
msgstr "No se ha podido establecer una conexión segura al equipo."
-#: cgi-bin/ipp-var.c:350
msgid "Unable to find destination for job"
msgstr "No se ha podido encontrar destino para el trabajo"
-#: cups/http-support.c:1949
msgid "Unable to find printer."
msgstr "No se ha podido encontrar la impresora."
-#: cups/tls-darwin.c:1130
msgid "Unable to find server credentials."
msgstr "No se han podido encontrar las credenciales del servidor."
-#: backend/ipp.c:3493
msgid "Unable to get backend exit status."
msgstr "No se ha podido obtener el estado de salida del programa backend."
-#: cgi-bin/classes.c:442
msgid "Unable to get class list"
msgstr "No se ha podido obtener la lista de clases"
-#: cgi-bin/classes.c:541
msgid "Unable to get class status"
msgstr "No se ha podido obtener el estado de la clase"
-#: cgi-bin/admin.c:1300
msgid "Unable to get list of printer drivers"
msgstr "No se ha podido obtener la lista de controladores de impresora"
-#: cgi-bin/admin.c:2820
msgid "Unable to get printer attributes"
msgstr "No se han podido obtener los atributos de la impresora"
-#: cgi-bin/printers.c:459
msgid "Unable to get printer list"
msgstr "No se ha podido obtener la lista de impresoras"
-#: cgi-bin/printers.c:561
msgid "Unable to get printer status"
msgstr "No se ha podido obtener el estado de la impresora"
-#: backend/ipp.c:1005
msgid "Unable to get printer status."
msgstr "No se ha podido obtener el estado de la impresora."
-#: cups/adminutil.c:554 cups/adminutil.c:758
#, c-format
msgid "Unable to install Windows 2000 printer driver files (%d)."
msgstr ""
"No se han podido instalar los archivos del controlador de impresora de "
"Windows 2000 (%d)."
-#: cups/adminutil.c:628
#, c-format
msgid "Unable to install Windows 9x printer driver files (%d)."
msgstr ""
"No se han podido instalar los archivos del controlador de impresora de "
"Windows 9x (%d)."
-#: cgi-bin/help.c:92
msgid "Unable to load help index."
msgstr "No se ha podido cargar el índice de ayuda."
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
#, c-format
msgid "Unable to locate printer \"%s\"."
msgstr "No se ha podido localizar la impresora \"%s\"."
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
-#: backend/socket.c:163
msgid "Unable to locate printer."
msgstr "No se ha podido localizar la impresora."
-#: cgi-bin/admin.c:791
msgid "Unable to modify class"
msgstr "No se ha podido modificar la clase"
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
msgid "Unable to modify printer"
msgstr "No se ha podido modificar la impresora"
-#: cgi-bin/ipp-var.c:417 cgi-bin/ipp-var.c:506
msgid "Unable to move job"
msgstr "No se ha podido mover el trabajo"
-#: cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:508
msgid "Unable to move jobs"
msgstr "No se han podido mover los trabajos"
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
msgid "Unable to open PPD file"
msgstr "No se ha podido abrir el archivo PPD"
-#: cgi-bin/admin.c:2588
msgid "Unable to open cupsd.conf file:"
msgstr "No se ha podido abrir el archivo cupsd.conf:"
-#: backend/usb-unix.c:134
msgid "Unable to open device file"
msgstr "No se ha podido abrir el archivo de dispositivo"
-#: scheduler/ipp.c:5992
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr "No se ha podido abrir el documento #%d del trabajo #%d."
-#: cgi-bin/help.c:364
msgid "Unable to open help file."
msgstr "No se ha podido abrir el archivo de ayuda."
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
msgid "Unable to open print file"
msgstr "No se ha podido abrir el archivo de impresión"
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
-#: filter/rastertolabel.c:1133
msgid "Unable to open raster file"
msgstr "No se ha podido abrir el archivo de trama de datos (raster)"
-#: cgi-bin/ipp-var.c:780
msgid "Unable to print test page"
msgstr "No se ha podido imprimir la página de prueba"
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
msgid "Unable to read print data."
msgstr "No se han podido leer los datos de impresión."
-#: cups/dest.c:3445
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr "No se ha podido resolver printer-uri."
-#: cups/adminutil.c:2077
#, c-format
msgid "Unable to run \"%s\": %s"
msgstr "No se ha podido ejecutar \"%s\": %s"
-#: filter/pstops.c:530
msgid "Unable to see in file"
msgstr "No se ha podido mirar en el archivo"
-#: cgi-bin/ipp-var.c:583 cgi-bin/ipp-var.c:603
msgid "Unable to send command to printer driver"
msgstr "No se ha podido enviar un comando al controlador de la impresora"
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
msgid "Unable to send data to printer."
msgstr "No se han podido enviar datos a la impresora."
-#: cups/adminutil.c:810
#, c-format
msgid "Unable to set Windows printer driver (%d)."
msgstr ""
"No se ha podido configurar el controlador de impresora de Windows (%d)."
-#: cgi-bin/admin.c:3787
msgid "Unable to set options"
msgstr "No se han podido cambiar las opciones"
-#: cgi-bin/admin.c:3057
msgid "Unable to set server default"
msgstr "No se ha podido establecer el servidor predeterminado"
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
msgid "Unable to start backend process."
msgstr "No se ha podido iniciar el proceso backend."
-#: cgi-bin/admin.c:1892
msgid "Unable to upload cupsd.conf file"
msgstr "No se ha podido enviar el archivo cupsd.conf"
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
msgid "Unable to use legacy USB class driver."
msgstr ""
"No se ha podido usar el controlador de dispositivo de clase USB obsoleto."
-#: backend/runloop.c:114 backend/runloop.c:369
msgid "Unable to write print data"
msgstr "No se han podido escribir los datos de impresión"
-#: filter/gziptoany.c:86
#, c-format
msgid "Unable to write uncompressed print data: %s"
msgstr "No se han podido escribir los datos de impresión sin comprimir: %s"
-#: cups/http-support.c:1366
msgid "Unauthorized"
msgstr "No autorizado"
-#: cgi-bin/admin.c:3483
msgid "Units"
msgstr "Unidades"
-#: cups/http-support.c:1406 cups/http-support.c:1490 cups/ppd.c:324
msgid "Unknown"
msgstr "Desconocido"
-#: filter/pstops.c:2185
#, c-format
msgid "Unknown choice \"%s\" for option \"%s\"."
msgstr "Preferencia \"%s\" desconocida para la opción \"%s\"."
-#: backend/ipp.c:520
#, c-format
msgid "Unknown encryption option value: \"%s\"."
msgstr "Valor de opción de cifrado \"%s\" desconocida."
-#: backend/lpd.c:342
#, c-format
msgid "Unknown file order: \"%s\"."
msgstr "Orden de archivos \"%s\" desconocido."
-#: backend/lpd.c:313
#, c-format
msgid "Unknown format character: \"%c\"."
msgstr "Carácter de formato \"%c\" desconocido."
-#: cups/dest-options.c:964
msgid "Unknown media size name."
msgstr "Nombre de tamaño de papel desconocido."
-#: backend/ipp.c:584
#, c-format
msgid "Unknown option \"%s\" with value \"%s\"."
msgstr "Opción \"%s\" con valor \"%s\" desconocida."
-#: filter/pstops.c:2168
#, c-format
msgid "Unknown option \"%s\"."
msgstr "Opción \"%s\" desconocida."
-#: backend/lpd.c:328
#, c-format
msgid "Unknown print mode: \"%s\"."
msgstr "Modo de impresión \"%s\" desconocido."
-#: scheduler/ipp.c:10401
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr "printer-error-policy \"%s\" incorrecto."
-#: scheduler/ipp.c:10384
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr "printer-op-policy \"%s\" incorrecto."
-#: cups/http.c:2309
msgid "Unknown request method."
msgstr "Método de solicitud desconocido."
-#: cups/http.c:2329
msgid "Unknown request version."
msgstr "Versión de solicitud desconocida."
-#: cups/http-support.c:1483
msgid "Unknown scheme in URI"
msgstr "Esquema en URI desconocido"
-#: cups/http-addrlist.c:737
msgid "Unknown service name."
msgstr "Nombre de servicio desconocido."
-#: backend/ipp.c:549
#, c-format
msgid "Unknown version option value: \"%s\"."
msgstr "Valor de opción de versión \"%s\" desconocida."
-#: scheduler/ipp.c:10858
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr "Valor 'compression' \"%s\" no implementado."
-#: scheduler/ipp.c:10888
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "Valor 'document-format' \"%s\" no implementado."
-#: scheduler/ipp.c:10963
msgid "Unsupported 'job-name' value."
msgstr "Valor 'job-name' no implementado."
-#: scheduler/ipp.c:329
#, c-format
msgid "Unsupported character set \"%s\"."
msgstr "Juego de caracteres \"%s\" no implementado."
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr "Compresión \"%s\" no implementada."
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr "document-format \"%s\" no implementado."
-#: scheduler/ipp.c:9440
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr "document-format \"%s/%s\" no implementado."
-#: scheduler/ipp.c:1339
#, c-format
msgid "Unsupported format \"%s\"."
msgstr "Formato \"%s\" no implementado."
-#: scheduler/ipp.c:1437
msgid "Unsupported margins."
msgstr "Márgenes no implementados."
-#: cups/pwg-media.c:549
msgid "Unsupported media value."
msgstr "Valor del medio no implementado."
-#: filter/pstops.c:2450
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
msgstr ""
"Valor de number-up (páginas por hoja) %d no implementado; usando number-up=1."
-#: filter/pstops.c:2484
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
msgstr ""
"Valor de number-up-layout (disposición de páginas por hoja) %s no "
"implementado; usando number-up-layout=lrtb."
-#: filter/pstops.c:2535
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
msgstr ""
"Valor de page-border (borde de página) %s no implementado; usando page-"
"border=none (ninguno)."
-#: filter/rastertopwg.c:139 filter/rastertopwg.c:147 filter/rastertopwg.c:156
msgid "Unsupported raster data."
msgstr "Trama de datos no implementados."
-#: cups/snmp.c:1064
msgid "Unsupported value type"
msgstr "Tipo de valor no implementado"
-#: cups/http-support.c:1381
msgid "Upgrade Required"
msgstr "Se requiere actualización"
-#: systemv/lpadmin.c:654
msgid ""
"Usage:\n"
"\n"
" [-P archivo_ppd] [-o nombre=valor]\n"
" [-u allow:usuario,usuario] [-u deny:usuario,usuario]"
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
-#: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
-#: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
-#: monitor/tbcp.c:55
#, c-format
msgid "Usage: %s job-id user title copies options [file]"
msgstr "Uso: %s job-id usuario título copias opciones [archivo]"
-#: systemv/cupsaddsmb.c:281
msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
msgstr "Uso: cupsaddsmb [opciones] impresora1 ... impresoraN"
-#: systemv/cupsctl.c:200
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr "Uso: cupsctl [opciones] [param=valor ... paramN=valorN]"
-#: scheduler/main.c:2145
msgid "Usage: cupsd [options]"
msgstr "Uso: cupsd [opciones]"
-#: scheduler/cupsfilter.c:1481
msgid "Usage: cupsfilter [ options ] [ -- ] filename"
msgstr "Uso: cupsfilter [ opciones ] [ -- ] nombre_archivo"
-#: systemv/cupstestdsc.c:425
msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]"
-#: systemv/cupstestppd.c:3813
msgid ""
"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
msgstr ""
-"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
-"ppd[.gz]]"
+"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
+"[.gz]]"
-#: test/ippdiscover.c:814
msgid ""
"Usage: ippdiscover [options] -a\n"
" ippdiscover [options] \"service name\"\n"
"\n"
"Opciones:"
-#: test/ippfind.c:2738
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
" ippfind --help\n"
" ippfind --version"
-#: test/ipptool.c:4803
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr "Uso: ipptool [opciones] URI nombre_archivo [ ... nombre_archivoN ]"
-#: systemv/lpmove.c:125
msgid "Usage: lpmove job/src dest"
msgstr "Uso: lpmove trabajo/fuente destino"
-#: systemv/lpoptions.c:539
msgid ""
"Usage: lpoptions [-h server] [-E] -d printer\n"
" lpoptions [-h server] [-E] [-p printer] -l\n"
" lpoptions [-h servidor] [-E] -p impresora -o opción[=valor] ...\n"
" lpoptions [-h servidor] [-E] -x impresora"
-#: berkeley/lpq.c:637
msgid ""
"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
msgstr ""
"Uso: lpq [-P dest] [-U nombre_usuario] [-h nombre_equipo[:puerto]] [-l] "
"[+intervalo]"
-#: ppdc/ppdc.cxx:430
msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
msgstr "Uso: ppdc [opciones] nombre_archivo.drv [ ... nombre_archivoN.drv ]"
-#: ppdc/ppdhtml.cxx:172
msgid "Usage: ppdhtml [options] filename.drv >filename.html"
msgstr "Uso: ppdhtml [opciones] nombre_archivo.drv >nombre_archivo.html"
-#: ppdc/ppdi.cxx:128
msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
msgstr "Uso: ppdi [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]"
-#: ppdc/ppdmerge.cxx:361
msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
msgstr ""
"Uso: ppdmerge [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]"
-#: ppdc/ppdpo.cxx:252
msgid ""
"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
msgstr ""
"Uso: ppdpo [opciones] -o nombre_archivo.po nombre_archivo.drv [ ... "
"nombre_archivoN.drv ]"
-#: backend/snmp.c:192
msgid "Usage: snmp [host-or-ip-address]"
msgstr "Uso: snmp [equipo-o-dirección-ip]"
-#: cups/snmp.c:1016
msgid "Value uses indefinite length"
msgstr "Valor usa una longitud indefinida"
-#: cups/snmp.c:1001
msgid "VarBind uses indefinite length"
msgstr "VarBind usa una longitud indefinida"
-#: cups/snmp.c:951
msgid "Version uses indefinite length"
msgstr "Versión usa una longitud indefinida"
-#: backend/ipp.c:1913
msgid "Waiting for job to complete."
msgstr "Esperando a que finalice el trabajo."
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
msgid "Waiting for printer to become available."
msgstr "Esperando a que la impresora esté disponible."
-#: backend/socket.c:440
msgid "Waiting for printer to finish."
msgstr "Esperando a que finalice la impresora."
-#: cups/adminutil.c:782
msgid "Warning, no Windows 2000 printer drivers are installed."
msgstr ""
"Advertencia, no está instalado ningún controlador de impresora de Windows "
"2000."
-#: cups/http-support.c:1402
msgid "Web Interface is Disabled"
msgstr "La interfaz web está desactivada."
-#: cups/ppd.c:1902
msgid "Yes"
msgstr "Si"
-#: scheduler/client.c:2219
#, c-format
msgid ""
"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://"
"Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://"
"%s:%d%s</A>."
-#: ppdc/sample.c:434
msgid "ZPL Label Printer"
msgstr "Impresora de etiquetas ZPL"
-#: ppdc/sample.c:357
msgid "Zebra"
msgstr "Zebra"
-#: cups/notify.c:102
msgid "aborted"
msgstr "cancelado"
-#: cups/notify.c:99
msgid "canceled"
msgstr "cancelado"
-#: cups/notify.c:105
msgid "completed"
msgstr "completado"
-#: scheduler/ipp.c:5864
msgid "cups-deviced failed to execute."
msgstr "Ha fallado al ejecutarse cups-deviced."
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
msgid "cups-driverd failed to execute."
msgstr "Ha fallado al ejecutarse cups-driverd."
-#: systemv/cupsaddsmb.c:233
#, c-format
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s"
-#: systemv/cupsctl.c:141
msgid "cupsctl: Cannot set Listen or Port directly."
msgstr "cupsctl: No se puede establecer Listen o Port directamente."
-#: systemv/cupsctl.c:152
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
msgstr "cupsctl: No se ha podido conectar al servidor: %s"
-#: systemv/cupsctl.c:195
#, c-format
msgid "cupsctl: Unknown option \"%s\""
msgstr "cupsctl: Opción \"%s\" desconocida"
-#: systemv/cupsctl.c:197
#, c-format
msgid "cupsctl: Unknown option \"-%c\""
msgstr "cupsctl: Opción \"-%c\" desconocida"
-#: scheduler/main.c:171
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr ""
"cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
"\"."
-#: scheduler/main.c:258
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
"cupsd: Se esperaba el nombre de archivo cups-files.conf tras la opción \"-s"
"\"."
-#: scheduler/main.c:236
msgid "cupsd: On-demand support not compiled in, running in normal mode."
msgstr ""
"cupsd: El uso bajo-demanda no está compilado. Funcionando en modo normal."
-#: scheduler/main.c:269
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr "cupsd: No se permite nombre de archivo cups-files.conf relativo."
-#: scheduler/main.c:202 scheduler/main.c:209
msgid "cupsd: Unable to get current directory."
msgstr "cupsd: No se ha podido obtener el directorio actual."
-#: scheduler/main.c:316 scheduler/main.c:325
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr "cupsd: No se ha podido obtener la ruta al archivo cups-files.conf."
-#: scheduler/main.c:298
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr "cupsd: Argumento \"%s\" desconocido - cancelando."
-#: scheduler/main.c:291
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr "cupsd: Opción \"%c\" desconocida - cancelando."
-#: scheduler/cupsfilter.c:1263
#, c-format
msgid "cupsfilter: Invalid document number %d."
msgstr "cupsfilter: Número de documento %d no válido."
-#: scheduler/cupsfilter.c:1257
#, c-format
msgid "cupsfilter: Invalid job ID %d."
msgstr "cupsfilter: ID de trabajo %d no válida."
-#: scheduler/cupsfilter.c:348
msgid "cupsfilter: Only one filename can be specified."
msgstr "cupsfilter: Solo se puede especificar un nombre de archivo."
-#: scheduler/cupsfilter.c:1305
#, c-format
msgid "cupsfilter: Unable to get job file - %s"
msgstr "cupsfilter: No se ha podido obtener el archivo del trabajo - %s"
-#: systemv/cupstestppd.c:261
msgid "cupstestppd: The -q option is incompatible with the -v option."
msgstr "cupstestppd: La opción -q es incompatible con la opción -v."
-#: systemv/cupstestppd.c:277
msgid "cupstestppd: The -v option is incompatible with the -q option."
msgstr "cupstestppd: La opción -v es incompatible con la opción -q."
-#: systemv/lpstat.c:1232 systemv/lpstat.c:1235 systemv/lpstat.c:1238
#, c-format
msgid "device for %s/%s: %s"
msgstr "dispositivo para %s/%s: %s"
-#: systemv/lpstat.c:1218 systemv/lpstat.c:1221 systemv/lpstat.c:1224
#, c-format
msgid "device for %s: %s"
msgstr "dispositivo para %s: %s"
-#: cups/snmp.c:988
msgid "error-index uses indefinite length"
msgstr "error-index usa una longitud indefinida"
-#: cups/snmp.c:980
msgid "error-status uses indefinite length"
msgstr "error-status usa una longitud indefinida"
-#: cups/notify.c:90
msgid "held"
msgstr "retenido"
-#: berkeley/lpc.c:201
msgid "help\t\tGet help on commands."
msgstr "help\t\tProporciona ayuda sobre los comandos."
-#: cups/notify.c:131
msgid "idle"
msgstr "inactiva"
-#: test/ippfind.c:2465
#, c-format
msgid "ippfind: Bad regular expression: %s"
msgstr "ippfind: Expresión regular incorrecta: %s"
-#: test/ippfind.c:328
msgid "ippfind: Cannot use --and after --or."
msgstr "ippfind: No se puede usar --and tras --or."
-#: test/ippfind.c:601
#, c-format
msgid "ippfind: Expected key name after %s."
msgstr "ippfind: Se esperaba un nombre de clave tras %s."
-#: test/ippfind.c:551 test/ippfind.c:734
#, c-format
msgid "ippfind: Expected port range after %s."
msgstr "ippfind: Se esperaba un intervalo de puertos tras %s."
-#: test/ippfind.c:361
#, c-format
msgid "ippfind: Expected program after %s."
msgstr "ippfind: Se esperaba un programa tras %s."
-#: test/ippfind.c:378
#, c-format
msgid "ippfind: Expected semi-colon after %s."
msgstr "ippfind: Se esperaba un punto y coma tras %s."
-#: test/ippfind.c:1965
msgid "ippfind: Missing close brace in substitution."
msgstr "ippfind: Falta la llave de cierre en la substitución."
-#: test/ippfind.c:1053
msgid "ippfind: Missing close parenthesis."
msgstr "ippfind: Falta el paréntesis de cierre."
-#: test/ippfind.c:335
msgid "ippfind: Missing expression before \"--and\"."
msgstr "ippfind: Falta una expresión antes de \"--and\"."
-#: test/ippfind.c:448
msgid "ippfind: Missing expression before \"--or\"."
msgstr "ippfind: Falta una expresión antes de \"--or\"."
-#: test/ippfind.c:871
#, c-format
msgid "ippfind: Missing key name after %s."
msgstr "ippfind: Falta un nombre de clave tras %s."
-#: test/ippfind.c:1024
msgid "ippfind: Missing open parenthesis."
msgstr "ippfind: Falta el paréntesis de apertura."
-#: test/ippfind.c:901
#, c-format
msgid "ippfind: Missing program after %s."
msgstr "ippfind: Falta un programa tras %s."
-#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
-#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
-#: test/ippfind.c:826 test/ippfind.c:886
#, c-format
msgid "ippfind: Missing regular expression after %s."
msgstr "ippfind: Falta una expresión regular tras %s."
-#: test/ippfind.c:919
#, c-format
msgid "ippfind: Missing semi-colon after %s."
msgstr "ippfind: Falta un punto y coma tras %s."
-#: test/ippfind.c:1912 test/ippfind.c:1937
msgid "ippfind: Out of memory."
msgstr "ippfind: Sin memoria."
-#: test/ippfind.c:997
msgid "ippfind: Too many parenthesis."
msgstr "ippfind: Demasiados paréntesis."
-#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
#, c-format
msgid "ippfind: Unable to browse or resolve: %s"
msgstr "ippfind: No se ha podido examinar o resolver: %s"
-#: test/ippfind.c:2035 test/ippfind.c:2062
#, c-format
msgid "ippfind: Unable to execute \"%s\": %s"
msgstr "ippfind: No se ha podido ejecutar \"%s\": %s"
-#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
#, c-format
msgid "ippfind: Unable to use Bonjour: %s"
msgstr "ippfind: No se ha podido usar Bonjour: %s"
-#: test/ippfind.c:1994
#, c-format
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr "ippfind: Variable desconocida \"{%s}\"."
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
msgstr "ipptool: \"-i\" y \"-n\" no son compatibles con \"-P\" y \"-X\"."
-#: test/ipptool.c:623
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr "ipptool: URI - %s incorrecto."
-#: test/ipptool.c:537
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr "ipptool: Número de segundos no válido para \"-i\"."
-#: test/ipptool.c:604
msgid "ipptool: May only specify a single URI."
msgstr "ipptool: Sólo se puede especificar un URI."
-#: test/ipptool.c:559
msgid "ipptool: Missing count for \"-n\"."
msgstr "ipptool: Falta el contador para \"-n\"."
-#: test/ipptool.c:423
msgid "ipptool: Missing filename for \"-f\"."
msgstr "ipptool: Falta el nombre del archivo para \"-f\"."
-#: test/ipptool.c:404
msgid "ipptool: Missing name=value for \"-d\"."
msgstr "ipptool: Falta un nombre=valor para \"-d\"."
-#: test/ipptool.c:527
msgid "ipptool: Missing seconds for \"-i\"."
msgstr "ipptool: Falta el número de segundos para \"-i\"."
-#: test/ipptool.c:649
msgid "ipptool: URI required before test file."
msgstr "ipptool: Se requiere un URI antes del archivo de prueba."
-#: test/ipptool.c:585
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr "ipptool: Opción \"-%c\" desconocida."
-#: scheduler/ipp.c:7739
msgid "job-printer-uri attribute missing."
msgstr "Falta el atributo job-printer-uri."
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
msgid "lpadmin: Class name can only contain printable characters."
msgstr ""
"lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles."
-#: systemv/lpadmin.c:600
msgid "lpadmin: Expected PPD after \"-P\" option."
msgstr "lpadmin: Se esperaba un PPD tras la opción \"-P\"."
-#: systemv/lpadmin.c:443
msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
msgstr "lpadmin: Se esperaba allow/deny:lista_usuarios tras la opción \"-u\"."
-#: systemv/lpadmin.c:350
msgid "lpadmin: Expected class after \"-r\" option."
msgstr "lpadmin: Se esperaba una clase tras la opción \"-r\"."
-#: systemv/lpadmin.c:106
msgid "lpadmin: Expected class name after \"-c\" option."
msgstr "lpadmin: Se esperaba un nombre de clase tras la opción \"-c\"."
-#: systemv/lpadmin.c:544
msgid "lpadmin: Expected description after \"-D\" option."
msgstr "lpadmin: Se esperaba una descripción tras la opción \"-D\"."
-#: systemv/lpadmin.c:477
msgid "lpadmin: Expected device URI after \"-v\" option."
msgstr "lpadmin: Se esperaba un URI de dispositivo tras la opción \"-v\"."
-#: systemv/lpadmin.c:560
msgid "lpadmin: Expected file type(s) after \"-I\" option."
msgstr "lpadmin: Se esperaba(n) tipo(s) de archivo(s) tras la opción \"-l\"."
-#: systemv/lpadmin.c:188
msgid "lpadmin: Expected hostname after \"-h\" option."
msgstr "lpadmin: Se esperaba un nombre de equipo tras la opción \"-h\"."
-#: systemv/lpadmin.c:207
msgid "lpadmin: Expected interface after \"-i\" option."
msgstr "lpadmin: Se esperaba una interfaz tras la opción \"-i\"."
-#: systemv/lpadmin.c:580
msgid "lpadmin: Expected location after \"-L\" option."
msgstr "lpadmin: Se esperaba una ubicación tras la opción \"-L\"."
-#: systemv/lpadmin.c:260
msgid "lpadmin: Expected model after \"-m\" option."
msgstr "lpadmin: Se esperaba un modelo tras la opción \"-m\"."
-#: systemv/lpadmin.c:403
msgid "lpadmin: Expected name after \"-R\" option."
msgstr "lpadmin: Se esperaba un nombre tras la opción \"-R\"."
-#: systemv/lpadmin.c:280
msgid "lpadmin: Expected name=value after \"-o\" option."
msgstr "lpadmin: Se esperaba un nombre=valor tras la opción \"-o\"."
-#: systemv/lpadmin.c:299
msgid "lpadmin: Expected printer after \"-p\" option."
msgstr "lpadmin: Se esperaba una impresora tras la opción \"-p\"."
-#: systemv/lpadmin.c:150
msgid "lpadmin: Expected printer name after \"-d\" option."
msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción \"-d\"."
-#: systemv/lpadmin.c:511
msgid "lpadmin: Expected printer or class after \"-x\" option."
msgstr "lpadmin: Se esperaba una impresora o clase tras la opción \"-x\"."
-#: systemv/lpadmin.c:961
msgid "lpadmin: No member names were seen."
msgstr "lpadmin: No se han visto nombres de miembros."
-#: systemv/lpadmin.c:748
#, c-format
msgid "lpadmin: Printer %s is already a member of class %s."
msgstr "lpadmin: La impresora %s ya es miembro de la clase %s."
-#: systemv/lpadmin.c:975
#, c-format
msgid "lpadmin: Printer %s is not a member of class %s."
msgstr "lpadmin: La impresora %s no es miembro de la clase %s."
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
msgid "lpadmin: Printer name can only contain printable characters."
msgstr ""
"lpadmin: El nombre de la impresora sólo puede contener caracteres "
"imprimibles."
-#: systemv/lpadmin.c:91
msgid ""
"lpadmin: Unable to add a printer to the class:\n"
" You must specify a printer name first."
"lpadmin: No se ha podido añadir una impresora a la clase:\n"
" Debe especificar un nombre de impresora primero."
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
#, c-format
msgid "lpadmin: Unable to connect to server: %s"
msgstr "lpadmin: No se ha podido conectar al servidor: %s"
-#: systemv/lpadmin.c:1314
msgid "lpadmin: Unable to create temporary file"
msgstr "lpadmin: No se ha podido crear el archivo temporal"
-#: systemv/lpadmin.c:388
msgid ""
"lpadmin: Unable to delete option:\n"
" You must specify a printer name first."
"lpadmin: No se ha podido borrar la opción:\n"
" Primero debe especificar un nombre de impresora."
-#: systemv/lpadmin.c:1324
+#, 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 se ha podido abrir el archivo PPD \"%s\" - %s"
-#: systemv/lpadmin.c:334
msgid ""
"lpadmin: Unable to remove a printer from the class:\n"
" You must specify a printer name first."
"lpadmin: No se ha podido quitar una impresora de la clase:\n"
" Primero debe especificar un nombre de impresora."
-#: systemv/lpadmin.c:642
msgid ""
"lpadmin: Unable to set the printer options:\n"
" You must specify a printer name first."
"lpadmin: No se han podido establecer las opciones de impresora:\n"
" Primero debe especificar un nombre de impresora."
-#: systemv/lpadmin.c:460
#, c-format
msgid "lpadmin: Unknown allow/deny option \"%s\"."
msgstr "lpadmin: Opción allow/deny desconocida \"%s\"."
-#: systemv/lpadmin.c:615
#, c-format
msgid "lpadmin: Unknown argument \"%s\"."
msgstr "lpadmin: Argumento \"%s\" desconocido."
-#: systemv/lpadmin.c:610
#, c-format
msgid "lpadmin: Unknown option \"%c\"."
msgstr "lpadmin: Opción \"%c\" desconocida."
-#: systemv/lpadmin.c:566
msgid "lpadmin: Warning - content type list ignored."
msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta."
-#: berkeley/lpc.c:68 berkeley/lpc.c:96 berkeley/lpc.c:132
msgid "lpc> "
msgstr "lpc> "
-#: systemv/lpinfo.c:137
msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"."
msgstr ""
"lpinfo: Se esperaba una cadena ID de dispositivo 1284 tras \"--device-id\"."
-#: systemv/lpinfo.c:190
msgid "lpinfo: Expected language after \"--language\"."
msgstr "lpinfo: Se esperaba un idioma tras \"--language\"."
-#: systemv/lpinfo.c:207
msgid "lpinfo: Expected make and model after \"--make-and-model\"."
msgstr "lpinfo: Se esperaba marca y modelo tras \"--make-and-model\"."
-#: systemv/lpinfo.c:224
msgid "lpinfo: Expected product string after \"--product\"."
msgstr "lpinfo: Se esperaba una cadena de producto tras \"--product\"."
-#: systemv/lpinfo.c:155
msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"."
msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--exclude-schemes\"."
-#: systemv/lpinfo.c:173
msgid "lpinfo: Expected scheme list after \"--include-schemes\"."
msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--include-schemes\"."
-#: systemv/lpinfo.c:241
msgid "lpinfo: Expected timeout after \"--timeout\"."
msgstr "lpinfo: Se esperaba un tiempo de espera tras \"--timeout\"."
-#: systemv/lpinfo.c:265
#, c-format
msgid "lpinfo: Unknown argument \"%s\"."
msgstr "lpinfo: Argumento \"%s\" desconocido."
-#: systemv/lpinfo.c:259
#, c-format
msgid "lpinfo: Unknown option \"%c\"."
msgstr "lpinfo: Opción \"%c\" desconocida."
-#: systemv/lpinfo.c:252
#, c-format
msgid "lpinfo: Unknown option \"%s\"."
msgstr "lpinfo: Opción \"%s\" desconocida."
-#: systemv/lpmove.c:133
#, c-format
msgid "lpmove: Unable to connect to server: %s"
msgstr "lpmove: No se ha podido conectar al servidor: %s"
-#: systemv/lpmove.c:119
#, c-format
msgid "lpmove: Unknown argument \"%s\"."
msgstr "lpmove: Argumento \"%s\" desconocido."
-#: systemv/lpmove.c:97
#, c-format
msgid "lpmove: Unknown option \"%c\"."
msgstr "lpmove: Opción \"%c\" desconocida."
-#: systemv/lpoptions.c:143 systemv/lpoptions.c:161 systemv/lpoptions.c:237
msgid "lpoptions: No printers."
msgstr "lpoptions: No hay impresoras."
-#: systemv/lpoptions.c:212
#, c-format
msgid "lpoptions: Unable to add printer or instance: %s"
msgstr "lpoptions: No se ha podido añadir la impresora o la instancia: %s"
-#: systemv/lpoptions.c:507
#, c-format
msgid "lpoptions: Unable to get PPD file for %s: %s"
msgstr "lpoptions: No se ha podido obtener el archivo PPD para %s: %s"
-#: systemv/lpoptions.c:515
#, c-format
msgid "lpoptions: Unable to open PPD file for %s."
msgstr "lpoptions: No se ha podido abrir el archivo PPD para %s."
-#: systemv/lpoptions.c:92
msgid "lpoptions: Unknown printer or class."
msgstr "lpoptions: Impresora o clase desconocida."
-#: systemv/lpstat.c:1074
#, c-format
msgid ""
"lpstat: error - %s environment variable names non-existent destination \"%s"
"lpstat: error - Los nombre de variable de entorno %s no existen en el "
"destino \"%s\"."
-#: systemv/lpstat.c:1010
#, c-format
msgid "members of class %s:"
msgstr "miembros de la clase %s:"
-#: berkeley/lpq.c:549
msgid "no entries"
msgstr "no hay entradas"
-#: systemv/lpstat.c:1078
msgid "no system default destination"
msgstr "no hay un destino predeterminado del sistema"
-#: scheduler/ipp.c:5548
msgid "notify-events not specified."
msgstr "notify-events no especificado."
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr "El URI notify-recipient-uri \"%s\" ya está usado."
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr "El URI notify-recipient-uri \"%s\" usa un esquema desconocido."
-#: cups/notify.c:87
msgid "pending"
msgstr "pendiente"
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
#, c-format
msgid "ppdc: Adding include directory \"%s\"."
msgstr "ppdc: Añadiendo directorio include \"%s\"."
-#: ppdc/ppdpo.cxx:134
#, c-format
msgid "ppdc: Adding/updating UI text from %s."
msgstr "ppdc: Añadiendo/actualizando texto UI desde %s."
-#: ppdc/ppdc-source.cxx:367
#, c-format
msgid "ppdc: Bad boolean value (%s) on line %d of %s."
msgstr "ppdc: Valor lógico (%s) incorrecto en línea %d de %s."
-#: ppdc/ppdc-import.cxx:264
#, c-format
msgid "ppdc: Bad font attribute: %s"
msgstr "ppdc: Atributo de fuente incorrecto: %s"
-#: ppdc/ppdc-source.cxx:1753
#, c-format
msgid "ppdc: Bad resolution name \"%s\" on line %d of %s."
msgstr "ppdc: Resolución de nombre \"%s\" incorrecta en línea %d de %s."
-#: ppdc/ppdc-source.cxx:1070
#, c-format
msgid "ppdc: Bad status keyword %s on line %d of %s."
msgstr "ppdc: Clave de estado %s incorrecta en línea %d de %s."
-#: ppdc/ppdc-source.cxx:1990
#, c-format
msgid "ppdc: Bad variable substitution ($%c) on line %d of %s."
msgstr "ppdc: Sustitución de variable ($%c) errónea en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:2675
#, c-format
msgid "ppdc: Choice found on line %d of %s with no Option."
msgstr "ppdc: Selección encontrada en línea %d de %s sin opciones."
-#: ppdc/ppdc-source.cxx:1655
#, c-format
msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
msgstr "ppdc: #po duplicado para código regional %s en línea %d de %s."
-#: ppdc/ppdc-source.cxx:889
#, c-format
msgid "ppdc: Expected a filter definition on line %d of %s."
msgstr "ppdc: Se esperaba una definición de filtro en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:912
#, c-format
msgid "ppdc: Expected a program name on line %d of %s."
msgstr "ppdc: Se esperaba un nombre de programa en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:351
#, c-format
msgid "ppdc: Expected boolean value on line %d of %s."
msgstr "ppdc: Se esperaba un valor lógico en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1050
#, c-format
msgid "ppdc: Expected charset after Font on line %d of %s."
msgstr ""
"ppdc: Se esperaba un juego de caracteres tras Font en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:404
#, c-format
msgid "ppdc: Expected choice code on line %d of %s."
msgstr "ppdc: Se esperaba un código apropiado en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:392
#, c-format
msgid "ppdc: Expected choice name/text on line %d of %s."
msgstr "ppdc: Se esperaba un nombre/texto apropiado en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:460
#, c-format
msgid "ppdc: Expected color order for ColorModel on line %d of %s."
msgstr ""
"ppdc: Se esperaba un orden de color para ColorModel en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:449
#, c-format
msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
msgstr "ppdc: Se esperaba colorspace para ColorModel en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:471
#, c-format
msgid "ppdc: Expected compression for ColorModel on line %d of %s."
msgstr "ppdc: Se esperaba compresión para ColorModel en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:652
#, c-format
msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
msgstr ""
"ppdc: Se esperaba una cadena de restricciones para UIConstraints en la línea "
"%d de %s."
-#: ppdc/ppdc-source.cxx:2861
#, c-format
msgid ""
"ppdc: Expected driver type keyword following DriverType on line %d of %s."
"ppdc: Se esperaba una clave de tipo de controlador tras DriverType en la "
"línea %d de %s."
-#: ppdc/ppdc-source.cxx:783
#, c-format
msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
msgstr "ppdc: Se esperaba un tipo dúplex tras Duplex en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1034
#, c-format
msgid "ppdc: Expected encoding after Font on line %d of %s."
msgstr "ppdc: Se esperaba una codificación tras Font en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1646
#, c-format
msgid "ppdc: Expected filename after #po %s on line %d of %s."
msgstr ""
"ppdc: Se esperaba un nombre de archivo tras #po %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1162
#, c-format
msgid "ppdc: Expected group name/text on line %d of %s."
msgstr "ppdc: Se esperaba un nombre/texto de grupo en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:2575
#, c-format
msgid "ppdc: Expected include filename on line %d of %s."
msgstr "ppdc: Se esperaba un nombre de archivo include en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1459
#, c-format
msgid "ppdc: Expected integer on line %d of %s."
msgstr "ppdc: Se esperaba un número entero en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1638
#, c-format
msgid "ppdc: Expected locale after #po on line %d of %s."
msgstr "ppdc: Se esperaba un código regional tras #po en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:310
#, c-format
msgid "ppdc: Expected name after %s on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3233
#, c-format
msgid "ppdc: Expected name after FileName on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras FileName en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1015
#, c-format
msgid "ppdc: Expected name after Font on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras Font en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3064
#, c-format
msgid "ppdc: Expected name after Manufacturer on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras Manufacturer en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3097
#, c-format
msgid "ppdc: Expected name after MediaSize on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras MediaSize en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3187
#, c-format
msgid "ppdc: Expected name after ModelName on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras ModelName en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3250
#, c-format
msgid "ppdc: Expected name after PCFileName on line %d of %s."
msgstr "ppdc: Se esperaba un nombre tras PCFileName en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1113
#, c-format
msgid "ppdc: Expected name/text after %s on line %d of %s."
msgstr "ppdc: Se esperaba un nombre/texto tras %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1202
#, c-format
msgid "ppdc: Expected name/text after Installable on line %d of %s."
msgstr ""
"ppdc: Se esperaba un nombre/texto tras Installable en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1739
#, c-format
msgid "ppdc: Expected name/text after Resolution on line %d of %s."
msgstr ""
"ppdc: Se esperaba un nombre/texto tras Resolution en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:436
#, c-format
msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
msgstr ""
"ppdc: Se esperaba una combinación nombre/texto para ColorModel en la línea "
"%d de %s."
-#: ppdc/ppdc-source.cxx:1531
#, c-format
msgid "ppdc: Expected option name/text on line %d of %s."
msgstr "ppdc: Se esperaba una opción de nombre/texto en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1565
#, c-format
msgid "ppdc: Expected option section on line %d of %s."
msgstr "ppdc: Se esperaba una sección de opciones en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1543
#, c-format
msgid "ppdc: Expected option type on line %d of %s."
msgstr "ppdc: Se esperaba un tipo de opción en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1722
#, c-format
msgid "ppdc: Expected override field after Resolution on line %d of %s."
msgstr ""
"ppdc: Se esperaba un campo de anulación tras Resolution en la línea %d de %s."
-#: ppdc/ppdc-catalog.cxx:389 ppdc/ppdc-catalog.cxx:401
#, c-format
msgid "ppdc: Expected quoted string on line %d of %s."
msgstr "ppdc: Se esperaba una cadena entrecomillada en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:961
#, c-format
msgid "ppdc: Expected real number on line %d of %s."
msgstr "ppdc: Se esperaba un número real en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:529
#, c-format
msgid ""
"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
"ppdc: Se esperaba resolución/tipo de soporte tras ColorProfile en la línea "
"%d de %s."
-#: ppdc/ppdc-source.cxx:1820
#, c-format
msgid ""
"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
"ppdc: Se esperaba resolución/tipo de soporte tras SimpleColorProfile en la "
"línea %d de %s."
-#: ppdc/ppdc-source.cxx:318
#, c-format
msgid "ppdc: Expected selector after %s on line %d of %s."
msgstr "ppdc: Se esperaba un selector tras %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1058
#, c-format
msgid "ppdc: Expected status after Font on line %d of %s."
msgstr "ppdc: Se esperaba un estado tras Font en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:2750
#, c-format
msgid "ppdc: Expected string after Copyright on line %d of %s."
msgstr "ppdc: Se esperaba una cadena tras Copyright en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3353
#, c-format
msgid "ppdc: Expected string after Version on line %d of %s."
msgstr "ppdc: Se esperaba una cadena tras Version en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:685
#, c-format
msgid "ppdc: Expected two option names on line %d of %s."
msgstr "ppdc: Se esperaban dos nombres de opciones en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:329
#, c-format
msgid "ppdc: Expected value after %s on line %d of %s."
msgstr "ppdc: Se esperaba un valor tras %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1042
#, c-format
msgid "ppdc: Expected version after Font on line %d of %s."
msgstr "ppdc: Se esperaba una versión tras Font en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:184
#, c-format
msgid "ppdc: Invalid #include/#po filename \"%s\"."
msgstr "ppdc: Nombre de archivo #include/#po incorrecto \"%s\"."
-#: ppdc/ppdc-source.cxx:929
#, c-format
msgid "ppdc: Invalid cost for filter on line %d of %s."
msgstr "ppdc: Coste incorrecto para el filtro en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:921
#, c-format
msgid "ppdc: Invalid empty MIME type for filter on line %d of %s."
msgstr "ppdc: Tipo MIME vacío incorrecto para el filtro en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:937
#, c-format
msgid "ppdc: Invalid empty program name for filter on line %d of %s."
msgstr ""
"ppdc: Nombre de programa vacío incorrecto para el filtro en la línea %d de "
"%s."
-#: ppdc/ppdc-source.cxx:1585
#, c-format
msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
msgstr "ppdc: Sección de opción incorrecta \"%s\" en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1557
#, c-format
msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
msgstr "ppdc: Tipo de opción incorrecta \"%s\" en la línea %d de %s."
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
#, c-format
msgid "ppdc: Loading driver information file \"%s\"."
msgstr "ppdc: Cargando archivo de información de controlador \"%s\"."
-#: ppdc/ppdc.cxx:182
#, c-format
msgid "ppdc: Loading messages for locale \"%s\"."
msgstr "ppdc: Cargando mensajes del idioma \"%s\"."
-#: ppdc/ppdc.cxx:121
#, c-format
msgid "ppdc: Loading messages from \"%s\"."
msgstr "ppdc: Cargando mensajes desde \"%s\"."
-#: ppdc/ppdc-source.cxx:2368 ppdc/ppdc-source.cxx:2600
#, c-format
msgid "ppdc: Missing #endif at end of \"%s\"."
msgstr "ppdc: Falta un #endif al final de \"%s\"."
-#: ppdc/ppdc-source.cxx:2469 ppdc/ppdc-source.cxx:2504
-#: ppdc/ppdc-source.cxx:2534
#, c-format
msgid "ppdc: Missing #if on line %d of %s."
msgstr "ppdc: Falta un #if en la línea %d de %s."
-#: ppdc/ppdc-catalog.cxx:466
#, c-format
msgid ""
"ppdc: Need a msgid line before any translation strings on line %d of %s."
"ppdc: Se necesita una línea msgid antes de cualquier cadena de traducción en "
"línea %d de %s."
-#: ppdc/ppdc-driver.cxx:712
#, c-format
msgid "ppdc: No message catalog provided for locale %s."
msgstr "ppdc: No se ha proporcionado catálogo de mensajes para el idioma %s."
-#: ppdc/ppdc-source.cxx:1608 ppdc/ppdc-source.cxx:2838
-#: ppdc/ppdc-source.cxx:2924 ppdc/ppdc-source.cxx:3017
-#: ppdc/ppdc-source.cxx:3150 ppdc/ppdc-source.cxx:3283
#, c-format
msgid "ppdc: Option %s defined in two different groups on line %d of %s."
msgstr ""
"ppdc: Opción %s definida en dos diferentes grupos en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:1601
#, c-format
msgid "ppdc: Option %s redefined with a different type on line %d of %s."
msgstr "ppdc: Opción %s redefinida con un tipo diferente en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:662
#, c-format
msgid "ppdc: Option constraint must *name on line %d of %s."
msgstr "ppdc: Opción de restricción debe *name en línea %d de %s."
-#: ppdc/ppdc-source.cxx:2451
#, c-format
msgid "ppdc: Too many nested #if's on line %d of %s."
msgstr "ppdc: Demasiados #if anidados en la línea %d de %s."
-#: ppdc/ppdc.cxx:369
#, c-format
msgid "ppdc: Unable to create PPD file \"%s\" - %s."
msgstr "ppdc: No se ha podido crear el archivo PPD \"%s\" - %s."
-#: ppdc/ppdc.cxx:261
#, c-format
msgid "ppdc: Unable to create output directory %s: %s"
msgstr "ppdc: No se ha podido crear el directorio de salida %s: %s"
-#: ppdc/ppdc.cxx:282
#, c-format
msgid "ppdc: Unable to create output pipes: %s"
msgstr "ppdc: No se han podido crear canales (pipes) de salida: %s"
-#: ppdc/ppdc.cxx:298 ppdc/ppdc.cxx:304
#, c-format
msgid "ppdc: Unable to execute cupstestppd: %s"
msgstr "ppdc: No se ha podido ejecutar cupstestppd: %s"
-#: ppdc/ppdc-source.cxx:1687
#, c-format
msgid "ppdc: Unable to find #po file %s on line %d of %s."
msgstr ""
"ppdc: No se ha podido encontrar el archivo #po %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:2607
#, c-format
msgid "ppdc: Unable to find include file \"%s\" on line %d of %s."
msgstr ""
"ppdc: No se ha podido encontrar el archivo include \"%s\" en la línea %d de "
"%s."
-#: ppdc/ppdc.cxx:193
#, c-format
msgid "ppdc: Unable to find localization for \"%s\" - %s"
msgstr "ppdc: No se ha podido encontrar localización para \"%s\" - %s"
-#: ppdc/ppdc.cxx:130
#, c-format
msgid "ppdc: Unable to load localization file \"%s\" - %s"
msgstr "ppdc: No se ha podido cargar el archivo de localización \"%s\" - %s"
-#: ppdc/ppdc-file.cxx:50
#, c-format
msgid "ppdc: Unable to open %s: %s"
msgstr "ppdc: No se pudo abrir %s: %s"
-#: ppdc/ppdc-source.cxx:2011
#, c-format
msgid "ppdc: Undefined variable (%s) on line %d of %s."
msgstr "ppdc: Variable no definida (%s) en la línea %d de %s."
-#: ppdc/ppdc-catalog.cxx:483
#, c-format
msgid "ppdc: Unexpected text on line %d of %s."
msgstr "ppdc: Texto inesperado en la línea %d del %s."
-#: ppdc/ppdc-source.cxx:2880
#, c-format
msgid "ppdc: Unknown driver type %s on line %d of %s."
msgstr "ppdc: Tipo de controlador desconocido %s en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:863
#, c-format
msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s."
msgstr "ppdc: Tipo dúplex desconocido \"%s\" en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:3110
#, c-format
msgid "ppdc: Unknown media size \"%s\" on line %d of %s."
msgstr "ppdc: Tamaño de papel desconocido \"%s\" en la línea %d de %s."
-#: ppdc/ppdc-catalog.cxx:511
#, c-format
msgid "ppdc: Unknown message catalog format for \"%s\"."
msgstr "ppdc: Formato del catálogo de mensajes para \"%s\" desconocido."
-#: ppdc/ppdc-source.cxx:3364
#, c-format
msgid "ppdc: Unknown token \"%s\" seen on line %d of %s."
msgstr "ppdc: Elemento desconocido \"%s\" visto en la línea %d de %s."
-#: ppdc/ppdc-source.cxx:971
#, c-format
msgid ""
"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
"ppdc: Caracteres finales desconocidos en el número real \"%s\" en la línea "
"%d de %s."
-#: ppdc/ppdc-source.cxx:2121
#, c-format
msgid "ppdc: Unterminated string starting with %c on line %d of %s."
msgstr "ppdc: Cadena que comienza por %c sin terminar en la línea %d de %s."
-#: ppdc/ppdc.cxx:360
#, c-format
msgid "ppdc: Warning - overlapping filename \"%s\"."
msgstr "ppdc: Advertencia - nombre de archivo superpuesto \"%s\"."
-#: ppdc/ppdc.cxx:375
#, c-format
msgid "ppdc: Writing %s."
msgstr "ppdc: Escribiendo %s."
-#: ppdc/ppdc.cxx:143
#, c-format
msgid "ppdc: Writing PPD files to directory \"%s\"."
msgstr "ppdc: Escribiendo archivos PPD al directorio \"%s\"."
-#: ppdc/ppdmerge.cxx:130
#, c-format
msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
msgstr "ppdmerge: LanguageVersion \"%s\" incorrecto en %s."
-#: ppdc/ppdmerge.cxx:170
#, c-format
msgid "ppdmerge: Ignoring PPD file %s."
msgstr "ppdmerge: Ignorando archivo PPD %s."
-#: ppdc/ppdmerge.cxx:154
#, c-format
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr "ppdmerge: No se ha podido hacer copia de respaldo de %s a %s - %s"
-#: systemv/lpstat.c:1777
#, c-format
msgid "printer %s disabled since %s -"
msgstr "la impresora %s está deshabilitada desde %s -"
-#: systemv/lpstat.c:1766
#, c-format
msgid "printer %s is idle. enabled since %s"
msgstr "la impresora %s está inactiva. activada desde %s"
-#: systemv/lpstat.c:1771
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
msgstr "la impresora %s está imprimiendo %s-%d. activada desde %s"
-#: systemv/lpstat.c:1900
#, c-format
msgid "printer %s/%s disabled since %s -"
msgstr "la impresora %s/%s está desactivada desde %s -"
-#: systemv/lpstat.c:1886
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
msgstr "la impresora %s/%s está inactiva. activada desde %s"
-#: systemv/lpstat.c:1893
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
msgstr "la impresora %s/%s está imprimiendo %s-%d. activada desde %s"
-#: cups/notify.c:93 cups/notify.c:134
msgid "processing"
msgstr "en proceso"
-#: systemv/lp.c:662
#, c-format
msgid "request id is %s-%d (%d file(s))"
msgstr "la id solicitada es %s-%d (%d archivo(s))"
-#: cups/snmp.c:972
msgid "request-id uses indefinite length"
msgstr "request-id usa una longitud indefinida"
-#: systemv/lpstat.c:2032
msgid "scheduler is not running"
msgstr "el planificador de tareas no se está ejecutando"
-#: systemv/lpstat.c:2028
msgid "scheduler is running"
msgstr "el planificador de tareas se está ejecutando"
-#: cups/adminutil.c:2148
#, c-format
msgid "stat of %s failed: %s"
msgstr "estado de %s ha fallado: %s"
-#: berkeley/lpc.c:203
msgid "status\t\tShow status of daemon and queue."
msgstr "status\t\tMuestra el estado del demonio (daemon) y la cola."
-#: cups/notify.c:96 cups/notify.c:137
msgid "stopped"
msgstr "parada"
-#: systemv/lpstat.c:1052
#, c-format
msgid "system default destination: %s"
msgstr "destino predeterminado del sistema: %s"
-#: systemv/lpstat.c:1049
#, c-format
msgid "system default destination: %s/%s"
msgstr "destino predeterminado del sistema: %s/%s"
-#: cups/notify.c:108 cups/notify.c:140
msgid "unknown"
msgstr "desconocido"
-#: cups/notify.c:117
msgid "untitled"
msgstr "sin título"
-#: cups/snmp.c:997
msgid "variable-bindings uses indefinite length"
msgstr "variable-bindings usa una longitud indefinida"
-
-#
-# End of "$Id$".
-#
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr ""
+#~ "El atributo de descripción de trabajo '%s' no puede ser suministrado en "
+#~ "una solicitud de creación de trabajo."
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"
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 ""
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 ""
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 ""
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 ""
msgid "Error Policy"
msgstr "Règles d’erreur"
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
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
msgid "Unable to read print data."
msgstr ""
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr ""
" 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 ""
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"
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\"."
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."
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\"."
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\"."
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."
#, 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 ""
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 ""
"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"
#~ 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."
msgstr ""
"Project-Id-Version: CUPS 2.0\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: 2014-11-15 19:27+0900\n"
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
msgid "\t\t(all)"
msgstr "\t\t(すべて)"
-#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
-#: systemv/lpstat.c:1996
msgid "\t\t(none)"
msgstr "\t\t(なし)"
-#: berkeley/lpc.c:426
#, c-format
msgid "\t%d entries"
msgstr "\t%d エントリー"
-#: systemv/lpstat.c:783 systemv/lpstat.c:799
#, c-format
msgid "\t%s"
msgstr "\t%s"
-#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
msgid "\tAfter fault: continue"
msgstr "\t失敗後: 継続"
-#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
#, c-format
msgid "\tAlerts: %s"
msgstr "\t警告: %s"
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
msgid "\tBanner required"
msgstr "\tバナーが必要"
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
msgid "\tCharset sets:"
msgstr "\t文字セット:"
-#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
msgid "\tConnection: direct"
msgstr "\t接続: 直結"
-#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
msgid "\tConnection: remote"
msgstr "\t接続: リモート"
-#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
msgid "\tContent types: any"
msgstr "\tコンテンツの種類: すべて"
-#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
msgid "\tDefault page size:"
msgstr "\tデフォルト用紙サイズ:"
-#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
msgid "\tDefault pitch:"
msgstr "\tデフォルトピッチ:"
-#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
msgid "\tDefault port settings:"
msgstr "\tデフォルトポート設定:"
-#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
#, c-format
msgid "\tDescription: %s"
msgstr "\t説明: %s"
-#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
msgid "\tForm mounted:"
msgstr "\t設定されたフォーム:"
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
msgid "\tForms allowed:"
msgstr "\t許可されているフォーム:"
-#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
#, c-format
msgid "\tInterface: %s.ppd"
msgstr "\tインターフェイス: %s.ppd"
-#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
#, c-format
msgid "\tInterface: %s/interfaces/%s"
msgstr "\tインターフェイス: %s/interfaces/%s"
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
#, c-format
msgid "\tInterface: %s/ppd/%s.ppd"
msgstr "\tインターフェイス: %s/ppd/%s.ppd"
-#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
#, c-format
msgid "\tLocation: %s"
msgstr "\t場所: %s"
-#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
msgid "\tOn fault: no alert"
msgstr "\t失敗時: 警告なし"
-#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
msgid "\tPrinter types: unknown"
msgstr "\tプリンターの種類: 不明"
-#: systemv/lpstat.c:1454
#, c-format
msgid "\tStatus: %s"
msgstr "\tステータス: %s"
-#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
-#: systemv/lpstat.c:1989
msgid "\tUsers allowed:"
msgstr "\t許可されているユーザー:"
-#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
msgid "\tUsers denied:"
msgstr "\t禁止されているユーザー:"
-#: berkeley/lpc.c:428
msgid "\tdaemon present"
msgstr "\tデーモンは提供されています"
-#: berkeley/lpc.c:424
msgid "\tno entries"
msgstr "\tエントリーがありません"
-#: berkeley/lpc.c:396 berkeley/lpc.c:408
#, c-format
msgid "\tprinter is on device '%s' speed -1"
msgstr "\tデバイス '%s' 上のプリンター 速度 -1"
-#: berkeley/lpc.c:421
msgid "\tprinting is disabled"
msgstr "\t印刷は無効です"
-#: berkeley/lpc.c:419
msgid "\tprinting is enabled"
msgstr "\t印刷は有効です"
-#: systemv/lpstat.c:1474
#, c-format
msgid "\tqueued for %s"
msgstr "\t%s にキューしました"
-#: berkeley/lpc.c:416
msgid "\tqueuing is disabled"
msgstr "\tキューは無効です"
-#: berkeley/lpc.c:414
msgid "\tqueuing is enabled"
msgstr "\tキューは有効です"
-#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
msgid "\treason unknown"
msgstr "\t未知の理由"
-#: systemv/cupstestppd.c:454
msgid ""
"\n"
" DETAILED CONFORMANCE TEST RESULTS"
"\n"
" 適合テスト結果詳細"
-#: systemv/cupstestppd.c:3820
msgid " Ignore specific warnings."
msgstr " 指定された警告を無視する。"
-#: systemv/cupstestppd.c:3824
msgid " Issue warnings instead of errors."
msgstr " エラーを警告として扱う。"
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
msgid " REF: Page 15, section 3.1."
msgstr " 参照: 15 ページ、セクション 3.1。"
-#: systemv/cupstestppd.c:405
msgid " REF: Page 15, section 3.2."
msgstr " 参照: 15 ページ、セクション 3.2。"
-#: systemv/cupstestppd.c:425
msgid " REF: Page 19, section 3.3."
msgstr " 参照: 19 ページ、セクション 3.3。"
-#: systemv/cupstestppd.c:378
msgid " REF: Page 20, section 3.4."
msgstr " 参照: 20 ページ、セクション 3.4。"
-#: systemv/cupstestppd.c:430
msgid " REF: Page 27, section 3.5."
msgstr " 参照: 27 ページ、セクション 3.5。"
-#: systemv/cupstestppd.c:373
msgid " REF: Page 42, section 5.2."
msgstr " 参照: 42 ページ、セクション 5.2。"
-#: systemv/cupstestppd.c:420
msgid " REF: Pages 16-17, section 3.2."
msgstr " 参照: 16-17 ページ、セクション 3.2。"
-#: systemv/cupstestppd.c:390
msgid " REF: Pages 42-45, section 5.2."
msgstr " 参照: 42-45 ページ、セクション 5.2。"
-#: systemv/cupstestppd.c:384
msgid " REF: Pages 45-46, section 5.2."
msgstr " 参照: 45-46 ページ、セクション 5.2。"
-#: systemv/cupstestppd.c:395
msgid " REF: Pages 48-49, section 5.2."
msgstr " 参照: 48-49 ページ、セクション 5.2。"
-#: systemv/cupstestppd.c:400
msgid " REF: Pages 52-54, section 5.2."
msgstr " 参照: 52-54 ページ、セクション 5.2。"
-#: berkeley/lpq.c:528
#, c-format
msgid " %-39.39s %.0f bytes"
msgstr " %-39.39s %.0f バイト"
-#: systemv/cupstestppd.c:589
#, c-format
msgid " PASS Default%s"
msgstr " 合格 Default%s"
-#: systemv/cupstestppd.c:524
msgid " PASS DefaultImageableArea"
msgstr " 合格 DefaultImageableArea"
-#: systemv/cupstestppd.c:558
msgid " PASS DefaultPaperDimension"
msgstr " 合格 DefaultPaperDimension"
-#: systemv/cupstestppd.c:631
msgid " PASS FileVersion"
msgstr " 合格 FileVersion"
-#: systemv/cupstestppd.c:675
msgid " PASS FormatVersion"
msgstr " 合格 FormatVersion"
-#: systemv/cupstestppd.c:695
msgid " PASS LanguageEncoding"
msgstr " 合格 LanguageEncoding"
-#: systemv/cupstestppd.c:715
msgid " PASS LanguageVersion"
msgstr " 合格 LanguageVersion"
-#: systemv/cupstestppd.c:769
msgid " PASS Manufacturer"
msgstr " 合格 Manufacturer"
-#: systemv/cupstestppd.c:809
msgid " PASS ModelName"
msgstr " 合格 ModelName"
-#: systemv/cupstestppd.c:829
msgid " PASS NickName"
msgstr " 合格 NickName"
-#: systemv/cupstestppd.c:889
msgid " PASS PCFileName"
msgstr " 合格 PCFileName"
-#: systemv/cupstestppd.c:964
msgid " PASS PSVersion"
msgstr " 合格 PSVersion"
-#: systemv/cupstestppd.c:869
msgid " PASS PageRegion"
msgstr " 合格 PageRegion"
-#: systemv/cupstestppd.c:849
msgid " PASS PageSize"
msgstr " 合格 PageSize"
-#: systemv/cupstestppd.c:924
msgid " PASS Product"
msgstr " 合格 Product"
-#: systemv/cupstestppd.c:999
msgid " PASS ShortNickName"
msgstr " 合格 ShortNickName"
-#: systemv/cupstestppd.c:1374
#, c-format
msgid " WARN %s has no corresponding options."
msgstr " 警告 %s は相当するオプションがありません。"
-#: systemv/cupstestppd.c:1486
#, c-format
msgid ""
" WARN %s shares a common prefix with %s\n"
" 警告 %s は %s と一般プレフィックスを共有します。\n"
" 参照: 15 ページ、セクション 3.2。"
-#: systemv/cupstestppd.c:1345
#, c-format
msgid ""
" WARN Duplex option keyword %s may not work as expected and should "
"ません。また、Duplex という名前であるべきです。 参照: 122 ペー"
"ジ、セクション 5.17"
-#: systemv/cupstestppd.c:1744
msgid " WARN File contains a mix of CR, LF, and CR LF line endings."
msgstr ""
" 警告 ファイルが CR、LF、CR LF の行末を混在して含んでいます。"
-#: systemv/cupstestppd.c:1390
msgid ""
" WARN LanguageEncoding required by PPD 4.3 spec.\n"
" REF: Pages 56-57, section 5.3."
" 警告 LanguageEncoding は PPD 4.3 仕様で必須です。\n"
" 参照: 56-57 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1726
#, c-format
msgid " WARN Line %d only contains whitespace."
msgstr " 警告 %d 行が空白だけです。"
-#: systemv/cupstestppd.c:1398
msgid ""
" WARN Manufacturer required by PPD 4.3 spec.\n"
" REF: Pages 58-59, section 5.3."
" 警告 Manufacturer は PPD 4.3 仕様で必須です。\n"
" 参照: 58-59 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1749
msgid ""
" WARN Non-Windows PPD files should use lines ending with only LF, "
"not CR LF."
" 警告 非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべ"
"きです。"
-#: systemv/cupstestppd.c:1382
#, c-format
msgid ""
" WARN Obsolete PPD version %.1f.\n"
" 警告 PPD バージョン %.1f は現在使われていません。\n"
" 参照: 42 ページ、セクション 5.2。"
-#: systemv/cupstestppd.c:1413
msgid ""
" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
" REF: Pages 61-62, section 5.3."
" 警告 8.3 文字より長い PCFileName は PPD 仕様違反です。\n"
" 参照: 61-62 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1421
msgid ""
" WARN PCFileName should contain a unique filename.\n"
" REF: Pages 61-62, section 5.3."
" 警告 PCFileName はユニークなファイル名でなければなりません。\n"
" 参照: 61-62 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1456
msgid ""
" WARN Protocols contains PJL but JCL attributes are not set.\n"
" REF: Pages 78-79, section 5.7."
"ん。\n"
" 参照: 78-79 ページ、セクション 5.7。"
-#: systemv/cupstestppd.c:1447
msgid ""
" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
" REF: Pages 78-79, section 5.7."
"す。\n"
" 参照: 78-79 ページ、セクション 5.7。"
-#: systemv/cupstestppd.c:1430
msgid ""
" WARN ShortNickName required by PPD 4.3 spec.\n"
" REF: Pages 64-65, section 5.3."
" 警告 ShortNickName は PPD 4.3 仕様で必須です。\n"
" 参照: 64-65 ページ、セクション 5.3。"
-#: systemv/cupsaddsmb.c:282
msgid " cupsaddsmb [options] -a"
msgstr " cupsaddsmb [オプション] -a"
-#: systemv/cupstestdsc.c:427
msgid " cupstestdsc [options] -"
msgstr " cupstestdsc [オプション] -"
-#: systemv/cupstestppd.c:3815
msgid " program | cupstestppd [options] -"
msgstr " program | cupstestppd [オプション] -"
-#: systemv/cupstestppd.c:3747
#, c-format
msgid ""
" %s \"%s %s\" conflicts with \"%s %s\"\n"
" %s \"%s %s\" は \"%s %s\" と競合します\n"
" (禁則=\"%s %s %s %s\")。"
-#: systemv/cupstestppd.c:2248
#, c-format
msgid " %s %s %s does not exist."
msgstr " %s %s %s が存在しません。"
-#: systemv/cupstestppd.c:3904
#, c-format
msgid " %s %s file \"%s\" has the wrong capitalization."
msgstr ""
" %s %s ファイル \"%s\" は不正な大文字で始まるワードを含んでいます。"
-#: systemv/cupstestppd.c:2318
#, c-format
msgid ""
" %s Bad %s choice %s.\n"
" %s 不正な %s が %s を選んでいます。\n"
" 参照: 122 ページ、セクション 5.17"
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s."
msgstr ""
" %s 不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s) です。"
-#: systemv/cupstestppd.c:3461
#, c-format
msgid " %s Bad UTF-8 \"%s\" translation string for option %s."
msgstr " %s 不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 用) です。"
-#: systemv/cupstestppd.c:2389
#, c-format
msgid " %s Bad cupsFilter value \"%s\"."
msgstr " %s 不正な値が cupsFilter に設定されています。 \"%s\""
-#: systemv/cupstestppd.c:2475
#, c-format
msgid " %s Bad cupsFilter2 value \"%s\"."
msgstr " %s 不正な値が cupsFilter2 に設定されています。 \"%s\""
-#: systemv/cupstestppd.c:2964
#, c-format
msgid " %s Bad cupsICCProfile %s."
msgstr " %s 不正な cupsICCProfile %s です。"
-#: systemv/cupstestppd.c:2571
#, c-format
msgid " %s Bad cupsPreFilter value \"%s\"."
msgstr " %s 不正な値が cupsPreFilter に設定されています。 \"%s\""
-#: systemv/cupstestppd.c:1822
#, c-format
msgid " %s Bad cupsUIConstraints %s: \"%s\""
msgstr " %s 不正な cupsUIConstraints %s: \"%s\" です。"
-#: systemv/cupstestppd.c:3411
#, c-format
msgid " %s Bad language \"%s\"."
msgstr " %s 無効な言語 \"%s\" です。"
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
#, c-format
msgid " %s Bad permissions on %s file \"%s\"."
msgstr " %s 不正なパーミッション %s です (ファイル \"%s\")。"
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
#, c-format
msgid " %s Bad spelling of %s - should be %s."
msgstr " %s %s の不正な綴りです - %s であるべきです。"
-#: systemv/cupstestppd.c:2907
#, c-format
msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID."
msgstr " %s APScanAppPath と APScanAppBundleID は同時に指定できません。"
-#: systemv/cupstestppd.c:2205
#, c-format
msgid " %s Default choices conflicting."
msgstr " %s デフォルトの選択肢が競合しています。"
-#: systemv/cupstestppd.c:1803
#, c-format
msgid " %s Empty cupsUIConstraints %s"
msgstr " %s 空の cupsUIConstraints %s です。"
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
#, c-format
msgid " %s Missing \"%s\" translation string for option %s, choice %s."
msgstr ""
" %s \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません。"
-#: systemv/cupstestppd.c:3447
#, c-format
msgid " %s Missing \"%s\" translation string for option %s."
msgstr " %s \"%s\" 翻訳文字列 (オプション %s 用) が見つかりません。"
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
#, c-format
msgid " %s Missing %s file \"%s\"."
msgstr " %s %s が見つかりません (ファイル \"%s\")。"
-#: systemv/cupstestppd.c:3121
#, c-format
msgid ""
" %s Missing REQUIRED PageRegion option.\n"
" %s 必須の PageRegion オプションが見つかりません。\n"
" 参照: 100 ページ、セクション 5.14。"
-#: systemv/cupstestppd.c:3106
#, c-format
msgid ""
" %s Missing REQUIRED PageSize option.\n"
" %s 必須の PageSize オプションが見つかりません。\n"
" 参照: 99 ページ、セクション 5.14。"
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
#, c-format
msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
msgstr ""
" %s 選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりませ"
"ん。"
-#: systemv/cupstestppd.c:1908
#, c-format
msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
msgstr ""
" %s 選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません。"
-#: systemv/cupstestppd.c:1840
#, c-format
msgid " %s Missing cupsUIResolver %s"
msgstr " %s cupsUIResolver ファイル %s が見つかりません。"
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
#, c-format
msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"."
msgstr ""
" %s オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません。"
-#: systemv/cupstestppd.c:1892
#, c-format
msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\""
msgstr ""
" %s オプション %s がcupsUIConstraints %s に見つかりません: \"%s\""
-#: systemv/cupstestppd.c:3633
#, c-format
msgid " %s No base translation \"%s\" is included in file."
msgstr " %s ファイルにベース翻訳文字列 \"%s\" がありません。"
-#: systemv/cupstestppd.c:2294
#, c-format
msgid ""
" %s REQUIRED %s does not define choice None.\n"
" %s 必須の %s が選択肢 None を定義していません。\n"
" 参照: 122 ページ、セクション 5.17。"
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
#, c-format
msgid " %s Size \"%s\" defined for %s but not for %s."
msgstr ""
" %s サイズ \"%s\" は %s 向けに定義されていますが、%s にはありません。"
-#: systemv/cupstestppd.c:3160
#, c-format
msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)."
msgstr " %s サイズ \"%s\" は規定外の寸法 (%gx%g) を持っています。"
-#: systemv/cupstestppd.c:3351
#, c-format
msgid " %s Size \"%s\" should be \"%s\"."
msgstr " %s サイズ \"%s\" は \"%s\" であるべきです。"
-#: systemv/cupstestppd.c:3300
#, c-format
msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"."
msgstr " %s サイズ \"%s\" は Adobe 標準名称 \"%s\" であるべきです。"
-#: systemv/cupstestppd.c:3041
#, c-format
msgid " %s cupsICCProfile %s hash value collides with %s."
msgstr " %s cupsICCProfileのハッシュ値 %s が %s と一致しません。"
-#: systemv/cupstestppd.c:1963
#, c-format
msgid " %s cupsUIResolver %s causes a loop."
msgstr " %s cupsUIResolverの %s がループしています。"
-#: systemv/cupstestppd.c:1945
#, c-format
msgid ""
" %s cupsUIResolver %s does not list at least two different options."
" %s cupsUIResolver %s は最低でも 2 つの異なったオプションを持っていなけ"
"ればなりません。"
-#: systemv/cupstestppd.c:1168
#, c-format
msgid ""
" **FAIL** %s must be 1284DeviceID\n"
" **失敗** %s は 1284DeviceID でなければなりません。\n"
" 参照: 72 ページ、セクション 5.5"
-#: systemv/cupstestppd.c:580
#, c-format
msgid ""
" **FAIL** Bad Default%s %s\n"
" **失敗** 不正な Default%s %s\n"
" 参照: 40 ページ、セクション 4.5。"
-#: systemv/cupstestppd.c:514
#, c-format
msgid ""
" **FAIL** Bad DefaultImageableArea %s\n"
" **失敗** %s は不正な DefaultImageableArea です。\n"
" 参照: 102 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:550
#, c-format
msgid ""
" **FAIL** Bad DefaultPaperDimension %s\n"
" **失敗** %s は不正な DefaultPaperDimension です。\n"
" 参照: 103 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:623
#, c-format
msgid ""
" **FAIL** Bad FileVersion \"%s\"\n"
" **失敗** 不正なFileVersion \"%s\"\n"
" 参照: 56 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:667
#, c-format
msgid ""
" **FAIL** Bad FormatVersion \"%s\"\n"
" **失敗** FormatVersion が違います \"%s\"\n"
" 参照: 56 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1025
msgid ""
" **FAIL** Bad JobPatchFile attribute in file\n"
" REF: Page 24, section 3.4."
" **失敗** ファイルに不正な JobPatchFile 属性があります\n"
" 参照: 24 ページ、セクション 3.4。"
-#: systemv/cupstestppd.c:1213
#, c-format
msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1."
msgstr ""
" **失敗** 無効な LanguageEncoding %s - ISOLatin1 でなければなりません。"
-#: systemv/cupstestppd.c:1227
#, c-format
msgid " **FAIL** Bad LanguageVersion %s - must be English."
msgstr ""
" **失敗** 無効な LanguageVersion %s - English でなければなりません。"
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
#, c-format
msgid ""
" **FAIL** Bad Manufacturer (should be \"%s\")\n"
" **失敗** 不正な Manufacturer (\"%s\" でなければなりません)\n"
" 参照: 211 ページ、表 D.1。"
-#: systemv/cupstestppd.c:800
#, c-format
msgid ""
" **FAIL** Bad ModelName - \"%c\" not allowed in string.\n"
" **失敗** 不正な ModelName - 文字列に \"%c\" は許可されていません。\n"
" 参照: 59-60 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:956
msgid ""
" **FAIL** Bad PSVersion - not \"(string) int\".\n"
" REF: Pages 62-64, section 5.3."
" **失敗** 不正な PSVersion - \"(文字列) 整数\" ではありません。\n"
" 参照: 62-64 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:917
msgid ""
" **FAIL** Bad Product - not \"(string)\".\n"
" REF: Page 62, section 5.3."
" **失敗** 不正な Product - \"(文字列)\" ではありません。\n"
" 参照: 62 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:991
msgid ""
" **FAIL** Bad ShortNickName - longer than 31 chars.\n"
" REF: Pages 64-65, section 5.3."
" **失敗** 不正な ShortNickName - 31 文字を超えています。\n"
" 参照: 64-65 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1149
#, c-format
msgid ""
" **FAIL** Bad option %s choice %s\n"
" **失敗** 不正な %s が %s を選んでいます。\n"
" 参照: 84 ページ、セクション 5.9"
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
#, c-format
msgid " **FAIL** Default option code cannot be interpreted: %s"
msgstr " **失敗** デフォルトのオプションコードが解釈できません: %s"
-#: systemv/cupstestppd.c:1286
#, c-format
msgid ""
" **FAIL** Default translation string for option %s choice %s contains "
" **失敗** オプション %s、選択肢 %s のデフォルトの翻訳文字列が 8 ビット"
"文字を含んでいます。"
-#: systemv/cupstestppd.c:1259
#, c-format
msgid ""
" **FAIL** Default translation string for option %s contains 8-bit "
" **失敗** オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んで"
"います。"
-#: systemv/cupstestppd.c:2101
#, c-format
msgid " **FAIL** Group names %s and %s differ only by case."
msgstr " **失敗** グループ名 %s と %s は大文字/小文字が違うだけです。"
-#: systemv/cupstestppd.c:2146
#, c-format
msgid " **FAIL** Multiple occurrences of option %s choice name %s."
msgstr " **失敗** %s で複数のオプション %s が選択されています。"
-#: systemv/cupstestppd.c:2163
#, c-format
msgid " **FAIL** Option %s choice names %s and %s differ only by case."
msgstr ""
" **失敗** %s が選択した %s と %s は大文字/小文字のみが違うだけです。"
-#: systemv/cupstestppd.c:2123
#, c-format
msgid " **FAIL** Option names %s and %s differ only by case."
msgstr " **失敗** オプション名 %s と %s は大文字/小文字が違うだけです。"
-#: systemv/cupstestppd.c:600
#, c-format
msgid ""
" **FAIL** REQUIRED Default%s\n"
" **失敗** Default%s は必須\n"
" 参照: 40 ページ、セクション 4.5。"
-#: systemv/cupstestppd.c:499
msgid ""
" **FAIL** REQUIRED DefaultImageableArea\n"
" REF: Page 102, section 5.15."
" **失敗** DefaultImageableArea は必須\n"
" 参照: 102 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:535
msgid ""
" **FAIL** REQUIRED DefaultPaperDimension\n"
" REF: Page 103, section 5.15."
" **失敗** DefaultPaperDimension は必須\n"
" 参照: 103 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:641
msgid ""
" **FAIL** REQUIRED FileVersion\n"
" REF: Page 56, section 5.3."
" **失敗** FileVersion は必須\n"
" 参照: 56 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:685
msgid ""
" **FAIL** REQUIRED FormatVersion\n"
" REF: Page 56, section 5.3."
" **失敗** FormatVersion は必須\n"
" 参照: 56 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1076
#, c-format
msgid ""
" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
" 参照: 41 ページ、セクション 5。\n"
" 参照: 102 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:705
msgid ""
" **FAIL** REQUIRED LanguageEncoding\n"
" REF: Pages 56-57, section 5.3."
" **失敗** LanguageEncoding は必須\n"
" 参照: 56-57 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:725
msgid ""
" **FAIL** REQUIRED LanguageVersion\n"
" REF: Pages 57-58, section 5.3."
" **失敗** LanguageVersion は必須\n"
" 参照: 57-58 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:779
msgid ""
" **FAIL** REQUIRED Manufacturer\n"
" REF: Pages 58-59, section 5.3."
" **失敗** Manufacturer は必須\n"
" 参照: 58-59 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:819
msgid ""
" **FAIL** REQUIRED ModelName\n"
" REF: Pages 59-60, section 5.3."
" **失敗** ModelName は必須\n"
" 参照: 59-60 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:839
msgid ""
" **FAIL** REQUIRED NickName\n"
" REF: Page 60, section 5.3."
" **失敗** NickName は必須\n"
" 参照: 60 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:899
msgid ""
" **FAIL** REQUIRED PCFileName\n"
" REF: Pages 61-62, section 5.3."
" **失敗** PCFileName は必須\n"
" 参照: 61-62 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:974
msgid ""
" **FAIL** REQUIRED PSVersion\n"
" REF: Pages 62-64, section 5.3."
" **失敗** PSVersion は必須\n"
" 参照: 62-64 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:879
msgid ""
" **FAIL** REQUIRED PageRegion\n"
" REF: Page 100, section 5.14."
" **失敗** PageRegion は必須\n"
" 参照: 100 ページ、セクション 5.14。"
-#: systemv/cupstestppd.c:1045
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Page 41, section 5.\n"
" 参照: 41 ページ、セクション 5。\n"
" 参照: 99 ページ、セクション 5.14。"
-#: systemv/cupstestppd.c:859
msgid ""
" **FAIL** REQUIRED PageSize\n"
" REF: Pages 99-100, section 5.14."
" **失敗** PageSize は必須\n"
" 参照: 99-100 ページ、セクション 5.14。"
-#: systemv/cupstestppd.c:1098
#, c-format
msgid ""
" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
" 参照: 41 ページ、セクション 5。\n"
" 参照: 103 ページ、セクション 5.15。"
-#: systemv/cupstestppd.c:934
msgid ""
" **FAIL** REQUIRED Product\n"
" REF: Page 62, section 5.3."
" **失敗** Product は必須\n"
" 参照: 62 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:1009
msgid ""
" **FAIL** REQUIRED ShortNickName\n"
" REF: Page 64-65, section 5.3."
" **失敗** ShortNickName は必須\n"
" 参照: 64-65 ページ、セクション 5.3。"
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
#, c-format
msgid " **FAIL** Unable to open PPD file - %s on line %d."
msgstr ""
" 失敗\n"
" **失敗** PPD ファイルを開けません - %s (%d 行)。"
-#: systemv/cupstestppd.c:1498
#, c-format
msgid " %d ERRORS FOUND"
msgstr " %d 個のエラーが見つかりました"
-#: systemv/cupstestdsc.c:431
msgid " -h Show program usage"
msgstr " -h このプログラムの利用法を表示する"
-#: systemv/cupstestdsc.c:234 systemv/cupstestdsc.c:276
#, c-format
msgid ""
" Bad %%%%BoundingBox: on line %d.\n"
" 不正な %%%%BoundingBox: (%d 行)。\n"
" 参照: 39 ページ、%%%%BoundingBox:"
-#: systemv/cupstestdsc.c:305
#, c-format
msgid ""
" Bad %%%%Page: on line %d.\n"
" 不正な %%%%Page: (%d 行)。\n"
" 参照: 53 ページ、%%%%Page:"
-#: systemv/cupstestdsc.c:218 systemv/cupstestdsc.c:258
#, c-format
msgid ""
" Bad %%%%Pages: on line %d.\n"
" 不正な %%%%Pages: (%d 行)。\n"
" REF: Page 43, %%%%Pages:"
-#: systemv/cupstestdsc.c:176
#, c-format
msgid ""
" Line %d is longer than 255 characters (%d).\n"
" %d 行が 255文字より長くなっています (%d)。\n"
" 参照: 25 ページ、Line Length"
-#: systemv/cupstestdsc.c:192
msgid ""
" Missing %!PS-Adobe-3.0 on first line.\n"
" REF: Page 17, 3.1 Conforming Documents"
" 先頭行に %!PS-Adobe-3.0 がありません。\n"
" 参照: 17 ページ、3.1 Conforming Documents"
-#: systemv/cupstestdsc.c:362
#, c-format
msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments"
msgstr ""
" %%EndComments コメントが見つかりません。\n"
" 参照: 41 ページ、%%EndComments"
-#: systemv/cupstestdsc.c:342
#, c-format
msgid ""
" Missing or bad %%BoundingBox: comment.\n"
" %%BoundingBox: コメントが見つからないか不正です。\n"
" 参照: 39 ページ、%%BoundingBox:"
-#: systemv/cupstestdsc.c:372
#, c-format
msgid ""
" Missing or bad %%Page: comments.\n"
" %%Page: コメントが見つからないか不正です。\n"
" 参照: 53 ページ、%%Page:"
-#: systemv/cupstestdsc.c:352
#, c-format
msgid ""
" Missing or bad %%Pages: comment.\n"
" %%Pages: コメントが見つからないか不正です。\n"
" 参照: 43 ページ、%%Pages:"
-#: systemv/cupstestppd.c:1500
msgid " NO ERRORS FOUND"
msgstr " エラーは見つかりませんでした"
-#: systemv/cupstestdsc.c:395
#, c-format
msgid " Saw %d lines that exceeded 255 characters."
msgstr " 255文字を超える %d 行が見つかりました。"
-#: systemv/cupstestdsc.c:390
#, c-format
msgid " Too many %%BeginDocument comments."
msgstr " %%BeginDocument コメントが多すぎます。"
-#: systemv/cupstestdsc.c:382
#, c-format
msgid " Too many %%EndDocument comments."
msgstr " %%EndDocument コメントが多すぎます。"
-#: systemv/cupstestdsc.c:402
msgid " Warning: file contains binary data."
msgstr " 警告: ファイルにバイナリデータが含まれています。"
-#: systemv/cupstestdsc.c:410
#, c-format
msgid " Warning: no %%EndComments comment in file."
msgstr " 警告: ファイルに %%EndComments コメントがありません。"
-#: systemv/cupstestdsc.c:406
#, c-format
msgid " Warning: obsolete DSC version %.1f in file."
msgstr " 警告: ファイルは時代遅れの DSC バージョン %.1f です。"
-#: test/ippfind.c:2788
msgid " ! expression Unary NOT of expression."
msgstr "! <式> 式を否定する単項演算子。"
-#: test/ippfind.c:2787
msgid " ( expressions ) Group expressions."
msgstr " ( <複数の式> ) グループ化された複数の式。"
-#: systemv/cupsctl.c:210
msgid " --[no-]debug-logging Turn debug logging on/off."
msgstr " --[no-]debug-logging デバッグログの有効/無効を切り替える。"
-#: systemv/cupsctl.c:212
msgid " --[no-]remote-admin Turn remote administration on/off."
msgstr " --[no-]remote-admin リモート管理の有効/無効を切り替える。"
-#: systemv/cupsctl.c:214
msgid " --[no-]remote-any Allow/prevent access from the Internet."
msgstr ""
" --[no-]remote-any インターネットからのアクセスを許可/禁止する。"
-#: systemv/cupsctl.c:216
msgid " --[no-]share-printers Turn printer sharing on/off."
msgstr " --[no-]share-printers プリンター共有の有効/無効を切り替える。"
-#: systemv/cupsctl.c:218
msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
msgstr ""
" --[no-]user-cancel-any あらゆるジョブのキャンセルをユーザーに許可/禁止する"
-#: ppdc/ppdc.cxx:450
msgid " --cr End lines with CR (Mac OS 9)."
msgstr " --cr 行末を CR とする (Mac OS 9)。"
-#: ppdc/ppdc.cxx:452
msgid " --crlf End lines with CR + LF (Windows)."
msgstr " --crlf 行末を CR + LF とする (Windows)。"
-#: test/ippfind.c:2769
msgid " --domain regex Match domain to regular expression."
msgstr " --domain <正規表現> ドメインが正規表現にマッチするか。"
-#: test/ippfind.c:2770
msgid ""
" --exec utility [argument ...] ;\n"
" Execute program if true."
" --exec <実行ファイル名> [引数 ...] ;\n"
" 成功した場合、<実行ファイル名>を実行する。"
-#: test/ippfind.c:2790
msgid " --false Always false."
msgstr " --false 常に失敗。"
-#: test/ipptool.c:4806
msgid " --help Show help."
msgstr " --help ヘルプを表示する。"
-#: test/ippfind.c:2752
msgid " --help Show this help."
msgstr " --help このヘルプを表示する。"
-#: test/ippfind.c:2772
msgid " --host regex Match hostname to regular expression."
msgstr " --host <正規表現> ホスト名が正規表現にマッチするか。"
-#: ppdc/ppdc.cxx:454
msgid " --lf End lines with LF (UNIX/Linux/OS X)."
msgstr " --lf 行末を LF とする (UNIX/Linux/OS X)。"
-#: scheduler/cupsfilter.c:1483
msgid " --list-filters List filters that will be used."
msgstr " --list-filters 使用されるフィルターのリストを表示する。"
-#: test/ippfind.c:2774
msgid " --local True if service is local."
msgstr " --local サービスがローカルなら真。"
-#: test/ippfind.c:2773
msgid " --ls List attributes."
msgstr " --ls 属性の一覧を表示する。"
-#: test/ippfind.c:2775
msgid " --name regex Match service name to regular expression."
msgstr " --name <正規表現> サービス名が正規表現とマッチするか。"
-#: test/ippfind.c:2789
msgid " --not expression Unary NOT of expression."
msgstr " --not <式> 式を否定する単項演算子。"
-#: test/ippfind.c:2776
msgid " --path regex Match resource path to regular expression."
msgstr " --path <正規表現> リソースのパスが正規表現とマッチするか。"
-#: test/ippfind.c:2777
msgid " --port number[-number] Match port to number or range."
msgstr ""
" --port 番号[-番号] ポートが指定された番号または範囲とマッチするか。"
-#: test/ippfind.c:2778
msgid " --print Print URI if true."
msgstr " --print 結果が真なら URI を表示する。"
-#: test/ippfind.c:2779
msgid " --print-name Print service name if true."
msgstr " --print-name 結果が真ならサービス名を表示する。"
-#: test/ippfind.c:2780
msgid " --quiet Quietly report match via exit code."
msgstr ""
" --quiet マッチ結果を終了コードで報告し、出力をしない。"
-#: test/ippfind.c:2781
msgid " --remote True if service is remote."
msgstr " --remote サービスがリモートなら真。"
-#: test/ipptool.c:4807
msgid ""
" --stop-after-include-error\n"
" Stop tests after a failed INCLUDE."
" --stop-after-include-error\n"
" INCLUDE が失敗したときテストを停止する。"
-#: test/ippfind.c:2791
msgid " --true Always true."
msgstr " --true 常に真。"
-#: test/ippfind.c:2782
msgid " --txt key True if the TXT record contains the key."
msgstr " --txt <キー名> TXT レコードがキー名を含んでいたら真。"
-#: test/ippfind.c:2783
msgid " --txt-* regex Match TXT record key to regular expression."
msgstr ""
" --txt-* <正規表現> TXT レコードのキーが正規表現とマッチしたら真。"
-#: test/ippfind.c:2784
msgid " --uri regex Match URI to regular expression."
msgstr " --uri <正規表現> URI が正規表現とマッチするか。"
-#: test/ippfind.c:2753
msgid " --version Show program version."
msgstr " --version プログラムのバージョンを表示。"
-#: test/ipptool.c:4809
msgid " --version Show version."
msgstr " --version バージョンを表示する。"
-#: test/ippfind.c:2746 test/ipptool.c:4810
msgid " -4 Connect using IPv4."
msgstr " -4 IPv4 で接続する。"
-#: test/ippfind.c:2747 test/ipptool.c:4811
msgid " -6 Connect using IPv6."
msgstr " -6 IPv6 で接続する。"
-#: test/ipptool.c:4812
msgid " -C Send requests using chunking (default)."
msgstr ""
" -C chunking を用いてリクエストを送る (デフォルト)。"
-#: scheduler/cupsfilter.c:1484
msgid " -D Remove the input file when finished."
msgstr " -D 終了したときに入力ファイルを削除する。"
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
msgid " -D name=value Set named variable to value."
msgstr ""
" -D name=value name で指定された変数に値 value をセットする。"
-#: systemv/cupsaddsmb.c:285 systemv/cupsctl.c:205
msgid " -E Encrypt the connection."
msgstr " -E 接続を暗号化する。"
-#: test/ipptool.c:4814
msgid " -E Test with HTTP Upgrade to TLS."
msgstr ""
" -E HTTP から TLS へのアップグレードでテストする。"
-#: scheduler/main.c:2149
msgid ""
" -F Run in the foreground but detach from console."
msgstr ""
" -F フォアグラウンドで実行するがコンソールからはデタッ"
"チする。"
-#: systemv/cupsaddsmb.c:286
msgid " -H samba-server Use the named SAMBA server."
msgstr " -H sambaサーバー 指定の SAMBA サーバーを使う。"
-#: test/ipptool.c:4816
msgid " -I Ignore errors."
msgstr " -I エラーを無視する。"
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
msgid " -I include-dir Add include directory to search path."
msgstr ""
" -I include-dir インクルードディレクトリーを検索パスに含める。"
-#: systemv/cupstestppd.c:3819
msgid " -I {filename,filters,none,profiles}"
msgstr " -I {filename,filters,none,profiles}"
-#: test/ipptool.c:4817
msgid " -L Send requests using content-length."
msgstr " -L content-length を用いてリクエストを送る。"
-#: test/ipptool.c:4819
msgid ""
" -P filename.plist Produce XML plist to a file and test report to "
"standard output."
-msgstr " -P filename.plist XML の plist 形式で書き出しテストリポートを標準出力にする。"
+msgstr ""
+" -P filename.plist XML の plist 形式で書き出しテストリポートを標準出力"
+"にする。"
-#: scheduler/cupsfilter.c:1485
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd PPD ファイルを指定する。"
-#: test/ippfind.c:2756
msgid " -P number[-number] Match port to number or range."
msgstr ""
" -P 番号[-番号] ポートが指定された番号または範囲とマッチするか。"
-#: systemv/cupstestppd.c:3821
msgid " -R root-directory Set alternate root."
msgstr " -R root-directory 別のルートディレクトリーを指定する。"
-#: test/ipptool.c:4820
msgid " -S Test with SSL encryption."
msgstr " -S SSL 暗号化でテストする。"
-#: test/ippfind.c:2748
msgid " -T seconds Set the browse timeout in seconds."
msgstr " -T <秒> ブラウズのタイムアウトを秒で指定する。"
-#: test/ipptool.c:4822
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr " -T seconds 受信/送信タイムアウトを秒で指定する。"
-#: scheduler/cupsfilter.c:1486 systemv/cupsaddsmb.c:288 systemv/cupsctl.c:206
msgid " -U username Specify username."
msgstr " -U username ユーザー名を指定する。"
-#: test/ippfind.c:2750 test/ipptool.c:4824
msgid " -V version Set default IPP version."
msgstr " -V version デフォルトの IPP バージョンを指定する。"
-#: systemv/cupstestppd.c:3822
msgid ""
" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
"translations}"
" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
"translations}"
-#: test/ipptool.c:4826
msgid " -X Produce XML plist instead of plain text."
msgstr " -X プレーンテキストの代わりに XML を用いる。"
-#: test/ippdiscover.c:818
msgid " -a Browse for all services."
msgstr " -a すべてのサービスをブラウズする。"
-#: systemv/cupsaddsmb.c:289
msgid " -a Export all printers."
msgstr " -a すべてのプリンターをエクスポートする。"
-#: test/ipptool.c:4828
msgid " -c Produce CSV output."
msgstr " -c CSV 出力を行う。"
-#: ppdc/ppdc.cxx:437
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catalog.po 指定したメッセージカタログをロードする。"
-#: scheduler/cupsfilter.c:1487
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr " -c cups-files.conf cups-files.conf を利用するよう設定する。"
-#: scheduler/main.c:2147
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr " -c cupsd.conf 使用する cupsd.conf ファイルを指定する。"
-#: test/ippdiscover.c:819
msgid " -d domain Browse/resolve in specified domain."
msgstr " -d <ドメイン名> 指定されたドメインでブラウズ/名前解決する。"
-#: test/ipptool.c:4829
msgid " -d name=value Set named variable to value."
msgstr ""
" -d name=value name で指定された変数に値 value をセットする。"
-#: ppdc/ppdc.cxx:439
msgid " -d output-dir Specify the output directory."
msgstr " -d output-dir 出力先ディレクトリーを指定する。"
-#: scheduler/cupsfilter.c:1488
msgid " -d printer Use the named printer."
msgstr " -d printer 指定されたプリンターを利用する。"
-#: test/ippfind.c:2757
msgid " -d regex Match domain to regular expression."
msgstr " -d <正規表現> ドメインが正規表現にマッチするか。"
-#: scheduler/cupsfilter.c:1489
msgid " -e Use every filter from the PPD file."
msgstr ""
" -e PPD ファイルからすべてのフィルターを使用する。"
-#: scheduler/main.c:2148
msgid " -f Run in the foreground."
msgstr " -f フォアグラウンドで実行する。"
-#: test/ipptool.c:4831
msgid " -f filename Set default request filename."
msgstr " -f filename デフォルトのリクエストファイル名を指定する。"
-#: scheduler/main.c:2151
msgid " -h Show this usage message."
msgstr " -h このヘルプメッセージを表示する。"
-#: test/ippfind.c:2758
msgid " -h regex Match hostname to regular expression."
msgstr " -h <正規表現> ホスト名が正規表現にマッチするか。"
-#: systemv/cupsaddsmb.c:290 systemv/cupsctl.c:207
msgid " -h server[:port] Specify server address."
msgstr " -h server[:port] サーバーアドレスを指定する。"
-#: scheduler/cupsfilter.c:1490
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
" -i mime/type 入力の MIME タイプを指定する (指定がなければ自動タ"
"イプ)。"
-#: test/ipptool.c:4833
msgid ""
" -i seconds Repeat the last file with the given time interval."
msgstr ""
" -i seconds 最後のファイルを与えられた時間間隔で繰り返す。"
-#: scheduler/cupsfilter.c:1491
msgid ""
" -j job-id[,N] Filter file N from the specified job (default is "
"file 1)."
" -j job-id[,N] フィルターファイル N を指定されたジョブから使用す"
"る (デフォルトは ファイル 1)。"
-#: test/ippfind.c:2759
msgid " -l List attributes."
msgstr " -l 属性の一覧を表示する。"
-#: test/ipptool.c:4835
msgid " -l Produce plain text output."
msgstr " -l プレーンテキスト出力を行う。"
-#: scheduler/main.c:2152
msgid " -l Run cupsd on demand."
msgstr " -l cupsd をオンデマンドで実行する。"
-#: ppdc/ppdc.cxx:441
msgid " -l lang[,lang,...] Specify the output language(s) (locale)."
msgstr " -l lang[,lang,...] 出力言語を指定する。(複数可能)"
-#: ppdc/ppdc.cxx:443
msgid " -m Use the ModelName value as the filename."
msgstr " -m ModelName の値をファイル名として使用する。"
-#: scheduler/cupsfilter.c:1492
msgid ""
" -m mime/type Set output MIME type (otherwise application/pdf)."
msgstr ""
" -m mime/type 出力の MIME タイプを指定する (指定がなければ "
"application/pdf)。"
-#: scheduler/cupsfilter.c:1493
msgid " -n copies Set number of copies."
msgstr " -n copies 部数を指定する。"
-#: test/ipptool.c:4836
msgid ""
" -n count Repeat the last file the given number of times."
msgstr " -n count 最後のファイルを与えられた回数だけ繰り返す。"
-#: test/ippfind.c:2760
msgid " -n regex Match service name to regular expression."
msgstr " -n <正規表現> サービス名が正規表現とマッチするか。"
-#: ppdc/ppdi.cxx:133
msgid ""
" -o filename.drv Set driver information file (otherwise ppdi.drv)."
msgstr ""
" -o filename.drv ドライバー情報ファイルを指定する (指定がなければ "
"ppdi.drv)。"
-#: ppdc/ppdmerge.cxx:364
msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
msgstr ""
" -o filename.ppd[.gz] 出力ファイルを指定する (指定がなければ標準出力)。"
-#: scheduler/cupsfilter.c:1494
msgid " -o name=value Set option(s)."
msgstr " -o name=value オプションを指定する。"
-#: test/ippfind.c:2761
msgid " -p Print URI if true."
msgstr " -p 結果が真なら URI を表示する。"
-#: scheduler/cupsfilter.c:1495
msgid " -p filename.ppd Set PPD file."
msgstr " -p filename.ppd PPD ファイルを指定する。"
-#: test/ippdiscover.c:820
msgid " -p program Run specified program for each service."
msgstr ""
" -p <プログラム名> 指定されたプログラムをそれぞれのサービスに対し実行"
"する。"
-#: test/ippfind.c:2762
msgid " -q Quietly report match via exit code."
msgstr ""
" -q マッチ結果を終了コードで報告し、出力をしない。"
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
msgid " -q Run silently."
msgstr " -q 詳細は表示しない。"
-#: test/ippfind.c:2763
msgid " -r True if service is remote."
msgstr " -r サービスがリモートなら真。"
-#: systemv/cupstestppd.c:3827
msgid " -r Use 'relaxed' open mode."
msgstr " -r 寛容モードを用いる。"
-#: test/ippfind.c:2764
msgid " -s Print service name if true."
msgstr " -s 結果が真ならサービス名を表示する。"
-#: test/ipptool.c:4839
msgid " -t Produce a test report."
msgstr " -t テストリポートを出力する。"
-#: ppdc/ppdc.cxx:445
msgid " -t Test PPDs instead of generating them."
msgstr " -t PPD を出力しないでテストする。"
-#: scheduler/main.c:2153
msgid " -t Test the configuration file."
msgstr " -t 設定ファイルをテストする。"
-#: test/ippfind.c:2765
msgid " -t key True if the TXT record contains the key."
msgstr " -t <キー名> TXT レコードがキー名を含んでいたら真。"
-#: scheduler/cupsfilter.c:1496
msgid " -t title Set title."
msgstr " -t title タイトルを指定する。"
-#: test/ippdiscover.c:821
msgid " -t type Browse/resolve with specified type."
msgstr " -t タイプ 指定されたタイプでブラウズ/名前解決する。"
-#: scheduler/cupsfilter.c:1497
msgid " -u Remove the PPD file when finished."
msgstr " -u 終了したときに PPD ファイルを削除する。"
-#: test/ippfind.c:2766
msgid " -u regex Match URI to regular expression."
msgstr " -u <正規表現> URI が正規表現とマッチするか。"
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
msgid " -v Be verbose."
msgstr " -v 冗長出力を行う。"
-#: systemv/cupstestppd.c:3829
msgid " -vv Be very verbose."
msgstr " -vv より冗長な出力を行う。"
-#: test/ippfind.c:2767
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
" -x <実行ファイル名> [引数 ...] ;\n"
" 成功した場合、<実行ファイル名> を実行する。"
-#: ppdc/ppdc.cxx:448
msgid " -z Compress PPD files using GNU zip."
msgstr " -z PPD ファイルを GNU zip を使って圧縮する。"
-#: test/ippfind.c:2810
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
msgstr " IPPFIND_SERVICE_DOMAIN ドメイン名"
-#: test/ippfind.c:2811
msgid ""
" IPPFIND_SERVICE_HOSTNAME\n"
" Fully-qualified domain name"
" IPPFIND_SERVICE_HOSTNAME\n"
" 完全修飾ドメイン名 (FQDN)"
-#: test/ippfind.c:2813
msgid " IPPFIND_SERVICE_NAME Service instance name"
msgstr " IPPFIND_SERVICE_NAME サービスインスタンス名"
-#: test/ippfind.c:2814
msgid " IPPFIND_SERVICE_PORT Port number"
msgstr " IPPFIND_SERVICE_PORT ポート番号"
-#: test/ippfind.c:2815
msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
msgstr " IPPFIND_SERVICE_REGTYPE DNS-SD 登録タイプ"
-#: test/ippfind.c:2816
msgid " IPPFIND_SERVICE_SCHEME URI scheme"
msgstr " IPPFIND_SERVICE_SCHEME URI スキーム"
-#: test/ippfind.c:2817
msgid " IPPFIND_SERVICE_URI URI"
msgstr " IPPFIND_SERVICE_URI URI"
-#: test/ippfind.c:2818
msgid " IPPFIND_TXT_* Value of TXT record key"
msgstr " IPPFIND_TXT_* TXT レコードキーの値"
-#: test/ippfind.c:2793
msgid ""
" expression --and expression\n"
" Logical AND."
msgstr " <式> --and <式> 論理 AND。"
-#: test/ippfind.c:2795
msgid ""
" expression --or expression\n"
" Logical OR."
msgstr " <式> --or <式> 論理 OR。"
-#: test/ippfind.c:2792
msgid " expression expression Logical AND."
msgstr " <式> <式> 論理 AND。"
-#: test/ippfind.c:2800
msgid " {service_domain} Domain name"
msgstr " {service_domain} ドメイン名"
-#: test/ippfind.c:2801
msgid " {service_hostname} Fully-qualified domain name"
msgstr " {service_hostname} 完全修飾ドメイン名 (FQDN)"
-#: test/ippfind.c:2802
msgid " {service_name} Service instance name"
msgstr " {service_name} サービスインスタンス名"
-#: test/ippfind.c:2803
msgid " {service_port} Port number"
msgstr " {service_port} ポート番号"
-#: test/ippfind.c:2804
msgid " {service_regtype} DNS-SD registration type"
msgstr " {service_regtype} DNS-SD 登録タイプ"
-#: test/ippfind.c:2805
msgid " {service_scheme} URI scheme"
msgstr " {service_scheme} URI スキーム"
-#: test/ippfind.c:2806
msgid " {service_uri} URI"
msgstr " {service_uri} URI"
-#: test/ippfind.c:2807
msgid " {txt_*} Value of TXT record key"
msgstr " {txt_*} TXT レコードキーの値"
-#: test/ippfind.c:2799
msgid " {} URI"
msgstr " {} URI"
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
msgid " FAIL"
msgstr " 失敗"
-#: systemv/cupstestppd.c:1306
msgid " PASS"
msgstr " 合格"
-#: cups/ipp.c:5227
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
msgstr "\"%s\": URI の値 \"%s\" が誤っています - %s (RFC 2911 4.1.5 節)。"
-#: cups/ipp.c:5238
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
msgstr ""
"\"%s\": URI の値 \"%s\" が誤っています - 長さの誤り %d (RFC 2911 4.1.5 節)。"
-#: cups/ipp.c:4858
#, c-format
msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
msgstr "\"%s\": 属性名が誤っています - 長さの誤り %d (RFC 2911 4.1.3 節)。"
-#: cups/ipp.c:4850
#, c-format
msgid ""
"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
msgstr "\"%s\": 属性名が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
-#: cups/ipp.c:4876
#, c-format
msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
msgstr "\"%s\": 真偽値 %d が誤っています (RFC 2911 4.1.11 節)。"
-#: cups/ipp.c:5290
#, c-format
msgid ""
"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
msgstr ""
"\"%s\": charset の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.7 節)。"
-#: cups/ipp.c:5299
#, c-format
msgid ""
"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
"\"%s\": charset の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 section "
"4.1.7)."
-#: cups/ipp.c:4976
#, c-format
msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
msgstr ""
"\"%s\": dateTime UTC の時間指定 %u が誤っています (RFC 2911 4.1.14 節)."
-#: cups/ipp.c:4984
#, c-format
msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": dateTime UTC の分指定 %u が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4968
#, c-format
msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
msgstr ""
"\"%s\": dateTime UTC の符号指定 '%c' が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4928
#, c-format
msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": dateTime の日付指定 %u が誤っています (RFC 2911 4.1.14 節)."
-#: cups/ipp.c:4960
#, c-format
msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
msgstr ""
"\"%s\": dateTime の 0.1 秒の指定 %u が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4936
#, c-format
msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": dateTime の時間指定 %u が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4944
#, c-format
msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": dateTime の分指定が誤っています %u (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4920
#, c-format
msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": dateTime の月指定 %u が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4952
#, c-format
msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
msgstr "\"%s\": 日時の秒指定 %u が誤っています (RFC 2911 4.1.14 節)。"
-#: cups/ipp.c:4890
#, c-format
msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
msgstr "\"%s\": enum の値 %d が誤っています - 範囲外の値 (RFC 2911 4.1.4 節)。"
-#: cups/ipp.c:5205
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
msgstr ""
"\"%s\": keyword の値 \"%s\" が誤っています - %d (RFC 2911 section 4.1.3)."
-#: cups/ipp.c:5196
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
msgstr ""
"\"%s\": keyword の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
-#: cups/ipp.c:5399
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
"\"%s\": mimeMediaType の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
"4.1.9 節)。"
-#: cups/ipp.c:5409
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
"\"%s\": mimeMediaType の値 \"%s\" が誤っています - 長さの誤り %d (RFC 2911 "
"4.1.9 節)。"
-#: cups/ipp.c:5167
#, c-format
msgid ""
"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
"\"%s\": name の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC 2911 "
"4.1.2 節)。"
-#: cups/ipp.c:5176
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
msgstr ""
"\"%s\": name の値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 section "
"4.1.2)。"
-#: cups/ipp.c:5345
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
"\"%s\": naturalLanguage の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
"4.1.8 節)。"
-#: cups/ipp.c:5355
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
"\"%s\": naturalLanguage の値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 "
"4.1.8 節)。"
-#: cups/ipp.c:4904
#, c-format
msgid ""
"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
msgstr ""
"\"%s\": octetString 値が誤っています - 誤った長さ %d (RFC 2911 4.1.10 節)。"
-#: cups/ipp.c:5047
#, c-format
msgid ""
"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
"\"%s\": rangeOfInteger の値 %d-%d が誤っています - 下限が上限よりも大きい "
"(RFC 2911 4.1.13 節)。"
-#: cups/ipp.c:5028
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
"\"%s\": resolution の値 %dx%d%s が誤っています - 単位値の誤り (RFC 2911 "
"4.1.15 節)。"
-#: cups/ipp.c:4997
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
"positive (RFC 2911 section 4.1.15)."
-msgstr "\"%s\": resolution の値 %dx%d%s が誤っています - 主走査解像度が負 (RFC 2911 4.1.15 節)。"
+msgstr ""
+"\"%s\": resolution の値 %dx%d%s が誤っています - 主走査解像度が負 (RFC 2911 "
+"4.1.15 節)。"
-#: cups/ipp.c:5012
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
"\"%s\": resolution の値 %dx%d%s が誤っています - 副走査解像度が負 (RFC 2911 "
"4.1.15 節)。"
-#: cups/ipp.c:5109
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
"\"%s\": text の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC 2911 "
"4.1.1 節)。"
-#: cups/ipp.c:5118
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
msgstr ""
"\"%s\": text の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.1 節)。"
-#: cups/ipp.c:5261
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
"\"%s\": uriScheme の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 4.1.6 "
"節)."
-#: cups/ipp.c:5270
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
-msgstr "\"%s\": uriScheme の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.6 節)."
+msgstr ""
+"\"%s\": uriScheme の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.6 "
+"節)."
-#: berkeley/lpq.c:533
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト"
-#: cups/dest-localization.c:114
#, c-format
msgid "%d x %d mm"
msgstr "%d x %d mm"
-#: cups/dest-localization.c:106
#, c-format
msgid "%g x %g"
msgstr "%g x %g"
-#: cups/dest-localization.c:169 cups/dest-localization.c:176
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: cups/dest-localization.c:183
#, c-format
msgid "%s (%s, %s)"
msgstr "%s (%s, %s)"
-#: cups/dest-localization.c:160
#, c-format
msgid "%s (Borderless)"
msgstr "%s (ふちなし)"
-#: cups/dest-localization.c:167 cups/dest-localization.c:174
#, c-format
msgid "%s (Borderless, %s)"
msgstr "%s (ふちなし, %s)"
-#: cups/dest-localization.c:181
#, c-format
msgid "%s (Borderless, %s, %s)"
msgstr "%s (ふちなし, %s, %s)"
-#: systemv/lpstat.c:777
#, c-format
msgid "%s accepting requests since %s"
msgstr "%s は %s からリクエストを受け付けています"
-#: scheduler/ipp.c:9952
#, c-format
msgid "%s cannot be changed."
msgstr "%s は変更できません。"
-#: berkeley/lpc.c:181
#, c-format
msgid "%s is not implemented by the CUPS version of lpc."
msgstr "%s は lpc の CUPS バージョンでは実装されていません。"
-#: berkeley/lpq.c:618
#, c-format
msgid "%s is not ready"
msgstr "%s は準備ができていません"
-#: berkeley/lpq.c:611
#, c-format
msgid "%s is ready"
msgstr "%s は準備ができています"
-#: berkeley/lpq.c:614
#, c-format
msgid "%s is ready and printing"
msgstr "%s は準備ができており印刷しています"
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
-#: filter/rastertolabel.c:1120
#, c-format
msgid "%s job-id user title copies options [file]"
msgstr "%s ジョブID ユーザー タイトル コピー数 オプション [ファイル]"
-#: systemv/lpstat.c:781
#, c-format
msgid "%s not accepting requests since %s -"
msgstr "%s は %s からリクエストを受け付けていません -"
-#: scheduler/ipp.c:618
#, c-format
msgid "%s not supported."
msgstr "%s はサポートされていません。"
-#: systemv/lpstat.c:792
#, c-format
msgid "%s/%s accepting requests since %s"
msgstr "%s/%s は %s からリクエストを受け付けています"
-#: systemv/lpstat.c:797
#, c-format
msgid "%s/%s not accepting requests since %s -"
msgstr "%s/%s は %s からリクエストを受け付けていません - "
-#: berkeley/lpq.c:526
#, c-format
msgid "%s: %-33.33s [job %d localhost]"
msgstr "%s:%-33.33s [ジョブ %d localhost]"
#. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: systemv/cancel.c:305 systemv/cancel.c:368
#, c-format
msgid "%s: %s failed: %s"
msgstr "%s: %s に失敗しました: %s"
-#: test/ippfind.c:777 test/ipptool.c:378
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr "%s: -V オプションにおいて %s は不正なバージョンです。"
-#: systemv/cupsaccept.c:68
#, c-format
msgid "%s: Don't know what to do."
msgstr "%s: 何が起きているか不明です。"
-#: berkeley/lpq.c:225 berkeley/lpr.c:358 systemv/lp.c:602
#, c-format
msgid ""
"%s: Error - %s environment variable names non-existent destination \"%s\"."
msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています。"
-#: berkeley/lpq.c:133 berkeley/lpq.c:203 berkeley/lpr.c:230 berkeley/lpr.c:333
-#: systemv/lp.c:157 systemv/lp.c:577 systemv/lp.c:697 systemv/lp.c:746
-#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
-#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
-#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
-#: systemv/lpstat.c:1579
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
msgstr "%s: エラー - '/version=1.1' をサーバー名に付与してください。"
-#: systemv/lp.c:234
#, c-format
msgid "%s: Error - bad job ID."
msgstr "%s: エラー - 不正なジョブ ID です。"
-#: systemv/lp.c:222
#, c-format
msgid "%s: Error - cannot print files and alter jobs simultaneously."
msgstr ""
"%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません。"
-#: systemv/lp.c:515
#, c-format
msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
msgstr ""
"%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷で"
"きません。 "
-#: systemv/lp.c:464
#, c-format
msgid "%s: Error - expected character set after \"-S\" option."
msgstr "%s: エラー - \"-S\" オプションのあとには文字セットが必要です。"
-#: systemv/lp.c:483
#, c-format
msgid "%s: Error - expected content type after \"-T\" option."
msgstr "%s: エラー - \"-T\" オプションのあとにはコンテンツタイプが必要です。"
-#: berkeley/lpr.c:245
#, c-format
msgid "%s: Error - expected copies after \"-#\" option."
msgstr "%s: エラー - \"-#\" オプションのあとにはコピー数が必要です。"
-#: systemv/lp.c:267
#, c-format
msgid "%s: Error - expected copies after \"-n\" option."
msgstr "%s: エラー - \"-n\" オプションのあとにはコピー数が必要です。"
-#: berkeley/lpr.c:206
#, c-format
msgid "%s: Error - expected destination after \"-P\" option."
msgstr "%s: エラー - \"-P\" オプションのあとには宛先が必要です。"
-#: systemv/lp.c:132
#, c-format
msgid "%s: Error - expected destination after \"-d\" option."
msgstr "%s: エラー - \"-d\" オプションのあとにはプリンター名が必要です。"
-#: systemv/lp.c:171
#, c-format
msgid "%s: Error - expected form after \"-f\" option."
msgstr "%s: エラー - \"-f\" オプションのあとには用紙名が必要です。"
-#: systemv/lp.c:394
#, c-format
msgid "%s: Error - expected hold name after \"-H\" option."
msgstr "%s: エラー - \"-H\" オプションのあとにはホールド名が必要です。"
-#: berkeley/lpr.c:100
#, c-format
msgid "%s: Error - expected hostname after \"-H\" option."
msgstr "%s: エラー - \"-H\" オプションのあとにはホスト名が必要です。"
-#: berkeley/lpq.c:169 berkeley/lprm.c:123 systemv/cancel.c:124
-#: systemv/cupsaccept.c:123 systemv/lp.c:192 systemv/lpstat.c:266
#, c-format
msgid "%s: Error - expected hostname after \"-h\" option."
msgstr "%s: エラー - \"-h\" オプションのあとにはホスト名が必要です。"
-#: systemv/lp.c:374
#, c-format
msgid "%s: Error - expected mode list after \"-y\" option."
msgstr "%s: エラー - \"-y\" オプションのあとにはモードリストが必要です。"
-#: berkeley/lpr.c:268
#, c-format
msgid "%s: Error - expected name after \"-%c\" option."
msgstr "%s: エラー - \"-%c\" オプションのあとには名前が必要です。"
-#: berkeley/lpr.c:150 systemv/lp.c:291
#, c-format
msgid "%s: Error - expected option=value after \"-o\" option."
msgstr "%s: エラー - \"-o\" オプションのあとには オプション=値 が必要です。"
-#: systemv/lp.c:444
#, c-format
msgid "%s: Error - expected page list after \"-P\" option."
msgstr "%s: エラー - \"-P\" オプションのあとにはページリストが必要です。"
-#: systemv/lp.c:311
#, c-format
msgid "%s: Error - expected priority after \"-%c\" option."
msgstr "%s: エラー - \"-%c\" オプションのあとには優先度が必要です。"
-#: systemv/cupsaccept.c:141
#, c-format
msgid "%s: Error - expected reason text after \"-r\" option."
msgstr "%s: エラー - \"-r\" のあとには理由のテキストが必要です。"
-#: systemv/lp.c:357
#, c-format
msgid "%s: Error - expected title after \"-t\" option."
msgstr "%s: エラー - \"-t\" オプションのあとにはタイトルが必要です。"
-#: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
-#: systemv/lpstat.c:124
#, c-format
msgid "%s: Error - expected username after \"-U\" option."
msgstr "%s: エラー - \"-U\" オプションのあとにはユーザー名が必要です。"
-#: systemv/cancel.c:145
#, c-format
msgid "%s: Error - expected username after \"-u\" option."
msgstr "%s: エラー - \"-u\" オプションのあとにはユーザー名が必要です。"
-#: berkeley/lpr.c:122
#, c-format
msgid "%s: Error - expected value after \"-%c\" option."
msgstr "%s: エラー - \"-%c\" オプションのあとには値が必要です。"
-#: systemv/lpstat.c:144 systemv/lpstat.c:158
#, c-format
msgid ""
"%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" "
"%s: エラー - \"-W\" オプションのあとには、\"completed\"、\"not-completed"
"\"、\"all\" のいずれかが必要です。"
-#: berkeley/lpq.c:230 berkeley/lpr.c:363 systemv/lp.c:607
#, c-format
msgid "%s: Error - no default destination available."
msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。"
-#: systemv/lp.c:333
#, c-format
msgid "%s: Error - priority must be between 1 and 100."
msgstr "%s: エラー - 優先度は 1 から 100 の間である必要があります。"
-#: berkeley/lpr.c:366 systemv/lp.c:610
#, c-format
msgid "%s: Error - scheduler not responding."
msgstr "%s: エラー - スケジューラーが応答していません。"
-#: berkeley/lpr.c:311 systemv/lp.c:547
#, c-format
msgid "%s: Error - too many files - \"%s\"."
msgstr "%s: エラー - ファイルが多すぎます - \"%s\""
-#: berkeley/lpr.c:293 systemv/lp.c:530
#, c-format
msgid "%s: Error - unable to access \"%s\" - %s"
msgstr "%s: エラー - \"%s\" にアクセスできません - %s"
-#: berkeley/lpr.c:409 systemv/lp.c:641
#, c-format
msgid "%s: Error - unable to queue from stdin - %s."
msgstr "%s: エラー - 標準入力からキューにデータを入力できません。 - %s"
-#: berkeley/lprm.c:87 berkeley/lprm.c:172 systemv/cancel.c:222
#, c-format
msgid "%s: Error - unknown destination \"%s\"."
msgstr "%s: エラー - \"%s\" は未知の宛先です。"
-#: berkeley/lpq.c:137
#, c-format
msgid "%s: Error - unknown destination \"%s/%s\"."
msgstr "%s: エラー - \"%s/%s\" は未知の宛先です。"
-#: berkeley/lpr.c:279 berkeley/lprm.c:139 systemv/cancel.c:163
-#: systemv/cupsaccept.c:164 systemv/lp.c:506 systemv/lpstat.c:456
#, c-format
msgid "%s: Error - unknown option \"%c\"."
msgstr "%s: エラー - '%c' は未知のオプションです。"
-#: systemv/cupsaccept.c:157 systemv/lp.c:497
#, c-format
msgid "%s: Error - unknown option \"%s\"."
msgstr "%s: エラー - '%s' は未知のオプションです。"
-#: systemv/lp.c:211
#, c-format
msgid "%s: Expected job ID after \"-i\" option."
msgstr "%s: '-i' オプションのあとにはジョブ ID が必要です。"
-#: systemv/lpstat.c:514 systemv/lpstat.c:554
#, c-format
msgid "%s: Invalid destination name in list \"%s\"."
msgstr "%s: リスト \"%s\" に無効な宛先名があります。"
-#: scheduler/cupsfilter.c:579
#, c-format
msgid "%s: Invalid filter string \"%s\"."
msgstr "%s: 無効なフィルター文字列です \"%s\""
-#: test/ipptool.c:309
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr "%s: \"-P\" にファイル名がありません。"
-#: test/ippfind.c:749 test/ipptool.c:346
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr "%s: \"-T\" オプションにタイムアウトが設定されていません。"
-#: test/ippfind.c:762 test/ipptool.c:360
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr "%s: \"-V\" オプションにバージョンの指定がありません。"
-#: systemv/lp.c:421
#, c-format
msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
msgstr "%s: '-H restart' の前にはジョブ ID ('-i ジョブID') が必要です。"
-#: scheduler/cupsfilter.c:451
#, c-format
msgid "%s: No filter to convert from %s/%s to %s/%s."
msgstr "%s: %s/%s から %s/%s に変換するフィルターがありません。"
-#: systemv/cupsaccept.c:198
#, c-format
msgid "%s: Operation failed: %s"
msgstr "%s: 操作に失敗しました: %s"
-#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
-#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr "%s: 残念ながら、暗号化サポートはコンパイル時に組み込まれていません。"
-#: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
-#: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
#, c-format
msgid "%s: Unable to connect to server."
msgstr "%s: サーバーに接続できません"
-#: systemv/cancel.c:328
#, c-format
msgid "%s: Unable to contact server."
msgstr "%s: サーバーに連絡できません。"
-#: scheduler/cupsfilter.c:416
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
#, c-format
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr "%s: \"%s\" の MIME タイプを判別できません。"
-#: test/ipptool.c:318
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr "%s: \"%s\" を開けません: %s"
-#: ppdc/ppdmerge.cxx:90
#, c-format
msgid "%s: Unable to open %s: %s"
msgstr "%s: %s を開けません: %s"
-#: scheduler/cupsfilter.c:674 ppdc/ppdmerge.cxx:106
#, c-format
msgid "%s: Unable to open PPD file: %s on line %d."
msgstr "%s: PPD ファイルを開けません: %s の %d 行目"
-#: scheduler/cupsfilter.c:383
#, c-format
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
msgstr ""
"%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません。"
-#: berkeley/lpq.c:140 systemv/lpstat.c:575
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
#, c-format
msgid "%s: Unknown destination \"%s\"."
msgstr "%s: \"%s\" は未知の宛先です。"
-#: scheduler/cupsfilter.c:428
#, c-format
msgid "%s: Unknown destination MIME type %s/%s."
msgstr "%s: %s/%s は未知の宛先 MIME タイプです。"
-#: scheduler/cupsfilter.c:1479
#, c-format
msgid "%s: Unknown option \"%c\"."
msgstr "%s: '%c' は未知のオプションです。"
-#: test/ippfind.c:648
#, c-format
msgid "%s: Unknown option \"%s\"."
msgstr "%s: \"%s\" は未知のオプションです。"
-#: test/ippfind.c:928
#, c-format
msgid "%s: Unknown option \"-%c\"."
msgstr "%s: \"-%c\" は未知のオプションです。"
-#: scheduler/cupsfilter.c:408
#, c-format
msgid "%s: Unknown source MIME type %s/%s."
msgstr "%s: %s/%s は未知のソース MIME タイプです。"
-#: berkeley/lpr.c:136
#, c-format
msgid ""
"%s: Warning - \"%c\" format modifier not supported - output may not be "
"%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものにな"
"るかもしれません。"
-#: systemv/lp.c:471
#, c-format
msgid "%s: Warning - character set option ignored."
msgstr "%s: 警告 - 文字セットオプションは無視されます。"
-#: systemv/lp.c:490
#, c-format
msgid "%s: Warning - content type option ignored."
msgstr "%s: 警告 - コンテンツタイプオプションは無視されます。"
-#: systemv/lp.c:178
#, c-format
msgid "%s: Warning - form option ignored."
msgstr "%s: 警告 - 用紙オプションは無視されます。"
-#: systemv/lp.c:381
#, c-format
msgid "%s: Warning - mode option ignored."
msgstr "%s: 警告 - モードオプションは無視されます。"
-#: ppdc/sample.c:305
msgid "-1"
msgstr "-1"
-#: ppdc/sample.c:296
msgid "-10"
msgstr "-10"
-#: ppdc/sample.c:388
msgid "-100"
msgstr "-100"
-#: ppdc/sample.c:387
msgid "-105"
msgstr "-105"
-#: ppdc/sample.c:295
msgid "-11"
msgstr "-11"
-#: ppdc/sample.c:386
msgid "-110"
msgstr "-110"
-#: ppdc/sample.c:385
msgid "-115"
msgstr "-115"
-#: ppdc/sample.c:294
msgid "-12"
msgstr "-12"
-#: ppdc/sample.c:384
msgid "-120"
msgstr "-120"
-#: ppdc/sample.c:293
msgid "-13"
msgstr "-13"
-#: ppdc/sample.c:292
msgid "-14"
msgstr "-14"
-#: ppdc/sample.c:291
msgid "-15"
msgstr "-15"
-#: ppdc/sample.c:304
msgid "-2"
msgstr "-2"
-#: ppdc/sample.c:404
msgid "-20"
msgstr "-20"
-#: ppdc/sample.c:403
msgid "-25"
msgstr "-25"
-#: ppdc/sample.c:303
msgid "-3"
msgstr "-3"
-#: ppdc/sample.c:402
msgid "-30"
msgstr "-30"
-#: ppdc/sample.c:401
msgid "-35"
msgstr "-35"
-#: ppdc/sample.c:302
msgid "-4"
msgstr "-4"
-#: ppdc/sample.c:400
msgid "-40"
msgstr "-40"
-#: ppdc/sample.c:399
msgid "-45"
msgstr "-45"
-#: ppdc/sample.c:301
msgid "-5"
msgstr "-5"
-#: ppdc/sample.c:398
msgid "-50"
msgstr "-50"
-#: ppdc/sample.c:397
msgid "-55"
msgstr "-55"
-#: ppdc/sample.c:300
msgid "-6"
msgstr "-6"
-#: ppdc/sample.c:396
msgid "-60"
msgstr "-60"
-#: ppdc/sample.c:395
msgid "-65"
msgstr "-65"
-#: ppdc/sample.c:299
msgid "-7"
msgstr "-7"
-#: ppdc/sample.c:394
msgid "-70"
msgstr "-70"
-#: ppdc/sample.c:393
msgid "-75"
msgstr "-75"
-#: ppdc/sample.c:298
msgid "-8"
msgstr "-8"
-#: ppdc/sample.c:392
msgid "-80"
msgstr "-80"
-#: ppdc/sample.c:391
msgid "-85"
msgstr "-85"
-#: ppdc/sample.c:297
msgid "-9"
msgstr "-9"
-#: ppdc/sample.c:390
msgid "-90"
msgstr "-90"
-#: ppdc/sample.c:389
msgid "-95"
msgstr "-95"
-#: ppdc/sample.c:306
msgid "0"
msgstr "0"
-#: ppdc/sample.c:307
msgid "1"
msgstr "1"
-#: ppdc/sample.c:379
msgid "1 inch/sec."
msgstr "1 インチ/秒"
-#: ppdc/sample.c:172
msgid "1.25x0.25\""
msgstr "1.25x0.25 インチ"
-#: ppdc/sample.c:173
msgid "1.25x2.25\""
msgstr "1.25x2.25 インチ"
-#: ppdc/sample.c:427
msgid "1.5 inch/sec."
msgstr "1.5 インチ/秒"
-#: ppdc/sample.c:174
msgid "1.50x0.25\""
msgstr "1.50x0.25 インチ"
-#: ppdc/sample.c:175
msgid "1.50x0.50\""
msgstr "1.50x0.50 インチ"
-#: ppdc/sample.c:176
msgid "1.50x1.00\""
msgstr "1.50x1.00 インチ"
-#: ppdc/sample.c:177
msgid "1.50x2.00\""
msgstr "1.50x2.00 インチ"
-#: ppdc/sample.c:316
msgid "10"
msgstr "10"
-#: ppdc/sample.c:438
msgid "10 inches/sec."
msgstr "10 インチ/秒"
-#: ppdc/sample.c:6
msgid "10 x 11"
msgstr "10 x 11 インチ"
-#: ppdc/sample.c:7
msgid "10 x 13"
msgstr "10 x 13 インチ"
-#: ppdc/sample.c:8
msgid "10 x 14"
msgstr "10 x 14 インチ"
-#: ppdc/sample.c:418
msgid "100"
msgstr "100"
-#: ppdc/sample.c:329
msgid "100 mm/sec."
msgstr "100 ミリメートル/秒"
-#: ppdc/sample.c:419
msgid "105"
msgstr "105"
-#: ppdc/sample.c:317
msgid "11"
msgstr "11"
-#: ppdc/sample.c:439
msgid "11 inches/sec."
msgstr "11 インチ/秒"
-#: ppdc/sample.c:420
msgid "110"
msgstr "110"
-#: ppdc/sample.c:421
msgid "115"
msgstr "115"
-#: ppdc/sample.c:318
msgid "12"
msgstr "12"
-#: ppdc/sample.c:440
msgid "12 inches/sec."
msgstr "12 インチ/秒"
-#: ppdc/sample.c:9
msgid "12 x 11"
msgstr "12 x 11 インチ"
-#: ppdc/sample.c:422
msgid "120"
msgstr "120"
-#: ppdc/sample.c:330
msgid "120 mm/sec."
msgstr "120 ミリメートル/秒"
-#: ppdc/sample.c:243
msgid "120x60dpi"
msgstr "120x60dpi"
-#: ppdc/sample.c:249
msgid "120x72dpi"
msgstr "120x72dpi"
-#: ppdc/sample.c:319
msgid "13"
msgstr "13"
-#: ppdc/sample.c:232
msgid "136dpi"
msgstr "136dpi"
-#: ppdc/sample.c:320
msgid "14"
msgstr "14"
-#: ppdc/sample.c:321
msgid "15"
msgstr "15"
-#: ppdc/sample.c:323
msgid "15 mm/sec."
msgstr "15 ミリメートル/秒"
-#: ppdc/sample.c:10
msgid "15 x 11"
msgstr "15 x 11 インチ"
-#: ppdc/sample.c:331
msgid "150 mm/sec."
msgstr "150 ミリメートル/秒"
-#: ppdc/sample.c:278
msgid "150dpi"
msgstr "150dpi"
-#: ppdc/sample.c:363
msgid "16"
msgstr "16"
-#: ppdc/sample.c:364
msgid "17"
msgstr "17"
-#: ppdc/sample.c:365
msgid "18"
msgstr "18"
-#: ppdc/sample.c:244
msgid "180dpi"
msgstr "180dpi"
-#: ppdc/sample.c:366
msgid "19"
msgstr "19"
-#: ppdc/sample.c:308
msgid "2"
msgstr "2"
-#: ppdc/sample.c:380
msgid "2 inches/sec."
msgstr "2 インチ/秒"
-#: ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr "両面印刷"
-#: ppdc/sample.c:178
msgid "2.00x0.37\""
msgstr "2.00x0.37 インチ"
-#: ppdc/sample.c:179
msgid "2.00x0.50\""
msgstr "2.00x0.50 インチ"
-#: ppdc/sample.c:180
msgid "2.00x1.00\""
msgstr "2.00x1.00 インチ"
-#: ppdc/sample.c:181
msgid "2.00x1.25\""
msgstr "2.00x1.25 インチ"
-#: ppdc/sample.c:182
msgid "2.00x2.00\""
msgstr "2.00x2.00 インチ"
-#: ppdc/sample.c:183
msgid "2.00x3.00\""
msgstr "2.00x3.00 インチ"
-#: ppdc/sample.c:184
msgid "2.00x4.00\""
msgstr "2.00x4.00 インチ"
-#: ppdc/sample.c:185
msgid "2.00x5.50\""
msgstr "2.00x5.50 インチ"
-#: ppdc/sample.c:186
msgid "2.25x0.50\""
msgstr "2.25x0.50 インチ"
-#: ppdc/sample.c:187
msgid "2.25x1.25\""
msgstr "2.25x1.25 インチ"
-#: ppdc/sample.c:188
msgid "2.25x4.00\""
msgstr "2.25x4.00 インチ"
-#: ppdc/sample.c:189
msgid "2.25x5.50\""
msgstr "2.25x5.50 インチ"
-#: ppdc/sample.c:190
msgid "2.38x5.50\""
msgstr "2.38x5.50 インチ"
-#: ppdc/sample.c:428
msgid "2.5 inches/sec."
msgstr "2.5 インチ/秒"
-#: ppdc/sample.c:191
msgid "2.50x1.00\""
msgstr "2.50x1.00 インチ"
-#: ppdc/sample.c:192
msgid "2.50x2.00\""
msgstr "2.50x2.00 インチ"
-#: ppdc/sample.c:193
msgid "2.75x1.25\""
msgstr "2.75x1.25 インチ"
-#: ppdc/sample.c:194
msgid "2.9 x 1\""
msgstr "2.9 x 1 インチ"
-#: ppdc/sample.c:367
msgid "20"
msgstr "20"
-#: ppdc/sample.c:324
msgid "20 mm/sec."
msgstr "20 ミリメートル/秒"
-#: ppdc/sample.c:332
msgid "200 mm/sec."
msgstr "200 ミリメートル/秒"
-#: ppdc/sample.c:233
msgid "203dpi"
msgstr "203dpi"
-#: ppdc/sample.c:368
msgid "21"
msgstr "21"
-#: ppdc/sample.c:369
msgid "22"
msgstr "22"
-#: ppdc/sample.c:370
msgid "23"
msgstr "23"
-#: ppdc/sample.c:371
msgid "24"
msgstr "24"
-#: ppdc/sample.c:241
msgid "24-Pin Series"
msgstr "24 ピンシリーズ"
-#: ppdc/sample.c:250
msgid "240x72dpi"
msgstr "240x72dpi"
-#: ppdc/sample.c:372
msgid "25"
msgstr "25"
-#: ppdc/sample.c:333
msgid "250 mm/sec."
msgstr "250 ミリメートル/秒"
-#: ppdc/sample.c:373
msgid "26"
msgstr "26"
-#: ppdc/sample.c:374
msgid "27"
msgstr "27"
-#: ppdc/sample.c:375
msgid "28"
msgstr "28"
-#: ppdc/sample.c:376
msgid "29"
msgstr "29"
-#: ppdc/sample.c:309
msgid "3"
msgstr "3"
-#: ppdc/sample.c:381
msgid "3 inches/sec."
msgstr "3 インチ/秒"
-#: ppdc/sample.c:3
msgid "3 x 5"
msgstr "3 x 5"
-#: ppdc/sample.c:195
msgid "3.00x1.00\""
msgstr "3.00x1.00 インチ"
-#: ppdc/sample.c:196
msgid "3.00x1.25\""
msgstr "3.00x1.25 インチ"
-#: ppdc/sample.c:197
msgid "3.00x2.00\""
msgstr "3.00x2.00 インチ"
-#: ppdc/sample.c:198
msgid "3.00x3.00\""
msgstr "3.00x3.00インチ"
-#: ppdc/sample.c:199
msgid "3.00x5.00\""
msgstr "3.00x5.00 インチ"
-#: ppdc/sample.c:200
msgid "3.25x2.00\""
msgstr "3.25x2.00 インチ"
-#: ppdc/sample.c:201
msgid "3.25x5.00\""
msgstr "3.25x5.00 インチ"
-#: ppdc/sample.c:202
msgid "3.25x5.50\""
msgstr "3.25x5.50 インチ"
-#: ppdc/sample.c:203
msgid "3.25x5.83\""
msgstr "3.25x5.83 インチ"
-#: ppdc/sample.c:204
msgid "3.25x7.83\""
msgstr "3.25x7.83 インチ"
-#: ppdc/sample.c:4
msgid "3.5 x 5"
msgstr "3.5 x 5"
-#: ppdc/sample.c:171
msgid "3.5\" Disk"
msgstr "3.5 インチディスク"
-#: ppdc/sample.c:205
msgid "3.50x1.00\""
msgstr "3.50x1.00 インチ"
-#: ppdc/sample.c:377
msgid "30"
msgstr "30"
-#: ppdc/sample.c:325
msgid "30 mm/sec."
msgstr "30 ミリメートル/秒"
-#: ppdc/sample.c:334
msgid "300 mm/sec."
msgstr "300 ミリメートル/秒"
-#: ppdc/sample.c:234
msgid "300dpi"
msgstr "300dpi"
-#: ppdc/sample.c:405
msgid "35"
msgstr "35"
-#: ppdc/sample.c:246
msgid "360dpi"
msgstr "360dpi"
-#: ppdc/sample.c:245
msgid "360x180dpi"
msgstr "360x180dpi"
-#: ppdc/sample.c:310
msgid "4"
msgstr "4"
-#: ppdc/sample.c:382
msgid "4 inches/sec."
msgstr "4 インチ/秒"
-#: ppdc/sample.c:206
msgid "4.00x1.00\""
msgstr "4.00x1.00 インチ"
-#: ppdc/sample.c:214
msgid "4.00x13.00\""
msgstr "4.00x13.00 インチ"
-#: ppdc/sample.c:207
msgid "4.00x2.00\""
msgstr "4.00x2.00 インチ"
-#: ppdc/sample.c:208
msgid "4.00x2.50\""
msgstr "4.00x2.50 インチ"
-#: ppdc/sample.c:209
msgid "4.00x3.00\""
msgstr "4.00x3.00 インチ"
-#: ppdc/sample.c:210
msgid "4.00x4.00\""
msgstr "4.00x4.00 インチ"
-#: ppdc/sample.c:211
msgid "4.00x5.00\""
msgstr "4.00x5.00 インチ"
-#: ppdc/sample.c:212
msgid "4.00x6.00\""
msgstr "4.00x6.00 インチ"
-#: ppdc/sample.c:213
msgid "4.00x6.50\""
msgstr "4.00x6.50 インチ"
-#: ppdc/sample.c:406
msgid "40"
msgstr "40"
-#: ppdc/sample.c:326
msgid "40 mm/sec."
msgstr "40 ミリメートル/秒"
-#: ppdc/sample.c:407
msgid "45"
msgstr "45"
-#: ppdc/sample.c:311
msgid "5"
msgstr "5"
-#: ppdc/sample.c:432
msgid "5 inches/sec."
msgstr "5 インチ/秒"
-#: ppdc/sample.c:5
msgid "5 x 7"
msgstr "5 x 7 インチ"
-#: ppdc/sample.c:408
msgid "50"
msgstr "50"
-#: ppdc/sample.c:409
msgid "55"
msgstr "55"
-#: ppdc/sample.c:312
msgid "6"
msgstr "6"
-#: ppdc/sample.c:433
msgid "6 inches/sec."
msgstr "6 インチ/秒"
-#: ppdc/sample.c:215
msgid "6.00x1.00\""
msgstr "6.00x1.00 インチ"
-#: ppdc/sample.c:216
msgid "6.00x2.00\""
msgstr "6.00x2.00 インチ"
-#: ppdc/sample.c:217
msgid "6.00x3.00\""
msgstr "6.00x3.00 インチ"
-#: ppdc/sample.c:218
msgid "6.00x4.00\""
msgstr "6.00x4.00 インチ"
-#: ppdc/sample.c:219
msgid "6.00x5.00\""
msgstr "6.00x5.00 インチ"
-#: ppdc/sample.c:220
msgid "6.00x6.00\""
msgstr "6.00x6.00 インチ"
-#: ppdc/sample.c:221
msgid "6.00x6.50\""
msgstr "6.00x6.50 インチ"
-#: ppdc/sample.c:410
msgid "60"
msgstr "60"
-#: ppdc/sample.c:327
msgid "60 mm/sec."
msgstr "60 ミリメートル/秒"
-#: ppdc/sample.c:253
msgid "600dpi"
msgstr "600dpi"
-#: ppdc/sample.c:242
msgid "60dpi"
msgstr "60dpi"
-#: ppdc/sample.c:248
msgid "60x72dpi"
msgstr "60x72dpi"
-#: ppdc/sample.c:411
msgid "65"
msgstr "65"
-#: ppdc/sample.c:313
msgid "7"
msgstr "7"
-#: ppdc/sample.c:435
msgid "7 inches/sec."
msgstr "7 インチ/秒"
-#: ppdc/sample.c:11
msgid "7 x 9"
msgstr "7 x 9 インチ"
-#: ppdc/sample.c:412
msgid "70"
msgstr "70"
-#: ppdc/sample.c:413
msgid "75"
msgstr "75"
-#: ppdc/sample.c:314
msgid "8"
msgstr "8"
-#: ppdc/sample.c:436
msgid "8 inches/sec."
msgstr "8 インチ/秒"
-#: ppdc/sample.c:12
msgid "8 x 10"
msgstr "8 x 10 インチ"
-#: ppdc/sample.c:222
msgid "8.00x1.00\""
msgstr "8.00x1.00 インチ"
-#: ppdc/sample.c:223
msgid "8.00x2.00\""
msgstr "8.00x2.00 インチ"
-#: ppdc/sample.c:224
msgid "8.00x3.00\""
msgstr "8.00x3.00 インチ"
-#: ppdc/sample.c:225
msgid "8.00x4.00\""
msgstr "8.00x4.00 インチ"
-#: ppdc/sample.c:226
msgid "8.00x5.00\""
msgstr "8.00x5.00 インチ"
-#: ppdc/sample.c:227
msgid "8.00x6.00\""
msgstr "8.00x6.00 インチ"
-#: ppdc/sample.c:228
msgid "8.00x6.50\""
msgstr "8.00x6.50 インチ"
-#: ppdc/sample.c:414
msgid "80"
msgstr "80"
-#: ppdc/sample.c:328
msgid "80 mm/sec."
msgstr "80 ミリメートル/秒"
-#: ppdc/sample.c:415
msgid "85"
msgstr "85"
-#: ppdc/sample.c:315
msgid "9"
msgstr "9"
-#: ppdc/sample.c:437
msgid "9 inches/sec."
msgstr "9 インチ/秒"
-#: ppdc/sample.c:13
msgid "9 x 11"
msgstr "9 x 11 インチ"
-#: ppdc/sample.c:14
msgid "9 x 12"
msgstr "9 x 12 インチ"
-#: ppdc/sample.c:247
msgid "9-Pin Series"
msgstr "9 ピンシリーズ"
-#: ppdc/sample.c:416
msgid "90"
msgstr "90"
-#: ppdc/sample.c:417
msgid "95"
msgstr "95"
-#: berkeley/lpc.c:205
msgid "?Invalid help command unknown."
msgstr "?無効なヘルプコマンドです"
-#: cgi-bin/admin.c:2348
msgid "A Samba password is required to export printer drivers"
msgstr ""
"プリンタードライバーをエクスポートするには Samba のパスワードが必要です。"
-#: cgi-bin/admin.c:2344
msgid "A Samba username is required to export printer drivers"
msgstr ""
"プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です。"
-#: scheduler/ipp.c:2274
#, c-format
msgid "A class named \"%s\" already exists."
msgstr "\"%s\" という名前のクラスはすでに存在します。"
-#: scheduler/ipp.c:916
#, c-format
msgid "A printer named \"%s\" already exists."
msgstr "\"%s\" という名前のプリンターはすでに存在します。"
-#: ppdc/sample.c:15
msgid "A0"
msgstr "A0"
-#: ppdc/sample.c:16
msgid "A0 Long Edge"
msgstr "A0 長辺送り"
-#: ppdc/sample.c:17
msgid "A1"
msgstr "A1"
-#: ppdc/sample.c:18
msgid "A1 Long Edge"
msgstr "A1 長辺送り"
-#: ppdc/sample.c:37
msgid "A10"
msgstr "A10"
-#: ppdc/sample.c:19
msgid "A2"
msgstr "A2"
-#: ppdc/sample.c:20
msgid "A2 Long Edge"
msgstr "A2 長辺送り"
-#: ppdc/sample.c:21
msgid "A3"
msgstr "A3"
-#: ppdc/sample.c:22
msgid "A3 Long Edge"
msgstr "A3 長辺送り"
-#: ppdc/sample.c:23
msgid "A3 Oversize"
msgstr "A3 (特大)"
-#: ppdc/sample.c:24
msgid "A3 Oversize Long Edge"
msgstr "A3 (特大) 長辺送り"
-#: ppdc/sample.c:25
msgid "A4"
msgstr "A4"
-#: ppdc/sample.c:27
msgid "A4 Long Edge"
msgstr "A4 長辺送り"
-#: ppdc/sample.c:26
msgid "A4 Oversize"
msgstr "A4 (特大)"
-#: ppdc/sample.c:28
msgid "A4 Small"
msgstr "A4 (小)"
-#: ppdc/sample.c:29
msgid "A5"
msgstr "A5"
-#: ppdc/sample.c:31
msgid "A5 Long Edge"
msgstr "A5 長辺送り"
-#: ppdc/sample.c:30
msgid "A5 Oversize"
msgstr "A5 (特大)"
-#: ppdc/sample.c:32
msgid "A6"
msgstr "A6"
-#: ppdc/sample.c:33
msgid "A6 Long Edge"
msgstr "A6 長辺送り"
-#: ppdc/sample.c:34
msgid "A7"
msgstr "A7"
-#: ppdc/sample.c:35
msgid "A8"
msgstr "A8"
-#: ppdc/sample.c:36
msgid "A9"
msgstr "A9"
-#: ppdc/sample.c:38
msgid "ANSI A"
msgstr "ANSI A"
-#: ppdc/sample.c:39
msgid "ANSI B"
msgstr "ANSI B"
-#: ppdc/sample.c:40
msgid "ANSI C"
msgstr "ANSI C"
-#: ppdc/sample.c:41
msgid "ANSI D"
msgstr "ANSI D"
-#: ppdc/sample.c:42
msgid "ANSI E"
msgstr "ANSI E"
-#: ppdc/sample.c:47
msgid "ARCH C"
msgstr "ARCH C"
-#: ppdc/sample.c:48
msgid "ARCH C Long Edge"
msgstr "ARCH C 長辺送り"
-#: ppdc/sample.c:49
msgid "ARCH D"
msgstr "ARCH D"
-#: ppdc/sample.c:50
msgid "ARCH D Long Edge"
msgstr "ARCH D 長辺送り"
-#: ppdc/sample.c:51
msgid "ARCH E"
msgstr "ARCH E"
-#: ppdc/sample.c:52
msgid "ARCH E Long Edge"
msgstr "ARCH E 長辺送り"
-#: cgi-bin/classes.c:161 cgi-bin/printers.c:164
msgid "Accept Jobs"
msgstr "ジョブの受け付け"
-#: cups/http-support.c:1347
msgid "Accepted"
msgstr "受け付けました"
-#: cgi-bin/admin.c:548
msgid "Add Class"
msgstr "クラスの追加"
-#: cgi-bin/admin.c:860
msgid "Add Printer"
msgstr "プリンターの追加"
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
msgid "Add RSS Subscription"
msgstr "RSS 購読を追加"
-#: ppdc/sample.c:163
msgid "Address"
msgstr "アドレス"
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
msgid "Administration"
msgstr "管理"
-#: ppdc/sample.c:424
msgid "Always"
msgstr "常に有効"
-#: backend/socket.c:121
msgid "AppSocket/HP JetDirect"
msgstr "AppSocket/HP JetDirect"
-#: ppdc/sample.c:445
msgid "Applicator"
msgstr "アプリケーター"
-#: scheduler/ipp.c:991
#, c-format
msgid "Attempt to set %s printer-state to bad value %d."
msgstr "%s printer-state に 不正な値 %d を設定しようとしています。"
-#: scheduler/ipp.c:239
#, c-format
msgid "Attribute groups are out of order (%x < %x)."
msgstr "属性グループは範囲外です (%x < %x)。"
-#: ppdc/sample.c:126
msgid "B0"
msgstr "B0"
-#: ppdc/sample.c:127
msgid "B1"
msgstr "B1"
-#: ppdc/sample.c:137
msgid "B10"
msgstr "B10"
-#: ppdc/sample.c:128
msgid "B2"
msgstr "B2"
-#: ppdc/sample.c:129
msgid "B3"
msgstr "B3"
-#: ppdc/sample.c:130
msgid "B4"
msgstr "B4"
-#: ppdc/sample.c:131
msgid "B5"
msgstr "B5"
-#: ppdc/sample.c:132
msgid "B5 Oversize"
msgstr "B5 (特大)"
-#: ppdc/sample.c:133
msgid "B6"
msgstr "B6"
-#: ppdc/sample.c:134
msgid "B7"
msgstr "B7"
-#: ppdc/sample.c:135
msgid "B8"
msgstr "B8"
-#: ppdc/sample.c:136
msgid "B9"
msgstr "B9"
-#: scheduler/ipp.c:10877
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr "誤った 'document-format' の値です \"%s\"。"
-#: cups/dest.c:1736
msgid "Bad NULL dests pointer"
msgstr "不正な NULL 送信先ポインター"
-#: cups/ppd.c:303
msgid "Bad OpenGroup"
msgstr "不正な OpenGroup"
-#: cups/ppd.c:305
msgid "Bad OpenUI/JCLOpenUI"
msgstr "不正な OpenUI/JCLOpenUI"
-#: cups/ppd.c:307
msgid "Bad OrderDependency"
msgstr "不正な OrderDependency"
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
msgid "Bad PPD cache file."
msgstr "不正な PPD キャッシュファイルです。"
-#: cups/http-support.c:1362
msgid "Bad Request"
msgstr "不正なリクエスト"
-#: cups/snmp.c:954
msgid "Bad SNMP version number"
msgstr "不正な SNMP バージョン番号"
-#: cups/ppd.c:308
msgid "Bad UIConstraints"
msgstr "不正な UIConstraints"
-#: cups/http-support.c:1456
msgid "Bad arguments to function"
msgstr "関数の引数が不正"
-#: scheduler/ipp.c:1352
#, c-format
msgid "Bad copies value %d."
msgstr "%d は不正なコピー値です。"
-#: cups/ppd.c:316
msgid "Bad custom parameter"
msgstr "不正なカスタムパラメーター"
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr "\"%s\" は無効な device-uri です。"
-#: scheduler/ipp.c:2399
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr "\"%s\" は無効な device-uri スキーマです。"
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
#, c-format
msgid "Bad document-format \"%s\"."
msgstr "\"%s\" は不正な document-format です。"
-#: scheduler/ipp.c:9376
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr "\"%s\" は不正な document-format-default です。"
-#: cups/util.c:823
msgid "Bad filename buffer"
msgstr "不正なファイル名バッファーです。"
-#: cups/http-support.c:1465
msgid "Bad hostname/address in URI"
msgstr "URI のホスト名/アドレスが不正"
-#: scheduler/ipp.c:1527
#, c-format
msgid "Bad job-name value: %s"
msgstr "誤った job-name 値: %s"
-#: scheduler/ipp.c:1520
msgid "Bad job-name value: Wrong type or count."
msgstr "誤った job-name 値: 型かカウントが誤っています。"
-#: scheduler/ipp.c:9967
msgid "Bad job-priority value."
msgstr "不正な job-priority 値です。"
-#: scheduler/ipp.c:1382
#, c-format
msgid "Bad job-sheets value \"%s\"."
msgstr "\"%s\" は不正な job-sheets 値です。"
-#: scheduler/ipp.c:1366
msgid "Bad job-sheets value type."
msgstr "不正な job-sheets 値タイプ です。"
-#: scheduler/ipp.c:9997
msgid "Bad job-state value."
msgstr "不正な job-state 値です。"
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr "\"%s\" は無効な job-uri 属性です。"
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr "\"%s\" は無効な notify-pull-method です。"
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr "URI \"%s\" は不正な notify-recipient-uri です。"
-#: scheduler/ipp.c:1398
#, c-format
msgid "Bad number-up value %d."
msgstr "%d は不正な number-up 値です。"
-#: cups/adminutil.c:281
#, c-format
msgid "Bad option + choice on line %d."
msgstr "%d 行に不正なオプションと選択があります。"
-#: scheduler/ipp.c:1415
#, c-format
msgid "Bad page-ranges values %d-%d."
msgstr "%d-%d は不正な page-ranges 値です。"
-#: cups/http-support.c:1462
msgid "Bad port number in URI"
msgstr "URI のポート番号が不正"
-#: scheduler/ipp.c:2442
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr "\"%s\" は無効な port-monitor です。"
-#: scheduler/ipp.c:2503
#, c-format
msgid "Bad printer-state value %d."
msgstr "%d は無効な printer-state 値です。"
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
msgid "Bad printer-uri."
msgstr "printer-uri が不正です。"
-#: scheduler/ipp.c:207
#, c-format
msgid "Bad request ID %d."
msgstr "%d は無効なリクエストIDです。"
-#: scheduler/ipp.c:192
#, c-format
msgid "Bad request version number %d.%d."
msgstr "バージョン番号 %d.%d は無効なリクエストです。"
-#: cups/http-support.c:1459
msgid "Bad resource in URI"
msgstr "URI のリソースが不正"
-#: cups/http-support.c:1471
msgid "Bad scheme in URI"
msgstr "URI のスキームが不正"
-#: cgi-bin/admin.c:1464
msgid "Bad subscription ID"
msgstr "不正なサブスクリプション ID"
-#: cups/http-support.c:1468
msgid "Bad username in URI"
msgstr "URI のユーザー名が不正"
-#: cups/ppd.c:318
msgid "Bad value string"
msgstr "値文字列がありません"
-#: cups/http-support.c:1474
msgid "Bad/empty URI"
msgstr "URI が不正か空"
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
msgid "Banners"
msgstr "バナー"
-#: ppdc/sample.c:282
msgid "Bond Paper"
msgstr "ボンド紙"
-#: backend/usb-darwin.c:1874
#, c-format
msgid "Boolean expected for waiteof option \"%s\"."
msgstr "論理値は、waiteof オプション \"%s\" であるべきです"
-#: filter/pstops.c:2029
msgid "Buffer overflow detected, aborting."
msgstr "オーバーフローが検出され、中断しました。"
-#: ppdc/sample.c:277
msgid "CMYK"
msgstr "CMYK"
-#: ppdc/sample.c:358
msgid "CPCL Label Printer"
msgstr "CPCL ラベルプリンター"
-#: cgi-bin/classes.c:165 cgi-bin/printers.c:168
msgid "Cancel Jobs"
msgstr "ジョブをキャンセル"
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
msgid "Cancel RSS Subscription"
msgstr "RSS 購読をキャンセル"
-#: backend/ipp.c:2198
msgid "Canceling print job."
msgstr "プリントジョブをキャンセルしています。"
-#: scheduler/ipp.c:2483
msgid "Cannot share a remote Kerberized printer."
msgstr "リモートの Kerberos 認証のプリンターを共有できません。"
-#: ppdc/sample.c:271
msgid "Cassette"
msgstr "カセット"
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
msgid "Change Settings"
msgstr "設定の変更"
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
#, c-format
msgid "Character set \"%s\" not supported."
msgstr "文字セット \"%s\" はサポートされていません。"
-#: cgi-bin/classes.c:187 cgi-bin/classes.c:314
msgid "Classes"
msgstr "クラス"
-#: cgi-bin/printers.c:174
msgid "Clean Print Heads"
msgstr "プリントヘッドクリーニング"
-#: scheduler/ipp.c:3893
msgid "Close-Job doesn't support the job-uri attribute."
msgstr "Close-Job は job-uri 属性をサポートしていません。"
-#: ppdc/sample.c:276
msgid "Color"
msgstr "カラー"
-#: ppdc/sample.c:274
msgid "Color Mode"
msgstr "カラーモード"
-#: berkeley/lpc.c:196
msgid ""
"Commands may be abbreviated. Commands are:\n"
"\n"
"\n"
"exit help quit status ?"
-#: cups/snmp.c:958
msgid "Community name uses indefinite length"
msgstr "コミュニティ名の長さが不定"
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
msgid "Connected to printer."
msgstr "プリンターに接続しました。"
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
msgid "Connecting to printer."
msgstr "プリンターに接続中。"
-#: cups/http-support.c:1335
msgid "Continue"
msgstr "継続"
-#: ppdc/sample.c:360
msgid "Continuous"
msgstr "連続"
-#: backend/lpd.c:1028 backend/lpd.c:1160
msgid "Control file sent successfully."
msgstr "コントロールファイルが正常に送信されました。"
-#: backend/ipp.c:1349 backend/lpd.c:472
msgid "Copying print data."
msgstr "印刷データをコピーしています。"
-#: cups/http-support.c:1344
msgid "Created"
msgstr "ジョブ作成"
-#: cups/ppd.c:1069 cups/ppd.c:1109 cups/ppd.c:1354 cups/ppd.c:1457
msgid "Custom"
msgstr "カスタム"
-#: ppdc/sample.c:354
msgid "CustominCutInterval"
msgstr "CustominCutInterval"
-#: ppdc/sample.c:352
msgid "CustominTearInterval"
msgstr "CustominTearInterval"
-#: ppdc/sample.c:338
msgid "Cut"
msgstr "カット"
-#: ppdc/sample.c:446
msgid "Cutter"
msgstr "カッター"
-#: ppdc/sample.c:239
msgid "Dark"
msgstr "濃い"
-#: ppdc/sample.c:235
msgid "Darkness"
msgstr "濃さ"
-#: backend/lpd.c:1113
msgid "Data file sent successfully."
msgstr "データファイルが正常に送信されました。"
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
msgid "Delete Class"
msgstr "クラスの削除"
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
msgid "Delete Printer"
msgstr "プリンターの削除"
-#: ppdc/sample.c:273
msgid "DeskJet Series"
msgstr "DeskJet シリーズ"
-#: scheduler/ipp.c:1276
#, c-format
msgid "Destination \"%s\" is not accepting jobs."
msgstr "宛先 \"%s\" はジョブを受け付けていません。"
-#: systemv/lpinfo.c:300
#, c-format
msgid ""
"Device: uri = %s\n"
" device-id = %s\n"
" location = %s"
-#: ppdc/sample.c:431
msgid "Direct Thermal Media"
msgstr "感熱紙"
-#: cups/file.c:258
#, c-format
msgid "Directory \"%s\" contains a relative path."
msgstr "ディレクトリー \"%s\" は相対パスを含んでいます。"
-#: cups/file.c:230
#, c-format
msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr ""
"ディレクトリー \"%s\" は安全でないパーミッションが与えられています (0%o/uid="
"%d/gid=%d)。"
-#: cups/file.c:247
#, c-format
msgid "Directory \"%s\" is a file."
msgstr "ディレクトリー \"%s\" はファイルです。"
-#: cups/file.c:218
#, c-format
msgid "Directory \"%s\" not available: %s"
msgstr "ディレクトリー \"%s\" は利用できません: %s"
-#: cups/file.c:203
#, c-format
msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr ""
"ディレクトリー \"%s\" のパーミッションは問題ありません (0%o/uid=%d/gid=%d)。"
-#: ppdc/sample.c:340
msgid "Disabled"
msgstr "無効"
-#: scheduler/ipp.c:5979
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr "ドキュメント #%d がジョブ #%d に見つかりません。"
-#: ppdc/sample.c:267
msgid "Duplexer"
msgstr "両面オプション"
-#: ppdc/sample.c:229
msgid "Dymo"
msgstr "Dymo"
-#: ppdc/sample.c:426
msgid "EPL1 Label Printer"
msgstr "EPL1 ラベルプリンター"
-#: ppdc/sample.c:429
msgid "EPL2 Label Printer"
msgstr "EPL2 ラベルプリンター"
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
msgid "Edit Configuration File"
msgstr "設定ファイルの編集"
-#: cups/adminutil.c:326
msgid "Empty PPD file."
msgstr "PPD ファイルが空です。"
-#: cups/http.c:4624
msgid "Encryption is not supported."
msgstr "暗号化はサポートされていません。"
#. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
msgid "Ending Banner"
msgstr "終了バナー"
-#: ppdc/sample.c:2
msgid "English"
msgstr "English"
-#: scheduler/client.c:2209
msgid ""
"Enter your username and password or the root username and password to access "
"this page. If you are using Kerberos authentication, make sure you have a "
"root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している"
"場合、有効な Kerberos チケットがあることを確認してください。"
-#: ppdc/sample.c:73
msgid "Envelope #10 "
msgstr "封筒 #10"
-#: ppdc/sample.c:74
msgid "Envelope #11"
msgstr "封筒 #11"
-#: ppdc/sample.c:75
msgid "Envelope #12"
msgstr "封筒 #12"
-#: ppdc/sample.c:76
msgid "Envelope #14"
msgstr "封筒 #14"
-#: ppdc/sample.c:77
msgid "Envelope #9"
msgstr "封筒 #9"
-#: ppdc/sample.c:89
msgid "Envelope B4"
msgstr "封筒 B4"
-#: ppdc/sample.c:90
msgid "Envelope B5"
msgstr "封筒 B5"
-#: ppdc/sample.c:91
msgid "Envelope B6"
msgstr "封筒 B6"
-#: ppdc/sample.c:78
msgid "Envelope C0"
msgstr "封筒 C0"
-#: ppdc/sample.c:79
msgid "Envelope C1"
msgstr "封筒 C1"
-#: ppdc/sample.c:80
msgid "Envelope C2"
msgstr "封筒 C2"
-#: ppdc/sample.c:81
msgid "Envelope C3"
msgstr "封筒 C3"
-#: ppdc/sample.c:67
msgid "Envelope C4"
msgstr "封筒 C4"
-#: ppdc/sample.c:68
msgid "Envelope C5"
msgstr "封筒 C5"
-#: ppdc/sample.c:69
msgid "Envelope C6"
msgstr "封筒 C6"
-#: ppdc/sample.c:82
msgid "Envelope C65"
msgstr "封筒 C65"
-#: ppdc/sample.c:83
msgid "Envelope C7"
msgstr "封筒 C7"
-#: ppdc/sample.c:84
msgid "Envelope Choukei 3"
msgstr "封筒 長形3号"
-#: ppdc/sample.c:85
msgid "Envelope Choukei 3 Long Edge"
msgstr "封筒 長形3号 長辺送り"
-#: ppdc/sample.c:86
msgid "Envelope Choukei 4"
msgstr "封筒 長形4号"
-#: ppdc/sample.c:87
msgid "Envelope Choukei 4 Long Edge"
msgstr "封筒 長形4号 長辺送り"
-#: ppdc/sample.c:70
msgid "Envelope DL"
msgstr "封筒 DL"
-#: ppdc/sample.c:261
msgid "Envelope Feed"
msgstr "封筒フィード"
-#: ppdc/sample.c:88
msgid "Envelope Invite"
msgstr "招待状封筒"
-#: ppdc/sample.c:92
msgid "Envelope Italian"
msgstr "イタリア封筒"
-#: ppdc/sample.c:93
msgid "Envelope Kaku2"
msgstr "封筒 角2"
-#: ppdc/sample.c:94
msgid "Envelope Kaku2 Long Edge"
msgstr "封筒 角2 長辺送り"
-#: ppdc/sample.c:95
msgid "Envelope Kaku3"
msgstr "封筒 角3"
-#: ppdc/sample.c:96
msgid "Envelope Kaku3 Long Edge"
msgstr "封筒 角3 長辺送り"
-#: ppdc/sample.c:97
msgid "Envelope Monarch"
msgstr "封筒 Monarch"
-#: ppdc/sample.c:99
msgid "Envelope PRC1 "
msgstr "封筒 PRC1"
-#: ppdc/sample.c:100
msgid "Envelope PRC1 Long Edge"
msgstr "封筒 PRC1 長辺送り"
-#: ppdc/sample.c:117
msgid "Envelope PRC10"
msgstr "封筒 PRC10"
-#: ppdc/sample.c:118
msgid "Envelope PRC10 Long Edge"
msgstr "封筒 PRC10 長辺送り"
-#: ppdc/sample.c:101
msgid "Envelope PRC2"
msgstr "封筒 PRC2"
-#: ppdc/sample.c:102
msgid "Envelope PRC2 Long Edge"
msgstr "封筒 PRC2 長辺送り"
-#: ppdc/sample.c:103
msgid "Envelope PRC3"
msgstr "封筒 PRC3"
-#: ppdc/sample.c:104
msgid "Envelope PRC3 Long Edge"
msgstr "封筒 PRC3 長辺送り"
-#: ppdc/sample.c:105
msgid "Envelope PRC4"
msgstr "封筒 PRC4"
-#: ppdc/sample.c:106
msgid "Envelope PRC4 Long Edge"
msgstr "封筒 PRC4 長辺送り"
-#: ppdc/sample.c:108
msgid "Envelope PRC5 Long Edge"
msgstr "封筒 PRC5 長辺送り"
-#: ppdc/sample.c:107
msgid "Envelope PRC5PRC5"
msgstr "封筒 PRC5"
-#: ppdc/sample.c:109
msgid "Envelope PRC6"
msgstr "封筒 PRC6"
-#: ppdc/sample.c:110
msgid "Envelope PRC6 Long Edge"
msgstr "封筒 PRC6 長辺送り"
-#: ppdc/sample.c:111
msgid "Envelope PRC7"
msgstr "封筒 PRC7"
-#: ppdc/sample.c:112
msgid "Envelope PRC7 Long Edge"
msgstr "封筒 PRC7 長辺送り"
-#: ppdc/sample.c:113
msgid "Envelope PRC8"
msgstr "封筒 PRC8"
-#: ppdc/sample.c:114
msgid "Envelope PRC8 Long Edge"
msgstr "封筒 PRC8 長辺送り"
-#: ppdc/sample.c:115
msgid "Envelope PRC9"
msgstr "封筒 PRC9"
-#: ppdc/sample.c:116
msgid "Envelope PRC9 Long Edge"
msgstr "封筒 PRC9 長辺送り"
-#: ppdc/sample.c:98
msgid "Envelope Personal"
msgstr "パーソナル封筒"
-#: ppdc/sample.c:119
msgid "Envelope You4"
msgstr "封筒 洋形4号"
-#: ppdc/sample.c:120
msgid "Envelope You4 Long Edge"
msgstr "封筒 洋形4号 長辺送り"
-#: test/ippfind.c:2809
msgid "Environment Variables:"
msgstr "環境変数:"
-#: ppdc/sample.c:240
msgid "Epson"
msgstr "Epson"
-#: cgi-bin/admin.c:3584
msgid "Error Policy"
msgstr "エラーポリシー"
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
msgstr "ラスターデータの送信でエラーが起きました。"
-#: systemv/lpinfo.c:103 systemv/lpmove.c:88
msgid "Error: need hostname after \"-h\" option."
msgstr "Error: '-h' オプションのあとにはホスト名が必要です。"
-#: ppdc/sample.c:350
msgid "Every 10 Labels"
msgstr "10 ラベルごと"
-#: ppdc/sample.c:342
msgid "Every 2 Labels"
msgstr "2 ラベルごと"
-#: ppdc/sample.c:343
msgid "Every 3 Labels"
msgstr "3 ラベルごと"
-#: ppdc/sample.c:344
msgid "Every 4 Labels"
msgstr "4 ラベルごと"
-#: ppdc/sample.c:345
msgid "Every 5 Labels"
msgstr "5 ラベルごと"
-#: ppdc/sample.c:346
msgid "Every 6 Labels"
msgstr "6 ラベルごと"
-#: ppdc/sample.c:347
msgid "Every 7 Labels"
msgstr "7 ラベルごと"
-#: ppdc/sample.c:348
msgid "Every 8 Labels"
msgstr "8 ラベルごと"
-#: ppdc/sample.c:349
msgid "Every 9 Labels"
msgstr "9 ラベルごと"
-#: ppdc/sample.c:341
msgid "Every Label"
msgstr "すべてのラベル"
-#: ppdc/sample.c:121
msgid "Executive"
msgstr "エグゼクティブ"
-#: cups/http-support.c:1390
msgid "Expectation Failed"
msgstr "予測に失敗しました"
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
msgid "Export Printers to Samba"
msgstr "Samba へプリンターをエクスポート"
-#: test/ippfind.c:2755
msgid "Expressions:"
msgstr "式:"
-#: systemv/cupstestdsc.c:172 systemv/cupstestdsc.c:189
-#: systemv/cupstestdsc.c:214 systemv/cupstestdsc.c:231
-#: systemv/cupstestdsc.c:255 systemv/cupstestdsc.c:273
-#: systemv/cupstestdsc.c:302 systemv/cupstestdsc.c:339
-#: systemv/cupstestdsc.c:349 systemv/cupstestdsc.c:359
-#: systemv/cupstestdsc.c:369 systemv/cupstestdsc.c:379
-#: systemv/cupstestdsc.c:387
msgid "FAIL"
msgstr "失敗"
-#: ppdc/sample.c:122
msgid "FanFold German"
msgstr "FanFold German"
-#: ppdc/sample.c:123
msgid "FanFold Legal German"
msgstr "FanFold Legal German"
-#: ppdc/sample.c:124
msgid "Fanfold US"
msgstr "Fanfold US"
-#: cups/file.c:262
#, c-format
msgid "File \"%s\" contains a relative path."
msgstr "ファイル \"%s\" は相対パスを含んでいます。"
-#: cups/file.c:237
#, c-format
msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
msgstr ""
"ファイル \"%s\" は安全でないパーミッションが与えられています (0%o/uid=%d/gid="
"%d)。"
-#: cups/file.c:251
#, c-format
msgid "File \"%s\" is a directory."
msgstr "ファイル \"%s\" はディレクトリーです。"
-#: cups/file.c:223
#, c-format
msgid "File \"%s\" not available: %s"
msgstr "ファイル \"%s\" は利用できません: %s"
-#: cups/file.c:209
#, c-format
msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr "ファイル \"%s\" のパーミッションは問題ありません (0%o/uid=%d/gid=%d)。"
-#: ppdc/sample.c:169
msgid "File Folder "
msgstr "ファイルフォルダー"
-#: scheduler/ipp.c:2378
#, c-format
msgid ""
"File device URIs have been disabled. To enable, see the FileDevice directive "
"ファイルデバイス URI は無効になっています。有効にするには、\"%s/cups-files."
"conf\" の FileDevice ディレクティブを参照してください。"
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
-#: filter/rastertolabel.c:1259
#, c-format
msgid "Finished page %d."
msgstr "ページ %d を終了。"
-#: ppdc/sample.c:125
msgid "Folio"
msgstr "フォリオ"
-#: cups/http-support.c:1369
msgid "Forbidden"
msgstr "Forbidden"
-#: cups/ppd.c:700 cups/ppd.c:1258
msgid "General"
msgstr "一般"
-#: ppdc/sample.c:251
msgid "Generic"
msgstr "汎用"
-#: cups/snmp.c:968
msgid "Get-Response-PDU uses indefinite length"
msgstr "Get-Response-PDU は不確定の長さを使用しています"
-#: ppdc/sample.c:285
msgid "Glossy Paper"
msgstr "光沢紙"
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
msgid "Got a printer-uri attribute but no job-id."
msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした。"
-#: ppdc/sample.c:275
msgid "Grayscale"
msgstr "グレースケール"
-#: ppdc/sample.c:272
msgid "HP"
msgstr "HP"
-#: ppdc/sample.c:170
msgid "Hanging Folder"
msgstr "Hanging Folder"
-#: cgi-bin/help.c:143
msgid "Help file not in index."
msgstr "ヘルプファイルが索引に含まれていません。"
-#: cups/ipp.c:3183 cups/ipp.c:3210 cups/ipp.c:3233
msgid "IPP 1setOf attribute with incompatible value tags."
msgstr "IPP の 1setOf 属性が value タグと互換性がありません。"
-#: cups/ipp.c:3146
msgid "IPP attribute has no name."
msgstr "IPP の属性に名前がありません。"
-#: cups/ipp.c:7000
msgid "IPP attribute is not a member of the message."
msgstr "IPP の属性がメッセージのメンバーではありません。"
-#: cups/ipp.c:3594
msgid "IPP begCollection value not 0 bytes."
msgstr "IPP の begCollection は想定された 0 バイトになっていません。"
-#: cups/ipp.c:3376
msgid "IPP boolean value not 1 byte."
msgstr "IPP の真偽値が想定された 1 バイトになっていません。"
-#: cups/ipp.c:3437
msgid "IPP date value not 11 bytes."
msgstr "IPP の date 値は想定された 11 バイトになっていません。"
-#: cups/ipp.c:3615
msgid "IPP endCollection value not 0 bytes."
msgstr "IPP の endCollection は想定された 0 バイトになっていません。"
-#: cups/ipp.c:3351
msgid "IPP enum value not 4 bytes."
msgstr "IPP の enum 値は想定された 4 バイトになっていません。"
-#: cups/ipp.c:3075
msgid "IPP extension tag larger than 0x7FFFFFFF."
msgstr "IPP の拡張タグが 0x7FFFFFFF より大きいです。"
-#: cups/ipp.c:3348
msgid "IPP integer value not 4 bytes."
msgstr "IPP の整数値は想定された 4 バイトになっていません。"
-#: cups/ipp.c:3547
msgid "IPP language length overflows value."
msgstr "IPP の language length の値がオーバーフローしています。"
-#: cups/ipp.c:3556
msgid "IPP language length too large."
msgstr "IPP の language の長さが長すぎます。"
-#: cups/ipp.c:3260
msgid "IPP member name is not empty."
msgstr "IPP のメンバー名が空ではありません。"
-#: cups/ipp.c:3641
msgid "IPP memberName value is empty."
msgstr "IPP の memberName の値が空です。"
-#: cups/ipp.c:3633
msgid "IPP memberName with no attribute."
msgstr "IPP の memberName に属性がありません。"
-#: cups/ipp.c:3129
msgid "IPP name larger than 32767 bytes."
msgstr "IPP 名が 32767 バイトより大きいです。"
-#: cups/ipp.c:3514
msgid "IPP nameWithLanguage value less than minimum 4 bytes."
msgstr "IPP の nameWithLanguage が最小値 4 バイト未満です。"
-#: cups/ipp.c:3671
msgid "IPP octetString length too large."
msgstr "IPP の octetString の長さが大きすぎます。"
-#: cups/ipp.c:3482
msgid "IPP rangeOfInteger value not 8 bytes."
msgstr "IPP の rangeOfInteger は想定された 8 バイトになっていません。"
-#: cups/ipp.c:3455
msgid "IPP resolution value not 9 bytes."
msgstr "IPP の resolution は想定された 9 バイトになっていません。"
-#: cups/ipp.c:3574
msgid "IPP string length overflows value."
msgstr "IPP の文字列長の値がオーバーフローしています。"
-#: cups/ipp.c:3510
msgid "IPP textWithLanguage value less than minimum 4 bytes."
msgstr "IPP の textWithLanguage の値が最小値 4 バイト未満です。"
-#: cups/ipp.c:3334
msgid "IPP value larger than 32767 bytes."
msgstr "IPP の値が 32767 バイト以上です。"
-#: ppdc/sample.c:1
msgid "ISOLatin1"
msgstr "ISOLatin1"
-#: cups/ppd.c:311
msgid "Illegal control character"
msgstr "不正な制御文字"
-#: cups/ppd.c:312
msgid "Illegal main keyword string"
msgstr "不正なメインキーワード文字列"
-#: cups/ppd.c:313
msgid "Illegal option keyword string"
msgstr "不正なオプションキーワード文字列"
-#: cups/ppd.c:314
msgid "Illegal translation string"
msgstr "不正な翻訳文字列"
-#: cups/ppd.c:315
msgid "Illegal whitespace character"
msgstr "不正な空白文字"
-#: ppdc/sample.c:266
msgid "Installable Options"
msgstr "インストール可能オプション"
-#: ppdc/sample.c:269
msgid "Installed"
msgstr "インストールされています"
-#: ppdc/sample.c:288
msgid "IntelliBar Label Printer"
msgstr "IntelliBar ラベルプリンター"
-#: ppdc/sample.c:287
msgid "Intellitech"
msgstr "Intellitech"
-#: cups/http-support.c:1396
msgid "Internal Server Error"
msgstr "サーバー内部エラー"
-#: cups/ppd.c:302
msgid "Internal error"
msgstr "内部エラー"
-#: ppdc/sample.c:167
msgid "Internet Postage 2-Part"
msgstr "Internet Postage 2-Part"
-#: ppdc/sample.c:168
msgid "Internet Postage 3-Part"
msgstr "Internet Postage 3-Part"
-#: backend/ipp.c:319
msgid "Internet Printing Protocol"
msgstr "インターネット印刷プロトコル"
-#: cups/pwg-media.c:293 cups/pwg-media.c:312
msgid "Invalid media name arguments."
msgstr "無効なメディア名引数です。"
-#: cups/dest-options.c:1032
msgid "Invalid media size."
msgstr "無効なメディアサイズです。"
-#: filter/commandtops.c:114
#, c-format
msgid "Invalid printer command \"%s\"."
msgstr "無効なプリンターコマンドです。 \"%s\""
-#: cups/ppd.c:1376
msgid "JCL"
msgstr "JCL"
-#: ppdc/sample.c:53
msgid "JIS B0"
msgstr "JIS B0"
-#: ppdc/sample.c:55
msgid "JIS B1"
msgstr "JIS B1"
-#: ppdc/sample.c:54
msgid "JIS B10"
msgstr "JIS B10"
-#: ppdc/sample.c:56
msgid "JIS B2"
msgstr "JIS B2"
-#: ppdc/sample.c:57
msgid "JIS B3"
msgstr "JIS B3"
-#: ppdc/sample.c:58
msgid "JIS B4"
msgstr "JIS B4"
-#: ppdc/sample.c:59
msgid "JIS B4 Long Edge"
msgstr "JIS B4 長辺送り"
-#: ppdc/sample.c:60
msgid "JIS B5"
msgstr "JIS B5"
-#: ppdc/sample.c:61
msgid "JIS B5 Long Edge"
msgstr "JIS B5 長辺送り"
-#: ppdc/sample.c:62
msgid "JIS B6"
msgstr "JIS B6"
-#: ppdc/sample.c:63
msgid "JIS B6 Long Edge"
msgstr "JIS B6 長辺送り"
-#: ppdc/sample.c:64
msgid "JIS B7"
msgstr "JIS B7"
-#: ppdc/sample.c:65
msgid "JIS B8"
msgstr "JIS B8"
-#: ppdc/sample.c:66
msgid "JIS B9"
msgstr "JIS B9"
-#: scheduler/ipp.c:8954
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr "ジョブ番号 %d を再開できません - ファイルが見つかりません。"
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
#, c-format
msgid "Job #%d does not exist."
msgstr "ジョブ番号 %d は存在しません。"
-#: scheduler/ipp.c:3501
#, c-format
msgid "Job #%d is already aborted - can't cancel."
msgstr "ジョブ番号 %d はすでに中断されています - キャンセルできません。"
-#: scheduler/ipp.c:3495
#, c-format
msgid "Job #%d is already canceled - can't cancel."
msgstr "ジョブ番号 %d はすでにキャンセルされています - キャンセルできません。"
-#: scheduler/ipp.c:3507
#, c-format
msgid "Job #%d is already completed - can't cancel."
msgstr "ジョブ番号 %d はすでに完了しています - キャンセルできません。"
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr "ジョブ番号 %d はすでに終了し、変更できません。"
-#: scheduler/ipp.c:8936
#, c-format
msgid "Job #%d is not complete."
msgstr "ジョブ番号 %d は完了していません。"
-#: scheduler/ipp.c:3014
#, c-format
msgid "Job #%d is not held for authentication."
msgstr "ジョブ番号 %d は認証のために保留されていません。"
-#: scheduler/ipp.c:8710
#, c-format
msgid "Job #%d is not held."
msgstr "ジョブ番号 %d は保留されていません。"
-#: cgi-bin/ipp-var.c:1035
msgid "Job Completed"
msgstr "ジョブ完了"
-#: cgi-bin/ipp-var.c:1033
msgid "Job Created"
msgstr "ジョブ作成"
-#: cgi-bin/ipp-var.c:1039
msgid "Job Options Changed"
msgstr "ジョブオプション変更"
-#: cgi-bin/ipp-var.c:1037
msgid "Job Stopped"
msgstr "ジョブ中止"
-#: scheduler/ipp.c:9975
msgid "Job is completed and cannot be changed."
msgstr "ジョブは完了し変更できません。"
-#: cgi-bin/jobs.c:192
msgid "Job operation failed"
msgstr "ジョブ操作失敗"
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
msgid "Job state cannot be changed."
msgstr "ジョブの状態を変更できません。"
-#: scheduler/ipp.c:8802
msgid "Job subscriptions cannot be renewed."
msgstr "ジョブサブスクリプションを更新できません。"
-#: cgi-bin/jobs.c:97 cgi-bin/jobs.c:108 cgi-bin/jobs.c:189
msgid "Jobs"
msgstr "ジョブ"
-#: backend/lpd.c:177
msgid "LPD/LPR Host or Printer"
msgstr "LPD/LPR ホストまたはプリンター"
-#: ppdc/sample.c:230
msgid "Label Printer"
msgstr "ラベルプリンター"
-#: ppdc/sample.c:441
msgid "Label Top"
msgstr "ラベルトップ"
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
#, c-format
msgid "Language \"%s\" not supported."
msgstr "言語 \"%s\" はサポートされていません。"
-#: ppdc/sample.c:164
msgid "Large Address"
msgstr "ラージアドレス"
-#: ppdc/sample.c:286
msgid "LaserJet Series PCL 4/5"
msgstr "LaserJet Series PCL 4/5"
-#: ppdc/sample.c:43
msgid "Letter Oversize"
msgstr "US レター (特大)"
-#: ppdc/sample.c:44
msgid "Letter Oversize Long Edge"
msgstr "US レター (特大) 長辺送り"
-#: ppdc/sample.c:236
msgid "Light"
msgstr "薄い"
-#: cups/ppd.c:310
msgid "Line longer than the maximum allowed (255 characters)"
msgstr "1 行が最大値 (255 文字) を超えています"
-#: cgi-bin/admin.c:2373
msgid "List Available Printers"
msgstr "使用可能なプリンター一覧"
-#: cups/localize.c:291
msgid "Load paper."
msgstr "用紙を補給してください。"
-#: ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr "長辺給紙 (縦向き)"
-#: cups/http-support.c:1725
msgid "Looking for printer."
msgstr "プリンターを探しています。"
-#: ppdc/sample.c:260
msgid "Manual Feed"
msgstr "手差し"
-#: cups/ppd.c:747 cups/ppd.c:1313
msgid "Media Size"
msgstr "用紙サイズ"
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
msgid "Media Source"
msgstr "給紙"
-#: ppdc/sample.c:359
msgid "Media Tracking"
msgstr "用紙の経路"
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
msgid "Media Type"
msgstr "用紙種類"
-#: ppdc/sample.c:237
msgid "Medium"
msgstr "紙質"
-#: cups/ppd.c:299
msgid "Memory allocation error"
msgstr "メモリー割り当てエラー"
-#: cups/ppd.c:319
msgid "Missing CloseGroup"
msgstr "CloseGroup がありません"
-#: cups/ppd.c:300
msgid "Missing PPD-Adobe-4.x header"
msgstr "PPD-Adobe-4.x ヘッダーがありません"
-#: cups/ppd.c:309
msgid "Missing asterisk in column 1"
msgstr "1 列目にアスタリスクがありません"
-#: scheduler/ipp.c:5971
msgid "Missing document-number attribute."
msgstr "document-number 属性がありません。"
-#: cups/adminutil.c:262
#, c-format
msgid "Missing double quote on line %d."
msgstr "%d 行に二重引用符がありません。"
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
msgid "Missing form variable"
msgstr "form 変数がありません。"
-#: scheduler/ipp.c:9328
msgid "Missing last-document attribute in request."
msgstr "リクエストに last-document 属性がありません。"
-#: cups/pwg-media.c:555
msgid "Missing media or media-col."
msgstr "media または media-col がありません。"
-#: cups/pwg-media.c:474
msgid "Missing media-size in media-col."
msgstr "media-col に media-size がありません。"
-#: scheduler/ipp.c:6574
msgid "Missing notify-subscription-ids attribute."
msgstr "notify-subscription-ids 属性がありません。"
-#: cups/ppd.c:317
msgid "Missing option keyword"
msgstr "オプションキーワードがありません"
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
msgid "Missing requesting-user-name attribute."
msgstr "requesting-user-name 属性が設定されていません。"
-#: scheduler/ipp.c:388
msgid "Missing required attributes."
msgstr "必須の属性が設定されていません。"
-#: cups/http-support.c:1486
msgid "Missing resource in URI"
msgstr "URI のリソースがない"
-#: cups/http-support.c:1480
msgid "Missing scheme in URI"
msgstr "URI のスキームがない"
-#: cups/adminutil.c:243
#, c-format
msgid "Missing value on line %d."
msgstr "%d 行に値がありません。"
-#: cups/ppd.c:301
msgid "Missing value string"
msgstr "値文字列がありません"
-#: cups/pwg-media.c:462
msgid "Missing x-dimension in media-size."
msgstr "media-size に x-dimension がありません。"
-#: cups/pwg-media.c:468
msgid "Missing y-dimension in media-size."
msgstr "media-size に y-dimension がありません。"
-#: systemv/lpinfo.c:470
#, c-format
msgid ""
"Model: name = %s\n"
" プリンタードライバー = %s\n"
" デバイス ID = %s"
-#: test/ippfind.c:2786
msgid "Modifiers:"
msgstr "修飾子:"
-#: cgi-bin/admin.c:548
msgid "Modify Class"
msgstr "クラスの変更"
-#: cgi-bin/admin.c:860
msgid "Modify Printer"
msgstr "プリンターの変更"
-#: cgi-bin/ipp-var.c:410 cgi-bin/ipp-var.c:501
msgid "Move All Jobs"
msgstr "すべてのジョブの移動"
-#: cgi-bin/ipp-var.c:349 cgi-bin/ipp-var.c:408 cgi-bin/ipp-var.c:499
msgid "Move Job"
msgstr "ジョブの移動"
-#: cups/http-support.c:1353
msgid "Moved Permanently"
msgstr "別の場所へ移動しました"
-#: cups/ppd.c:298
msgid "NULL PPD file pointer"
msgstr "PPD ファイルポインターが NULL です"
-#: cups/snmp.c:1005
msgid "Name OID uses indefinite length"
msgstr "OID 名は限定的な長さを使用します"
-#: scheduler/ipp.c:1054
msgid "Nested classes are not allowed."
msgstr "入れ子になったクラスは許可されていません。"
-#: ppdc/sample.c:425
msgid "Never"
msgstr "Never"
-#: cups/ppd.c:1904
msgid "No"
msgstr "いいえ"
-#: cups/http-support.c:1350
msgid "No Content"
msgstr "中身がありません"
-#: cups/util.c:1123
msgid "No PPD name"
msgstr "PPD の名前がありません"
-#: cups/snmp.c:999
msgid "No VarBind SEQUENCE"
msgstr "VarBind SEQUENCE がありません"
-#: cups/adminutil.c:777
msgid "No Windows printer drivers are installed."
msgstr "Windows プリンタードライバーがインストールされていません。"
-#: cups/request.c:570 cups/request.c:933
msgid "No active connection"
msgstr "アクティブな接続はありません"
-#: cups/request.c:350
msgid "No active connection."
msgstr "アクティブな接続はありません。"
-#: scheduler/ipp.c:3418
#, c-format
msgid "No active jobs on %s."
msgstr "%s にはアクティブなジョブはありません。"
-#: scheduler/ipp.c:216
msgid "No attributes in request."
msgstr "リクエストに属性がありません。"
-#: scheduler/ipp.c:3041
msgid "No authentication information provided."
msgstr "認証情報が提供されていません。"
-#: cups/snmp.c:956
msgid "No community name"
msgstr "コミュニティ名がありません"
-#: scheduler/ipp.c:5771
msgid "No default printer."
msgstr "デフォルトのプリンターはありません。"
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
msgid "No destinations added."
msgstr "追加された宛先はありません。"
-#: backend/usb.c:200
msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
msgstr "argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません。"
-#: cups/snmp.c:986
msgid "No error-index"
msgstr "エラーインデックスがありません"
-#: cups/snmp.c:978
msgid "No error-status"
msgstr "エラーステータスがありません"
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
msgid "No file in print request."
msgstr "印刷リクエストにファイルがありません。"
-#: cups/util.c:817
msgid "No modification time"
msgstr "変更時刻がありません"
-#: cups/snmp.c:1003
msgid "No name OID"
msgstr "OID 名がありません"
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
-#: filter/rastertolabel.c:1288
msgid "No pages were found."
msgstr " ページが見つかりません。"
-#: cups/util.c:811
msgid "No printer name"
msgstr "プリンター名がありません"
-#: cups/util.c:1647
msgid "No printer-uri found"
msgstr "プリンター URI が見つかりません"
-#: cups/util.c:1631
msgid "No printer-uri found for class"
msgstr "クラスのプリンター URI が見つかりません"
-#: scheduler/ipp.c:6179
msgid "No printer-uri in request."
msgstr "プリンター URI のリクエストがありません。"
-#: cups/http.c:2260
msgid "No request URI."
msgstr "リクエスト URI がありません。"
-#: cups/http.c:2277
msgid "No request protocol version."
msgstr "リクエストプロトコルバージョンがありません。"
-#: cups/request.c:358
msgid "No request sent."
msgstr "リクエストが送られませんでした。"
-#: cups/snmp.c:970
msgid "No request-id"
msgstr "リクエストID がありません"
-#: scheduler/ipp.c:5374
msgid "No subscription attributes in request."
msgstr "リクエストにサブスクリプション属性がありません。"
-#: scheduler/ipp.c:7476
msgid "No subscriptions found."
msgstr "サブスクリプションが見つかりません。"
-#: cups/snmp.c:994
msgid "No variable-bindings SEQUENCE"
msgstr "variable-bindings SEQUENCE がありません"
-#: cups/snmp.c:949
msgid "No version number"
msgstr "バージョン名がありません"
-#: ppdc/sample.c:362
msgid "Non-continuous (Mark sensing)"
msgstr "非連続です (Mark sensing)"
-#: ppdc/sample.c:361
msgid "Non-continuous (Web sensing)"
msgstr "非連続です (Web sensing)"
-#: ppdc/sample.c:238
msgid "Normal"
msgstr "標準"
-#: cups/http-support.c:1372
msgid "Not Found"
msgstr "見つかりません"
-#: cups/http-support.c:1384
msgid "Not Implemented"
msgstr "実装されていません"
-#: ppdc/sample.c:268
msgid "Not Installed"
msgstr "インストールされていません"
-#: cups/http-support.c:1359
msgid "Not Modified"
msgstr "変更されていません"
-#: cups/http-support.c:1387
msgid "Not Supported"
msgstr "サポートされていません"
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
msgid "Not allowed to print."
msgstr "印刷が許可されていません。"
-#: ppdc/sample.c:146
msgid "Note"
msgstr "注意"
-#: systemv/cupstestdsc.c:433
msgid ""
"Note: this program only validates the DSC comments, not the PostScript "
"itself."
"注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検証す"
"るものではありません。"
-#: cups/http-support.c:1341 cups/http-support.c:1477 cups/ppd.c:296
msgid "OK"
msgstr "OK"
-#: ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr "Off (片面)"
-#: ppdc/sample.c:356
msgid "Oki"
msgstr "Oki"
-#: cgi-bin/help.c:91 cgi-bin/help.c:132 cgi-bin/help.c:142 cgi-bin/help.c:172
msgid "Online Help"
msgstr "オンラインヘルプ"
-#: cups/adminutil.c:944
#, c-format
msgid "Open of %s failed: %s"
msgstr "%s のオープンに失敗しました: %s"
-#: cups/ppd.c:304
msgid "OpenGroup without a CloseGroup first"
msgstr "OpenGroup の前にまず CloseGroup が必要です"
-#: cups/ppd.c:306
msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
msgstr "OpenUI/JCLOpenUI の前にまず CloseUI/JCLCloseUI が必要です"
-#: cgi-bin/admin.c:3611
msgid "Operation Policy"
msgstr "操作ポリシー"
-#: filter/pstops.c:2177
#, c-format
msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
msgstr "オプション \"%s\" は %%%%IncludeFeature 経由で含めることはできません。"
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
msgid "Options Installed"
msgstr "インストールされたオプション"
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
msgid "Options:"
msgstr "オプション:"
-#: cups/ppd-cache.c:125
msgid "Out of date PPD cache file."
msgstr "PPD キャッシュファイルが古すぎます。"
-#: cups/ppd-cache.c:1410
msgid "Out of memory."
msgstr "メモリーが足りません。"
-#: cups/ppd.c:753 cups/ppd.c:1319
msgid "Output Mode"
msgstr "出力モード"
-#: cups/localize.c:316
msgid "Output bin is almost full."
msgstr "排紙ビンがほとんど満杯です。"
-#: cups/localize.c:318
msgid "Output bin is full."
msgstr "排紙ビンが満杯です。"
-#: cups/localize.c:314
msgid "Output bin is missing."
msgstr "排紙ビンがありません。"
-#: systemv/cupstestdsc.c:399
msgid "PASS"
msgstr "合格"
-#: ppdc/sample.c:252
msgid "PCL Laser Printer"
msgstr "PCL レーザープリンター"
-#: ppdc/sample.c:149
msgid "PRC16K"
msgstr "PRC16K"
-#: ppdc/sample.c:150
msgid "PRC16K Long Edge"
msgstr "PRC16K 長辺送り"
-#: ppdc/sample.c:151
msgid "PRC32K"
msgstr "PRC32K"
-#: ppdc/sample.c:154
msgid "PRC32K Long Edge"
msgstr "PRC32K 長辺送り"
-#: ppdc/sample.c:152
msgid "PRC32K Oversize"
msgstr "PRC32K (特大)"
-#: ppdc/sample.c:153
msgid "PRC32K Oversize Long Edge"
msgstr "PRC32K (特大) 長辺送り"
-#: cups/snmp.c:966
msgid "Packet does not contain a Get-Response-PDU"
msgstr "パケットが Get-Response-PDU を含んでいません"
-#: cups/snmp.c:945
msgid "Packet does not start with SEQUENCE"
msgstr "パケットが SEQUENCE から始まりません"
-#: cups/localize.c:293
msgid "Paper jam."
msgstr "用紙詰まりです。"
-#: cups/localize.c:310
msgid "Paper tray is almost empty."
msgstr "給紙トレイがほとんど空です。"
-#: cups/localize.c:312
msgid "Paper tray is empty."
msgstr "給紙トレイが空です。"
-#: cups/localize.c:308
msgid "Paper tray is missing."
msgstr "給紙トレイがありません。"
-#: ppdc/sample.c:355
msgid "ParamCustominCutInterval"
msgstr "ParamCustominCutInterval"
-#: ppdc/sample.c:353
msgid "ParamCustominTearInterval"
msgstr "ParamCustominTearInterval"
-#: cups/auth.c:195 cups/auth.c:362
#, c-format
msgid "Password for %s on %s? "
msgstr "%s のパスワード (%s 上)? "
-#: systemv/cupsaddsmb.c:252
#, c-format
msgid "Password for %s required to access %s via SAMBA: "
msgstr "%s のパスワード (SAMBA 経由で %s にアクセスするのに必要):"
-#: cgi-bin/classes.c:159
msgid "Pause Class"
msgstr "クラスの休止"
-#: cgi-bin/printers.c:162
msgid "Pause Printer"
msgstr "プリンターの休止"
-#: ppdc/sample.c:443
msgid "Peel-Off"
msgstr "Peel-Off"
-#: ppdc/sample.c:160
msgid "Photo"
msgstr "写真"
-#: ppdc/sample.c:161
msgid "Photo Labels"
msgstr "写真ラベル"
-#: ppdc/sample.c:281
msgid "Plain Paper"
msgstr "普通紙"
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
msgid "Policies"
msgstr "ポリシー"
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
msgid "Port Monitor"
msgstr "ポートモニター"
-#: ppdc/sample.c:270
msgid "PostScript Printer"
msgstr "PostScript プリンター"
-#: ppdc/sample.c:147
msgid "Postcard"
msgstr "ハガキ"
-#: ppdc/sample.c:71
msgid "Postcard Double "
msgstr "往復ハガキ"
-#: ppdc/sample.c:72
msgid "Postcard Double Long Edge"
msgstr "往復ハガキ 長辺送り"
-#: ppdc/sample.c:148
msgid "Postcard Long Edge"
msgstr "ハガキ 長辺送り"
-#: backend/ipp.c:961 backend/ipp.c:969
msgid "Preparing to print."
msgstr "印刷準備中です。"
-#: ppdc/sample.c:290
msgid "Print Density"
msgstr "印刷密度"
-#: cups/notify.c:82
msgid "Print Job:"
msgstr "ジョブの印刷:"
-#: ppdc/sample.c:335
msgid "Print Mode"
msgstr "印刷モード"
-#: ppdc/sample.c:378
msgid "Print Rate"
msgstr "印刷レート"
-#: cgi-bin/printers.c:171
msgid "Print Self-Test Page"
msgstr "自己テストページの印刷"
-#: ppdc/sample.c:322
msgid "Print Speed"
msgstr "印刷速度"
-#: cgi-bin/ipp-var.c:777
msgid "Print Test Page"
msgstr "テストページの印刷"
-#: ppdc/sample.c:351
msgid "Print and Cut"
msgstr "プリントしてカット"
-#: ppdc/sample.c:339
msgid "Print and Tear"
msgstr "プリントして切り取る"
-#: backend/socket.c:429 backend/usb-unix.c:184
msgid "Print file sent."
msgstr "プリントファイルが送られました。"
-#: backend/ipp.c:2172
msgid "Print job canceled at printer."
msgstr "印刷ジョブはプリンターでキャンセルされました。"
-#: backend/ipp.c:2164
msgid "Print job too large."
msgstr "印刷ジョブが大きすぎます。"
-#: backend/ipp.c:1642
msgid "Print job was not accepted."
msgstr "印刷ジョブが受け付けられませんでした。"
-#: cgi-bin/ipp-var.c:1027
msgid "Printer Added"
msgstr "追加されたプリンター"
-#: ppdc/sample.c:255
msgid "Printer Default"
msgstr "デフォルトのプリンター"
-#: cgi-bin/ipp-var.c:1031
msgid "Printer Deleted"
msgstr "削除されたプリンター"
-#: cgi-bin/ipp-var.c:1029
msgid "Printer Modified"
msgstr "変更されたプリンター"
-#: cgi-bin/ipp-var.c:1025
msgid "Printer Paused"
msgstr "プリンターの休止"
-#: ppdc/sample.c:289
msgid "Printer Settings"
msgstr "プリンター設定"
-#: backend/ipp.c:2167
msgid "Printer cannot print supplied content."
msgstr "プリンターは受信した内容を印刷できませんでした。"
-#: backend/ipp.c:2170
msgid "Printer cannot print with supplied options."
msgstr "指定されたオプションではプリンターは印刷できません。"
-#: cups/notify.c:126
msgid "Printer:"
msgstr "プリンター:"
-#: cgi-bin/printers.c:196 cgi-bin/printers.c:324
msgid "Printers"
msgstr "プリンター"
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
-#: filter/rastertolabel.c:1235
#, c-format
msgid "Printing page %d, %u%% complete."
msgstr "ページ %d, %u%% の印刷が完了しました。"
-#: ppdc/sample.c:155
msgid "Quarto"
msgstr "Quarto"
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
msgid "Quota limit reached."
msgstr "クォータの制限に達しました。"
-#: berkeley/lpq.c:490
msgid "Rank Owner Job File(s) Total Size"
msgstr "ランク 所有者 ジョブ ファイル 合計サイズ"
-#: cgi-bin/classes.c:163 cgi-bin/printers.c:166
msgid "Reject Jobs"
msgstr "ジョブの拒否"
-#: backend/lpd.c:1024 backend/lpd.c:1156
#, c-format
msgid "Remote host did not accept control file (%d)."
msgstr "リモートホストがコントロールファイルを受け付けませんでした (%d)。"
-#: backend/lpd.c:1109
#, c-format
msgid "Remote host did not accept data file (%d)."
msgstr "リモートホストがデータファイルを受け付けませんでした (%d)。"
-#: ppdc/sample.c:423
msgid "Reprint After Error"
msgstr "エラー後の再印刷"
-#: cups/http-support.c:1375
msgid "Request Entity Too Large"
msgstr "要求するエンティティが大きすぎます"
-#: cups/ppd.c:755 cups/ppd.c:1321 ppdc/sample.c:231
msgid "Resolution"
msgstr "解像度"
-#: cgi-bin/classes.c:157
msgid "Resume Class"
msgstr "クラスを再開する"
-#: cgi-bin/printers.c:159
msgid "Resume Printer"
msgstr "プリンターを再開する"
-#: ppdc/sample.c:165
msgid "Return Address"
msgstr "返信用ラベル"
-#: ppdc/sample.c:444
msgid "Rewind"
msgstr "巻き取り"
-#: cups/adminutil.c:2041
#, c-format
msgid "Running command: %s %s -N -A %s -c '%s'"
msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'"
-#: cups/snmp.c:947
msgid "SEQUENCE uses indefinite length"
msgstr "SEQUENCE は不定長を使用しています"
-#: cups/http-support.c:1399
msgid "SSL/TLS Negotiation Error"
msgstr "SSL/TLS のネゴシエーションエラー"
-#: cups/http-support.c:1356
msgid "See Other"
msgstr "残りを見てください"
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
msgid "Sending data to printer."
msgstr "データをプリンターに送信しています。"
-#: cgi-bin/ipp-var.c:1041
msgid "Server Restarted"
msgstr "再起動されたサーバー"
-#: cgi-bin/ipp-var.c:1047
msgid "Server Security Auditing"
msgstr "サーバーのセキュリティー監査"
-#: cgi-bin/ipp-var.c:1043
msgid "Server Started"
msgstr "開始されたサーバー"
-#: cgi-bin/ipp-var.c:1045
msgid "Server Stopped"
msgstr "停止されたサーバー"
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
msgid "Server credentials not set."
msgstr "サーバー証明書が設定されていません。"
-#: cups/http-support.c:1393
msgid "Service Unavailable"
msgstr "利用できないサービス"
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
msgid "Set Allowed Users"
msgstr "許可するユーザーの設定"
-#: cgi-bin/admin.c:3015
msgid "Set As Server Default"
msgstr "サーバーのデフォルトに設定"
-#: cgi-bin/admin.c:3115
msgid "Set Class Options"
msgstr "クラスオプションの設定"
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
msgid "Set Printer Options"
msgstr "プリンターオプションの設定"
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
msgid "Set Publishing"
msgstr "公開の設定"
-#: ppdc/sample.c:166
msgid "Shipping Address"
msgstr "発送先ラベル"
-#: ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr "短辺 (横原稿)"
-#: ppdc/sample.c:283
msgid "Special Paper"
msgstr "特殊紙"
-#: backend/lpd.c:1065
#, c-format
msgid "Spooling job, %.0f%% complete."
msgstr "ジョブをスプール中、%.0f%% 完了しました。"
-#: ppdc/sample.c:336
msgid "Standard"
msgstr "標準"
#. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
msgid "Starting Banner"
msgstr "開始バナー"
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
-#: filter/rastertolabel.c:1211
#, c-format
msgid "Starting page %d."
msgstr "ページ %d を開始しています。"
-#: ppdc/sample.c:156
msgid "Statement"
msgstr "記述"
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
#, c-format
msgid "Subscription #%d does not exist."
msgstr "サブスクリプション番号 %d は存在しません。"
-#: test/ippfind.c:2798
msgid "Substitutions:"
msgstr "置換:"
-#: ppdc/sample.c:157
msgid "Super A"
msgstr "スーパー A"
-#: ppdc/sample.c:158
msgid "Super B"
msgstr "スーパー B"
-#: ppdc/sample.c:162
msgid "Super B/A3"
msgstr "スーパー B/A3"
-#: cups/http-support.c:1338
msgid "Switching Protocols"
msgstr "プロトコルの変更"
-#: ppdc/sample.c:159
msgid "Tabloid"
msgstr "タブロイド"
-#: ppdc/sample.c:45
msgid "Tabloid Oversize"
msgstr "タブロイド (特大)"
-#: ppdc/sample.c:46
msgid "Tabloid Oversize Long Edge"
msgstr "タブロイド (特大) 長辺送り"
-#: ppdc/sample.c:337
msgid "Tear"
msgstr "Tear"
-#: ppdc/sample.c:442
msgid "Tear-Off"
msgstr "Tear-Off"
-#: ppdc/sample.c:383
msgid "Tear-Off Adjust Position"
msgstr "Tear-Off 位置調節"
-#: scheduler/ipp.c:1321
#, c-format
msgid "The \"%s\" attribute is required for print jobs."
msgstr "印刷ジョブに \"%s\" 属性が必要です。"
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr "%s 属性は、ジョブ ID と一緒に使うことはできません。"
-#: scheduler/ipp.c:1297
#, c-format
msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
-msgstr "'%s' Job Description 属性はジョブ作成要求の中で指定できません。"
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
+msgstr ""
-#: scheduler/ipp.c:5183
#, c-format
msgid ""
"The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr "%s 操作属性は、Create-Job リクエストの中で使うことはできません。"
-#: scheduler/ipp.c:6820
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr "PPD ファイル \"%s\" が見つかりません。"
-#: scheduler/ipp.c:6807
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr "PPD ファイル \"%s\" を開けませんでした: %s"
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
-#: filter/rastertolabel.c:1175
msgid "The PPD file could not be opened."
msgstr "PPD ファイルを開けませんでした。"
-#: cgi-bin/admin.c:727
msgid ""
"The class name may only contain up to 127 printable characters and may not "
"contain spaces, slashes (/), or the pound sign (#)."
-msgstr "クラス名は 127 文字以内の表示可能文字からなり、空白、スラッシュ (/)、ハッシュ (#) を含んではなりません。"
+msgstr ""
+"クラス名は 127 文字以内の表示可能文字からなり、空白、スラッシュ (/)、ハッ"
+"シュ (#) を含んではなりません。"
-#: cups/localize.c:338
msgid "The developer unit needs to be replaced."
msgstr "現像ユニットの交換が必要です。"
-#: cups/localize.c:336
msgid "The developer unit will need to be replaced soon."
msgstr "もうすぐ現像ユニットの交換時期です。"
-#: cups/localize.c:328
msgid "The fuser's temperature is high."
msgstr "定着器の温度が高すぎます。"
-#: cups/localize.c:330
msgid "The fuser's temperature is low."
msgstr "定着器の温度が低すぎます。"
-#: scheduler/ipp.c:2088
msgid ""
"The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
"notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはでき"
"ません。"
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)。"
-#: cups/localize.c:334
msgid "The optical photoconductor needs to be replaced."
msgstr "感光体の交換が必要です。"
-#: cups/localize.c:332
msgid "The optical photoconductor will need to be replaced soon."
msgstr "もうすぐ感光体の交換時期です。"
-#: backend/ipp.c:981
msgid "The printer configuration is incorrect or the printer no longer exists."
msgstr "プリンターの設定が正しくないかプリンターはすでに存在しません。"
-#: backend/lpd.c:627 backend/lpd.c:1017 backend/lpd.c:1099 backend/lpd.c:1149
msgid "The printer did not respond."
msgstr "プリンターが応答しません。"
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
-#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
msgid "The printer is in use."
msgstr "プリンターは使用中です。"
-#: cups/localize.c:320
msgid "The printer is low on ink."
msgstr "インク残量が残り少なくなっています。"
-#: cups/localize.c:298
msgid "The printer is low on toner."
msgstr "トナー残量が残り少なくなっています。"
-#: backend/runloop.c:243 backend/runloop.c:363 cups/localize.c:296
msgid "The printer is not connected."
msgstr "プリンターは接続されていません。"
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
-#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
msgid "The printer is not responding."
msgstr "プリンターが応答していません。"
-#: backend/runloop.c:385
msgid "The printer is now connected."
msgstr "プリンターが接続されました。"
-#: backend/usb-darwin.c:1300
msgid "The printer is now online."
msgstr "プリンターは現在オンラインです。"
-#: backend/usb-darwin.c:1321
msgid "The printer is offline."
msgstr "プリンターはオフラインです。"
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
msgid "The printer is unreachable at this time."
msgstr "プリンターには現在到達できません。"
-#: cups/localize.c:322
msgid "The printer may be out of ink."
msgstr "プリンターのインクがなくなっているようです。"
-#: cups/localize.c:300
msgid "The printer may be out of toner."
msgstr "プリンターのトナーがなくなっているようです。"
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
msgid "The printer may not exist or is unavailable at this time."
msgstr "プリンターは現在存在しないか、使用できないようです。"
-#: cgi-bin/admin.c:909
msgid ""
"The printer name may only contain up to 127 printable characters and may not "
"contain spaces, slashes (/), or the pound sign (#)."
-msgstr "プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ハッシュ (#) を含んではなりません。"
-
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
+msgstr ""
+"プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ハッ"
+"シュ (#) を含んではなりません。"
+
msgid "The printer or class does not exist."
msgstr "プリンターまたはクラスは存在しません。"
-#: scheduler/ipp.c:1234
msgid "The printer or class is not shared."
msgstr "プリンターまたはクラスは共有できません。"
-#: cups/localize.c:302
msgid "The printer's cover is open."
msgstr "プリンターのカバーが開いています。"
-#: cups/localize.c:306
msgid "The printer's door is open."
msgstr "プリンターのドアが開いています。"
-#: cups/localize.c:304
msgid "The printer's interlock is open."
msgstr "プリンターのインターロックが開いています。"
-#: cups/localize.c:324
msgid "The printer's waste bin is almost full."
msgstr "プリンターの廃インクまたは廃トナー容器がほとんど一杯です。"
-#: cups/localize.c:326
msgid "The printer's waste bin is full."
msgstr "プリンターの廃インクまたは廃トナー容器が一杯です。"
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr "printer-uri \"%s\" には、無効な文字が含まれています。"
-#: scheduler/ipp.c:3182
msgid "The printer-uri attribute is required."
msgstr "printer-uri 属性は必須です。"
-#: scheduler/ipp.c:878
msgid ""
"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
"printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりませ"
"ん。"
-#: scheduler/ipp.c:2236
msgid ""
"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
"printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりま"
"せん。"
-#: cgi-bin/admin.c:452
msgid ""
"The subscription name may not contain spaces, slashes (/), question marks "
"(?), or the pound sign (#)."
-msgstr "サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ハッシュ (#) を使用しないでください。"
+msgstr ""
+"サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ハッシュ (#) "
+"を使用しないでください。"
-#: scheduler/client.c:2232
msgid ""
"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
"enable it."
"Web インターフェイスが現在無効になっています。有効にするには \"cupsctl "
"WebInterface=yes\" を実行してください。"
-#: scheduler/ipp.c:6314
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr "which-jobs の値 \"%s\" はサポートされていません。"
-#: scheduler/ipp.c:5577
msgid "There are too many subscriptions."
msgstr "サブスクリプションが多すぎます。"
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
msgid "There was an unrecoverable USB error."
msgstr "回復不可能な USB のエラーが発生しています。"
-#: ppdc/sample.c:430
msgid "Thermal Transfer Media"
msgstr "熱転写メディア"
-#: scheduler/ipp.c:1479
msgid "Too many active jobs."
msgstr "アクティブなジョブが多すぎます。"
-#: scheduler/ipp.c:1373
#, c-format
msgid "Too many job-sheets values (%d > 2)."
msgstr "job-sheets 値が多すぎます (%d > 2)。"
-#: scheduler/ipp.c:2537
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr "printer-state-reasons 値が多すぎます (%d > %d)。"
-#: ppdc/sample.c:284
msgid "Transparency"
msgstr "OHP シート"
-#: ppdc/sample.c:279
msgid "Tray"
msgstr "トレイ"
-#: ppdc/sample.c:256
msgid "Tray 1"
msgstr "トレイ 1"
-#: ppdc/sample.c:257
msgid "Tray 2"
msgstr "トレイ 2"
-#: ppdc/sample.c:258
msgid "Tray 3"
msgstr "トレイ 3"
-#: ppdc/sample.c:259
msgid "Tray 4"
msgstr "トレイ 4"
-#: cups/http-support.c:1378
msgid "URI Too Long"
msgstr "URI が長すぎます"
-#: cups/http-support.c:1453
msgid "URI too large"
msgstr "URI が長すぎる"
-#: ppdc/sample.c:138
msgid "US Ledger"
msgstr "US レジャー"
-#: ppdc/sample.c:139
msgid "US Legal"
msgstr "US リーガル"
-#: ppdc/sample.c:140
msgid "US Legal Oversize"
msgstr "US リーガル (特大)"
-#: ppdc/sample.c:141
msgid "US Letter"
msgstr "US レター"
-#: ppdc/sample.c:142
msgid "US Letter Long Edge"
msgstr "US レター 長辺送り"
-#: ppdc/sample.c:143
msgid "US Letter Oversize"
msgstr "US レター (特大)"
-#: ppdc/sample.c:144
msgid "US Letter Oversize Long Edge"
msgstr "US レター (特大) 長辺送り"
-#: ppdc/sample.c:145
msgid "US Letter Small"
msgstr "US レター (小)"
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
msgid "Unable to access cupsd.conf file"
msgstr "cupsd.conf ファイルにアクセスできません"
-#: cgi-bin/help.c:133
msgid "Unable to access help file."
msgstr "ヘルプファイルにアクセスできません。"
-#: cgi-bin/admin.c:504
msgid "Unable to add RSS subscription"
msgstr "RSS 購読を追加できません"
-#: cgi-bin/admin.c:792
msgid "Unable to add class"
msgstr "クラスを追加できません"
-#: backend/ipp.c:1796
msgid "Unable to add document to print job."
msgstr "ドキュメントを印刷ジョブに追加できません。"
-#: scheduler/ipp.c:1537
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr "宛先 \"%s\"にジョブを追加できません。"
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
msgid "Unable to add printer"
msgstr "プリンターを追加できません"
-#: scheduler/ipp.c:1164
msgid "Unable to allocate memory for file types."
msgstr "ファイルタイプ用にメモリーを割り当てられません。"
-#: filter/pstops.c:418
msgid "Unable to allocate memory for page info"
msgstr "ページ情報のメモリー割り当てができません"
-#: filter/pstops.c:412
msgid "Unable to allocate memory for pages array"
msgstr "ページアレイのメモリー割り当てができません"
-#: cgi-bin/admin.c:1505
msgid "Unable to cancel RSS subscription"
msgstr "RSS 購読をキャンセルできません"
-#: backend/ipp.c:2077 backend/ipp.c:2512
msgid "Unable to cancel print job."
msgstr "プリンターを変更できません。"
-#: cgi-bin/admin.c:2970
msgid "Unable to change printer"
msgstr "プリンターを変更できません"
-#: cgi-bin/admin.c:3886
msgid "Unable to change printer-is-shared attribute"
msgstr "printer-is-shared 属性を変更することができません"
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
msgid "Unable to change server settings"
msgstr "サーバーの設定を変更できません"
-#: cups/ipp.c:5389
#, c-format
msgid "Unable to compile mimeMediaType regular expression: %s."
msgstr "mimeMediaType の正規表現を解釈できませんでした: %s。"
-#: cups/ipp.c:5335
#, c-format
msgid "Unable to compile naturalLanguage regular expression: %s."
msgstr "naturalLanguage の正規表現を解釈できませんでした: %s。"
-#: filter/commandtops.c:407
msgid "Unable to configure printer options."
msgstr "プリンターオプションを設定できません。"
-#: cups/adminutil.c:900 cups/request.c:1066
msgid "Unable to connect to host."
msgstr "ホストに接続できません。"
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
-#: backend/usb-unix.c:110
msgid "Unable to contact printer, queuing on next printer in class."
msgstr "プリンターと交信できません。クラス内の次のプリンターにキューします。"
-#: cups/adminutil.c:715
#, c-format
msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
msgstr "64-bit 版の CUPS プリンタードライバーファイルをコピーできません (%d)。"
-#: cups/adminutil.c:680
#, c-format
msgid "Unable to copy 64-bit Windows printer driver files (%d)."
msgstr "64-bit 版の Windows プリンタードライバーをコピーできません (%d)。"
-#: cups/adminutil.c:511
#, c-format
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr "複数の CUPS プリンタードライバーファイルをコピーできません (%d)。"
-#: scheduler/ipp.c:2657
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr "PPD ファイルをコピーできません - %s"
-#: scheduler/ipp.c:2712
msgid "Unable to copy PPD file."
msgstr "PPD ファイルをコピーできません。"
-#: cups/adminutil.c:476
#, c-format
msgid "Unable to copy Windows 2000 printer driver files (%d)."
msgstr ""
"複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)。"
-#: cups/adminutil.c:599
#, c-format
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
"複数の Windows 9x プリンタードライバーファイルをコピーできません (%d)。"
-#: scheduler/ipp.c:2634
#, c-format
msgid "Unable to copy interface script - %s"
msgstr "インターフェイススクリプトをコピーできません - %s"
-#: cups/util.c:496 cups/util.c:1479
msgid "Unable to create printer-uri"
msgstr "printer-uri を作成できません"
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
msgid "Unable to create server credentials."
msgstr "サーバー証明書を作成できません。"
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
msgid "Unable to create temporary file"
msgstr "テンポラリーファイルを作成できません"
-#: cgi-bin/admin.c:2133
msgid "Unable to delete class"
msgstr "クラスを削除できません"
-#: cgi-bin/admin.c:2218
msgid "Unable to delete printer"
msgstr "プリンターを削除できません"
-#: cgi-bin/classes.c:252 cgi-bin/printers.c:261
msgid "Unable to do maintenance command"
msgstr "メンテナンスコマンドを実行できません"
-#: cgi-bin/admin.c:1954
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr "1MB 以上の cupsd.conf ファイルは編集できません"
-#: cups/tls-darwin.c:1284
msgid ""
"Unable to establish a secure connection to host (certificate chain invalid)."
msgstr "ホストへの安全な接続が確立できません (認証パスが無効です)。"
-#: cups/tls-darwin.c:1274
msgid ""
"Unable to establish a secure connection to host (certificate not yet valid)."
msgstr "ホストへの安全な接続が確立できません (認証がまだ有効ではありません)。"
-#: cups/tls-darwin.c:1269
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr "ホストへの安全な接続が確立できません (認証が期限切れです)。"
-#: cups/tls-darwin.c:1279
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr "ホストへの安全な接続が確立できません (ホスト名が一致しません)。"
-#: cups/tls-darwin.c:1289
msgid ""
"Unable to establish a secure connection to host (peer dropped connection "
"before responding)."
msgstr ""
"ホストへの安全な接続が確立できません (応答がある前に接続が切断されました)。"
-#: cups/tls-darwin.c:1264
msgid ""
"Unable to establish a secure connection to host (self-signed certificate)."
msgstr "ホストへの安全な接続が確立できません (自己署名証明書です)。"
-#: cups/tls-darwin.c:1259
msgid ""
"Unable to establish a secure connection to host (untrusted certificate)."
msgstr "ホストへの安全な接続が確立できません (信用できない証明書です)。"
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
msgid "Unable to establish a secure connection to host."
msgstr "ホストへの安全な接続を確立できません。"
-#: cgi-bin/ipp-var.c:350
msgid "Unable to find destination for job"
msgstr "ジョブの宛先が見つかりません"
-#: cups/http-support.c:1949
msgid "Unable to find printer."
msgstr "プリンターが見つかりません。"
-#: cups/tls-darwin.c:1130
msgid "Unable to find server credentials."
msgstr "サーバー証明書を見つけられません。"
-#: backend/ipp.c:3493
msgid "Unable to get backend exit status."
msgstr "バックエンドの終了ステータスを取得できません。"
-#: cgi-bin/classes.c:442
msgid "Unable to get class list"
msgstr "クラスリストを取得できません"
-#: cgi-bin/classes.c:541
msgid "Unable to get class status"
msgstr "クラスの状態を取得できません。"
-#: cgi-bin/admin.c:1300
msgid "Unable to get list of printer drivers"
msgstr "プリンタードライバーのリストを取得できません"
-#: cgi-bin/admin.c:2820
msgid "Unable to get printer attributes"
msgstr "プリンター属性を取得できません"
-#: cgi-bin/printers.c:459
msgid "Unable to get printer list"
msgstr "プリンターリストを取得できません"
-#: cgi-bin/printers.c:561
msgid "Unable to get printer status"
msgstr "プリンターの状態を取得できません"
-#: backend/ipp.c:1005
msgid "Unable to get printer status."
msgstr "プリンターの状態を取得できません。"
-#: cups/adminutil.c:554 cups/adminutil.c:758
#, c-format
msgid "Unable to install Windows 2000 printer driver files (%d)."
msgstr ""
"複数の Windows 2000 プリンタードライバーファイルをインストールできません "
"(%d)。"
-#: cups/adminutil.c:628
#, c-format
msgid "Unable to install Windows 9x printer driver files (%d)."
msgstr ""
"複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)。"
-#: cgi-bin/help.c:92
msgid "Unable to load help index."
msgstr "ヘルプの索引を読み込めません。"
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
#, c-format
msgid "Unable to locate printer \"%s\"."
msgstr "プリンター \"%s\" が見つかりません。"
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
-#: backend/socket.c:163
msgid "Unable to locate printer."
msgstr "プリンターが見つかりません。"
-#: cgi-bin/admin.c:791
msgid "Unable to modify class"
msgstr "クラスを変更できません"
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
msgid "Unable to modify printer"
msgstr "プリンターを変更できません"
-#: cgi-bin/ipp-var.c:417 cgi-bin/ipp-var.c:506
msgid "Unable to move job"
msgstr "ジョブを移動できません"
-#: cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:508
msgid "Unable to move jobs"
msgstr "複数のジョブを移動できません"
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
msgid "Unable to open PPD file"
msgstr "PPD ファイルを読み込むことができません"
-#: cgi-bin/admin.c:2588
msgid "Unable to open cupsd.conf file:"
msgstr "cupsd.conf ファイルを開けません:"
-#: backend/usb-unix.c:134
msgid "Unable to open device file"
msgstr "デバイスファイルを開けません"
-#: scheduler/ipp.c:5992
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr "ドキュメント %d (ジョブ %d) を開けません。"
-#: cgi-bin/help.c:364
msgid "Unable to open help file."
msgstr "ヘルプファイルを読み込むことができません。"
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
msgid "Unable to open print file"
msgstr "印刷ファイルを開けません"
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
-#: filter/rastertolabel.c:1133
msgid "Unable to open raster file"
msgstr "ラスターファイルを開けません"
-#: cgi-bin/ipp-var.c:780
msgid "Unable to print test page"
msgstr "テストページを印刷できません"
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
msgid "Unable to read print data."
msgstr "プリントデータを読み込めません。"
-#: cups/dest.c:3445
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr "printer-uri を解決できません。"
-#: cups/adminutil.c:2077
#, c-format
msgid "Unable to run \"%s\": %s"
msgstr "\"%s\" を実行できません: %s"
-#: filter/pstops.c:530
msgid "Unable to see in file"
msgstr "ファイルを読み込むことができません"
-#: cgi-bin/ipp-var.c:583 cgi-bin/ipp-var.c:603
msgid "Unable to send command to printer driver"
msgstr "プリンタードライバーにコマンドを送信できません"
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
msgid "Unable to send data to printer."
msgstr "プリンターにデータを送信することができません。"
-#: cups/adminutil.c:810
#, c-format
msgid "Unable to set Windows printer driver (%d)."
msgstr "Windows プリンタードライバーを設定できません (%d)。"
-#: cgi-bin/admin.c:3787
msgid "Unable to set options"
msgstr "オプションを設定できません"
-#: cgi-bin/admin.c:3057
msgid "Unable to set server default"
msgstr "サーバーをデフォルトに設定できません"
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
msgid "Unable to start backend process."
msgstr "バックエンドのプロセスを起動できません。"
-#: cgi-bin/admin.c:1892
msgid "Unable to upload cupsd.conf file"
msgstr "cupsd.conf ファイルをアップロードできません"
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
msgid "Unable to use legacy USB class driver."
msgstr "古いタイプの USB クラスドライバーは使用できません。"
-#: backend/runloop.c:114 backend/runloop.c:369
msgid "Unable to write print data"
msgstr "プリントデータを書き込めません"
-#: filter/gziptoany.c:86
#, c-format
msgid "Unable to write uncompressed print data: %s"
msgstr "非圧縮のプリントデータを書き込めません: %s"
-#: cups/http-support.c:1366
msgid "Unauthorized"
msgstr "未許可"
-#: cgi-bin/admin.c:3483
msgid "Units"
msgstr "ユニット"
-#: cups/http-support.c:1406 cups/http-support.c:1490 cups/ppd.c:324
msgid "Unknown"
msgstr "未知"
-#: filter/pstops.c:2185
#, c-format
msgid "Unknown choice \"%s\" for option \"%s\"."
msgstr "\"%s\" (オプション \"%s\" 用) は未知の設定です。"
-#: backend/ipp.c:520
#, c-format
msgid "Unknown encryption option value: \"%s\"."
msgstr "\"%s\" は未知の暗号オプション値です。"
-#: backend/lpd.c:342
#, c-format
msgid "Unknown file order: \"%s\"."
msgstr "\"%s\" は未知のファイルオーダーです。"
-#: backend/lpd.c:313
#, c-format
msgid "Unknown format character: \"%c\"."
msgstr "\"%c\" は未知の書式文字です。"
-#: cups/dest-options.c:964
msgid "Unknown media size name."
msgstr "未知のメディアサイズ名称です。"
-#: backend/ipp.c:584
#, c-format
msgid "Unknown option \"%s\" with value \"%s\"."
msgstr "\"%s\" (値 \"%s\") は未知のオプションです。"
-#: filter/pstops.c:2168
#, c-format
msgid "Unknown option \"%s\"."
msgstr "\"%s\" は未知のオプションです。"
-#: backend/lpd.c:328
#, c-format
msgid "Unknown print mode: \"%s\"."
msgstr "\"%s\" は未知のプリントモードです。"
-#: scheduler/ipp.c:10401
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr "\"%s\" は未知の printer-error-policy です。"
-#: scheduler/ipp.c:10384
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr "\"%s\" は未知の printer-op-policy です。"
-#: cups/http.c:2309
msgid "Unknown request method."
msgstr "未知のリクエスト方法です。"
-#: cups/http.c:2329
msgid "Unknown request version."
msgstr "未知のリクエストバージョンです。"
-#: cups/http-support.c:1483
msgid "Unknown scheme in URI"
msgstr "URI に未知のスキーマがあります"
-#: cups/http-addrlist.c:737
msgid "Unknown service name."
msgstr "未知のサービス名です。"
-#: backend/ipp.c:549
#, c-format
msgid "Unknown version option value: \"%s\"."
msgstr "\"%s\" は未知のバージョンオプション値です。"
-#: scheduler/ipp.c:10858
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr "\"%s\" はサポートされていない 'compression' の値です。"
-#: scheduler/ipp.c:10888
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr "\"%s\" はサポートされていない 'document-format' の値です。"
-#: scheduler/ipp.c:10963
msgid "Unsupported 'job-name' value."
msgstr "サポートされていない 'job-name' の値です。"
-#: scheduler/ipp.c:329
#, c-format
msgid "Unsupported character set \"%s\"."
msgstr "\"%s\" はサポートされていない文字セットです。"
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr "\"%s\" はサポートされていない圧縮形式です。"
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr "\"%s\" はサポートされていない文書形式です。"
-#: scheduler/ipp.c:9440
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr "\"%s/%s\" はサポートされていない文書形式です。"
-#: scheduler/ipp.c:1339
#, c-format
msgid "Unsupported format \"%s\"."
msgstr "\"%s\" はサポートされていない形式です。"
-#: scheduler/ipp.c:1437
msgid "Unsupported margins."
msgstr "サポートされていないマージンです。"
-#: cups/pwg-media.c:549
msgid "Unsupported media value."
msgstr "サポートされていないメディアの値です。"
-#: filter/pstops.c:2450
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
msgstr "%d はサポートされていない number-up 値です。number-up=1 を使用します。"
-#: filter/pstops.c:2484
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
msgstr ""
"%s はサポートされていない number-up-layout 値です。number-up-layout=lrtb を使"
"用します。"
-#: filter/pstops.c:2535
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
msgstr ""
"%s はサポートされていない page-border 値です。page-border=none を使用します。"
-#: filter/rastertopwg.c:139 filter/rastertopwg.c:147 filter/rastertopwg.c:156
msgid "Unsupported raster data."
msgstr "サポートされていないラスターデータです。"
-#: cups/snmp.c:1064
msgid "Unsupported value type"
msgstr "サポートされていない型の値です"
-#: cups/http-support.c:1381
msgid "Upgrade Required"
msgstr "アップグレードが必要です"
-#: systemv/lpadmin.c:654
msgid ""
"Usage:\n"
"\n"
" [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユー"
"ザー]"
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
-#: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
-#: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
-#: monitor/tbcp.c:55
#, c-format
msgid "Usage: %s job-id user title copies options [file]"
msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]"
-#: systemv/cupsaddsmb.c:281
msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
msgstr "Usage: cupsaddsmb [オプション] プリンター1 ... プリンターN"
-#: systemv/cupsctl.c:200
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr "Usage: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]"
-#: scheduler/main.c:2145
msgid "Usage: cupsd [options]"
msgstr "使い方: cupsd [オプション]"
-#: scheduler/cupsfilter.c:1481
msgid "Usage: cupsfilter [ options ] [ -- ] filename"
msgstr "使い方: cupsfilter [ オプション ] [ -- ] ファイル名"
-#: systemv/cupstestdsc.c:425
msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
msgstr "使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]"
-#: systemv/cupstestppd.c:3813
msgid ""
"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
msgstr ""
"使い方: cupstestppd [オプション] ファイル名1.ppd[.gz] [... ファイル名N.ppd[."
"gz]]"
-#: test/ippdiscover.c:814
msgid ""
"Usage: ippdiscover [options] -a\n"
" ippdiscover [options] \"service name\"\n"
"\n"
"オプション:"
-#: test/ippfind.c:2738
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
" ippfind --help\n"
" ippfind --version"
-#: test/ipptool.c:4803
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr "使い方: ipptool [オプション] URI ファイル名 [ ... ファイル名N ]"
-#: systemv/lpmove.c:125
msgid "Usage: lpmove job/src dest"
msgstr "使い方: lpmove ジョブ/ソース 宛先"
-#: systemv/lpoptions.c:539
msgid ""
"Usage: lpoptions [-h server] [-E] -d printer\n"
" lpoptions [-h server] [-E] [-p printer] -l\n"
" lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n"
" lpoptions [-h サーバー] [-E] -x プリンター"
-#: berkeley/lpq.c:637
msgid ""
"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
msgstr ""
"使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]"
-#: ppdc/ppdc.cxx:430
msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
msgstr "使い方: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]"
-#: ppdc/ppdhtml.cxx:172
msgid "Usage: ppdhtml [options] filename.drv >filename.html"
msgstr "使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html"
-#: ppdc/ppdi.cxx:128
msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
msgstr "使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]"
-#: ppdc/ppdmerge.cxx:361
msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
msgstr "使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]"
-#: ppdc/ppdpo.cxx:252
msgid ""
"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
msgstr ""
"使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N."
"drv ]"
-#: backend/snmp.c:192
msgid "Usage: snmp [host-or-ip-address]"
msgstr "使い方: snmp [ホスト名またはIPアドレス]"
-#: cups/snmp.c:1016
msgid "Value uses indefinite length"
msgstr "値は不定長です"
-#: cups/snmp.c:1001
msgid "VarBind uses indefinite length"
msgstr "VarBind は不定長です"
-#: cups/snmp.c:951
msgid "Version uses indefinite length"
msgstr "Version は不定長です"
-#: backend/ipp.c:1913
msgid "Waiting for job to complete."
msgstr "ジョブが完了するのを待っています。"
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
msgid "Waiting for printer to become available."
msgstr "プリンターが使用可能になるのを待っています。"
-#: backend/socket.c:440
msgid "Waiting for printer to finish."
msgstr "プリンターが終了するのを待っています。"
-#: cups/adminutil.c:782
msgid "Warning, no Windows 2000 printer drivers are installed."
msgstr "警告、Windows 2000 プリンタードライバーがインストールされていません。"
-#: cups/http-support.c:1402
msgid "Web Interface is Disabled"
msgstr "Web インターフェイスが無効になっています"
-#: cups/ppd.c:1902
msgid "Yes"
msgstr "はい"
-#: scheduler/client.c:2219
#, c-format
msgid ""
"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://"
"このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってア"
"クセスする必要があります。"
-#: ppdc/sample.c:434
msgid "ZPL Label Printer"
msgstr "ZPL ラベルプリンター"
-#: ppdc/sample.c:357
msgid "Zebra"
msgstr "ゼブラ"
-#: cups/notify.c:102
msgid "aborted"
msgstr "停止"
-#: cups/notify.c:99
msgid "canceled"
msgstr "キャンセル"
-#: cups/notify.c:105
msgid "completed"
msgstr "完了"
-#: scheduler/ipp.c:5864
msgid "cups-deviced failed to execute."
msgstr "cups-deviced の実行に失敗しました。"
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
msgid "cups-driverd failed to execute."
msgstr "cups-driverd の実行に失敗しました。"
-#: systemv/cupsaddsmb.c:233
#, c-format
msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s"
-#: systemv/cupsctl.c:141
msgid "cupsctl: Cannot set Listen or Port directly."
msgstr "cupsctl: Listen あるいは Port を直接設定できません。"
-#: systemv/cupsctl.c:152
#, c-format
msgid "cupsctl: Unable to connect to server: %s"
msgstr "cupsctl: サーバーに接続できません: %s"
-#: systemv/cupsctl.c:195
#, c-format
msgid "cupsctl: Unknown option \"%s\""
msgstr "cupsctl: \"%s\" は未知のオプションです。"
-#: systemv/cupsctl.c:197
#, c-format
msgid "cupsctl: Unknown option \"-%c\""
msgstr "cupsctl: \"-%c\"は未知のオプションです。"
-#: scheduler/main.c:171
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr "cupsd: \"-c\" オプションのあとには設定ファイル名が必要です。"
-#: scheduler/main.c:258
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
"cupsd: cups-files.conf ファイル名は \"-s\" オプションの後ろにあるべきです。"
-#: scheduler/main.c:236
msgid "cupsd: On-demand support not compiled in, running in normal mode."
-msgstr "cupsd: オンデマンドサポート有効でコンパイルされていません、標準モードで動作します。"
+msgstr ""
+"cupsd: オンデマンドサポート有効でコンパイルされていません、標準モードで動作し"
+"ます。"
-#: scheduler/main.c:269
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr "cupsd: 相対パスでの cups-files.conf の指定はできません。"
-#: scheduler/main.c:202 scheduler/main.c:209
msgid "cupsd: Unable to get current directory."
msgstr "cupsd: カレントディレクトリーを取得できません。"
-#: scheduler/main.c:316 scheduler/main.c:325
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr "cupsd: cups-files.conf ファイルへのパスが取得できません。"
-#: scheduler/main.c:298
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr "cupsd: \"%s\" は未知の引数です - 停止します。"
-#: scheduler/main.c:291
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr "cupsd: \"%c\" は未知のオプションです - 停止します。"
-#: scheduler/cupsfilter.c:1263
#, c-format
msgid "cupsfilter: Invalid document number %d."
msgstr "cupsfilter: 不正な文書番号 %d です。"
-#: scheduler/cupsfilter.c:1257
#, c-format
msgid "cupsfilter: Invalid job ID %d."
msgstr "cupsfilter: 不正なジョブID %d です。"
-#: scheduler/cupsfilter.c:348
msgid "cupsfilter: Only one filename can be specified."
msgstr "cupsfilter: 1 つのファイル名のみを指定できます。"
-#: scheduler/cupsfilter.c:1305
#, c-format
msgid "cupsfilter: Unable to get job file - %s"
msgstr "cupsfilter: ジョブ・ファイルを取得できません - %s"
-#: systemv/cupstestppd.c:261
msgid "cupstestppd: The -q option is incompatible with the -v option."
msgstr "cupstestppd: -q オプションは -v オプションと両立できません。"
-#: systemv/cupstestppd.c:277
msgid "cupstestppd: The -v option is incompatible with the -q option."
msgstr "cupstestppd: -v オプションは -q オプションと両立できません。"
-#: systemv/lpstat.c:1232 systemv/lpstat.c:1235 systemv/lpstat.c:1238
#, c-format
msgid "device for %s/%s: %s"
msgstr "%s/%s のデバイス: %s"
-#: systemv/lpstat.c:1218 systemv/lpstat.c:1221 systemv/lpstat.c:1224
#, c-format
msgid "device for %s: %s"
msgstr "%s のデバイス: %s"
-#: cups/snmp.c:988
msgid "error-index uses indefinite length"
msgstr "error-index は不定長です"
-#: cups/snmp.c:980
msgid "error-status uses indefinite length"
msgstr "error-status は不定長です"
-#: cups/notify.c:90
msgid "held"
msgstr "保留"
-#: berkeley/lpc.c:201
msgid "help\t\tGet help on commands."
msgstr "help\t\tコマンドのヘルプを取得。"
-#: cups/notify.c:131
msgid "idle"
msgstr "待機中"
-#: test/ippfind.c:2465
#, c-format
msgid "ippfind: Bad regular expression: %s"
msgstr "ippfind: 不正な正規表現です: %s"
-#: test/ippfind.c:328
msgid "ippfind: Cannot use --and after --or."
msgstr "ippfind: --and は --or のあとに指定することはできません。"
-#: test/ippfind.c:601
#, c-format
msgid "ippfind: Expected key name after %s."
msgstr "ippfind: %s のあとにはキー名が必要です。"
-#: test/ippfind.c:551 test/ippfind.c:734
#, c-format
msgid "ippfind: Expected port range after %s."
msgstr "ippfind: %s のあとにはポート範囲が必要です。"
-#: test/ippfind.c:361
#, c-format
msgid "ippfind: Expected program after %s."
msgstr "ippfind: %s のあとにはプログラム名が必要です。"
-#: test/ippfind.c:378
#, c-format
msgid "ippfind: Expected semi-colon after %s."
msgstr "ippfind: %s のあとにはセミコロンが必要です。"
-#: test/ippfind.c:1965
msgid "ippfind: Missing close brace in substitution."
msgstr "ippfind: 置換文字列の閉じカッコがありません。"
-#: test/ippfind.c:1053
msgid "ippfind: Missing close parenthesis."
msgstr "ippfind: 閉じカッコが不足しています。"
-#: test/ippfind.c:335
msgid "ippfind: Missing expression before \"--and\"."
msgstr "ippfind: \"--and\" の前には式が必要です。"
-#: test/ippfind.c:448
msgid "ippfind: Missing expression before \"--or\"."
msgstr "ippfind: \"--or\" の前には式が必要です。"
-#: test/ippfind.c:871
#, c-format
msgid "ippfind: Missing key name after %s."
msgstr "ippfind: %s のあとにはキー名が必要です。"
-#: test/ippfind.c:1024
msgid "ippfind: Missing open parenthesis."
msgstr "ippfind: 開きカッコが足りません。"
-#: test/ippfind.c:901
#, c-format
msgid "ippfind: Missing program after %s."
msgstr "ippfind: %s のあとにはプログラム名が必要です。"
-#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
-#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
-#: test/ippfind.c:826 test/ippfind.c:886
#, c-format
msgid "ippfind: Missing regular expression after %s."
msgstr "ippfind: %s のあとには正規表現が必要です。"
-#: test/ippfind.c:919
#, c-format
msgid "ippfind: Missing semi-colon after %s."
msgstr "ippfind: %s のあとにはセミコロンが必要です。"
-#: test/ippfind.c:1912 test/ippfind.c:1937
msgid "ippfind: Out of memory."
msgstr "ippfind: メモリ不足です。"
-#: test/ippfind.c:997
msgid "ippfind: Too many parenthesis."
msgstr "ippfind: カッコが多すぎます。"
-#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
#, c-format
msgid "ippfind: Unable to browse or resolve: %s"
msgstr "ippfind: %s をブラウズできないか名前解決できません。"
-#: test/ippfind.c:2035 test/ippfind.c:2062
#, c-format
msgid "ippfind: Unable to execute \"%s\": %s"
msgstr "ippfind: \"%s\" を実行できません: %s"
-#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
#, c-format
msgid "ippfind: Unable to use Bonjour: %s"
msgstr "ippfind: Bonjour を利用できません: %s"
-#: test/ippfind.c:1994
#, c-format
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr "ippfind: \"{%s}\" は不明な変数です。"
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
-msgstr "ipptool: \"-i\" および \"-n\" は \"-P\"、\"-X\" と一緒に指定できません。"
+msgstr ""
+"ipptool: \"-i\" および \"-n\" は \"-P\"、\"-X\" と一緒に指定できません。"
-#: test/ipptool.c:623
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr "ipptool: 不正な URI です - %s。"
-#: test/ipptool.c:537
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr "ipptool: \"-i\" に不正な秒数が指定されました。"
-#: test/ipptool.c:604
msgid "ipptool: May only specify a single URI."
msgstr "ipptool: URI は 1 つだけ指定できます。"
-#: test/ipptool.c:559
msgid "ipptool: Missing count for \"-n\"."
msgstr "ipptool: \"-n\" に回数の指定がありません。"
-#: test/ipptool.c:423
msgid "ipptool: Missing filename for \"-f\"."
msgstr "ipptool: \"-f\" にファイル名の指定がありません。"
-#: test/ipptool.c:404
msgid "ipptool: Missing name=value for \"-d\"."
msgstr "ipptool: \"-d\" に 名前=値 の指定がありません。"
-#: test/ipptool.c:527
msgid "ipptool: Missing seconds for \"-i\"."
msgstr "ipptool: \"-i\" に秒数の指定がありません。"
-#: test/ipptool.c:649
msgid "ipptool: URI required before test file."
msgstr "ipptool: テストファイルの前に URI の指定が必要です。"
-#: test/ipptool.c:585
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr "ipptool: \"-%c\"は未知のオプションです。"
-#: scheduler/ipp.c:7739
msgid "job-printer-uri attribute missing."
msgstr "job-printer-uri 属性がありません。"
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
msgid "lpadmin: Class name can only contain printable characters."
msgstr "lpadmin: クラス名は表示可能文字のみで構成されなければなりません。"
-#: systemv/lpadmin.c:600
msgid "lpadmin: Expected PPD after \"-P\" option."
msgstr "lpadmin: \"-P\" オプションのあとには PPD が必要です。"
-#: systemv/lpadmin.c:443
msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
msgstr ""
"lpadmin: \"-u\" オプションのあとには allow/deny:ユーザーリスト が必要です。"
-#: systemv/lpadmin.c:350
msgid "lpadmin: Expected class after \"-r\" option."
msgstr "lpadmin: \"-r\" オプションのあとにはクラス名が必要です。"
-#: systemv/lpadmin.c:106
msgid "lpadmin: Expected class name after \"-c\" option."
msgstr "lpadmin: \"-c\" オプションのあとにはクラス名が必要です。"
-#: systemv/lpadmin.c:544
msgid "lpadmin: Expected description after \"-D\" option."
msgstr "lpadmin: \"-D\" オプションのあとには説明が必要です。"
-#: systemv/lpadmin.c:477
msgid "lpadmin: Expected device URI after \"-v\" option."
msgstr "lpadmin: \"-v\" オプションのあとにはデバイス URI が必要です。"
-#: systemv/lpadmin.c:560
msgid "lpadmin: Expected file type(s) after \"-I\" option."
msgstr "lpadmin: \"-I\" オプションのあとにはファイル形式が必要です。"
-#: systemv/lpadmin.c:188
msgid "lpadmin: Expected hostname after \"-h\" option."
msgstr "lpadmin: \"-h\" オプションのあとにはホスト名が必要です。"
-#: systemv/lpadmin.c:207
msgid "lpadmin: Expected interface after \"-i\" option."
msgstr "lpadmin: \"-i\" オプションのあとにはインターフェイス名が必要です。"
-#: systemv/lpadmin.c:580
msgid "lpadmin: Expected location after \"-L\" option."
msgstr "lpadmin: \"-L\" オプションのあとには場所が必要です。"
-#: systemv/lpadmin.c:260
msgid "lpadmin: Expected model after \"-m\" option."
msgstr "lpadmin: \"-m\" オプションのあとにはモデル名が必要です。"
-#: systemv/lpadmin.c:403
msgid "lpadmin: Expected name after \"-R\" option."
msgstr "lpadmin: \"-R\" オプションのあとには名前が必要です。"
-#: systemv/lpadmin.c:280
msgid "lpadmin: Expected name=value after \"-o\" option."
msgstr "lpadmin: \"-o\" オプションのあとには 変数名=値 が必要です。"
-#: systemv/lpadmin.c:299
msgid "lpadmin: Expected printer after \"-p\" option."
msgstr "lpadmin: \"-p\" オプションのあとにはプリンター名が必要です。"
-#: systemv/lpadmin.c:150
msgid "lpadmin: Expected printer name after \"-d\" option."
msgstr "lpadmin: \"-d\" オプションのあとにはプリンター名が必要です。"
-#: systemv/lpadmin.c:511
msgid "lpadmin: Expected printer or class after \"-x\" option."
msgstr ""
"lpadmin: \"-x\" オプションのあとにはプリンター名またはクラス名が必要です。"
-#: systemv/lpadmin.c:961
msgid "lpadmin: No member names were seen."
msgstr "lpadmin: メンバー名が見当たりません。"
-#: systemv/lpadmin.c:748
#, c-format
msgid "lpadmin: Printer %s is already a member of class %s."
msgstr "lpadmin: プリンター %s はすでにクラス %s のメンバーです。"
-#: systemv/lpadmin.c:975
#, c-format
msgid "lpadmin: Printer %s is not a member of class %s."
msgstr "lpadmin: プリンター %s はクラス %s のメンバーではありません。"
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
msgid "lpadmin: Printer name can only contain printable characters."
msgstr "lpadmin: プリンター名には表示可能文字だけが使用できます。"
-#: systemv/lpadmin.c:91
msgid ""
"lpadmin: Unable to add a printer to the class:\n"
" You must specify a printer name first."
"lpadmin: クラスにプリンターを追加できません:\n"
" 先にプリンター名を指定する必要があります。"
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
#, c-format
msgid "lpadmin: Unable to connect to server: %s"
msgstr "lpadmin: サーバーに接続できません: %s"
-#: systemv/lpadmin.c:1314
msgid "lpadmin: Unable to create temporary file"
msgstr "lpadmin: テンポラリーファイルを作成できません"
-#: systemv/lpadmin.c:388
msgid ""
"lpadmin: Unable to delete option:\n"
" You must specify a printer name first."
"lpadmin: プリンター・オプションを削除できません:\n"
" 先にプリンター名を指定する必要があります。"
-#: systemv/lpadmin.c:1324
+#, 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: PPD ファイル \"%s\" を開けません - %s"
-#: systemv/lpadmin.c:334
msgid ""
"lpadmin: Unable to remove a printer from the class:\n"
" You must specify a printer name first."
"lpadmin: クラスからプリンターを削除できません:\n"
" 先にプリンター名を指定する必要があります。"
-#: systemv/lpadmin.c:642
msgid ""
"lpadmin: Unable to set the printer options:\n"
" You must specify a printer name first."
"lpadmin: プリンター・オプションを設定できません:\n"
" 先にプリンター名を指定する必要があります。"
-#: systemv/lpadmin.c:460
#, c-format
msgid "lpadmin: Unknown allow/deny option \"%s\"."
msgstr "lpadmin:\"%s\" は未知の allow/deny オプションです。"
-#: systemv/lpadmin.c:615
#, c-format
msgid "lpadmin: Unknown argument \"%s\"."
msgstr "lpadmin: \"%s\" は未知の引数です。"
-#: systemv/lpadmin.c:610
#, c-format
msgid "lpadmin: Unknown option \"%c\"."
msgstr "lpadmin: \"%c\" は未知のオプションです。"
-#: systemv/lpadmin.c:566
msgid "lpadmin: Warning - content type list ignored."
msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます。"
-#: berkeley/lpc.c:68 berkeley/lpc.c:96 berkeley/lpc.c:132
msgid "lpc> "
msgstr "lpc> "
-#: systemv/lpinfo.c:137
msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"."
msgstr ""
"lpinfo: \"--device-id\" のあとには、1284 デバイス ID を指定する必要がありま"
"す。"
-#: systemv/lpinfo.c:190
msgid "lpinfo: Expected language after \"--language\"."
msgstr "lpinfo: \"--language\" のあとには、言語を指定する必要があります。"
-#: systemv/lpinfo.c:207
msgid "lpinfo: Expected make and model after \"--make-and-model\"."
-msgstr "lpinfo: \"--make-and-model\" のあとには、メーカーとモデルを指定する必要があります。"
+msgstr ""
+"lpinfo: \"--make-and-model\" のあとには、メーカーとモデルを指定する必要があり"
+"ます。"
-#: systemv/lpinfo.c:224
msgid "lpinfo: Expected product string after \"--product\"."
msgstr "lpinfo: \"--product\" のあとには、製品名を指定する必要があります。"
-#: systemv/lpinfo.c:155
msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"."
msgstr ""
"lpinfo: \"--exclude-schemes\" のあとには、スキーマ・リストを指定する必要があ"
"ります。"
-#: systemv/lpinfo.c:173
msgid "lpinfo: Expected scheme list after \"--include-schemes\"."
msgstr ""
"lpinfo: \"--include-schemes\" のあとには、スキーマ・リストを指定する必要があ"
"ります。"
-#: systemv/lpinfo.c:241
msgid "lpinfo: Expected timeout after \"--timeout\"."
msgstr ""
"lpinfo: \"--timeout\" のあとには、タイムアウト値を指定する必要があります。"
-#: systemv/lpinfo.c:265
#, c-format
msgid "lpinfo: Unknown argument \"%s\"."
msgstr "lpinfo: 未知の引数 \"%s\"。"
-#: systemv/lpinfo.c:259
#, c-format
msgid "lpinfo: Unknown option \"%c\"."
msgstr "lpinfo: 未知のオプション \"%c\"。"
-#: systemv/lpinfo.c:252
#, c-format
msgid "lpinfo: Unknown option \"%s\"."
msgstr "lpinfo: 未知のオプション \"%s\"。"
-#: systemv/lpmove.c:133
#, c-format
msgid "lpmove: Unable to connect to server: %s"
msgstr "lpmove: サーバーに接続できません: %s"
-#: systemv/lpmove.c:119
#, c-format
msgid "lpmove: Unknown argument \"%s\"."
msgstr "lpmove: 未知の引数 \"%s\"。"
-#: systemv/lpmove.c:97
#, c-format
msgid "lpmove: Unknown option \"%c\"."
msgstr "lpmove: 未知のオプション \"%c\"。"
-#: systemv/lpoptions.c:143 systemv/lpoptions.c:161 systemv/lpoptions.c:237
msgid "lpoptions: No printers."
msgstr "lpoptions: プリンターがありません。"
-#: systemv/lpoptions.c:212
#, c-format
msgid "lpoptions: Unable to add printer or instance: %s"
msgstr "lpoptions: プリンターまたはインスタンスを追加できません: %s"
-#: systemv/lpoptions.c:507
#, c-format
msgid "lpoptions: Unable to get PPD file for %s: %s"
msgstr "lpoptions: %s の PPD ファイルを取得できません: %s"
-#: systemv/lpoptions.c:515
#, c-format
msgid "lpoptions: Unable to open PPD file for %s."
msgstr "lpoptions: %s の PPD ファイルを開けません。"
-#: systemv/lpoptions.c:92
msgid "lpoptions: Unknown printer or class."
msgstr "lpoptions: 未知のプリンターまたはクラスです。"
-#: systemv/lpstat.c:1074
#, c-format
msgid ""
"lpstat: error - %s environment variable names non-existent destination \"%s"
msgstr ""
"lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています。"
-#: systemv/lpstat.c:1010
#, c-format
msgid "members of class %s:"
msgstr "クラス %s のメンバー:"
-#: berkeley/lpq.c:549
msgid "no entries"
msgstr "エントリーがありません"
-#: systemv/lpstat.c:1078
msgid "no system default destination"
msgstr "システムのデフォルトの宛先がありません"
-#: scheduler/ipp.c:5548
msgid "notify-events not specified."
msgstr "notify-events が指定されていません。"
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr "notify-recipient-uri URI \"%s\" はすでに使われています。"
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr "notify-recipient-uri URI \"%s\" には未知のスキームが使われています。"
-#: cups/notify.c:87
msgid "pending"
msgstr "プリンター待ち"
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
#, c-format
msgid "ppdc: Adding include directory \"%s\"."
msgstr "ppdc: ディレクトリー \"%s\" を追加しています。"
-#: ppdc/ppdpo.cxx:134
#, c-format
msgid "ppdc: Adding/updating UI text from %s."
msgstr "ppdc: %s から UI テキストを追加または更新しています。"
-#: ppdc/ppdc-source.cxx:367
#, c-format
msgid "ppdc: Bad boolean value (%s) on line %d of %s."
msgstr "ppdc: 不正な boolean 値 (%s) があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-import.cxx:264
#, c-format
msgid "ppdc: Bad font attribute: %s"
msgstr "不正なフォント属性: %s"
-#: ppdc/ppdc-source.cxx:1753
#, c-format
msgid "ppdc: Bad resolution name \"%s\" on line %d of %s."
msgstr "ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1070
#, c-format
msgid "ppdc: Bad status keyword %s on line %d of %s."
msgstr "ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1990
#, c-format
msgid "ppdc: Bad variable substitution ($%c) on line %d of %s."
msgstr "ppdc: 不正な数値置換 ($%c) があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:2675
#, c-format
msgid "ppdc: Choice found on line %d of %s with no Option."
msgstr ""
"ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました。"
-#: ppdc/ppdc-source.cxx:1655
#, c-format
msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
-msgstr "ppdc: locale %s に対して #po が二重に定義されています。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: locale %s に対して #po が二重に定義されています。%d 行目、ファイル名 "
+"%s。"
-#: ppdc/ppdc-source.cxx:889
#, c-format
msgid "ppdc: Expected a filter definition on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s においてフィルター定義が必要です。"
-#: ppdc/ppdc-source.cxx:912
#, c-format
msgid "ppdc: Expected a program name on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s においてプログラム名が必要です。"
-#: ppdc/ppdc-source.cxx:351
#, c-format
msgid "ppdc: Expected boolean value on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において boolean 値が必要です。"
-#: ppdc/ppdc-source.cxx:1050
#, c-format
msgid "ppdc: Expected charset after Font on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Font のあとに charset が必要です。"
-#: ppdc/ppdc-source.cxx:404
#, c-format
msgid "ppdc: Expected choice code on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において choice code が必要です。"
-#: ppdc/ppdc-source.cxx:392
#, c-format
msgid "ppdc: Expected choice name/text on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において choice name/text が必要です。"
-#: ppdc/ppdc-source.cxx:460
#, c-format
msgid "ppdc: Expected color order for ColorModel on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要"
"です。"
-#: ppdc/ppdc-source.cxx:449
#, c-format
msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要で"
"す。"
-#: ppdc/ppdc-source.cxx:471
#, c-format
msgid "ppdc: Expected compression for ColorModel on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要"
"です。"
-#: ppdc/ppdc-source.cxx:652
#, c-format
msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必"
"要です。"
-#: ppdc/ppdc-source.cxx:2861
#, c-format
msgid ""
"ppdc: Expected driver type keyword following DriverType on line %d of %s."
"ppdc: %d 行目、ファイル名 %s において DriverType のあとに driver type "
"keyword が必要です。"
-#: ppdc/ppdc-source.cxx:783
#, c-format
msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Duplex のあとに type が必要です。"
-#: ppdc/ppdc-source.cxx:1034
#, c-format
msgid "ppdc: Expected encoding after Font on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Font のあとに encoding が必要です。"
-#: ppdc/ppdc-source.cxx:1646
#, c-format
msgid "ppdc: Expected filename after #po %s on line %d of %s."
msgstr "ppdc: #po %s のあとにファイル名が必要です (%d 行目, ファイル %s)。"
-#: ppdc/ppdc-source.cxx:1162
#, c-format
msgid "ppdc: Expected group name/text on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において group name/text が必要です。"
-#: ppdc/ppdc-source.cxx:2575
#, c-format
msgid "ppdc: Expected include filename on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において include ファイル名 が必要です。"
-#: ppdc/ppdc-source.cxx:1459
#, c-format
msgid "ppdc: Expected integer on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において整数指定が必要です。"
-#: ppdc/ppdc-source.cxx:1638
#, c-format
msgid "ppdc: Expected locale after #po on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において #po のあとに locale が必要です。"
-#: ppdc/ppdc-source.cxx:310
#, c-format
msgid "ppdc: Expected name after %s on line %d of %s."
msgstr "ppdc: %s のあとに name が必要です。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:3233
#, c-format
msgid "ppdc: Expected name after FileName on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において FileName のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:1015
#, c-format
msgid "ppdc: Expected name after Font on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において Font のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:3064
#, c-format
msgid "ppdc: Expected name after Manufacturer on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Manufacturer のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:3097
#, c-format
msgid "ppdc: Expected name after MediaSize on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において MediaSize のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:3187
#, c-format
msgid "ppdc: Expected name after ModelName on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において ModelName のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:3250
#, c-format
msgid "ppdc: Expected name after PCFileName on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において PCFileName のあとに name が必要です。"
-#: ppdc/ppdc-source.cxx:1113
#, c-format
msgid "ppdc: Expected name/text after %s on line %d of %s."
msgstr "ppdc: %s のあとに name/text が必要です。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1202
#, c-format
msgid "ppdc: Expected name/text after Installable on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Installable のあとに name/text が必要で"
"す。"
-#: ppdc/ppdc-source.cxx:1739
#, c-format
msgid "ppdc: Expected name/text after Resolution on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Resolution のあとに name/text が必要で"
"す。"
-#: ppdc/ppdc-source.cxx:436
#, c-format
msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要で"
"す。"
-#: ppdc/ppdc-source.cxx:1531
#, c-format
msgid "ppdc: Expected option name/text on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において option name/text が必要です。"
-#: ppdc/ppdc-source.cxx:1565
#, c-format
msgid "ppdc: Expected option section on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において option section が必要です。"
-#: ppdc/ppdc-source.cxx:1543
#, c-format
msgid "ppdc: Expected option type on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において option type が必要です。"
-#: ppdc/ppdc-source.cxx:1722
#, c-format
msgid "ppdc: Expected override field after Resolution on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Resolution のあとに override field が必"
"要です。"
-#: ppdc/ppdc-catalog.cxx:389 ppdc/ppdc-catalog.cxx:401
#, c-format
msgid "ppdc: Expected quoted string on line %d of %s."
msgstr "%d 行: %s には引用符で囲まれた文字列が必要です。"
-#: ppdc/ppdc-source.cxx:961
#, c-format
msgid "ppdc: Expected real number on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において実数が必要です。"
-#: ppdc/ppdc-source.cxx:529
#, c-format
msgid ""
"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
"ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/"
"mediatype が必要です。"
-#: ppdc/ppdc-source.cxx:1820
#, c-format
msgid ""
"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
"ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/"
"mediatype が必要です。"
-#: ppdc/ppdc-source.cxx:318
#, c-format
msgid "ppdc: Expected selector after %s on line %d of %s."
msgstr "ppdc: %s のあとに selector が必要です。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1058
#, c-format
msgid "ppdc: Expected status after Font on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Font のあとに status が必要です。"
-#: ppdc/ppdc-source.cxx:2750
#, c-format
msgid "ppdc: Expected string after Copyright on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Copyright のあとに文字列が必要です。"
-#: ppdc/ppdc-source.cxx:3353
#, c-format
msgid "ppdc: Expected string after Version on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Version のあとに文字列が必要です。"
-#: ppdc/ppdc-source.cxx:685
#, c-format
msgid "ppdc: Expected two option names on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において 2 つのオプション名が必要です。"
-#: ppdc/ppdc-source.cxx:329
#, c-format
msgid "ppdc: Expected value after %s on line %d of %s."
msgstr "ppdc: %s のあとに value が必要です。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1042
#, c-format
msgid "ppdc: Expected version after Font on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Font のあとに version が必要です。"
-#: ppdc/ppdc-source.cxx:184
#, c-format
msgid "ppdc: Invalid #include/#po filename \"%s\"."
msgstr "ppdc: 無効な #include/#po ファイル名です \"%s\"。"
-#: ppdc/ppdc-source.cxx:929
#, c-format
msgid "ppdc: Invalid cost for filter on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost がありま"
"す。"
-#: ppdc/ppdc-source.cxx:921
#, c-format
msgid "ppdc: Invalid empty MIME type for filter on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME タイプ"
"があります。"
-#: ppdc/ppdc-source.cxx:937
#, c-format
msgid "ppdc: Invalid empty program name for filter on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s においてフィルターに対するプログラム名が空であり"
"無効です。"
-#: ppdc/ppdc-source.cxx:1585
#, c-format
msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
-msgstr "ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:1557
#, c-format
msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
msgstr "ppdc: 無効な option type があります \"%s\"。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
#, c-format
msgid "ppdc: Loading driver information file \"%s\"."
msgstr "ppdc: ドライバー情報ファイル \"%s\" を読み込んでいます。"
-#: ppdc/ppdc.cxx:182
#, c-format
msgid "ppdc: Loading messages for locale \"%s\"."
msgstr "ppdc: ロケール \"%s\" のメッセージを読み込んでいます。"
-#: ppdc/ppdc.cxx:121
#, c-format
msgid "ppdc: Loading messages from \"%s\"."
msgstr "ppdc: \"%s\" からメッセージを読み込んでいます。"
-#: ppdc/ppdc-source.cxx:2368 ppdc/ppdc-source.cxx:2600
#, c-format
msgid "ppdc: Missing #endif at end of \"%s\"."
msgstr "ppdc: \"%s\" の最後に #endif が見つかりません。"
-#: ppdc/ppdc-source.cxx:2469 ppdc/ppdc-source.cxx:2504
-#: ppdc/ppdc-source.cxx:2534
#, c-format
msgid "ppdc: Missing #if on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において #if が見つかりません。"
-#: ppdc/ppdc-catalog.cxx:466
#, c-format
msgid ""
"ppdc: Need a msgid line before any translation strings on line %d of %s."
msgstr "%d 行: %s の翻訳文字列の前に msgid 行が必要です。"
-#: ppdc/ppdc-driver.cxx:712
#, c-format
msgid "ppdc: No message catalog provided for locale %s."
msgstr "ppdc: ロケール %s に対するメッセージカタログが見つかりません。"
-#: ppdc/ppdc-source.cxx:1608 ppdc/ppdc-source.cxx:2838
-#: ppdc/ppdc-source.cxx:2924 ppdc/ppdc-source.cxx:3017
-#: ppdc/ppdc-source.cxx:3150 ppdc/ppdc-source.cxx:3283
#, c-format
msgid "ppdc: Option %s defined in two different groups on line %d of %s."
msgstr ""
"ppdc: オプション %s が行 %d、ファイル %s の 2 つの異なるグループで定義されて"
"います。"
-#: ppdc/ppdc-source.cxx:1601
#, c-format
msgid "ppdc: Option %s redefined with a different type on line %d of %s."
-msgstr "ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:662
#, c-format
msgid "ppdc: Option constraint must *name on line %d of %s."
msgstr ""
"ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定しなけ"
"ればなりません。"
-#: ppdc/ppdc-source.cxx:2451
#, c-format
msgid "ppdc: Too many nested #if's on line %d of %s."
msgstr "ppdc: %d 行目、ファイル名 %s において #if のネストが多すぎます。"
-#: ppdc/ppdc.cxx:369
#, c-format
msgid "ppdc: Unable to create PPD file \"%s\" - %s."
msgstr "ppdc: PPD ファイル \"%s\" を作成できません - %s。"
-#: ppdc/ppdc.cxx:261
#, c-format
msgid "ppdc: Unable to create output directory %s: %s"
msgstr "ppdc: 出力ディレクトリー \"%s\" を作成できません - %s"
-#: ppdc/ppdc.cxx:282
#, c-format
msgid "ppdc: Unable to create output pipes: %s"
msgstr "ppdc: 出力パイプを作成できません: %s"
-#: ppdc/ppdc.cxx:298 ppdc/ppdc.cxx:304
#, c-format
msgid "ppdc: Unable to execute cupstestppd: %s"
msgstr "ppdc: cupstestppd を実行できません: %s"
-#: ppdc/ppdc-source.cxx:1687
#, c-format
msgid "ppdc: Unable to find #po file %s on line %d of %s."
msgstr "ppdc: #po ファイル %s が見つかりません。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:2607
#, c-format
msgid "ppdc: Unable to find include file \"%s\" on line %d of %s."
-msgstr "ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc.cxx:193
#, c-format
msgid "ppdc: Unable to find localization for \"%s\" - %s"
msgstr "ppdc: \"%s\" に対する地域化情報が見つかりません - %s"
-#: ppdc/ppdc.cxx:130
#, c-format
msgid "ppdc: Unable to load localization file \"%s\" - %s"
msgstr "ppdc: \"%s\" に対するローカライズファイルを読み込めません - %s"
-#: ppdc/ppdc-file.cxx:50
#, c-format
msgid "ppdc: Unable to open %s: %s"
msgstr "ppdc: %s を開けません: %s"
-#: ppdc/ppdc-source.cxx:2011
#, c-format
msgid "ppdc: Undefined variable (%s) on line %d of %s."
msgstr "ppdc: 変数 (%s) は未定義です。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-catalog.cxx:483
#, c-format
msgid "ppdc: Unexpected text on line %d of %s."
msgstr "%d 行: %s は予期せぬテキストです。"
-#: ppdc/ppdc-source.cxx:2880
#, c-format
msgid "ppdc: Unknown driver type %s on line %d of %s."
msgstr "ppdc: %s は未知のドライバータイプです。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:863
#, c-format
msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s."
msgstr "ppdc: \"%s\" は未知の両面タイプです。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:3110
#, c-format
msgid "ppdc: Unknown media size \"%s\" on line %d of %s."
msgstr "ppdc: \"%s\" は未知の用紙サイズです。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-catalog.cxx:511
#, c-format
msgid "ppdc: Unknown message catalog format for \"%s\"."
msgstr "\"%s\" は未知のメッセージカタログの書式です。"
-#: ppdc/ppdc-source.cxx:3364
#, c-format
msgid "ppdc: Unknown token \"%s\" seen on line %d of %s."
msgstr "ppdc: 未知のトークン \"%s\" があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:971
#, c-format
msgid ""
"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
msgstr "ppdc: 実数 \"%s\" に未知の終了文字があります。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc-source.cxx:2121
#, c-format
msgid "ppdc: Unterminated string starting with %c on line %d of %s."
msgstr ""
"ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s。"
-#: ppdc/ppdc.cxx:360
#, c-format
msgid "ppdc: Warning - overlapping filename \"%s\"."
msgstr "ppdc: 警告 - ファイル名 \"%s\" が重複しています。"
-#: ppdc/ppdc.cxx:375
#, c-format
msgid "ppdc: Writing %s."
msgstr "ppdc: %s を書き込んでいます。"
-#: ppdc/ppdc.cxx:143
#, c-format
msgid "ppdc: Writing PPD files to directory \"%s\"."
msgstr "ppdc: ディレクトリー \"%s\" に PPD ファイルを書き込んでいます。"
-#: ppdc/ppdmerge.cxx:130
#, c-format
msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
msgstr "ppdmerge: 不正な LanguageVersion \"%s\" が %s にあります。"
-#: ppdc/ppdmerge.cxx:170
#, c-format
msgid "ppdmerge: Ignoring PPD file %s."
msgstr "ppdmerge: PPD ファイル %s を無視します。"
-#: ppdc/ppdmerge.cxx:154
#, c-format
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr "ppdmerge: %s を %s にバックアップできません - %s"
-#: systemv/lpstat.c:1777
#, c-format
msgid "printer %s disabled since %s -"
msgstr "プリンター %s は %s から無効です -"
-#: systemv/lpstat.c:1766
#, c-format
msgid "printer %s is idle. enabled since %s"
msgstr "プリンター %s は待機中です。%s 以来有効です"
-#: systemv/lpstat.c:1771
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
msgstr "プリンター %s は %s-%d を印刷しています。%s 以来有効です"
-#: systemv/lpstat.c:1900
#, c-format
msgid "printer %s/%s disabled since %s -"
msgstr "プリンター %s/%s は %s から無効です -"
-#: systemv/lpstat.c:1886
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
msgstr "プリンター %s/%s は待機中です。%s 以来有効です"
-#: systemv/lpstat.c:1893
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
msgstr "プリンター %s/%s は現在 %s-%d を印刷中です。%s 以来有効です"
-#: cups/notify.c:93 cups/notify.c:134
msgid "processing"
msgstr "処理中"
-#: systemv/lp.c:662
#, c-format
msgid "request id is %s-%d (%d file(s))"
msgstr "リクエスト ID は %s-%d です (%d 個のファイル)"
-#: cups/snmp.c:972
msgid "request-id uses indefinite length"
msgstr "リクエスト ID の長さが不定"
-#: systemv/lpstat.c:2032
msgid "scheduler is not running"
msgstr "スケジューラーは動作していません"
-#: systemv/lpstat.c:2028
msgid "scheduler is running"
msgstr "スケジューラーは動作中です"
-#: cups/adminutil.c:2148
#, c-format
msgid "stat of %s failed: %s"
msgstr "%s の状態取得に失敗しました: %s"
-#: berkeley/lpc.c:203
msgid "status\t\tShow status of daemon and queue."
msgstr "status\t\tデーモンとキューの状態を表示。"
-#: cups/notify.c:96 cups/notify.c:137
msgid "stopped"
msgstr "停止"
-#: systemv/lpstat.c:1052
#, c-format
msgid "system default destination: %s"
msgstr "システムのデフォルトの宛先: %s"
-#: systemv/lpstat.c:1049
#, c-format
msgid "system default destination: %s/%s"
msgstr "システムのデフォルトの宛先: %s/%s"
-#: cups/notify.c:108 cups/notify.c:140
msgid "unknown"
msgstr "未知"
-#: cups/notify.c:117
msgid "untitled"
msgstr "タイトルなし"
-#: cups/snmp.c:997
msgid "variable-bindings uses indefinite length"
msgstr "variable-bindings の長さが不定"
#~ msgid "Stylus Photo Series"
#~ msgstr "Stylus Photo シリーズ"
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr "'%s' Job Description 属性はジョブ作成要求の中で指定できません。"
+
#~ msgid "The output bin is almost full."
#~ msgstr "排紙トレイがほとんど一杯です。"
msgstr ""
"Project-Id-Version: CUPS 2.0\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-01-28 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: PuppyRus Linux Team\n"
msgid "\t%d entries"
msgstr "\tзаписей: %d"
+#, c-format
msgid "\t%s"
msgstr "\t%s"
"be named Duplex.\n"
" REF: Page 122, section 5.17"
msgstr ""
-"\tWARN\tКлючевое слово параметра дуплекса %s может привести к "
-"некорректным результатам. Используйте имя 'Duplex'\n"
+"\tWARN\tКлючевое слово параметра дуплекса %s может привести к некорректным "
+"результатам. Используйте имя 'Duplex'\n"
" REF: Стр. 122, раздел 5.17"
msgid " WARN File contains a mix of CR, LF, and CR LF line endings."
#, c-format
msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID."
-msgstr ""
-"\t%s Невозможно предоставить APScanAppPath и APScanAppBundleID "
-"вместе."
+msgstr "\t%s Невозможно предоставить APScanAppPath и APScanAppBundleID вместе."
#, c-format
msgid " %s Default choices conflicting."
msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s, выбора %s"
#, c-format
-msgid " %s Missing \"%s\" translation string for option %s"
-msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s"
+msgid " %s Missing \"%s\" translation string for option %s."
+msgstr ""
#, c-format
msgid " %s Missing %s file \"%s\"."
#, c-format
msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
-msgstr ""
-" %s Выбор *%s %s отсутствует в UIConstraints \"*%s %s *%s %s\"."
+msgstr " %s Выбор *%s %s отсутствует в UIConstraints \"*%s %s *%s %s\"."
#, c-format
msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
" %s cupsUIResolver %s does not list at least two different options."
msgstr "\t%s В cupsUIResolver %s не перечислено как минимум два параметра."
-
#, c-format
msgid ""
" **FAIL** %s must be 1284DeviceID\n"
"\t**FAIL** %s должно соответствовать 1284DeviceID\n"
" REF: Стр. 72, раздел 5.5"
-
#, c-format
msgid ""
" **FAIL** Bad Default%s %s\n"
" **FAIL** Default translation string for option %s choice %s contains "
"8-bit characters."
msgstr ""
-"\t**FAIL** Стандартный перевод для параметра %s выбора %s содержит "
-"8-битовые символы."
+"\t**FAIL** Стандартный перевод для параметра %s выбора %s содержит 8-битовые "
+"символы."
#, c-format
msgid ""
" **FAIL** Default translation string for option %s contains 8-bit "
"characters."
msgstr ""
-"\t**FAIL** Стандартный перевод для параметра %s содержит "
-"8-битовые символы."
+"\t**FAIL** Стандартный перевод для параметра %s содержит 8-битовые символы."
#, c-format
msgid " **FAIL** Group names %s and %s differ only by case."
-msgstr ""
-"\t**FAIL** Имена групп %s и %s отличаются только регистром символов."
+msgstr "\t**FAIL** Имена групп %s и %s отличаются только регистром символов."
#, c-format
msgid " **FAIL** Multiple occurrences of option %s choice name %s."
#, c-format
msgid " **FAIL** Option %s choice names %s and %s differ only by case."
-msgstr "\t**FAIL** Параметр %s с именами %s и %s отличается только регистром символов."
+msgstr ""
+"\t**FAIL** Параметр %s с именами %s и %s отличается только регистром "
+"символов."
#, c-format
msgid " **FAIL** Option names %s and %s differ only by case."
-msgstr "\t**FAIL** Названия параметров %s и %s отличаются только регистром символов."
+msgstr ""
+"\t**FAIL** Названия параметров %s и %s отличаются только регистром символов."
#, c-format
msgid ""
#, c-format
msgid " %d ERRORS FOUND"
msgstr " ОБНАРУЖЕНО ОШИБОК: %d"
+
msgid " -h Show program usage"
msgstr " -h Показать справку по использованию программы"
" Неверный %%%%BoundingBox: в строке %d\n"
" REF: Стр. 39, %%%%BoundingBox:"
-
#, c-format
msgid ""
" Bad %%%%Page: on line %d.\n"
" REF: Стр. 17, 3.1 Соответствующие документы"
#, c-format
-msgid " Missing %%EndComments comment.\n"
-" REF: Page 41, %%EndComments"
-msgstr " Комментарий %%EndComments отсутствует.\n"
-" REF: Стр. 41, %%EndComments"
+msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments"
+msgstr ""
#, c-format
msgid ""
msgstr " --[no-]remote-any Разрешается/запрещается доступ из Интернет."
msgid " --[no-]share-printers Turn printer sharing on/off."
-msgstr " --[no-]share-printers Вкл./откл. совместное использование принтеров."
+msgstr ""
+" --[no-]share-printers Вкл./откл. совместное использование принтеров."
msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
-msgstr " --[no-]user-cancel-any Пользователям разрешается/запрещается отменять задания."
+msgstr ""
+" --[no-]user-cancel-any Пользователям разрешается/запрещается отменять "
+"задания."
msgid " --cr End lines with CR (Mac OS 9)."
msgstr " --cr Строки заканчиваются на CR (Mac OS 9)."
msgstr " --host regex Найти hostname по регулярному выражению."
msgid " --lf End lines with LF (UNIX/Linux/OS X)."
-msgstr " --lf Строки заканчиваются на LF (UNIX/Linux/Mac OS X)."
+msgstr ""
+" --lf Строки заканчиваются на LF (UNIX/Linux/Mac OS X)."
msgid " --list-filters List filters that will be used."
-msgstr " --list-filters Список фильтров которые должны использоваться."
+msgstr ""
+" --list-filters Список фильтров которые должны использоваться."
msgid " --local True if service is local."
msgstr " --local \"Истина\" если сервис локальный."
msgstr " --not expression Логическое NOT для выражения."
msgid " --path regex Match resource path to regular expression."
-msgstr " --path regex Найти путь к ресурсу по регулярному выражению."
+msgstr ""
+" --path regex Найти путь к ресурсу по регулярному выражению."
msgid " --port number[-number] Match port to number or range."
-msgstr " --port number[-number] Найти номер порта по номеру или диапазону портов."
+msgstr ""
+" --port number[-number] Найти номер порта по номеру или диапазону портов."
msgid " --print Print URI if true."
msgstr " --print Печать URI при соответствии."
msgstr " --print-name Печать имени сервиса если соответствует."
msgid " --quiet Quietly report match via exit code."
-msgstr " --quiet Кратко уведомлять о совпадении через код выхода."
+msgstr ""
+" --quiet Кратко уведомлять о совпадении через код выхода."
msgid " --remote True if service is remote."
msgstr " --remote \"Истина\" если сервис удаленный."
msgstr " -6 Соединение используя IPv6."
msgid " -C Send requests using chunking (default)."
-msgstr " -C Передача запроса с использованием chunking (по умолчанию)"
+msgstr ""
+" -C Передача запроса с использованием chunking (по "
+"умолчанию)"
msgid " -D Remove the input file when finished."
msgstr " -D Удалить входной файл после завершения."
msgid ""
" -F Run in the foreground but detach from console."
msgstr ""
-" -F Запускать с высоким приоритетом и отдельно от консоли."
+" -F Запускать с высоким приоритетом и отдельно от "
+"консоли."
msgid " -H samba-server Use the named SAMBA server."
msgstr " -H samba-server Использовать заданный сервер SAMBA."
msgstr " -I {filename,filters,none,profiles}"
msgid " -L Send requests using content-length."
-msgstr " -L Передача запроса с использованием content-length."
+msgstr ""
+" -L Передача запроса с использованием content-length."
msgid ""
" -P filename.plist Produce XML plist to a file and test report to "
"standard output."
msgstr ""
-" -P filename.plist Вывести XML plist в файл и проверить результат "
-"на стандартном выводе."
+" -P filename.plist Вывести XML plist в файл и проверить результат на "
+"стандартном выводе."
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd Задать PPD-файл."
msgid " -P number[-number] Match port to number or range."
-msgstr " -P number[-number] Найти номер порта по номеру или диапазону портов."
+msgstr ""
+" -P number[-number] Найти номер порта по номеру или диапазону портов."
msgid " -R root-directory Set alternate root."
msgstr " -R root-directory Задать корневой каталог."
msgstr " -T seconds Задать время ожидания в секундах."
msgid " -T seconds Set the receive/send timeout in seconds."
-msgstr " -T seconds Задать время ожидания приема/передачи в секундах."
+msgstr ""
+" -T seconds Задать время ожидания приема/передачи в секундах."
msgid " -U username Specify username."
msgstr " -U username Указание имени пользователя."
msgstr " -h server[:port] Задать адрес и порт сервера."
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
-msgstr " -i mime/type Указать MIME-тип данных на входе (иначе автоопред.)."
+msgstr ""
+" -i mime/type Указать MIME-тип данных на входе (иначе "
+"автоопред.)."
msgid ""
" -i seconds Repeat the last file with the given time interval."
msgstr ""
-" -i seconds Повтор последнего файла через заданный интервал в сек."
+" -i seconds Повтор последнего файла через заданный интервал в "
+"сек."
msgid ""
" -j job-id[,N] Filter file N from the specified job (default is "
"file 1)."
msgstr ""
-" -j job-id[,N] Из указанного задания выбирается файл N (по умолчанию "
-"файл 1)."
+" -j job-id[,N] Из указанного задания выбирается файл N (по "
+"Ñ\83молÑ\87аниÑ\8e Ñ\84айл 1)."
msgid " -l List attributes."
msgstr " -l Список атрибутов."
msgstr " -l lang[,lang,...] Задать выходной язык(и) (locale)."
msgid " -m Use the ModelName value as the filename."
-msgstr " -m В качестве имени файла используется ModelName."
+msgstr ""
+" -m В качестве имени файла используется ModelName."
msgid ""
" -m mime/type Set output MIME type (otherwise application/pdf)."
msgstr ""
-" -m mime/type Указать MIME-тип данных на выходе (иначе application/pdf)."
+" -m mime/type Указать MIME-тип данных на выходе (иначе "
+"application/pdf)."
msgid " -n copies Set number of copies."
msgstr " -n copies Указать количество копий."
msgid ""
" -n count Repeat the last file the given number of times."
-msgstr ""
-" -n count Повтор последнего файла заданное число раз."
+msgstr " -n count Повтор последнего файла заданное число раз."
msgid " -n regex Match service name to regular expression."
msgstr " -n regex Найти имя по регулярному выражению."
msgid ""
" -o filename.drv Set driver information file (otherwise ppdi.drv)."
msgstr ""
-" -o filename.drv Указать файл с информацией о драйвере (иначе ppdi.drv)."
+" -o filename.drv Указать файл с информацией о драйвере (иначе ppdi."
+"drv)."
msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
msgstr " -o filename.ppd[.gz] Задать выходной файл (иначе stdout)."
msgstr " -p program Запустить указанную программу."
msgid " -q Quietly report match via exit code."
-msgstr " -q Кратко уведомлять о совпадении через код выхода."
+msgstr ""
+" -q Кратко уведомлять о совпадении через код выхода."
msgid " -q Run silently."
msgstr " -q Команда выполняется в «тихом» режиме."
#, c-format
msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
-msgstr "\"%s\": Неправильное значение URI \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.5)."
+msgstr ""
+"\"%s\": Неправильное значение URI \"%s\" - ошибка длины %d (RFC 2911 раздел "
+"4.1.5)."
#, c-format
msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
-msgstr "\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел 4.1.3)."
+msgstr ""
+"\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел 4.1.3)."
#, c-format
msgid ""
"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
msgstr ""
-"\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел 4.1.3)."
+"\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел "
+"4.1.3)."
#, c-format
msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
msgid ""
"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы (RFC 2911 раздел 4.1.7)."
+"\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы (RFC "
+"2911 раздел 4.1.7)."
#, c-format
msgid ""
"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.7)."
+"\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC 2911 "
+"раздел 4.1.7)."
#, c-format
msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
#, c-format
msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
-msgstr "\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел 4.1.4)."
+msgstr ""
+"\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел "
+"4.1.4)."
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел 4.1.3)."
+"\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел "
+"4.1.3)."
#, c-format
msgid ""
"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
"4.1.3)."
msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 "
-"раздел 4.1.3)."
+"\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 раздел "
+"4.1.3)."
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
"4.1.9)."
msgstr ""
-"\"%s\": Ошибка mimeMediaType значение \"%s\" - недопустимые символы (RFC 2911 "
-"раздел 4.1.9)."
+"\"%s\": Ошибка mimeMediaType значение \"%s\" - недопустимые символы (RFC "
+"2911 раздел 4.1.9)."
#, c-format
msgid ""
"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
"4.1.9)."
msgstr ""
-msgid ""
-"\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d "
-"(RFC 2911 раздел 4.1.9)."
+"\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d (RFC "
+"2911 раздел 4.1.9)."
#, c-format
msgid ""
#, c-format
msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
-msgstr "\"%s\": Неправильное имя \"%s\" - неправильная длина %d (RFC 2911 раздел 4.1.2)."
+msgstr ""
+"\"%s\": Неправильное имя \"%s\" - неправильная длина %d (RFC 2911 раздел "
+"4.1.2)."
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
"4.1.8)."
msgstr ""
-"\"%s\": Ошибка naturalLanguage значение \"%s\" - недопустимые символы "
-"(RFC 2911 раздел 4.1.8)."
+"\"%s\": Ошибка naturalLanguage значение \"%s\" - недопустимые символы (RFC "
+"2911 раздел 4.1.8)."
#, c-format
msgid ""
"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
"4.1.8)."
msgstr ""
-"\"%s\": Ошибка naturalLanguage значение \"%s\" - неправильная длина %d "
-"(RFC 2911 раздел 4.1.8)."
+"\"%s\": Ошибка naturalLanguage значение \"%s\" - неправильная длина %d (RFC "
+"2911 раздел 4.1.8)."
#, c-format
msgid ""
"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
msgstr ""
-"\"%s\": Ошибка значения octetString - неправильная длина %d (RFC 2911 раздел 4.1.10)."
+"\"%s\": Ошибка значения octetString - неправильная длина %d (RFC 2911 раздел "
+"4.1.10)."
#, c-format
msgid ""
"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
"section 4.1.13)."
msgstr ""
-"\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе "
-"(RFC 2911 раздел 4.1.13)."
+"\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе (RFC "
+"2911 раздел 4.1.13)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
"positive (RFC 2911 section 4.1.15)."
msgstr ""
-"\"%s\": Неправильное значение разрешения %dx%d%s - значение cross feed должно быть положительным "
-"(RFC 2911 раздел 4.1.15)."
+"\"%s\": Неправильное значение разрешения %dx%d%s - значение cross feed "
+"должно быть положительным (RFC 2911 раздел 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
"2911 section 4.1.15)."
msgstr ""
-"\"%s\": Неправильное значение разрешения %dx%d%s - значение feed должно быть положительным "
-"(RFC 2911 раздел 4.1.15)."
+"\"%s\": Неправильное значение разрешения %dx%d%s - значение feed должно быть "
+"положительным (RFC 2911 раздел 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
msgstr ""
-"\"%s\": Неправильное текстовое значение \"%s\" - ошибка в UTF-8 (RFC 2911 раздел 4.1.1)."
+"\"%s\": Неправильное текстовое значение \"%s\" - ошибка в UTF-8 (RFC 2911 "
+"раздел 4.1.1)."
#, c-format
msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
-msgstr "\"%s\": Неправильное текстовое значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.1)."
+msgstr ""
+"\"%s\": Неправильное текстовое значение \"%s\" - ошибка длины %d (RFC 2911 "
+"раздел 4.1.1)."
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
msgstr ""
-"\"%s\": Ошибка uriScheme значение \"%s\" - недопустимые символы (RFC 2911 раздел 4.1.6)."
+"\"%s\": Ошибка uriScheme значение \"%s\" - недопустимые символы (RFC 2911 "
+"раздел 4.1.6)."
#, c-format
msgid ""
"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
msgstr ""
-"\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.6)."
+"\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 раздел "
+"4.1.6)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
msgid "%s (Borderless, %s, %s)"
msgstr "%s (без полей, %s, %s)"
+#, c-format
msgid "%s accepting requests since %s"
msgstr "%s принимает запросы с момента %s"
msgid "%s not supported."
msgstr "%s не поддерживается."
-
#, c-format
msgid "%s/%s accepting requests since %s"
msgstr "%s/%s принимает запросы с момента %s"
msgid "%s: %s failed: %s"
msgstr "%s: ошибка %s: %s"
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr "%s: Неверная версия %s для \"-V\"."
msgid ""
"%s: Error - %s environment variable names non-existent destination \"%s\"."
msgstr ""
-"%s: Ошибка - %s переменная окружения указывает на несуществующее назначение \"%s\"."
+"%s: Ошибка - %s переменная окружения указывает на несуществующее назначение "
+"\"%s\"."
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
#, c-format
msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
-msgstr "%s: Ошибка - не удается печать из stdin, если предоставлены файлы "
-"или ID задания."
+msgstr ""
+"%s: Ошибка - не удается печать из stdin, если предоставлены файлы или ID "
+"задания."
#, c-format
msgid "%s: Error - expected character set after \"-S\" option."
msgstr "%s: Ошибка - после параметра \"-S\" должен идти набор символов."
-
#, c-format
msgid "%s: Error - expected content type after \"-T\" option."
-msgstr "%s: Ошибка - после параметра \"-T\" должен быть указан тип содержимого."
+msgstr ""
+"%s: Ошибка - после параметра \"-T\" должен быть указан тип содержимого."
#, c-format
msgid "%s: Error - expected copies after \"-#\" option."
msgid "%s: Error - expected destination after \"-d\" option."
msgstr "%s: Ошибка - после параметра \"-d\" должно быть указано назначение."
-
#, c-format
msgid "%s: Error - expected form after \"-f\" option."
msgstr "%s: Ошибка - после параметра \"-f\" должна быть указана форма."
-
#, c-format
msgid "%s: Error - expected hold name after \"-H\" option."
msgstr "%s: Ошибка - после параметра \"-H\" должно быть указано имя хоста."
-
#, c-format
msgid "%s: Error - expected hostname after \"-H\" option."
msgstr "%s: Ошибка - после параметра \"-H\" должно быть указано имя хоста."
msgid "%s: Error - expected hostname after \"-h\" option."
msgstr "%s: Ошибка - после параметра \"-h\" должно быть указано имя хоста."
-
#, c-format
msgid "%s: Error - expected mode list after \"-y\" option."
-msgstr ""
-"%s: Ошибка - после параметра \"-y\" должен быть указан список режимов."
+msgstr "%s: Ошибка - после параметра \"-y\" должен быть указан список режимов."
#, c-format
msgid "%s: Error - expected name after \"-%c\" option."
msgstr "%s: Ошибка - после параметра \"-%c\" должно быть указано имя."
-
#, c-format
msgid "%s: Error - expected option=value after \"-o\" option."
msgstr ""
-"%s: Ошибка - после параметра '-o' должна быть указана строка вида option=value"
-
+"%s: Ошибка - после параметра '-o' должна быть указана строка вида "
+"option=value"
#, c-format
msgid "%s: Error - expected page list after \"-P\" option."
msgid "%s: Error - expected priority after \"-%c\" option."
msgstr "%s: Ошибка - после параметра \"-%c\" должен быть указан приоритет."
-
#, c-format
msgid "%s: Error - expected reason text after \"-r\" option."
msgstr "%s: Ошибка - после параметра \"-r\" должен идти текст причины."
-
#, c-format
msgid "%s: Error - expected title after \"-t\" option."
msgstr "%s: Ошибка - после параметра \"-t\" должен быть указан заголовок."
msgstr ""
"%s: Ошибка - после параметра \"-u\" должно быть указано имя пользователя."
-
#, c-format
msgid "%s: Error - expected value after \"-%c\" option."
msgstr "%s: Ошибка - после параметра \"-%c\" должно быть указано значение."
"%s: Ошибка - требуется \"завершено\",\"не завершено\" или \"все\" после "
"параметра \"-W\" "
-
#, c-format
msgid "%s: Error - no default destination available."
msgstr "%s: Ошибка – нет доступного назначения по умолчанию."
msgid "%s: Error - scheduler not responding."
msgstr "%s: Ошибка - планировщик не отвечает."
-msgid "%s: Error - scheduler not responding."
-msgstr "%s: Ошибка – планировщик не отвечает."
-
#, c-format
msgid "%s: Error - too many files - \"%s\"."
msgstr "%s: Ошибка – слишком много файлов – \"%s\"."
msgid "%s: Error - unknown destination \"%s\"."
msgstr "%s: Ошибка - неизвестное назначение \"%s\"."
-
#, c-format
msgid "%s: Error - unknown destination \"%s/%s\"."
msgstr "%s: ошибка - неизвестное назначение \"%s/%s\"."
-
#, c-format
msgid "%s: Error - unknown option \"%c\"."
msgstr "%s: Ошибка - неизвестный параметр \"%c\"."
-
#, c-format
msgid "%s: Error - unknown option \"%s\"."
msgstr "%s: Ошибка - неизвестный параметр \"%s\"."
msgid "%s: Invalid destination name in list \"%s\"."
msgstr "%s: Недопустимое имя назначения в списке \"%s\"."
-
#, c-format
msgid "%s: Invalid filter string \"%s\"."
msgstr "%s: Неверная строка фильтра \"%s\"."
msgid "%s: Missing version for \"-V\"."
msgstr "%s: Пропущена версия для \"-V\"."
-
#, c-format
msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
msgstr "%s: Необходимо указать ID задания (\"-i jobid\") перед \"-H restart\"."
-
-
#, c-format
msgid "%s: No filter to convert from %s/%s to %s/%s."
msgstr ""
msgid "%s: Sorry, no encryption support."
msgstr "%s: Нет поддержки шифрования."
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
#, c-format
msgid "%s: Unable to connect to server."
msgid "%s: Unable to contact server."
msgstr "%s: Не удается установить связь с сервером."
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
#, c-format
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr "%s: Не удается определить тип MIME \"%s\"."
msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
msgstr "%s: Не удается прочитать базу данных MIME из \"%s\" или \"%s\"."
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
#, c-format
msgid "%s: Unknown destination \"%s\"."
msgstr "%s: Неизвестное назначение \"%s\"."
-
#, c-format
msgid "%s: Unknown destination MIME type %s/%s."
msgstr "%s: Неизвестный MIME-тип назначения %s/%s."
-
#, c-format
msgid "%s: Unknown option \"%c\"."
msgstr "%s: Неизвестный параметр \"%c\"."
"%s: Внимание - модификатор формата \"%c\" не поддерживается - вывод может "
"быть неправильным."
-
#, c-format
msgid "%s: Warning - character set option ignored."
msgstr "%s: Внимание - параметр набора символов пропущен."
msgid "Error Policy"
msgstr "Политика ошибок"
+msgid "Error reading raster data."
+msgstr ""
+
msgid "Error sending raster data."
msgstr "Ошибка отправки данных растра."
msgstr "Нет добавленных назначений."
msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
-msgstr "Не обнаружено URI устройства в argv[0] или в переменной окружения DEVICE_URI"
+msgstr ""
+"Не обнаружено URI устройства в argv[0] или в переменной окружения DEVICE_URI"
msgid "No error-index"
msgstr "Нет значения error-index"
"Note: this program only validates the DSC comments, not the PostScript "
"itself."
msgstr ""
-"Примечание: данная программа проверяет только комментарии DSC, а не "
-"сам PostScript."
+"Примечание: данная программа проверяет только комментарии DSC, а не сам "
+"PostScript."
msgid "OK"
msgstr "ОК"
msgstr "Предел квоты достигнут."
msgid "Rank Owner Job File(s) Total Size"
-msgstr "Ранг Владелец Задание Файл(ы) Общий размер"
+msgstr ""
+"Ранг Владелец Задание Файл(ы) Общий размер"
msgid "Reject Jobs"
msgstr "Отклонить задания"
#, c-format
msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
-msgstr "Атрибут '%s' Job Description не может быть подставлен при создании"
-"задания"
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
+msgstr ""
#, c-format
msgid ""
msgstr "Не удается подключиться к хосту."
msgid "Unable to contact printer, queuing on next printer in class."
-msgstr "Не удается установить связь с принтером, постановка в очередь на "
-"следующем принтере в группе."
+msgstr ""
+"Не удается установить связь с принтером, постановка в очередь на следующем "
+"принтере в группе."
#, c-format
msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
#, c-format
msgid "Unable to copy 64-bit Windows printer driver files (%d)."
-msgstr "Не удается копировать 64-битовые файлы драйвера принтера для Windows (%d)."
+msgstr ""
+"Не удается копировать 64-битовые файлы драйвера принтера для Windows (%d)."
#, c-format
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr "Не удается установить защищенное соединение (сертификат просрочен)."
msgid "Unable to establish a secure connection to host (host name mismatch)."
-msgstr "Не удается установить защищенное соединение (несовпадение имени хоста)."
+msgstr ""
+"Не удается установить защищенное соединение (несовпадение имени хоста)."
msgid ""
"Unable to establish a secure connection to host (peer dropped connection "
"before responding)."
msgstr ""
-"Не удается установить защищенное соединение (соединение разорвано "
-"Ñ\83даленной Ñ\81Ñ\82оÑ\80оной.)
+"Не удается установить защищенное соединение (соединение разорвано удаленной "
+"Ñ\81Ñ\82оÑ\80оной.)"
msgid ""
"Unable to establish a secure connection to host (self-signed certificate)."
msgid ""
"Unable to establish a secure connection to host (untrusted certificate)."
-msgstr ""
-"Не удается установить защищенное соединение (ненадежный сертификат)."
+msgstr "Не удается установить защищенное соединение (ненадежный сертификат)."
msgid "Unable to establish a secure connection to host."
msgstr "Не удается установить защищенное соединение."
msgid "Unable to read print data."
msgstr "Не удается считать данные печати."
+msgid "Unable to rename job document file."
+msgstr ""
+
msgid "Unable to resolve printer-uri."
msgstr "Не удается определить printer-uri"
#, c-format
msgid "Unsupported number-up value %d, using number-up=1."
-msgstr "Неподдерживаемое значение number-up %d, используется значение "
-"number-up=1."
+msgstr ""
+"Неподдерживаемое значение number-up %d, используется значение number-up=1."
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
-msgstr "Неподдерживаемое значение number-up-layout %s, используется "
-"значение number-up-layout=lrtb."
+msgstr ""
+"Неподдерживаемое значение number-up-layout %s, используется значение number-"
+"up-layout=lrtb."
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
-msgstr "Неподдерживаемое значение page-border %s, используется значение "
-"page-border=none."
+msgstr ""
+"Неподдерживаемое значение page-border %s, используется значение page-"
+"border=none."
msgid "Unsupported raster data."
msgstr "Неподдерживаемые данные растра."
msgstr "cupsd: Пропущено имя файла cups-files.conf после параметра \"-s\""
msgid "cupsd: On-demand support not compiled in, running in normal mode."
-msgstr "cupsd: Поддержка запуска \"по запросу\" не включена, запуск в нормальном режиме."
+msgstr ""
+"cupsd: Поддержка запуска \"по запросу\" не включена, запуск в нормальном "
+"режиме."
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr ""
"lpadmin: Не удается удалить параметр:\n"
"\t Необходимо сначала указать имя принтера."
+#, 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: Не удается открыть PPD-файл \"%s\" - %s"
#, c-format
msgid "ppdc: Choice found on line %d of %s with no Option."
-msgstr "ppdc: В строке %d из %s обнаружено значение, не привязанное к параметру"
+msgstr ""
+"ppdc: В строке %d из %s обнаружено значение, не привязанное к параметру"
#, c-format
msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
#, c-format
msgid "ppdc: Expected color order for ColorModel on line %d of %s."
-msgstr "ppdc: После ColorModel в строке %d из %s должна быть указана цветовая "
-"схема."
+msgstr ""
+"ppdc: После ColorModel в строке %d из %s должна быть указана цветовая схема."
#, c-format
msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
#, c-format
msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
-msgstr "ppdc: Для UIConstraints в строке %d из %s должна быть указана строка "
+msgstr ""
+"ppdc: Для UIConstraints в строке %d из %s должна быть указана строка "
"ограничений."
#, c-format
msgid ""
"ppdc: Expected driver type keyword following DriverType on line %d of %s."
msgstr ""
-"ppdc: После DriverType в строке %d из %s должно быть указано ключевое "
-"Ñ\81лово Ñ\82ипа дÑ\80айвеÑ\80а."
+"ppdc: После DriverType в строке %d из %s должно быть указано ключевое слово "
+"типа драйвера."
#, c-format
msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
#, c-format
msgid "ppdc: Expected name/text after Installable on line %d of %s."
-msgstr "
+msgstr ""
"ppdc: После Installable в строке %d из %s должно быть указано имя/текст."
#, c-format
msgid "ppdc: Expected name/text after Resolution on line %d of %s."
msgstr ""
-"ppdc: После Resolution в строке %d из %s должно быть указано имя/текст.
+"ppdc: После Resolution в строке %d из %s должно быть указано имя/текст."
#, c-format
msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
#, c-format
msgid "ppdc: Expected override field after Resolution on line %d of %s."
msgstr ""
-"ppdc: После Resolution в строке %d из %s должно быть поле "
-"переопределения.
+"ppdc: После Resolution в строке %d из %s должно быть поле переопределения."
#, c-format
msgid "ppdc: Expected quoted string on line %d of %s."
msgid ""
"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
msgstr ""
-"ppdc: После ColorProfile в строке %d из %s должно быть указано "
-"Ñ\80азÑ\80еÑ\88ение/Ñ\82ип ноÑ\81иÑ\82елÑ\8f."
+"ppdc: После ColorProfile в строке %d из %s должно быть указано разрешение/"
+"тип носителя."
#, c-format
msgid ""
#, c-format
msgid "ppdc: Invalid empty program name for filter on line %d of %s."
-msgstr ""
-"ppdc: Недопустимое пустое имя программы для фильтра в строке %d из %s."
+msgstr "ppdc: Недопустимое пустое имя программы для фильтра в строке %d из %s."
#, c-format
msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
#, c-format
msgid ""
"ppdc: Need a msgid line before any translation strings on line %d of %s."
-msgstr ""
-"ppdc: Требуется строка msgid перед строкой перевода в строке %d из %s"
+msgstr "ppdc: Требуется строка msgid перед строкой перевода в строке %d из %s"
#, c-format
msgid "ppdc: No message catalog provided for locale %s."
#, c-format
msgid "ppdc: Option %s defined in two different groups on line %d of %s."
-msgstr ""
-"ppdc: Параметр %s определен в двух разных группах в строке %d из %s."
+msgstr "ppdc: Параметр %s определен в двух разных группах в строке %d из %s."
#, c-format
msgid "ppdc: Option %s redefined with a different type on line %d of %s."
#, c-format
msgid "ppdc: Option constraint must *name on line %d of %s."
msgstr ""
-"ppdc: Для ограничения параметра должно быть указано *name в строке %d из "
-"%s."
+"ppdc: Для ограничения параметра должно быть указано *name в строке %d из %s."
#, c-format
msgid "ppdc: Too many nested #if's on line %d of %s."
msgid ""
"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
msgstr ""
-"ppdc: Неизвестные конечные символы в вещественном числе \"%s\" в строке "
-"%d из %s."
+"ppdc: Неизвестные конечные символы в вещественном числе \"%s\" в строке %d "
+"из %s."
#, c-format
msgid "ppdc: Unterminated string starting with %c on line %d of %s."
msgid "variable-bindings uses indefinite length"
msgstr "Для variable-bindings длина не установлена"
+#~ msgid " %s Missing \"%s\" translation string for option %s"
+#~ msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s"
+
+#~ msgid ""
+#~ " Missing %%EndComments comment.\n"
+#~ " REF: Page 41, %%EndComments"
+#~ msgstr ""
+#~ " Комментарий %%EndComments отсутствует.\n"
+#~ " REF: Стр. 41, %%EndComments"
+
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr ""
+#~ "Атрибут '%s' Job Description не может быть подставлен при созданиизадания"
#
-# "$Id: Makefile 12815 2015-07-30 15:03:38Z msweet $"
+# "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $"
#
# Man page makefile for CUPS.
#
-# Copyright 2007-2015 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
cups-files.conf.$(MAN5EXT) \
cups-snmp.conf.$(MAN5EXT) \
cupsd.conf.$(MAN5EXT) \
- cupsd-logs.$(MAN5EXT) \
ipptoolfile.$(MAN5EXT) \
mailto.conf.$(MAN5EXT) \
mime.convs.$(MAN5EXT) \
cups-snmp.$(MAN8EXT) \
cupsd.$(MAN8EXT) \
cupsd-helper.$(MAN8EXT) \
+ cupsd-logs.$(MAN8EXT) \
cupsenable.$(MAN8EXT) \
lpadmin.$(MAN8EXT) \
lpinfo.$(MAN8EXT) \
#
-# End of "$Id: Makefile 12815 2015-07-30 15:03:38Z msweet $".
+# End of "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $".
#
.\"
-.\" "$Id: client.conf.man.in 12215 2014-10-20 18:24:56Z msweet $"
+.\" "$Id: client.conf.man.in 12645 2015-05-20 01:20:52Z msweet $"
.\"
.\" client.conf man page for CUPS.
.\"
-.\" Copyright 2007-2014 by Apple Inc.
+.\" Copyright 2007-2015 by Apple Inc.
.\" Copyright 2006 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" 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/".
.\"
-.TH client.conf 5 "CUPS" "20 October 2014" "Apple Inc."
+.TH client.conf 5 "CUPS" "19 May 2015" "Apple Inc."
.SH NAME
client.conf \- client configuration file for cups (deprecated)
.SH DESCRIPTION
The \fBclient.conf\fR file configures the CUPS client and is normally located in the \fI/etc/cups\fR and/or \fI~/.cups\fR directories.
Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.
.LP
-\fBNote:\fR Starting with OS X 10.7, this file is only used by command-line and X11 applications.
+\fBNote:\fR Starting with OS X 10.7, this file is only used by command-line and X11 applications plus the IPP backend.
The \fBServerName\fR directive is not supported on OS X at all.
.SS DIRECTIVES
The following directives are understood by the client. Consult the online help for detailed descriptions:
\fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]\fB/version=1.1\fR
Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
.TP 5
-\fBSSLOptions \fR[\fIAllowRC4\fR] [\fIAllowSSL3\fR]
+\fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyTLS1.0\fR]
.TP 5
\fBSSLOptions None\fR
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 \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key negotiation.
The \fIAllowRC4\fR option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
The \fIAllowSSL3\fR option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
+The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
.TP 5
\fBUser \fIname\fR
Specifies the default user name to use for requests.
.BR cups (1),
CUPS Online Help (http://localhost:631/help)
.SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
.\"
-.\" End of "$Id: client.conf.man.in 12215 2014-10-20 18:24:56Z msweet $".
+.\" End of "$Id: client.conf.man.in 12645 2015-05-20 01:20:52Z msweet $".
.\"
.\"
-.\" "$Id: cups-files.conf.man.in 12477 2015-02-02 18:38:25Z msweet $"
+.\" "$Id: cups-files.conf.man.in 12699 2015-06-08 18:16:30Z msweet $"
.\"
.\" cups-files.conf man page for CUPS.
.\"
.\" 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/".
.\"
-.TH cups-files.conf 5 "CUPS" "2 February 2015" "Apple Inc."
+.TH cups-files.conf 5 "CUPS" "3 June 2015" "Apple Inc."
.SH NAME
cups\-files.conf \- file and directory configuration file for cups
.SH DESCRIPTION
.TP 5
\fBAccessLog \fIfilename\fR
.TP 5
+\fBAccessLog stderr\fR
+.TP 5
\fBAccessLog syslog\fR
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:
.nf
.TP 5
\fBErrorLog \fIfilename\fR
.TP 5
+\fBErrorLog stderr\fR
+.TP 5
\fBErrorLog syslog\fR
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:
.nf
.TP 5
\fBPageLog \fR[ \fIfilename\fR ]
.TP 5
+\fBPageLog stderr\fR
+.TP 5
\fBPageLog syslog\fR
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:
The default is "/var/spool/cups".
.\"#Sandboxing
.TP 5
-\fBSandboxing off\fR
-.TP 5
\fBSandboxing relaxed\fR
.TP 5
\fBSandboxing strict\fR
.SH COPYRIGHT
Copyright \[co] 2007-2015 by Apple Inc.
.\"
-.\" End of "$Id: cups-files.conf.man.in 12477 2015-02-02 18:38:25Z msweet $".
+.\" End of "$Id: cups-files.conf.man.in 12699 2015-06-08 18:16:30Z msweet $".
.\"
.\"
-.\" "$Id: cupsd.conf.man.in 12769 2015-06-30 16:13:48Z msweet $"
+.\" "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $"
.\"
.\" cupsd.conf man page for CUPS.
.\"
-.\" Copyright 2007-2015 by Apple Inc.
+.\" Copyright 2007-2014 by Apple Inc.
.\" Copyright 1997-2006 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" 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/".
.\"
-.TH cupsd.conf 5 "CUPS" "30 June 2015" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "20 October 2014" "Apple Inc."
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
"%u" inserts the username.
.fi
-The default is the empty string, which disables page logging.
-The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
+The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
.\"#PassEnv
.TP 5
\fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
.BR subscriptions.conf (5),
CUPS Online Help (http://localhost:631/help)
.SH COPYRIGHT
-Copyright \[co] 2007-2015 by Apple Inc.
+Copyright \[co] 2007-2014 by Apple Inc.
.\"
-.\" End of "$Id: cupsd.conf.man.in 12769 2015-06-30 16:13:48Z msweet $".
+.\" End of "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $".
.\"
.\"
-.\" "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $"
+.\" "$Id: ipptool.man 12484 2015-02-03 19:25:57Z msweet $"
.\"
.\" ipptool man page for CUPS.
.\"
-.\" Copyright 2010-2014 by Apple Inc.
+.\" Copyright 2010-2015 by Apple Inc.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" property of Apple Inc. and are protected by Federal copyright
.\" 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/".
.\"
-.TH ipptool 1 "CUPS" "29 August 2014" "Apple Inc."
+.TH ipptool 1 "CUPS" "3 February 2015" "Apple Inc."
.SH NAME
ipptool \- perform internet printing protocol requests
.SH SYNOPSIS
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
RFC 2911 (http://tools.ietf.org/html/rfc2911),
.SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
.\"
-.\" End of "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $".
+.\" End of "$Id: ipptool.man 12484 2015-02-03 19:25:57Z msweet $".
.\"
.\"
-.\" "$Id: ipptoolfile.man 11880 2014-05-16 06:14:11Z msweet $"
+.\" "$Id: ipptoolfile.man 12487 2015-02-05 15:42:59Z msweet $"
.\"
.\" ipptoolfile man page for CUPS.
.\"
.\" 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/".
.\"
-.TH ipptoolfile 5 "CUPS" "15 May 2014" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "4 February 2015" "Apple Inc."
.SH NAME
ipptoolfile \- ipptool file format
.SH DESCRIPTION
\fBEXPECT !\fIattribute-name\fR
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".
.TP 5
+\fBEXPECT-ALL \fIattribute-name \fR[ \fIpredicate(s) \fR]
+.TP 5
+\fBEXPECT-ALL ?\fIattribute-name predicate(s)\fR
+Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates.
+.TP 5
\fBFILE filename\fR
Specifies a file to include at the end of the request. This is typically used when sending a test print file.
.TP 5
.TP 5
\fBWITH\-VALUE "/\fIregular expression\fB/"\fR
Requires that at least one value of the \fBEXPECT\fR attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+.TP 5
+\fBWITH\-VALUE\-FROM \fIattribute-name\fR
+Requires that the value(s) of the \fBEXPECT\fR 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.
.SS STATUS PREDICATES
The following predicates are understood following the \fBSTATUS\fR test directive:
.TP 5
PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
RFC 2911 (http://tools.ietf.org/html/rfc3911)
.SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
.\"
-.\" End of "$Id: ipptoolfile.man 11880 2014-05-16 06:14:11Z msweet $".
+.\" End of "$Id: ipptoolfile.man 12487 2015-02-05 15:42:59Z msweet $".
.\"
.\"
-.\" "$Id: lpadmin.man 11922 2014-06-11 23:35:37Z msweet $"
+.\" "$Id: lpadmin.man 12513 2015-02-11 19:45:01Z msweet $"
.\"
.\" lpadmin man page 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
.\" 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/".
.\"
-.TH lpadmin 8 "CUPS" "11 June 2014" "Apple Inc."
+.TH lpadmin 8 "CUPS" "11 February 2015" "Apple Inc."
.SH NAME
lpadmin \- configure cups printers and classes
.SH SYNOPSIS
Use the \fI-m\fR option with the
.BR lpinfo (8)
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 \fIdevice-uri\fR.
.TP 5
\fB\-o cupsIPPSupplies=true\fR
.TP 5
This differs from the System V version which requires the root user to execute this command.
.SH NOTES
The CUPS version of \fBlpadmin\fR does not support all of the System V or Solaris printing system configuration options.
+.SH EXAMPLE
+Create an IPP Everywhere print queue:
+.nf
+
+ lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere
+
+.fi
.SH SEE ALSO
.BR cupsaccept (8),
.BR cupsenable (8),
.BR lpoptions (1),
CUPS Online Help (http://localhost:631/help)
.SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
.\"
-.\" End of "$Id: lpadmin.man 11922 2014-06-11 23:35:37Z msweet $".
+.\" End of "$Id: lpadmin.man 12513 2015-02-11 19:45:01Z msweet $".
.\"
/*
- * "$Id: mantohtml.c 12363 2014-12-12 19:51:33Z msweet $"
+ * "$Id: mantohtml.c 12362 2014-12-12 19:50:49Z msweet $"
*
* Man page to HTML conversion program.
*
/*
- * End of "$Id: mantohtml.c 12363 2014-12-12 19:51:33Z msweet $".
+ * End of "$Id: mantohtml.c 12362 2014-12-12 19:50:49Z msweet $".
*/
#
-# "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $"
+# "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $"
#
# RPM "spec" file for CUPS.
#
Summary: CUPS
Name: cups
-Version: 2.0.4
+Version: 2.1b1
Release: 1
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: http://www.cups.org/software/2.0.4/cups-2.0.4-source.tar.bz2
+Source: http://www.cups.org/software/2.1b1/cups-2.1b1-source.tar.bz2
Url: http://www.cups.org
Packager: Anonymous <anonymous@foo.com>
Vendor: Apple Inc.
%defattr(-,root,root)
%dir /etc/cups
%config(noreplace) /etc/cups/*.conf
+/etc/cups/cups-files.conf.default
/etc/cups/cupsd.conf.default
+/etc/cups/snmp.conf.default
%dir /etc/cups/interfaces
%dir /etc/cups/ppd
%attr(0700,root,root) %dir /etc/cups/ssl
#
-# End of "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $".
+# End of "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $".
#
#
-# "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $"
+# "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $"
#
# RPM "spec" file for CUPS.
#
%defattr(-,root,root)
%dir /etc/cups
%config(noreplace) /etc/cups/*.conf
+/etc/cups/cups-files.conf.default
/etc/cups/cupsd.conf.default
+/etc/cups/snmp.conf.default
%dir /etc/cups/interfaces
%dir /etc/cups/ppd
%attr(0700,root,root) %dir /etc/cups/ssl
#
-# End of "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $".
+# End of "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $".
#
#
-# "$Id: Makefile 12616 2015-05-06 20:22:01Z msweet $"
+# "$Id: Makefile 12615 2015-05-06 20:21:51Z msweet $"
#
# Makefile for the CUPS PPD Compiler.
#
#
-# End of "$Id: Makefile 12616 2015-05-06 20:22:01Z msweet $".
+# End of "$Id: Makefile 12615 2015-05-06 20:21:51Z msweet $".
#
//
-// "$Id: ppdhtml.cxx 12634 2015-05-15 19:17:07Z msweet $"
+// "$Id: ppdhtml.cxx 12633 2015-05-15 19:16:58Z msweet $"
//
// PPD to HTML utility for the CUPS PPD Compiler.
//
//
-// End of "$Id: ppdhtml.cxx 12634 2015-05-15 19:17:07Z msweet $".
+// End of "$Id: ppdhtml.cxx 12633 2015-05-15 19:16:58Z msweet $".
//
//
-// "$Id: ppdpo.cxx 12634 2015-05-15 19:17:07Z msweet $"
+// "$Id: ppdpo.cxx 12633 2015-05-15 19:16:58Z msweet $"
//
// PPD file message catalog program for the CUPS PPD Compiler.
//
//
-// End of "$Id: ppdpo.cxx 12634 2015-05-15 19:17:07Z msweet $".
+// End of "$Id: ppdpo.cxx 12633 2015-05-15 19:16:58Z msweet $".
//
//
-// "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $"
+// "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $"
//
// Driver info file for CUPS-supplied PPDs.
//
#media "w576h468/8.00x6.50\"" 576 468
// Common stuff for all drivers...
-Attribute "cupsVersion" "" "2.0"
+Attribute "cupsVersion" "" "2.1"
Attribute "FileSystem" "" "False"
Attribute "LandscapeOrientation" "" "Plus90"
Attribute "TTRasterizer" "" "Type42"
}
//
-// End of "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $".
+// End of "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $".
//
#
-# "$Id: Makefile 12222 2014-10-21 11:55:01Z msweet $"
+# "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $"
#
# Scheduler Makefile 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
$(RM) convert
$(LN) cupsfilter convert
+cupsfilter-static: cupsfilter.o libcupsmime.a ../cups/$(LIBCUPSSTATIC)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o cupsfilter-static cupsfilter.o libcupsmime.a \
+ ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(SSLLIBS) \
+ $(DNSSDLIBS) $(LIBGSSAPI)
+
#
# Make the device daemon, "cups-deviced".
#
-# End of "$Id: Makefile 12222 2014-10-21 11:55:01Z msweet $".
+# End of "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $".
#
/*
- * "$Id: auth.c 12604 2015-05-06 01:43:05Z msweet $"
+ * "$Id: auth.c 12602 2015-05-05 20:19:35Z msweet $"
*
* Authorization routines for the CUPS scheduler.
*
/*
- * End of "$Id: auth.c 12604 2015-05-06 01:43:05Z msweet $".
+ * End of "$Id: auth.c 12602 2015-05-05 20:19:35Z msweet $".
*/
/*
- * "$Id: client.c 12754 2015-06-24 19:37:53Z msweet $"
+ * "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $"
*
* Client routines for the CUPS scheduler.
*
http_status_t code, /* I - Error code */
int auth_type)/* I - Authentication type */
{
- char location[HTTP_MAX_VALUE]; /* Location field */
-
-
cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendError code=%d, auth_type=%d",
code, auth_type);
* never disable it in that case.
*/
- strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location));
-
httpClearFields(con->http);
- httpSetField(con->http, HTTP_FIELD_LOCATION, location);
-
if (code >= HTTP_STATUS_BAD_REQUEST && con->type != CUPSD_AUTH_NEGOTIATE)
httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF);
/*
- * End of "$Id: client.c 12754 2015-06-24 19:37:53Z msweet $".
+ * End of "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $".
*/
/*
- * "$Id: colorman.c 12369 2014-12-15 14:51:28Z msweet $"
+ * "$Id: colorman.c 12619 2015-05-06 21:00:19Z msweet $"
*
* Color management routines for the CUPS scheduler.
*
* Make sure ColorSync is available...
*/
- if (ColorSyncRegisterDevice == NULL)
+ if (&ColorSyncRegisterDevice == NULL)
return;
/*
* Make sure ColorSync is available...
*/
- if (ColorSyncUnregisterDevice != NULL)
+ if (&ColorSyncUnregisterDevice != NULL)
{
CFUUIDRef deviceUUID; /* Device UUID */
/*
- * End of "$Id: colorman.c 12369 2014-12-15 14:51:28Z msweet $".
+ * End of "$Id: colorman.c 12619 2015-05-06 21:00:19Z msweet $".
*/
/*
- * "$Id: conf.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $"
*
* Configuration routines for the CUPS scheduler.
*
- * 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
#include <stdarg.h>
#include <grp.h>
#include <sys/utsname.h>
+#ifdef HAVE_ASL_H
+# include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+# define SD_JOURNAL_SUPPRESS_LOCATION
+# include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
#include <syslog.h>
#ifdef HAVE_LIBPAPER
"Unable to create directory \"%s\" - %s", filename,
strerror(errno));
else
- syslog(LOG_ERR, "Unable to create directory \"%s\" - %s", filename,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+#else
+ syslog(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
return (-1);
}
if (create_dir >= 0)
cupsdLogMessage(CUPSD_LOG_ERROR, "\"%s\" is not a directory.", filename);
else
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "\"%s\" is not a directory.", filename);
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "\"%s\" is not a directory.", filename);
+#else
syslog(LOG_ERR, "\"%s\" is not a directory.", filename);
+#endif /* HAVE_ASL_H */
return (-1);
}
"Unable to change ownership of \"%s\" - %s", filename,
strerror(errno));
else
- syslog(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+#else
+ syslog(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
return (1);
}
"Unable to change permissions of \"%s\" - %s", filename,
strerror(errno));
else
- syslog(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+#else
+ syslog(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
return (1);
}
if (TestConfigFile)
printf("\"%s\" contains errors.\n", CupsFilesFile);
else
- syslog(LOG_LPR, "Unable to read \"%s\" due to errors.",
- CupsFilesFile);
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+#else
+ syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+#endif /* HAVE_ASL_H */
return (0);
}
cupsdLogMessage(CUPSD_LOG_INFO, "No %s, using defaults.", CupsFilesFile);
else
{
- syslog(LOG_LPR, "Unable to open \"%s\": %s", CupsFilesFile,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+ asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+#else
+ syslog(LOG_LPR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+#endif /* HAVE_ASL_H */
+
return (0);
}
if ((fp = cupsFileOpen(ConfigurationFile, "r")) == NULL)
{
- syslog(LOG_LPR, "Unable to open \"%s\": %s", ConfigurationFile,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+ asl_release(m);
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+#else
+ syslog(LOG_LPR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+#endif /* HAVE_ASL_H */
+
return (0);
}
if (TestConfigFile)
printf("\"%s\" contains errors.\n", ConfigurationFile);
else
- syslog(LOG_LPR, "Unable to read \"%s\" due to errors.",
- ConfigurationFile);
+#ifdef HAVE_ASL_H
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+ asl_release(m);
+ }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+#else
+ syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+#endif /* HAVE_ASL_H */
return (0);
}
* Open the system log for cupsd if necessary...
*/
-#ifdef HAVE_VSYSLOG
+ if (!LogStderr)
+ {
+ if (!strcmp(AccessLog, "stderr"))
+ cupsdSetString(&AccessLog, "syslog");
+
+ if (!strcmp(ErrorLog, "stderr"))
+ cupsdSetString(&ErrorLog, "syslog");
+
+ if (!strcmp(PageLog, "stderr"))
+ cupsdSetString(&PageLog, "syslog");
+ }
+
+#if defined(HAVE_VSYSLOG) && !defined(HAVE_ASL_H) && !defined(HAVE_SYSTEMD_SD_JOURNAL_H)
if (!strcmp(AccessLog, "syslog") ||
!strcmp(ErrorLog, "syslog") ||
!strcmp(PageLog, "syslog"))
openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR);
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_VSYSLOG && !HAVE_ASL_H && !HAVE_SYSTEMD_SD_JOURNAL_H */
/*
* Make sure each of the log files exists and gets rotated as necessary...
cupsdUpdateEnv();
+ /*
+ * Validate the default error policy...
+ */
+
+ if (strcmp(ErrorPolicy, "retry-current-job") &&
+ strcmp(ErrorPolicy, "abort-job") &&
+ strcmp(ErrorPolicy, "retry-job") &&
+ strcmp(ErrorPolicy, "stop-printer"))
+ {
+ cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\", resetting to \"stop-printer\".", ErrorPolicy);
+ cupsdSetString(&ErrorPolicy, "stop-printer");
+ }
+
/*
* Update default paper size setting as needed...
*/
* Level of sandboxing?
*/
- if (!_cups_strcasecmp(value, "off"))
+ if (!_cups_strcasecmp(value, "off") && getuid())
{
Sandboxing = CUPSD_SANDBOXING_OFF;
cupsdLogMessage(CUPSD_LOG_WARN, "Disabling sandboxing is not recommended (line %d of %s)", linenum, CupsFilesFile);
/*
- * End of "$Id: conf.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $".
*/
/*
- * "$Id: conf.h 11789 2014-04-02 16:52:53Z msweet $"
+ * "$Id: conf.h 12689 2015-06-03 19:49:54Z msweet $"
*
* Configuration file definitions for the CUPS scheduler.
*
- * 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
/* Error log level */
VAR cupsd_time_t LogTimeFormat VALUE(CUPSD_TIME_STANDARD);
/* Log file time format */
+VAR cups_file_t *LogStderr VALUE(NULL);
+ /* Stderr file, if any */
VAR cupsd_sandboxing_t Sandboxing VALUE(CUPSD_SANDBOXING_STRICT);
/* Sandboxing level */
VAR int UseSandboxing VALUE(1);
/*
- * End of "$Id: conf.h 11789 2014-04-02 16:52:53Z msweet $".
+ * End of "$Id: conf.h 12689 2015-06-03 19:49:54Z msweet $".
*/
/*
- * "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $"
+ * "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $"
*
* PPD/driver support for CUPS.
*
* created from driver information files, and dynamically generated PPD files
* using driver helper programs.
*
- * 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
load_drivers(include, exclude);
/*
- * Add the raw driver...
+ * Add the raw and IPP Everywhere drivers...
*/
- add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0,
- PPD_TYPE_UNKNOWN, "raw");
+ add_ppd("", "everywhere", "en", "Generic", "IPP Everywhere", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "everywhere");
+ add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "raw");
/*
* Send IPP attributes...
/*
- * End of "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $".
+ * End of "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $".
*/
/*
- * "$Id: cups-lpd.c 12612 2015-05-06 15:30:50Z msweet $"
+ * "$Id: cups-lpd.c 12611 2015-05-06 15:30:36Z msweet $"
*
* Line Printer Daemon interface for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
#endif /* HAVE_INTTYPES_H */
+#ifdef __APPLE__
+# include <vproc.h>
+#endif /* __APPLE__ */
/*
hostip[256], /* IP address */
*hostfamily; /* Address family */
int hostlookups; /* Do hostname lookups? */
+#ifdef __APPLE__
+ vproc_transaction_t vtran = vproc_transaction_begin(NULL);
+#endif /* __APPLE__ */
/*
syslog(LOG_ERR, "Unable to get command line from client!");
putchar(1);
+
+#ifdef __APPLE__
+ vproc_transaction_end(NULL, vtran);
+#endif /* __APPLE__ */
+
return (1);
}
syslog(LOG_INFO, "Closing connection");
closelog();
+#ifdef __APPLE__
+ vproc_transaction_end(NULL, vtran);
+#endif /* __APPLE__ */
+
return (status);
}
/*
- * End of "$Id: cups-lpd.c 12612 2015-05-06 15:30:50Z msweet $".
+ * End of "$Id: cups-lpd.c 12611 2015-05-06 15:30:36Z msweet $".
*/
/*
- * "$Id: cupsfilter.c 12303 2014-12-09 16:16:07Z msweet $"
+ * "$Id: cupsfilter.c 12304 2014-12-09 16:16:28Z msweet $"
*
* Filtering program for CUPS.
*
/*
- * End of "$Id: cupsfilter.c 12303 2014-12-09 16:16:07Z msweet $".
+ * End of "$Id: cupsfilter.c 12304 2014-12-09 16:16:28Z msweet $".
*/
/*
- * "$Id: dirsvc.c 12459 2015-01-30 16:16:12Z msweet $"
+ * "$Id: dirsvc.c 12458 2015-01-30 16:15:53Z msweet $"
*
* Directory services routines for the CUPS scheduler.
*
/*
- * End of "$Id: dirsvc.c 12459 2015-01-30 16:16:12Z msweet $".
+ * End of "$Id: dirsvc.c 12458 2015-01-30 16:15:53Z msweet $".
*/
/*
- * "$Id: env.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: env.c 12700 2015-06-08 18:32:35Z msweet $"
*
* Environment management routines for the CUPS scheduler.
*
/*
- * End of "$Id: env.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: env.c 12700 2015-06-08 18:32:35Z msweet $".
*/
/*
- * "$Id: ipp.c 12778 2015-07-07 17:28:51Z msweet $"
+ * "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $"
*
* IPP routines for the CUPS scheduler.
*
need_restart_job = 0;
- if ((attr = ippFindAttribute(con->request, "printer-location",
- IPP_TAG_TEXT)) != NULL)
+ if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL)
cupsdSetString(&pclass->location, attr->values[0].string.text);
+ if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+ cupsdSetString(&pclass->geo_location, attr->values[0].string.text);
+
+ if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+ cupsdSetString(&pclass->organization, attr->values[0].string.text);
+
+ if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+ cupsdSetString(&pclass->organizational_unit, attr->values[0].string.text);
+
if ((attr = ippFindAttribute(con->request, "printer-info",
IPP_TAG_TEXT)) != NULL)
cupsdSetString(&pclass->info, attr->values[0].string.text);
IPP_TAG_KEYWORD)) != NULL)
cupsdSetAuthInfoRequired(pclass, NULL, attr);
+ pclass->config_time = time(NULL);
+
/*
* Update the printer class attributes and return...
*/
ipp_t *unsup_col; /* media-col in unsupported response */
static const char * const readonly[] =/* List of read-only attributes */
{
+ "date-time-at-completed",
+ "date-time-at-creation",
+ "date-time-at-processing",
+ "job-detailed-status-messages",
+ "job-document-access-errors",
"job-id",
- "job-k-octets-completed",
"job-impressions-completed",
+ "job-k-octets-completed",
"job-media-sheets-completed",
+ "job-pages-completed",
+ "job-printer-up-time",
+ "job-printer-uri",
"job-state",
"job-state-message",
"job-state-reasons",
+ "job-uri",
+ "number-of-documents",
+ "number-of-intervening-jobs",
+ "output-device-assigned",
"time-at-completed",
"time-at-creation",
"time-at-processing"
for (i = 0; i < (int)(sizeof(readonly) / sizeof(readonly[0])); i ++)
{
- if ((attr = ippFindAttribute(con->request, readonly[i],
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(con->request, readonly[i], IPP_TAG_ZERO)) != NULL)
{
ippDeleteAttribute(con->request, attr);
if (StrictConformance)
{
- send_ipp_status(con, IPP_BAD_REQUEST,
- _("The '%s' Job Description attribute cannot be "
- "supplied in a job creation request."), readonly[i]);
+ send_ipp_status(con, IPP_BAD_REQUEST, _("The '%s' Job Status attribute cannot be supplied in a job creation request."), readonly[i]);
return (NULL);
}
- cupsdLogMessage(CUPSD_LOG_INFO,
- "Unexpected '%s' Job Description attribute in a job "
- "creation request.", readonly[i]);
+ cupsdLogMessage(CUPSD_LOG_INFO, "Unexpected '%s' Job Status attribute in a job creation request.", readonly[i]);
}
}
"job-originating-host-name", NULL, con->http->hostname);
}
- ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation",
- time(NULL));
- attr = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
- "time-at-processing", 0);
- attr->value_tag = IPP_TAG_NOVALUE;
- attr = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
- "time-at-completed", 0);
- attr->value_tag = IPP_TAG_NOVALUE;
+ ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+ ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(NULL)));
+ ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+ ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-completed");
+ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", time(NULL));
+ ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-processing");
/*
* Add remaining job attributes...
job->state_value = (ipp_jstate_t)job->state->values[0].integer;
job->reasons = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD,
"job-state-reasons", NULL, "job-incoming");
+ job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0);
job->sheets = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
"job-media-sheets-completed", 0);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL,
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
job->state_value);
+ ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, "");
ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons",
NULL, job->reasons->values[0].string.text);
IPP_TAG_TEXT)) != NULL)
cupsdSetString(&printer->location, attr->values[0].string.text);
+ if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+ cupsdSetString(&printer->geo_location, attr->values[0].string.text);
+
+ if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+ cupsdSetString(&printer->organization, attr->values[0].string.text);
+
+ if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+ cupsdSetString(&printer->organizational_unit, attr->values[0].string.text);
+
if ((attr = ippFindAttribute(con->request, "printer-info",
IPP_TAG_TEXT)) != NULL)
cupsdSetString(&printer->info, attr->values[0].string.text);
}
}
+ printer->config_time = time(NULL);
+
/*
* Update the printer attributes and return...
*/
}
con->response->request.status.status_code = IPP_OK;
-
- cupsdCheckJobs();
}
* Generate attributes from the job structure...
*/
+ if (job->completed_time && (!ra || cupsArrayFind(ra, "date-time-at-completed")))
+ ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed_time));
+
+ if (job->creation_time && (!ra || cupsArrayFind(ra, "date-time-at-creation")))
+ ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(job->creation_time));
+
if (!ra || cupsArrayFind(ra, "job-id"))
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
if (job->completed_time && (!ra || cupsArrayFind(ra, "time-at-completed")))
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-completed", (int)job->completed_time);
- if (job->completed_time && (!ra || cupsArrayFind(ra, "time-at-creation")))
+ if (job->creation_time && (!ra || cupsArrayFind(ra, "time-at-creation")))
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)job->creation_time);
}
}
"printer-alert-description", NULL,
printer->alert_description);
+ if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+ ippAddDate(con->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+ "printer-config-change-time", printer->config_time);
+
if (!ra || cupsArrayFind(ra, "printer-current-time"))
ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time",
ippTimeToDate(curtime));
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
printer->state);
+ if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+ ippAddDate(con->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"printer-state-change-time", printer->state_time);
* Return a list of attributes that can be set via Set-Printer-Attributes.
*/
+ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+ "printer-geo-location", 0);
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
"printer-info", 0);
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
"printer-location", 0);
+ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+ "printer-organization", 0);
+ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+ "printer-organizational-unit", 0);
con->response->request.status.status_code = IPP_OK;
}
ipp_attribute_t *uri) /* I - Printer URI */
{
ipp_attribute_t *attr; /* Current attribute */
+ ipp_attribute_t *doc_name; /* document-name attribute */
ipp_attribute_t *format; /* Document-format attribute */
const char *default_format; /* document-format-default value */
cupsd_job_t *job; /* New job */
* Is it a format we support?
*/
+ doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME);
+ if (doc_name)
+ ippSetName(con->request, &doc_name, "document-name-supplied");
+
if ((format = ippFindAttribute(con->request, "document-format",
IPP_TAG_MIMETYPE)) != NULL)
{
format->values[0].string.text);
return;
}
+
+ ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL));
}
else if ((default_format = cupsGetOption("document-format",
printer->num_options,
* Auto-type the file...
*/
- ipp_attribute_t *doc_name; /* document-name attribute */
-
-
cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job ???] Auto-typing file...");
- doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME);
+
filetype = mimeFileType(MimeDatabase, con->filename,
doc_name ? doc_name->values[0].string.text : NULL,
&compression);
cupsdLogMessage(CUPSD_LOG_INFO, "[Job ???] Request file type is %s/%s.",
filetype->super, filetype->type);
+
+ snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type);
+ ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype);
}
else
filetype = mimeType(MimeDatabase, super, type);
if (add_file(con, job, filetype, compression))
return;
- snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id,
- job->num_files);
- rename(con->filename, filename);
+ snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files);
+ if (rename(con->filename, filename))
+ {
+ cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno));
+
+ send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file."));
+ return;
+ }
+
cupsdClearString(&con->filename);
/*
if (attr->group_tag != IPP_TAG_JOB || !attr->name)
continue;
- if (!strcmp(attr->name, "job-originating-host-name") ||
- !strcmp(attr->name, "job-originating-user-name") ||
+ if (!strncmp(attr->name, "date-time-at-", 13) ||
+ !strcmp(attr->name, "job-impressions-completed") ||
!strcmp(attr->name, "job-media-sheets-completed") ||
- !strcmp(attr->name, "job-k-octets") ||
+ !strncmp(attr->name, "job-k-octets", 12) ||
!strcmp(attr->name, "job-id") ||
+ !strcmp(attr->name, "job-originating-host-name") ||
+ !strcmp(attr->name, "job-originating-user-name") ||
+ !strcmp(attr->name, "job-pages-completed") ||
+ !strcmp(attr->name, "job-printer-uri") ||
!strncmp(attr->name, "job-state", 9) ||
+ !strcmp(attr->name, "job-uri") ||
!strncmp(attr->name, "time-at-", 8))
continue; /* Read-only attrs */
* Is it a format we support?
*/
+ cupsdLoadJob(job);
+
if ((format = ippFindAttribute(con->request, "document-format",
IPP_TAG_MIMETYPE)) != NULL)
{
format->values[0].string.text);
return;
}
+
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL));
}
else if ((default_format = cupsGetOption("document-format",
printer->num_options,
if (filetype)
cupsdLogJob(job, CUPSD_LOG_DEBUG, "Request file type is %s/%s.",
filetype->super, filetype->type);
+
+ snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype);
}
else
filetype = mimeType(MimeDatabase, super, type);
* Add the file to the job...
*/
- cupsdLoadJob(job);
-
if (add_file(con, job, filetype, compression))
return;
+ if ((attr = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME)) != NULL)
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
if (stat(con->filename, &fileinfo))
kbytes = 0;
else
if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL)
attr->values[0].integer += kbytes;
- snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id,
- job->num_files);
- rename(con->filename, filename);
+ snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files);
+ if (rename(con->filename, filename))
+ {
+ cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno));
+
+ send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file."));
+ return;
+ }
cupsdClearString(&con->filename);
if (!strcmp(attr->name, "attributes-charset") ||
!strcmp(attr->name, "attributes-natural-language") ||
- !strcmp(attr->name, "document-compression") ||
- !strcmp(attr->name, "document-format") ||
+ !strncmp(attr->name, "date-time-at-", 13) ||
+ !strncmp(attr->name, "document-compression", 20) ||
+ !strncmp(attr->name, "document-format", 15) ||
!strcmp(attr->name, "job-detailed-status-messages") ||
!strcmp(attr->name, "job-document-access-errors") ||
!strcmp(attr->name, "job-id") ||
!strcmp(attr->name, "job-impressions-completed") ||
- !strcmp(attr->name, "job-k-octets") ||
+ !strcmp(attr->name, "job-k-octets-completed") ||
+ !strcmp(attr->name, "job-media-sheets-completed") ||
!strcmp(attr->name, "job-originating-host-name") ||
!strcmp(attr->name, "job-originating-user-name") ||
+ !strcmp(attr->name, "job-pages-completed") ||
!strcmp(attr->name, "job-printer-up-time") ||
!strcmp(attr->name, "job-printer-uri") ||
!strcmp(attr->name, "job-sheets") ||
!strcmp(attr->name, "number-of-documents") ||
!strcmp(attr->name, "number-of-intervening-jobs") ||
!strcmp(attr->name, "output-device-assigned") ||
- !strncmp(attr->name, "date-time-at-", 13) ||
- !strncmp(attr->name, "job-k-octets", 12) ||
- !strncmp(attr->name, "job-media-sheets", 16) ||
!strncmp(attr->name, "time-at-", 8))
{
/*
changed = 1;
}
+ if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+ {
+ cupsdSetString(&printer->geo_location, attr->values[0].string.text);
+ changed = 1;
+ }
+
+ if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+ {
+ cupsdSetString(&printer->organization, attr->values[0].string.text);
+ changed = 1;
+ }
+
+ if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+ {
+ cupsdSetString(&printer->organizational_unit, attr->values[0].string.text);
+ changed = 1;
+ }
+
if ((attr = ippFindAttribute(con->request, "printer-info",
IPP_TAG_TEXT)) != NULL)
{
if (changed)
{
+ printer->config_time = time(NULL);
+
cupsdSetPrinterAttrs(printer);
cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
/*
- * End of "$Id: ipp.c 12778 2015-07-07 17:28:51Z msweet $".
+ * End of "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $".
*/
/*
- * "$Id: job.c 12778 2015-07-07 17:28:51Z msweet $"
+ * "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $"
*
* Job management routines for the CUPS scheduler.
*
- * 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
"Job canceled by user.");
}
}
+
+ cupsdCheckJobs();
}
* Start the job...
*/
- cupsArraySave(ActiveJobs);
start_job(job, printer);
- cupsArrayRestore(ActiveJobs);
}
}
}
cupsdLoadAllJobs(void)
{
char filename[1024]; /* Full filename of job.cache file */
- struct stat fileinfo, /* Information on job.cache file */
- dirinfo; /* Information on RequestRoot dir */
-
+ struct stat fileinfo; /* Information on job.cache file */
+ cups_dir_t *dir; /* RequestRoot dir */
+ cups_dentry_t *dent; /* Entry in RequestRoot */
+ int load_cache = 1; /* Load the job.cache file? */
/*
if (stat(filename, &fileinfo))
{
- fileinfo.st_mtime = 0;
+ /*
+ * No job.cache file...
+ */
+
+ load_cache = 0;
if (errno != ENOENT)
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to get file information for \"%s\" - %s",
filename, strerror(errno));
}
+ else if ((dir = cupsDirOpen(RequestRoot)) == NULL)
+ {
+ /*
+ * No spool directory...
+ */
- if (stat(RequestRoot, &dirinfo))
+ load_cache = 0;
+ }
+ else
{
- dirinfo.st_mtime = 0;
+ while ((dent = cupsDirRead(dir)) != NULL)
+ {
+ if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c' && dent->fileinfo.st_mtime > fileinfo.st_mtime)
+ {
+ /*
+ * Job history file is newer than job.cache file...
+ */
- if (errno != ENOENT)
- cupsdLogMessage(CUPSD_LOG_ERROR,
- "Unable to get directory information for \"%s\" - %s",
- RequestRoot, strerror(errno));
+ load_cache = 0;
+ break;
+ }
+ }
+
+ cupsDirClose(dir);
}
/*
* Load the most recent source for job data...
*/
- if (dirinfo.st_mtime > fileinfo.st_mtime)
+ if (load_cache)
+ {
+ /*
+ * Load the job.cache file...
+ */
+
+ load_job_cache(filename);
+ }
+ else
{
+ /*
+ * Load the job history files...
+ */
+
load_request_root();
load_next_job_id(filename);
}
- else
- load_job_cache(filename);
/*
* Clean out old jobs as needed...
ippSetString(job->attrs, &job->reasons, 0, "none");
}
- job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed",
- IPP_TAG_INTEGER);
- job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
+ job->impressions = ippFindAttribute(job->attrs, "job-impressions-completed", IPP_TAG_INTEGER);
+ job->sheets = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER);
+ job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
+
+ if (!job->impressions)
+ job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0);
if (!job->priority)
{
job->printer->job = NULL;
job->printer = NULL;
+
+ /*
+ * Try printing another job...
+ */
+
+ if (printer_state != IPP_PRINTER_STOPPED)
+ cupsdCheckJobs();
}
set_time(cupsd_job_t *job, /* I - Job to update */
const char *name) /* I - Name of attribute */
{
+ char date_name[128]; /* date-time-at-xxx */
ipp_attribute_t *attr; /* Time attribute */
time_t curtime; /* Current time */
attr->values[0].integer = curtime;
}
+ snprintf(date_name, sizeof(date_name), "date-%s", name);
+
+ if ((attr = ippFindAttribute(job->attrs, date_name, IPP_TAG_ZERO)) != NULL)
+ {
+ attr->value_tag = IPP_TAG_DATE;
+ ippSetDate(job->attrs, &attr, 0, ippTimeToDate(curtime));
+ }
+
if (!strcmp(name, "time-at-completed"))
{
job->completed_time = curtime;
job->attrs = NULL;
job->state = NULL;
job->reasons = NULL;
+ job->impressions = NULL;
job->sheets = NULL;
job->job_sheets = NULL;
job->printer_message = NULL;
*ptr; /* Pointer update... */
int loglevel, /* Log level for message */
event = 0; /* Events? */
- cupsd_printer_t *printer = job->printer;
- /* Printer */
static const char * const levels[] = /* Log levels */
{
"NONE",
cupsdLogJob(job, CUPSD_LOG_DEBUG, "PAGE: %s", message);
+ if (job->impressions)
+ {
+ if (!_cups_strncasecmp(message, "total ", 6))
+ {
+ /*
+ * Got a total count of pages from a backend or filter...
+ */
+
+ copies = atoi(message + 6);
+ copies -= ippGetInteger(job->impressions, 0); /* Just track the delta */
+ }
+ else if (!sscanf(message, "%*d%d", &copies))
+ copies = 1;
+
+ ippSetInteger(job->attrs, &job->impressions, 0, ippGetInteger(job->impressions, 0) + copies);
+ job->dirty = 1;
+ cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+ }
+
if (job->sheets)
{
if (!_cups_strncasecmp(message, "total ", 6))
*/
copies = atoi(message + 6);
- copies -= job->sheets->values[0].integer; /* Just track the delta */
+ copies -= ippGetInteger(job->sheets, 0); /* Just track the delta */
}
else if (!sscanf(message, "%*d%d", &copies))
copies = 1;
- job->sheets->values[0].integer += copies;
+ ippSetInteger(job->attrs, &job->sheets, 0, ippGetInteger(job->sheets, 0) + copies);
+ job->dirty = 1;
+ cupsdMarkDirty(CUPSD_DIRTY_JOBS);
if (job->printer->page_limit)
cupsdUpdateQuota(job->printer, job->username, copies, 0);
cupsdLogPage(job, message);
if (job->sheets)
- cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
- "Printed %d page(s).", job->sheets->values[0].integer);
+ cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, "Printed %d page(s).", ippGetInteger(job->sheets, 0));
}
else if (loglevel == CUPSD_LOG_JOBSTATE)
{
finalize_job(job, 1);
/*
- * Try printing another job...
+ * Check for new jobs...
*/
- if (printer->state != IPP_PRINTER_STOPPED)
- cupsdCheckJobs();
+ cupsdCheckJobs();
}
}
/*
- * End of "$Id: job.c 12778 2015-07-07 17:28:51Z msweet $".
+ * End of "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $".
*/
/*
- * "$Id: job.h 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: job.h 12668 2015-05-27 19:30:32Z msweet $"
*
* Print job definitions for the CUPS scheduler.
*
- * 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
int num_files; /* Number of files in job */
mime_type_t **filetypes; /* File types */
int *compressions; /* Compression status of each file */
- ipp_attribute_t *sheets; /* job-media-sheets-completed */
+ ipp_attribute_t *impressions, /* job-impressions-completed */
+ *sheets; /* job-media-sheets-completed */
time_t access_time, /* Last access time */
cancel_time, /* When to cancel/send SIGTERM */
creation_time, /* When job was created */
/*
- * End of "$Id: job.h 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: job.h 12668 2015-05-27 19:30:32Z msweet $".
*/
/*
- * "$Id: log.c 11920 2014-06-11 19:03:59Z msweet $"
+ * "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $"
*
* Log file routines for the CUPS scheduler.
*
- * 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
#include "cupsd.h"
#include <stdarg.h>
+#ifdef HAVE_ASL_H
+# include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+# define SD_JOURNAL_SUPPRESS_LOCATION
+# include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
#include <syslog.h>
+/*
+ * Constants for log keys from PWG 5110.3 (PWG Common Log Format)...
+ */
+
+#define PWG_DeviceUUID "DUU"
+#define PWG_Event "E"
+#define PWG_LogNaturalLanguage "NL"
+#define PWG_Status "S"
+#define PWG_ServiceURI "URI"
+#define PWG_UserHost "UH"
+#define PWG_UserName "UN"
+#define PWG_UserURI "UU"
+#define PWG_ServiceIsAcceptingJobs "IAJ"
+#define PWG_ServiceState "ST"
+#define PWG_ServiceStateReasons "SR"
+#define PWG_ServiceUUID "SUU"
+#define PWG_JobID "JID"
+#define PWG_JobUUID "JUU"
+#define PWG_JobImagesCompleted "JIM"
+#define PWG_JobImpressionsCompleted "JIC"
+#define PWG_JobDestinationURI "JD"
+#define PWG_JobState "JS"
+#define PWG_JobStateReasons "JR"
+#define PWG_JobAccountingID "JA"
+#define PWG_JobAcountingUserName "JAUN"
+#define PWG_JobAccountingUserURI "JAUU"
+
+
/*
* Local globals...
*/
static size_t log_linesize = 0; /* Size of line for output file */
static char *log_line = NULL; /* Line for output file */
-#ifdef HAVE_VSYSLOG
-static const int syslevels[] = /* SYSLOG levels... */
+#ifdef HAVE_ASL_H
+static const int log_levels[] = /* ASL levels... */
+ {
+ ASL_LEVEL_EMERG,
+ ASL_LEVEL_EMERG,
+ ASL_LEVEL_ALERT,
+ ASL_LEVEL_CRIT,
+ ASL_LEVEL_ERR,
+ ASL_LEVEL_WARNING,
+ ASL_LEVEL_NOTICE,
+ ASL_LEVEL_INFO,
+ ASL_LEVEL_DEBUG,
+ ASL_LEVEL_DEBUG
+ };
+#elif defined(HAVE_VSYSLOG) || defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+static const int log_levels[] = /* SYSLOG levels... */
{
0,
LOG_EMERG,
LOG_DEBUG,
LOG_DEBUG
};
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
/*
if (!lf || !logname || !logname[0])
return (1);
+ /*
+ * Handle logging to stderr...
+ */
+
+ if (!strcmp(logname, "stderr"))
+ {
+ *lf = LogStderr;
+ return (1);
+ }
+
/*
* Format the filename as needed...
*/
if (*lf == NULL)
{
- syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+ asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+
+#else
+ syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
if (FatalErrors & CUPSD_FATAL_LOG)
cupsdEndProcess(getpid(), 0);
if ((*lf = cupsFileOpen(filename, "a")) == NULL)
{
- syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
- strerror(errno));
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+ asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+
+#else
+ syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
if (FatalErrors & CUPSD_FATAL_LOG)
cupsdEndProcess(getpid(), 0);
LogDebugHistory <= 0)
return (1);
+#ifdef HAVE_ASL_H
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ asl_object_t m; /* Log message */
+ char job_id[32], /* job-id string */
+ completed[32]; /* job-impressions-completed string */
+ static const char * const job_states[] =
+ { /* job-state strings */
+ "Pending",
+ "PendingHeld",
+ "Processing",
+ "ProcessingStopped",
+ "Canceled",
+ "Aborted",
+ "Completed"
+ };
+
+ snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_set(m, PWG_Event, "JobStateChanged");
+ asl_set(m, PWG_ServiceURI, job->printer->uri);
+ asl_set(m, PWG_JobID, job_id);
+ asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+ if (job->impressions)
+ {
+ snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+ asl_set(m, PWG_JobImpressionsCompleted, completed);
+ }
+
+ va_start(ap, message);
+ asl_vlog(NULL, m, log_levels[level], message, ap);
+ va_end(ap);
+
+ asl_release(m);
+ return (1);
+ }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ static const char * const job_states[] =
+ { /* job-state strings */
+ "Pending",
+ "PendingHeld",
+ "Processing",
+ "ProcessingStopped",
+ "Canceled",
+ "Aborted",
+ "Completed"
+ };
+
+ va_start(ap, message);
+
+ do
+ {
+ va_copy(ap2, ap);
+ status = format_log_line(message, ap2);
+ va_end(ap2);
+ }
+ while (status == 0);
+
+ va_end(ap);
+
+ sd_journal_send("MESSAGE=%s", log_line,
+ "PRIORITY=%i", log_levels[level],
+ PWG_Event"=JobStateChanged",
+ PWG_ServiceURI"=%s", job->printer->uri,
+ PWG_JobID"=%d", job->id,
+ PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
+ PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+ NULL);
+ return (1);
+ }
+
+#endif /* HAVE_ASL_H */
+
/*
* Format and write the log message...
*/
if ((TestConfigFile || !ErrorLog) && level <= CUPSD_LOG_WARN)
{
va_start(ap, message);
-#ifdef HAVE_VSYSLOG
- vsyslog(LOG_LPR | syslevels[level], message, ap);
+
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_vlog(NULL, m, log_levels[level], message, ap);
+ asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_printv(log_levels[level], message, ap);
+
+#elif defined(HAVE_VSYSLOG)
+ vsyslog(LOG_LPR | log_levels[level], message, ap);
+
#else
vfprintf(stderr, message, ap);
putc('\n', stderr);
#endif /* HAVE_VSYSLOG */
+
va_end(ap);
return (1);
if (level > LogLevel || !ErrorLog)
return (1);
+#ifdef HAVE_ASL_H
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+
+ va_start(ap, message);
+ asl_vlog(NULL, m, log_levels[level], message, ap);
+ va_end(ap);
+
+ asl_release(m);
+ return (1);
+ }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ sd_journal_printv(log_levels[level], message, ap);
+ return (1);
+ }
+#endif /* HAVE_ASL_H */
+
/*
* Format and write the log message...
*/
*bufptr = '\0';
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ asl_object_t m; /* Log message */
+ char job_id[32], /* job-id string */
+ completed[32]; /* job-impressions-completed string */
+ static const char * const job_states[] =
+ { /* job-state strings */
+ "Pending",
+ "PendingHeld",
+ "Processing",
+ "ProcessingStopped",
+ "Canceled",
+ "Aborted",
+ "Completed"
+ };
+
+ snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_set(m, PWG_Event, "JobStateChanged");
+ asl_set(m, PWG_ServiceURI, job->printer->uri);
+ asl_set(m, PWG_JobID, job_id);
+ asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+ if (job->impressions)
+ {
+ snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+ asl_set(m, PWG_JobImpressionsCompleted, completed);
+ }
+
+ asl_log(NULL, m, ASL_LEVEL_INFO, "%s", buffer);
+
+ asl_release(m);
+ return (1);
+ }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ static const char * const job_states[] =
+ { /* job-state strings */
+ "Pending",
+ "PendingHeld",
+ "Processing",
+ "ProcessingStopped",
+ "Canceled",
+ "Aborted",
+ "Completed"
+ };
+
+ sd_journal_send("MESSAGE=%s", buffer,
+ "PRIORITY=%i", LOG_INFO,
+ PWG_Event"=JobStateChanged",
+ PWG_ServiceURI"=%s", job->printer->uri,
+ PWG_JobID"=%d", job->id,
+ PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
+ PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+ NULL);
+ return (1);
+ }
+
+#elif defined(HAVE_VSYSLOG)
/*
* See if we are logging pages via syslog...
*/
return (1);
}
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
/*
* Not using syslog; check the log file...
}
}
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+
+ asl_log(NULL, m, ASL_LEVEL_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n",
+ con->http->hostname, con->username[0] != '\0' ? con->username : "-",
+ states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)),
+ con->http->version / 100, con->http->version % 100,
+ code, CUPS_LLCAST con->bytes,
+ con->request ?
+ ippOpString(con->request->request.op.operation_id) : "-",
+ con->response ?
+ ippErrorString(con->response->request.status.status_code) : "-");
+
+ asl_release(m);
+ return (1);
+ }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
+ return (1);
+ }
+
+#elif defined(HAVE_VSYSLOG)
/*
* See if we are logging accesses via syslog...
*/
return (1);
}
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
/*
* Not using syslog; check the log file...
};
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_INFO, "%s", message);
+
+ asl_release(m);
+ return (1);
+ }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ if (!strcmp(ErrorLog, "syslog"))
+ {
+ sd_journal_print(log_levels[level], "%s", message);
+ return (1);
+ }
+
+#elif defined(HAVE_VSYSLOG)
/*
* See if we are logging errors via syslog...
*/
if (!strcmp(ErrorLog, "syslog"))
{
- syslog(syslevels[level], "%s", message);
+ syslog(log_levels[level], "%s", message);
return (1);
}
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
/*
* Not using syslog; check the log file...
/*
- * End of "$Id: log.c 11920 2014-06-11 19:03:59Z msweet $".
+ * End of "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $".
*/
/*
- * "$Id: main.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: main.c 12700 2015-06-08 18:32:35Z msweet $"
*
* Main loop for the CUPS scheduler.
*
#define _MAIN_C_
#include "cupsd.h"
#include <sys/resource.h>
+#ifdef HAVE_ASL_H
+# include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+# define SD_JOURNAL_SUPPRESS_LOCATION
+# include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
#include <syslog.h>
#include <grp.h>
close(i);
}
}
+ else
+ LogStderr = cupsFileStderr();
/*
* Run in the background as needed...
if (!cupsdReadConfiguration())
{
- syslog(LOG_LPR, "Unable to read configuration file \'%s\' - exiting!",
- ConfigurationFile);
+#ifdef HAVE_ASL_H
+ asl_object_t m; /* Log message */
+
+ m = asl_new(ASL_TYPE_MSG);
+ asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+ asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read configuration file \"%s\" - exiting.", ConfigurationFile);
+ asl_release(m);
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+ sd_journal_print(LOG_ERR, "Unable to read configuration file \"%s\" - exiting.", ConfigurationFile);
+#else
+ syslog(LOG_LPR, "Unable to read configuration file \'%s\' - exiting.", ConfigurationFile);
+#endif /* HAVE_ASL_H */
+
break;
}
/*
- * Create or remove the systemd path file based on whether there are active
+ * Create or remove the "keep-alive" file based on whether there are active
* jobs or shared printers to advertise...
*/
if (cupsArrayCount(ActiveJobs) || /* Active jobs */
-# ifdef HAVE_SYSTEMD
WebInterface || /* Web interface enabled */
-# endif /* HAVE_SYSTEMD */
(Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)))
/* Printers being shared */
{
/*
- * End of "$Id: main.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: main.c 12700 2015-06-08 18:32:35Z msweet $".
*/
<true/>
<key>Label</key>
<string>org.cups.cups-lpd</string>
+ <key>ProcessType</key>
+ <string>Background</string>
<key>EnableTransactions</key>
- <false/>
+ <true/>
<key>EnablePressuredExit</key>
- <false/>
+ <true/>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/cups/daemon/cups-lpd</string>
<dict>
<key>Label</key>
<string>org.cups.cupsd</string>
+ <key>ProcessType</key>
+ <string>Background</string>
<key>EnableTransactions</key>
<true/>
<key>EnablePressuredExit</key>
<dict>
<key>Listeners</key>
<array>
- <dict>
- <key>SockNodeName</key>
- <string>::1</string>
- <key>SockServiceName</key>
- <string>ipp</string>
- </dict>
- <dict>
- <key>SockNodeName</key>
- <string>127.0.0.1</string>
- <key>SockServiceName</key>
- <string>ipp</string>
- </dict>
<dict>
<key>SockPathMode</key>
<integer>49663</integer>
/*
- * "$Id: printers.c 12463 2015-01-30 16:34:31Z msweet $"
+ * "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $"
*
* Printer routines for the CUPS scheduler.
*
- * 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
uuid, sizeof(uuid)));
cupsdSetDeviceURI(p, "file:///dev/null");
- p->state = IPP_PRINTER_STOPPED;
- p->state_time = time(NULL);
- p->accepting = 0;
- p->shared = DefaultShared;
- p->filetype = mimeAddType(MimeDatabase, "printer", name);
+ p->config_time = time(NULL);
+ p->state = IPP_PRINTER_STOPPED;
+ p->state_time = time(NULL);
+ p->accepting = 0;
+ p->shared = DefaultShared;
+ p->filetype = mimeAddType(MimeDatabase, "printer", name);
cupsdSetString(&p->job_sheets[0], "none");
cupsdSetString(&p->job_sheets[1], "none");
"third-shift",
"weekend"
};
+ static const char * const features[] =/* ipp-features-supported values */
+ {
+ "subscription-object"
+ };
static const char * const versions[] =/* ipp-versions-supported values */
{
"1.0",
};
static const char * const printer_settable[] =
{ /* printer-settable-attributes-supported */
+ "printer-geo-location",
"printer-info",
- "printer-location"
+ "printer-location",
+ "printer-organization",
+ "printer-organizational-unit"
};
static const char * const which_jobs[] =
{ /* which-jobs-supported values */
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
"generated-natural-language-supported", NULL, DefaultLanguage);
+ /* ipp-features-supported */
+ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
/* ipp-versions-supported */
ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
"ipp-versions-supported", sizeof(versions) / sizeof(versions[0]),
ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"multiple-operation-time-out", MultipleOperationTimeout);
+ /* multiple-operation-time-out-action */
+ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "process-job");
+
/* natural-language-configured (no IPP_TAG_COPY) */
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
"natural-language-configured", NULL, DefaultLanguage);
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
"pdl-override-supported", NULL, "attempted");
+ /* printer-get-attributes-supported */
+ ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
/* printer-op-policy-supported */
attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
"printer-op-policy-supported", cupsArrayCount(Policies),
cupsdClearString(&p->hostname);
cupsdClearString(&p->name);
cupsdClearString(&p->location);
+ cupsdClearString(&p->geo_location);
cupsdClearString(&p->make_model);
cupsdClearString(&p->info);
cupsdClearString(&p->job_sheets[0]);
if (value)
cupsdSetString(&p->location, value);
}
+ else if (!_cups_strcasecmp(line, "GeoLocation"))
+ {
+ if (value)
+ cupsdSetString(&p->geo_location, value);
+ }
+ else if (!_cups_strcasecmp(line, "Organization"))
+ {
+ if (value)
+ cupsdSetString(&p->organization, value);
+ }
+ else if (!_cups_strcasecmp(line, "OrganizationalUnit"))
+ {
+ if (value)
+ cupsdSetString(&p->organizational_unit, value);
+ }
else if (!_cups_strcasecmp(line, "DeviceURI"))
{
if (value)
if (value)
p->state_time = atoi(value);
}
+ else if (!_cups_strcasecmp(line, "ConfigTime"))
+ {
+ /*
+ * Set the config time...
+ */
+
+ if (value)
+ p->config_time = atoi(value);
+ }
else if (!_cups_strcasecmp(line, "Accepting"))
{
/*
else if (!_cups_strcasecmp(line, "ErrorPolicy"))
{
if (value)
- cupsdSetString(&p->error_policy, value);
+ {
+ if (strcmp(value, "retry-current-job") &&
+ strcmp(value, "abort-job") &&
+ strcmp(value, "retry-job") &&
+ strcmp(value, "stop-printer"))
+ cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\" on line %d or printers.conf.", ErrorPolicy, linenum);
+ else
+ cupsdSetString(&p->error_policy, value);
+ }
else
- cupsdLogMessage(CUPSD_LOG_ERROR,
- "Syntax error on line %d of printers.conf.", linenum);
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum);
}
else if (!_cups_strcasecmp(line, "Attribute") && value)
{
if (printer->location)
cupsFilePutConf(fp, "Location", printer->location);
+ if (printer->geo_location)
+ cupsFilePutConf(fp, "GeoLocation", printer->geo_location);
+
if (printer->make_model)
cupsFilePutConf(fp, "MakeModel", printer->make_model);
+ if (printer->organization)
+ cupsFilePutConf(fp, "Organization", printer->organization);
+
+ if (printer->organizational_unit)
+ cupsFilePutConf(fp, "OrganizationalUnit", printer->organizational_unit);
+
cupsFilePutConf(fp, "DeviceURI", printer->device_uri);
if (printer->port_monitor)
{
cupsFilePuts(fp, "State Stopped\n");
- if (printer->state_message)
+ if (printer->state_message[0])
cupsFilePutConf(fp, "StateMessage", printer->state_message);
}
else
cupsFilePuts(fp, "State Idle\n");
cupsFilePrintf(fp, "StateTime %d\n", (int)printer->state_time);
+ cupsFilePrintf(fp, "ConfigTime %d\n", (int)printer->config_time);
for (i = 0; i < printer->num_reasons; i ++)
if (strcmp(printer->reasons[i], "connecting-to-device") &&
}
free(temp);
+
+ /*
+ * Update the printer-supply and printer-supply-description, as needed...
+ */
+
+ if (!strcmp(name, "marker-names"))
+ {
+ ipp_attribute_t *supply_desc = ippFindAttribute(p->attrs, "printer-supply-description", IPP_TAG_TEXT);
+ /* printer-supply-description attribute */
+
+ if (supply_desc != NULL)
+ ippDeleteAttribute(p->attrs, supply_desc);
+
+ supply_desc = ippCopyAttribute(p->attrs, attr, 0);
+ ippSetName(p->attrs, &supply_desc, "printer-supply-description");
+ ippSetValueTag(p->attrs, &supply_desc, IPP_TAG_TEXT);
+ }
+ else if (!strcmp(name, "marker-colors") || !strcmp(name, "marker-levels") || !strcmp(name, "marker-types"))
+ {
+ char buffer[256], /* printer-supply values */
+ pstype[64], /* printer-supply type value */
+ *psptr; /* Pointer into type */
+ const char *color, /* marker-colors value */
+ *type; /* marker-types value */
+ int level; /* marker-levels value */
+ ipp_attribute_t *colors = ippFindAttribute(p->attrs, "marker-colors", IPP_TAG_NAME);
+ /* marker-colors attribute */
+ ipp_attribute_t *levels = ippFindAttribute(p->attrs, "marker-levels", IPP_TAG_INTEGER);
+ /* marker-levels attribute */
+ ipp_attribute_t *types = ippFindAttribute(p->attrs, "marker-types", IPP_TAG_KEYWORD);
+ /* marker-types attribute */
+ ipp_attribute_t *supply = ippFindAttribute(p->attrs, "printer-supply", IPP_TAG_STRING);
+ /* printer-supply attribute */
+
+ if (supply != NULL)
+ {
+ ippDeleteAttribute(p->attrs, supply);
+ supply = NULL;
+ }
+
+ if (!colors || !levels || !types)
+ return;
+
+ count = ippGetCount(colors);
+ if (count != ippGetCount(levels) || count != ippGetCount(types))
+ return;
+
+ for (i = 0; i < count; i ++)
+ {
+ color = ippGetString(colors, i, NULL);
+ level = ippGetInteger(levels, i);
+ type = ippGetString(types, i, NULL);
+
+ for (psptr = pstype; *type && psptr < (pstype + sizeof(pstype) - 1); type ++)
+ if (*type == '-')
+ {
+ type ++;
+ *psptr++ = (char)toupper(*type & 255);
+ }
+ else
+ *psptr++ = *type;
+ *psptr = '\0';
+
+ snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, strncmp(pstype, "waste", 5) ? "supplyThatIsConsumed" : "receptacleThatIsFilled", pstype, level, color);
+
+ if (!i)
+ supply = ippAddOctetString(p->attrs, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer));
+ else
+ ippSetOctetString(p->attrs, &supply, i, buffer, (int)strlen(buffer));
+ }
+ }
}
p->name);
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
NULL, p->location ? p->location : "");
+ if (p->geo_location)
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-geo-location", NULL, p->geo_location);
+ else
+ ippAddOutOfBand(p->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location");
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
NULL, p->info ? p->info : "");
- ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL,
- p->uuid);
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organization", NULL, p->organization ? p->organization : "");
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organizational-unit", NULL, p->organizational_unit ? p->organizational_unit : "");
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, p->uuid);
if (cupsArrayCount(p->users) > 0)
{
filter;
filter = (mime_filter_t *)cupsArrayNext(MimeDatabase->filters))
{
- if (filter->dst == p->filetype && filter->filter &&
- strstr(filter->filter, "PrintJobMgr"))
+ if (filter->dst == p->filetype && strstr(filter->filter, "PrintJobMgr"))
break;
}
"pages-per-minute-color", 1);
}
+ if ((ppd_attr = ppdFindAttr(ppd, "1284DeviceId", NULL)) != NULL)
+ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-device-id", NULL, ppd_attr->value);
+
num_qualities = 0;
if ((output_mode = ppdFindOption(ppd, "OutputMode")) != NULL)
/*
- * End of "$Id: printers.c 12463 2015-01-30 16:34:31Z msweet $".
+ * End of "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $".
*/
/*
- * "$Id: printers.h 11377 2013-11-05 01:05:00Z msweet $"
+ * "$Id: printers.h 12666 2015-05-25 19:38:09Z msweet $"
*
* Printer definitions for the CUPS scheduler.
*
*uuid, /* Printer UUID */
*hostname, /* Host printer resides on */
*name, /* Printer name */
- *location, /* Location code */
+ *location, /* Location string */
+ *geo_location, /* Geographic location URI */
*make_model, /* Make and model */
*info, /* Description */
+ *organization, /* Organization name */
+ *organizational_unit, /* Organizational unit (department, etc.) */
*op_policy, /* Operation policy name */
*error_policy; /* Error policy */
cupsd_policy_t *op_policy_ptr; /* Pointer to operation policy */
char state_message[1024]; /* Printer state message */
int num_reasons; /* Number of printer-state-reasons */
char *reasons[64]; /* printer-state-reasons strings */
- time_t state_time; /* Time at this state */
+ time_t config_time, /* Time at this configuration */
+ state_time; /* Time at this state */
char *job_sheets[2]; /* Banners/job sheets */
cups_ptype_t type; /* Printer type (color, small, etc.) */
char *device_uri; /* Device URI */
/*
- * End of "$Id: printers.h 11377 2013-11-05 01:05:00Z msweet $".
+ * End of "$Id: printers.h 12666 2015-05-25 19:38:09Z msweet $".
*/
/*
- * "$Id: process.c 12522 2015-02-17 20:01:33Z msweet $"
+ * "$Id: process.c 12521 2015-02-17 20:00:17Z msweet $"
*
* Process management routines for the CUPS scheduler.
*
/*
- * End of "$Id: process.c 12522 2015-02-17 20:01:33Z msweet $".
+ * End of "$Id: process.c 12521 2015-02-17 20:00:17Z msweet $".
*/
/*
- * "$Id: server.c 11576 2014-02-11 15:06:01Z msweet $"
+ * "$Id: server.c 12689 2015-06-03 19:49:54Z msweet $"
*
* Server start/stop routines for the CUPS scheduler.
*
if (AccessFile != NULL)
{
- cupsFileClose(AccessFile);
+ if (AccessFile != LogStderr)
+ cupsFileClose(AccessFile);
AccessFile = NULL;
}
if (ErrorFile != NULL)
{
- cupsFileClose(ErrorFile);
+ if (ErrorFile != LogStderr)
+ cupsFileClose(ErrorFile);
ErrorFile = NULL;
}
if (PageFile != NULL)
{
- cupsFileClose(PageFile);
+ if (PageFile != LogStderr)
+ cupsFileClose(PageFile);
PageFile = NULL;
}
/*
- * End of "$Id: server.c 11576 2014-02-11 15:06:01Z msweet $".
+ * End of "$Id: server.c 12689 2015-06-03 19:49:54Z msweet $".
*/
/*
- * "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $"
+ * "$Id: sysman.c 12236 2014-11-03 04:08:41Z msweet $"
*
* System management functions for the CUPS scheduler.
*
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor: IOPSGetTimeRemainingEstimate=%f", IOPSGetTimeRemainingEstimate());
ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited;
- notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
+ notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { (void)t;
+ ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
}
/*
- * End of "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $".
+ * End of "$Id: sysman.c 12236 2014-11-03 04:08:41Z msweet $".
*/
/*
- * "$Id: testlpd.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: testlpd.c 12644 2015-05-19 21:22:35Z msweet $"
*
* cups-lpd test program for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
* Copyright 2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* Send the "send short status" command...
*/
- if (args)
+ if (args[0])
snprintf(command, sizeof(command), "\004%s %s\n", dest, args[0]);
else
snprintf(command, sizeof(command), "\004%s\n", dest);
* Send the "send short status" command...
*/
- if (args)
+ if (args[0])
snprintf(command, sizeof(command), "\003%s %s\n", dest, args[0]);
else
snprintf(command, sizeof(command), "\003%s\n", dest);
/*
- * End of "$Id: testlpd.c 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: testlpd.c 12644 2015-05-19 21:22:35Z msweet $".
*/
/*
- * "$Id: type.c 12578 2015-03-30 19:07:29Z msweet $"
+ * "$Id: type.c 12577 2015-03-30 19:07:17Z msweet $"
*
* MIME typing routines for CUPS.
*
/*
- * End of "$Id: type.c 12578 2015-03-30 19:07:29Z msweet $".
+ * End of "$Id: type.c 12577 2015-03-30 19:07:17Z msweet $".
*/
/*
- * "$Id: cancel.c 12248 2014-11-12 16:32:57Z msweet $"
+ * "$Id: cancel.c 12247 2014-11-12 16:23:39Z msweet $"
*
* "cancel" command for CUPS.
*
/*
- * End of "$Id: cancel.c 12248 2014-11-12 16:32:57Z msweet $".
+ * End of "$Id: cancel.c 12247 2014-11-12 16:23:39Z msweet $".
*/
/*
- * "$Id: cupstestppd.c 12412 2015-01-19 15:18:02Z msweet $"
+ * "$Id: cupstestppd.c 12583 2015-04-03 00:33:05Z msweet $"
*
* PPD test program for CUPS.
*
if (!warn)
errors ++;
+
+ continue;
}
- else if (strcmp(program, "-"))
+
+ if (!strncmp(program, "maxsize(", 8))
+ {
+ char *mptr; /* Pointer into maxsize(nnnn) program */
+
+ strtoll(program + 8, &mptr, 10);
+
+ if (*mptr != ')')
+ {
+ if (!warn && !errors && !verbose)
+ _cupsLangPuts(stdout, _(" FAIL"));
+
+ if (verbose >= 0)
+ _cupsLangPrintf(stdout,
+ _(" %s Bad cupsFilter value \"%s\"."),
+ prefix, attr->value);
+
+ if (!warn)
+ errors ++;
+
+ continue;
+ }
+
+ mptr ++;
+ while (_cups_isspace(*mptr))
+ mptr ++;
+
+ _cups_strcpy(program, mptr);
+ }
+
+ if (strcmp(program, "-"))
{
if (program[0] == '/')
snprintf(pathprog, sizeof(pathprog), "%s%s", root, program);
if (!warn)
errors ++;
+
+ continue;
}
- else if (strcmp(program, "-"))
+
+ if (!strncmp(program, "maxsize(", 8))
+ {
+ char *mptr; /* Pointer into maxsize(nnnn) program */
+
+ strtoll(program + 8, &mptr, 10);
+
+ if (*mptr != ')')
+ {
+ if (!warn && !errors && !verbose)
+ _cupsLangPuts(stdout, _(" FAIL"));
+
+ if (verbose >= 0)
+ _cupsLangPrintf(stdout,
+ _(" %s Bad cupsFilter2 value \"%s\"."),
+ prefix, attr->value);
+
+ if (!warn)
+ errors ++;
+
+ continue;
+ }
+
+ mptr ++;
+ while (_cups_isspace(*mptr))
+ mptr ++;
+
+ _cups_strcpy(program, mptr);
+ }
+
+ if (strcmp(program, "-"))
{
if (strncmp(program, "maxsize(", 8) &&
(ptr = strchr(program + 8, ')')) != NULL)
/*
- * End of "$Id: cupstestppd.c 12412 2015-01-19 15:18:02Z msweet $".
+ * End of "$Id: cupstestppd.c 12583 2015-04-03 00:33:05Z msweet $".
*/
/*
- * "$Id: lpadmin.c 12604 2015-05-06 01:43:05Z msweet $"
+ * "$Id: lpadmin.c 12603 2015-05-06 01:42:51Z msweet $"
*
* "lpadmin" command for CUPS.
*
* Include necessary headers...
*/
+#define _CUPS_NO_DEPRECATED
+#define _PPD_DEPRECATED
#include <cups/cups-private.h>
static int delete_printer_option(http_t *http, char *printer,
char *option);
static int enable_printer(http_t *http, char *printer);
+static char *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
size_t urisize);
static int set_printer_options(http_t *http, char *printer,
*val; /* Pointer to allow/deny value */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
- char *file; /* New PPD file/interface script */
+ char *file, /* New PPD file/interface script */
+ evefile[1024] = "";
+ /* IPP Everywhere PPD */
+ const char *ppd_name, /* ppd-name value */
+ *device_uri; /* device-uri value */
_cupsSetLocale(argv);
case 'c' : /* Add printer to class */
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
case 'd' : /* Set as default destination */
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
if (printer == NULL)
{
#ifdef HAVE_SSL
- cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
+ cupsSetEncryption(HTTP_ENCRYPTION_REQUIRED);
if (http)
- httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
+ httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
#else
_cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
argv[0]);
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
case 'r' : /* Remove printer from class */
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
case 'R' : /* Remove option */
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
case 'x' : /* Delete a printer */
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(),
- cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
* Set options as needed...
*/
+ if ((ppd_name = cupsGetOption("ppd-name", num_options, options)) != NULL && !strcmp(ppd_name, "everywhere") && (device_uri = cupsGetOption("device-uri", num_options, options)) != NULL)
+ {
+ if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile))) == NULL)
+ return (1);
+
+ num_options = cupsRemoveOption("ppd-name", num_options, &options);
+ }
+
if (num_options || file)
{
if (!http)
{
- http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
+ http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
if (http == NULL)
{
return (1);
}
+ if (evefile[0])
+ unlink(evefile);
+
if (printer == NULL)
{
_cupsLangPuts(stdout,
printer, pclass));
/*
- * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
+ * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* requesting-user-name
*/
- request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/classes/%s", pclass);
response = cupsDoRequest(http, request, "/");
/*
- * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following
+ * Build a CUPS-Add-Modify-Class request, which requires the following
* attributes:
*
* attributes-charset
* member-uris
*/
- request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippDelete(response);
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
DEBUG_printf(("default_printer(%p, \"%s\")\n", http, printer));
/*
- * Build a CUPS_SET_DEFAULT request, which requires the following
+ * Build a CUPS-Set-Default request, which requires the following
* attributes:
*
* attributes-charset
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/printers/%s", printer);
- request = ippNewRequest(CUPS_SET_DEFAULT);
+ request = ippNewRequest(IPP_OP_CUPS_SET_DEFAULT);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
DEBUG_printf(("delete_printer(%p, \"%s\")\n", http, printer));
/*
- * Build a CUPS_DELETE_PRINTER request, which requires the following
+ * Build a CUPS-Delete-Printer request, which requires the following
* attributes:
*
* attributes-charset
* requesting-user-name
*/
- request = ippNewRequest(CUPS_DELETE_PRINTER);
+ request = ippNewRequest(IPP_OP_CUPS_DELETE_PRINTER);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/printers/%s", printer);
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
printer, pclass));
/*
- * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
+ * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* requesting-user-name
*/
- request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
"localhost", 0, "/classes/%s", pclass);
*/
if ((response = cupsDoRequest(http, request, "/classes/")) == NULL ||
- response->request.status.status_code == IPP_NOT_FOUND)
+ response->request.status.status_code == IPP_STATUS_ERROR_NOT_FOUND)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
if (members->num_values == 1)
{
/*
- * Build a CUPS_DELETE_CLASS request, which requires the following
+ * Build a CUPS-Delete-Class request, which requires the following
* attributes:
*
* attributes-charset
* requesting-user-name
*/
- request = ippNewRequest(CUPS_DELETE_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_DELETE_CLASS);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
else
{
/*
- * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following
+ * Build a IPP_OP_CUPS_ADD_MODIFY_CLASS request, which requires the following
* attributes:
*
* attributes-charset
* member-uris
*/
- request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
/*
- * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
+ * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
* requires the following attributes:
*
* attributes-charset
*/
if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
- request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
else
- request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer));
/*
- * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
+ * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
* require the following attributes:
*
* attributes-charset
*/
if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
- request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
else
- request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
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());
ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
- IPP_PRINTER_IDLE);
+ IPP_PSTATE_IDLE);
ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
/*
ippDelete(cupsDoRequest(http, request, "/admin/"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
}
+/*
+ * '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))
+ {
+ _cupsLangPrintf(stderr, _("%s: Unable to resolve \"%s\"."), "lpadmin", 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)
+ {
+ _cupsLangPrintf(stderr, _("%s: Bad printer URI \"%s\"."), "lpadmin", 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)
+ {
+ _cupsLangPrintf(stderr, _("%s: Unable to connect to \"%s:%d\": %s"), "lpadmin", 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))
+ _cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
+
+ ippDelete(response);
+ httpClose(http);
+
+ if (buffer[0])
+ return (buffer);
+ else
+ return (NULL);
+}
+
+
/*
* 'get_printer_type()' - Determine the printer type and URI.
*/
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, (int)urisize, "ipp", NULL, "localhost", ippPort(), "/printers/%s", printer);
- request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+ 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_KEYWORD,
options, file));
/*
- * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
- * requires the following attributes:
+ * Build a CUPS-Add-Modify-Printer or CUPS-Add-Modify-Class request,
+ * which requires the following attributes:
*
* attributes-charset
* attributes-natural-language
*/
if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
- request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
else
- request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
- "printer-uri", NULL, uri);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
- "requesting-user-name", NULL, cupsUser());
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
/*
* Add the options...
*/
- cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
- cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER);
-
- if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL)
- {
- if (!_cups_strcasecmp(protocol, "bcp"))
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
- NULL, "bcp");
- else if (!_cups_strcasecmp(protocol, "tbcp"))
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
- NULL, "tbcp");
- }
-
if (file)
ppdfile = file;
else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "raw") && num_options > 1)
options = temp;
}
}
- else if (request->request.op.operation_id == CUPS_ADD_MODIFY_PRINTER)
+ else if (request->request.op.operation_id == IPP_OP_CUPS_ADD_MODIFY_PRINTER)
ppdfile = cupsGetPPD(printer);
else
ppdfile = NULL;
- if (ppdfile != NULL)
+ cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
+ cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER);
+
+ if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL)
+ {
+ if (!_cups_strcasecmp(protocol, "bcp"))
+ ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
+ NULL, "bcp");
+ else if (!_cups_strcasecmp(protocol, "tbcp"))
+ ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
+ NULL, "tbcp");
+ }
+
+ if (ppdfile)
{
/*
* Set default options in the PPD file...
* Check the response...
*/
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
{
_cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
/*
- * End of "$Id: lpadmin.c 12604 2015-05-06 01:43:05Z msweet $".
+ * End of "$Id: lpadmin.c 12603 2015-05-06 01:42:51Z msweet $".
*/
#!/bin/sh
#
-# "$Id: 5.1-lpadmin.sh 12394 2014-12-19 15:33:36Z msweet $"
+# "$Id: 5.1-lpadmin.sh 12393 2014-12-19 15:33:22Z msweet $"
#
# Test the lpadmin command.
#
echo ""
#
-# End of "$Id: 5.1-lpadmin.sh 12394 2014-12-19 15:33:36Z msweet $".
+# End of "$Id: 5.1-lpadmin.sh 12393 2014-12-19 15:33:22Z msweet $".
#
#!/bin/sh
#
-# "$Id: 5.4-lpstat.sh 12491 2015-02-06 18:46:09Z msweet $"
+# "$Id: 5.4-lpstat.sh 12490 2015-02-06 18:45:48Z msweet $"
#
# Test the lpstat command.
#
echo ""
#
-# End of "$Id: 5.4-lpstat.sh 12491 2015-02-06 18:46:09Z msweet $".
+# End of "$Id: 5.4-lpstat.sh 12490 2015-02-06 18:45:48Z msweet $".
#
../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \
../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \
../cups/ppd-private.h ../cups/ppd.h ../cups/thread-private.h
-ippserver.o: ippserver.c ../cups/cups.h ../cups/file.h \
+ippinfra.o: ippinfra.c ../config.h ../cups/cups.h ../cups/file.h \
../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
- ../cups/language.h ../cups/pwg.h ../config.h ../cups/thread-private.h
+ ../cups/language.h ../cups/pwg.h ../cups/string-private.h \
+ ../cups/thread-private.h
+ippproxy.o: ippproxy.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \
+ ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \
+ ../cups/pwg.h
+ippserver.o: ippserver.c ../config.h ../cups/cups.h ../cups/file.h \
+ ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
+ ../cups/language.h ../cups/pwg.h ../cups/string-private.h \
+ ../cups/thread-private.h
ipptool.o: ipptool.c ../cups/cups-private.h ../cups/string-private.h \
../config.h ../cups/debug-private.h ../cups/versioning.h \
../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \
#
-# "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $"
+# "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $"
#
# IPP test makefile for CUPS.
#
-# Copyright 2007-2013 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
# Copyright 1997-2006 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
validate-job.test
OBJS = \
ippfind.o \
+ ippinfra.o \
+ ippproxy.o \
ippserver.o \
ipptool.o \
xmltotest.o
#
clean:
- $(RM) $(TARGETS) $(OBJS) ippfind-static
+ $(RM) $(TARGETS) $(OBJS) ippfind-static ippinfra ippinfra-shared ippproxy ippproxy-shared ippserver-shared
#
$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+#
+# ippinfra
+#
+
+ippinfra: ippinfra.o ../cups/$(LIBCUPSSTATIC)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ ippinfra.o ../cups/$(LIBCUPSSTATIC) \
+ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+
+
+#
+# ippinfra-shared
+#
+
+ippinfra-shared: ippinfra.o ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ ippinfra.o $(LIBS)
+
+
+#
+# ippproxy
+#
+
+ippproxy: ippproxy.o ../cups/$(LIBCUPSSTATIC)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ ippproxy.o ../cups/$(LIBCUPSSTATIC) \
+ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+
+
+#
+# ippproxy-shared
+#
+
+ippproxy-shared: ippproxy.o ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ ippproxy.o $(LIBS)
+
+
#
# ippserver
#
#
-# End of "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $".
+# End of "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $".
#
#
-# "$Id: ipp-1.1.test 12663 2015-05-25 14:32:17Z msweet $"
+# "$Id: ipp-1.1.test 12661 2015-05-25 14:30:52Z msweet $"
#
# IPP/1.1 test suite.
#
#
-# End of "$Id: ipp-1.1.test 12663 2015-05-25 14:32:17Z msweet $".
+# End of "$Id: ipp-1.1.test 12661 2015-05-25 14:30:52Z msweet $".
#
/*
- * "$Id: ippfind.c 12639 2015-05-19 02:36:30Z msweet $"
+ * "$Id: ippfind.c 12638 2015-05-19 02:36:15Z msweet $"
*
* Utility to find IPP printers via Bonjour/DNS-SD and optionally run
* commands such as IPP and Bonjour conformance tests. This tool is
strlcpy(tptr, scheme + 22, sizeof(temp) - (size_t)(tptr - temp));
else if (!strncmp(keyword, "txt_", 4))
{
- const char *txt = cupsGetOption(keyword + 4, service->num_txt, service->txt);
- if (txt)
- strlcpy(tptr, txt, sizeof(temp) - (size_t)(tptr - temp));
+ const char *val = cupsGetOption(keyword + 4, service->num_txt, service->txt);
+ if (val)
+ strlcpy(tptr, val, sizeof(temp) - (size_t)(tptr - temp));
else
*tptr = '\0';
}
/*
- * End of "$Id: ippfind.c 12639 2015-05-19 02:36:30Z msweet $".
+ * End of "$Id: ippfind.c 12638 2015-05-19 02:36:15Z msweet $".
*/
--- /dev/null
+/*
+ * "$Id: ippinfra.c 12237 2014-11-03 13:07:32Z msweet $"
+ *
+ * Sample IPP INFRA server for CUPS.
+ *
+ * Copyright 2010-2014 by Apple Inc.
+ *
+ * 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.
+ */
+
+/*
+ * Disable private and deprecated stuff so we can verify that the public API
+ * is sufficient to implement a server.
+ */
+
+#define _IPP_PRIVATE_STRUCTURES 0 /* Disable private IPP stuff */
+#define _CUPS_NO_DEPRECATED 1 /* Disable deprecated stuff */
+
+
+/*
+ * Include necessary headers...
+ */
+
+#include <config.h> /* CUPS configuration header */
+#include <cups/cups.h> /* Public API */
+#include <cups/string-private.h> /* CUPS string functions */
+#include <cups/thread-private.h> /* For multithreading functions */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+# include <fcntl.h>
+# include <io.h>
+# include <process.h>
+# define WEXITSTATUS(s) (s)
+# include <winsock2.h>
+typedef ULONG nfds_t;
+# define poll WSAPoll
+#else
+extern char **environ;
+
+# include <sys/fcntl.h>
+# include <sys/wait.h>
+# include <poll.h>
+#endif /* WIN32 */
+
+#ifdef HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif /* HAVE_SYS_MOUNT_H */
+#ifdef HAVE_SYS_STATFS_H
+# include <sys/statfs.h>
+#endif /* HAVE_SYS_STATFS_H */
+#ifdef HAVE_SYS_STATVFS_H
+# include <sys/statvfs.h>
+#endif /* HAVE_SYS_STATVFS_H */
+#ifdef HAVE_SYS_VFS_H
+# include <sys/vfs.h>
+#endif /* HAVE_SYS_VFS_H */
+
+#ifdef HAVE_PTHREAD_H
+typedef pthread_cond_t _cups_cond_t;
+# define _CUPS_COND_INITIALIZER PTHREAD_COND_INITIALIZER
+# define _cupsCondBroadcast(c) pthread_cond_broadcast(c)
+# define _cupsCondDeinit(c) pthread_cond_destroy(c)
+# define _cupsCondInit(c) pthread_cond_init((c), NULL)
+# define _cupsCondWait(c,m) pthread_cond_wait((c),(m))
+# define _cupsMutexDeinit(m) pthread_mutex_destroy(m)
+# define _cupsRWDeinit(rw) pthread_rwlock_destroy(rw)
+#else
+typedef char _cups_cond_t;
+# define _CUPS_COND_INITIALIZER 0
+# define _cupsCondBroadcast(c)
+# define _cupsCondDeinit(c)
+# define _cupsCondInit(c) *(c)=0
+# define _cupsCondWait(c,m) 0
+# define _cupsMutexDeinit(m)
+# define _cupsRWDeinit(rw)
+#endif /* HAVE_PTHREAD_H */
+
+
+/*
+ * Constants...
+ */
+
+/* New IPP operation codes from IPP INFRA */
+# define _IPP_OP_ACKNOWLEDGE_DOCUMENT (ipp_op_t)0x003f
+# define _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER (ipp_op_t)0x0040
+# define _IPP_OP_ACKNOWLEDGE_JOB (ipp_op_t)0x0041
+# define _IPP_OP_FETCH_DOCUMENT (ipp_op_t)0x0042
+# define _IPP_OP_FETCH_JOB (ipp_op_t)0x0043
+# define _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES (ipp_op_t)0x0044
+# define _IPP_OP_UPDATE_ACTIVE_JOBS (ipp_op_t)0x0045
+# define _IPP_OP_UPDATE_DOCUMENT_STATUS (ipp_op_t)0x0047
+# define _IPP_OP_UPDATE_JOB_STATUS (ipp_op_t)0x0048
+# define _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES (ipp_op_t)0x0049
+# define _IPP_OP_DEREGISTER_OUTPUT_DEVICE (ipp_op_t)0x204b
+
+/* New IPP status code from IPP INFRA */
+# define _IPP_STATUS_ERROR_NOT_FETCHABLE (ipp_status_t)0x0420
+
+/* Maximum lease duration value from RFC 3995 - 2^26-1 or ~2 years */
+# define _IPP_NOTIFY_LEASE_DURATION_MAX 67108863
+/* But a value of 0 means "never expires"... */
+# define _IPP_NOTIFY_LEASE_DURATION_FOREVER 0
+/* Default duration is 1 day */
+# define _IPP_NOTIFY_LEASE_DURATION_DEFAULT 86400
+
+
+/*
+ * Event mask enumeration...
+ */
+
+enum _ipp_event_e /* notify-events bit values */
+{
+ _IPP_EVENT_DOCUMENT_COMPLETED = 0x00000001,
+ _IPP_EVENT_DOCUMENT_CONFIG_CHANGED = 0x00000002,
+ _IPP_EVENT_DOCUMENT_CREATED = 0x00000004,
+ _IPP_EVENT_DOCUMENT_FETCHABLE = 0x00000008,
+ _IPP_EVENT_DOCUMENT_STATE_CHANGED = 0x00000010,
+ _IPP_EVENT_DOCUMENT_STOPPED = 0x00000020,
+ _IPP_EVENT_JOB_COMPLETED = 0x00000040,
+ _IPP_EVENT_JOB_CONFIG_CHANGED = 0x00000080,
+ _IPP_EVENT_JOB_CREATED = 0x00000100,
+ _IPP_EVENT_JOB_FETCHABLE = 0x00000200,
+ _IPP_EVENT_JOB_PROGRESS = 0x00000400,
+ _IPP_EVENT_JOB_STATE_CHANGED = 0x00000800,
+ _IPP_EVENT_JOB_STOPPED = 0x00001000,
+ _IPP_EVENT_PRINTER_CONFIG_CHANGED = 0x00002000,
+ _IPP_EVENT_PRINTER_FINISHINGS_CHANGED = 0x00004000,
+ _IPP_EVENT_PRINTER_MEDIA_CHANGED = 0x00008000,
+ _IPP_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x00010000,
+ _IPP_EVENT_PRINTER_RESTARTED = 0x00020000,
+ _IPP_EVENT_PRINTER_SHUTDOWN = 0x00040000,
+ _IPP_EVENT_PRINTER_STATE_CHANGED = 0x00080000,
+ _IPP_EVENT_PRINTER_STOPPED = 0x00100000,
+
+ /* "Wildcard" values... */
+ _IPP_EVENT_NONE = 0x00000000, /* Nothing */
+ _IPP_EVENT_DOCUMENT_ALL = 0x0000003f,
+ _IPP_EVENT_DOCUMENT_STATE_ALL = 0x00000037,
+ _IPP_EVENT_JOB_ALL = 0x00001fc0,
+ _IPP_EVENT_JOB_STATE_ALL = 0x00001940,
+ _IPP_EVENT_PRINTER_ALL = 0x001fe000,
+ _IPP_EVENT_PRINTER_CONFIG_ALL = 0x0000e000,
+ _IPP_EVENT_PRINTER_STATE_ALL = 0x001e0000,
+ _IPP_EVENT_ALL = 0x001fffff /* Everything */
+};
+typedef unsigned int _ipp_event_t; /* Bitfield for notify-events */
+#define _IPP_EVENT_DEFAULT _IPP_EVENT_JOB_COMPLETED
+#define _IPP_EVENT_DEFAULT_STRING "job-completed"
+static const char * const _ipp_events[] =
+{ /* Strings for bits */
+ "document-completed",
+ "document-config-changed",
+ "document-created",
+ "document-fetchable",
+ "document-state-changed",
+ "document-stopped",
+ "job-completed",
+ "job-config-changed",
+ "job-created",
+ "job-fetchable",
+ "job-progress",
+ "job-state-changed",
+ "job-stopped",
+ "printer-config-changed",
+ "printer-finishings-changed",
+ "printer-media-changed",
+ "printer-queue-order-changed",
+ "printer-restarted",
+ "printer-shutdown",
+ "printer-state-changed",
+ "printer-stopped"
+};
+
+enum _ipp_jreason_e /* job-state-reasons bit values */
+{
+ _IPP_JREASON_NONE = 0x00000000, /* none */
+ _IPP_JREASON_ABORTED_BY_SYSTEM = 0x00000001,
+ _IPP_JREASON_COMPRESSION_ERROR = 0x00000002,
+ _IPP_JREASON_DOCUMENT_ACCESS_ERROR = 0x00000004,
+ _IPP_JREASON_DOCUMENT_FORMAT_ERROR = 0x00000008,
+ _IPP_JREASON_DOCUMENT_PASSWORD_ERROR = 0x00000010,
+ _IPP_JREASON_DOCUMENT_PERMISSION_ERROR = 0x00000020,
+ _IPP_JREASON_DOCUMENT_SECURITY_ERROR = 0x00000040,
+ _IPP_JREASON_DOCUMENT_UNPRINTABLE_ERROR = 0x00000080,
+ _IPP_JREASON_ERRORS_DETECTED = 0x00000100,
+ _IPP_JREASON_JOB_CANCELED_AT_DEVICE = 0x00000200,
+ _IPP_JREASON_JOB_CANCELED_BY_USER = 0x00000400,
+ _IPP_JREASON_JOB_COMPLETED_SUCCESSFULLY = 0x00000800,
+ _IPP_JREASON_JOB_COMPLETED_WITH_ERRORS = 0x00001000,
+ _IPP_JREASON_JOB_COMPLETED_WITH_WARNINGS = 0x00002000,
+ _IPP_JREASON_JOB_DATA_INSUFFICIENT = 0x00004000,
+ _IPP_JREASON_JOB_FETCHABLE = 0x00008000,
+ _IPP_JREASON_JOB_INCOMING = 0x00010000,
+ _IPP_JREASON_JOB_PASSWORD_WAIT = 0x00020000,
+ _IPP_JREASON_JOB_PRINTING = 0x00040000,
+ _IPP_JREASON_JOB_QUEUED = 0x00080000,
+ _IPP_JREASON_JOB_SPOOLING = 0x00100000,
+ _IPP_JREASON_JOB_STOPPED = 0x00200000,
+ _IPP_JREASON_JOB_TRANSFORMING = 0x00400000,
+ _IPP_JREASON_PRINTER_STOPPED = 0x00800000,
+ _IPP_JREASON_PRINTER_STOPPED_PARTLY = 0x01000000,
+ _IPP_JREASON_PROCESSING_TO_STOP_POINT = 0x02000000,
+ _IPP_JREASON_QUEUED_IN_DEVICE = 0x04000000,
+ _IPP_JREASON_WARNINGS_DETECTED = 0x08000000
+};
+typedef unsigned int _ipp_jreason_t; /* Bitfield for job-state-reasons */
+static const char * const _ipp_jreasons[] =
+{ /* Strings for bits */
+ "aborted-by-system",
+ "compression-error",
+ "document-access-error",
+ "document-format-error",
+ "document-password-error",
+ "document-permission-error",
+ "document-security-error",
+ "document-unprintable-error",
+ "errors-detected",
+ "job-canceled-at-device",
+ "job-canceled-by-user",
+ "job-completed-successfully",
+ "job-completed-with-errors",
+ "job-completed-with-warnings",
+ "job-data-insufficient",
+ "job-fetchable",
+ "job-incoming",
+ "job-password-wait",
+ "job-printing",
+ "job-queued",
+ "job-spooling",
+ "job-stopped",
+ "job-transforming",
+ "printer-stopped",
+ "printer-stopped-partly",
+ "processing-to-stop-point",
+ "queued-in-device",
+ "warnings-detected"
+};
+
+enum _ipp_preason_e /* printer-state-reasons bit values */
+{
+ _IPP_PREASON_NONE = 0x0000, /* none */
+ _IPP_PREASON_OTHER = 0x0001, /* other */
+ _IPP_PREASON_COVER_OPEN = 0x0002, /* cover-open */
+ _IPP_PREASON_INPUT_TRAY_MISSING = 0x0004,
+ /* input-tray-missing */
+ _IPP_PREASON_MARKER_SUPPLY_EMPTY = 0x0008,
+ /* marker-supply-empty */
+ _IPP_PREASON_MARKER_SUPPLY_LOW = 0x0010,
+ /* marker-supply-low */
+ _IPP_PREASON_MARKER_WASTE_ALMOST_FULL = 0x0020,
+ /* marker-waste-almost-full */
+ _IPP_PREASON_MARKER_WASTE_FULL = 0x0040,
+ /* marker-waste-full */
+ _IPP_PREASON_MEDIA_EMPTY = 0x0080, /* media-empty */
+ _IPP_PREASON_MEDIA_JAM = 0x0100, /* media-jam */
+ _IPP_PREASON_MEDIA_LOW = 0x0200, /* media-low */
+ _IPP_PREASON_MEDIA_NEEDED = 0x0400, /* media-needed */
+ _IPP_PREASON_MOVING_TO_PAUSED = 0x0800,
+ /* moving-to-paused */
+ _IPP_PREASON_PAUSED = 0x1000, /* paused */
+ _IPP_PREASON_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
+ _IPP_PREASON_TONER_EMPTY = 0x4000, /* toner-empty */
+ _IPP_PREASON_TONER_LOW = 0x8000 /* toner-low */
+};
+typedef unsigned int _ipp_preason_t; /* Bitfield for printer-state-reasons */
+static const char * const _ipp_preasons[] =
+{ /* Strings for bits */
+ "other",
+ "cover-open",
+ "input-tray-missing",
+ "marker-supply-empty",
+ "marker-supply-low",
+ "marker-waste-almost-full",
+ "marker-waste-full",
+ "media-empty",
+ "media-jam",
+ "media-low",
+ "media-needed",
+ "moving-to-paused",
+ "paused",
+ "spool-area-full",
+ "toner-empty",
+ "toner-low"
+};
+
+
+/*
+ * Structures...
+ */
+
+typedef struct _ipp_filter_s /**** Attribute filter ****/
+{
+ cups_array_t *ra; /* Requested attributes */
+ ipp_tag_t group_tag; /* Group to copy */
+} _ipp_filter_t;
+
+typedef struct _ipp_job_s _ipp_job_t;
+
+typedef struct _ipp_device_s /**** Output Device data ****/
+{
+ _cups_rwlock_t rwlock; /* Printer lock */
+ char *name, /* printer-name (mapped to output-device) */
+ *uuid; /* output-device-uuid */
+ ipp_t *attrs; /* All printer attributes */
+ ipp_pstate_t state; /* printer-state value */
+ _ipp_preason_t reasons; /* printer-state-reasons values */
+} _ipp_device_t;
+
+typedef struct _ipp_printer_s /**** Printer data ****/
+{
+ _cups_rwlock_t rwlock; /* Printer lock */
+ int ipv4, /* IPv4 listener */
+ ipv6; /* IPv6 listener */
+ char *name, /* printer-name */
+ *directory, /* Spool directory */
+ *hostname, /* Hostname */
+ *uri, /* printer-uri-supported */
+ *proxy_user, /* Proxy username */
+ *proxy_pass; /* Proxy password */
+ int port; /* Port */
+ size_t urilen; /* Length of printer URI */
+ cups_array_t *devices; /* Associated devices */
+ ipp_t *attrs; /* Static attributes */
+ ipp_t *dev_attrs; /* Current device attributes */
+ time_t start_time; /* Startup time */
+ time_t config_time; /* printer-config-change-time */
+ ipp_pstate_t state, /* printer-state value */
+ dev_state; /* Current device printer-state value */
+ _ipp_preason_t state_reasons, /* printer-state-reasons values */
+ dev_reasons; /* Current device printer-state-reasons values */
+ time_t state_time; /* printer-state-change-time */
+ cups_array_t *jobs, /* Jobs */
+ *active_jobs, /* Active jobs */
+ *completed_jobs;/* Completed jobs */
+ _ipp_job_t *processing_job;/* Current processing job */
+ int next_job_id; /* Next job-id value */
+ cups_array_t *subscriptions; /* Subscriptions */
+ int next_sub_id; /* Next notify-subscription-id value */
+} _ipp_printer_t;
+
+struct _ipp_job_s /**** Job data ****/
+{
+ int id; /* job-id */
+ _cups_rwlock_t rwlock; /* Job lock */
+ const char *name, /* job-name */
+ *username, /* job-originating-user-name */
+ *format; /* document-format */
+ int priority; /* job-priority */
+ char *dev_uuid; /* output-device-uuid-assigned */
+ ipp_jstate_t state, /* job-state value */
+ dev_state; /* output-device-job-state value */
+ _ipp_jreason_t state_reasons, /* job-state-reasons values */
+ dev_state_reasons;
+ /* output-device-job-state-reasons values */
+ char *dev_state_message;
+ /* output-device-job-state-message value */
+ time_t created, /* time-at-creation value */
+ processing, /* time-at-processing value */
+ completed; /* time-at-completed value */
+ int impressions, /* job-impressions value */
+ impcompleted; /* job-impressions-completed value */
+ ipp_t *attrs; /* Attributes */
+ int cancel; /* Non-zero when job canceled */
+ char *filename; /* Print file name */
+ int fd; /* Print file descriptor */
+ _ipp_printer_t *printer; /* Printer */
+};
+
+typedef struct _ipp_subscription_s /**** Subscription data ****/
+{
+ int id; /* notify-subscription-id */
+ const char *uuid; /* notify-subscription-uuid */
+ _cups_rwlock_t rwlock; /* Subscription lock */
+ _ipp_event_t mask; /* Event mask */
+ _ipp_printer_t *printer; /* Printer */
+ _ipp_job_t *job; /* Job, if any */
+ ipp_t *attrs; /* Attributes */
+ const char *username; /* notify-subscriber-user-name */
+ int lease; /* notify-lease-duration */
+ int interval; /* notify-time-interval */
+ time_t expire; /* Lease expiration time */
+ int first_sequence, /* First notify-sequence-number in cache */
+ last_sequence; /* Last notify-sequence-number used */
+ cups_array_t *events; /* Events (ipp_t *'s) */
+ int pending_delete; /* Non-zero when the subscription is about to be deleted/canceled */
+} _ipp_subscription_t;
+
+typedef struct _ipp_client_s /**** Client data ****/
+{
+ http_t *http; /* HTTP connection */
+ ipp_t *request, /* IPP request */
+ *response; /* IPP response */
+ time_t start; /* Request start time */
+ http_state_t operation; /* Request operation */
+ ipp_op_t operation_id; /* IPP operation-id */
+ char uri[1024], /* Request URI */
+ *options; /* URI options */
+ http_addr_t addr; /* Client address */
+ char hostname[256], /* Client hostname */
+ username[32]; /* Client authenticated username */
+ _ipp_printer_t *printer; /* Printer */
+ _ipp_job_t *job; /* Current job, if any */
+ int fetch_compression,
+ /* Compress file? */
+ fetch_file; /* File to fetch */
+} _ipp_client_t;
+
+
+/*
+ * Local functions...
+ */
+
+static void add_event(_ipp_printer_t *printer, _ipp_job_t *job, _ipp_event_t event, const char *message, ...) __attribute__((__format__(__printf__, 4, 5)));
+static void check_jobs(_ipp_printer_t *printer);
+static void clean_jobs(_ipp_printer_t *printer);
+static int compare_active_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static int compare_completed_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static int compare_devices(_ipp_device_t *a, _ipp_device_t *b);
+static int compare_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static void copy_attributes(ipp_t *to, ipp_t *from, cups_array_t *ra,
+ ipp_tag_t group_tag, int quickcopy);
+static void copy_job_attributes(_ipp_client_t *client,
+ _ipp_job_t *job, cups_array_t *ra);
+static void copy_job_state_reasons(ipp_t *ipp, ipp_tag_t group_tag, _ipp_job_t *job);
+static void copy_printer_state_reasons(ipp_t *ipp, ipp_tag_t group_tag, _ipp_printer_t *printer);
+static void copy_subscription_attributes(_ipp_client_t *client, _ipp_subscription_t *sub, cups_array_t *ra);
+static _ipp_client_t *create_client(_ipp_printer_t *printer, int sock);
+static _ipp_device_t *create_device(_ipp_client_t *client);
+static _ipp_job_t *create_job(_ipp_client_t *client);
+static void create_job_filename(_ipp_printer_t *printer, _ipp_job_t *job, const char *format, char *fname, size_t fnamesize);
+static int create_listener(int family, int port);
+static _ipp_subscription_t *create_subscription(_ipp_printer_t *printer, _ipp_job_t *job, int interval, int lease, const char *username, ipp_attribute_t *notify_events, ipp_attribute_t *notify_attributes, ipp_attribute_t *notify_user_data);
+static _ipp_printer_t *create_printer(const char *servername, int port, const char *name, const char *directory, const char *proxy_user, const char *proxy_pass);
+static void debug_attributes(const char *title, ipp_t *ipp,
+ int response);
+static void delete_client(_ipp_client_t *client);
+static void delete_device(_ipp_device_t *device);
+static void delete_job(_ipp_job_t *job);
+static void delete_printer(_ipp_printer_t *printer);
+static void delete_subscription(_ipp_subscription_t *sub);
+static int filter_cb(_ipp_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr);
+static _ipp_device_t *find_device(_ipp_client_t *client);
+static _ipp_job_t *find_job(_ipp_client_t *client, int job_id);
+static _ipp_subscription_t *find_subscription(_ipp_client_t *client, int sub_id);
+static _ipp_jreason_t get_job_state_reasons_bits(ipp_attribute_t *attr);
+static _ipp_event_t get_notify_events_bits(ipp_attribute_t *attr);
+static const char *get_notify_subscribed_event(_ipp_event_t event);
+static _ipp_preason_t get_printer_state_reasons_bits(ipp_attribute_t *attr);
+static void html_escape(_ipp_client_t *client, const char *s,
+ size_t slen);
+static void html_footer(_ipp_client_t *client);
+static void html_header(_ipp_client_t *client, const char *title);
+static void html_printf(_ipp_client_t *client, const char *format, ...) __attribute__((__format__(__printf__, 2, 3)));
+static void ipp_acknowledge_document(_ipp_client_t *client);
+static void ipp_acknowledge_identify_printer(_ipp_client_t *client);
+static void ipp_acknowledge_job(_ipp_client_t *client);
+static void ipp_cancel_job(_ipp_client_t *client);
+static void ipp_cancel_my_jobs(_ipp_client_t *client);
+static void ipp_cancel_subscription(_ipp_client_t *client);
+static void ipp_close_job(_ipp_client_t *client);
+static void ipp_create_job(_ipp_client_t *client);
+static void ipp_create_xxx_subscriptions(_ipp_client_t *client);
+static void ipp_deregister_output_device(_ipp_client_t *client);
+static void ipp_fetch_document(_ipp_client_t *client);
+static void ipp_fetch_job(_ipp_client_t *client);
+static void ipp_get_document_attributes(_ipp_client_t *client);
+static void ipp_get_documents(_ipp_client_t *client);
+static void ipp_get_job_attributes(_ipp_client_t *client);
+static void ipp_get_jobs(_ipp_client_t *client);
+static void ipp_get_notifications(_ipp_client_t *client);
+static void ipp_get_output_device_attributes(_ipp_client_t *client);
+static void ipp_get_printer_attributes(_ipp_client_t *client);
+static void ipp_get_printer_supported_values(_ipp_client_t *client);
+static void ipp_get_subscription_attributes(_ipp_client_t *client);
+static void ipp_get_subscriptions(_ipp_client_t *client);
+static void ipp_identify_printer(_ipp_client_t *client);
+static void ipp_print_job(_ipp_client_t *client);
+static void ipp_print_uri(_ipp_client_t *client);
+static void ipp_renew_subscription(_ipp_client_t *client);
+static void ipp_send_document(_ipp_client_t *client);
+static void ipp_send_uri(_ipp_client_t *client);
+static void ipp_update_active_jobs(_ipp_client_t *client);
+static void ipp_update_document_status(_ipp_client_t *client);
+static void ipp_update_job_status(_ipp_client_t *client);
+static void ipp_update_output_device_attributes(_ipp_client_t *client);
+static void ipp_validate_document(_ipp_client_t *client);
+static void ipp_validate_job(_ipp_client_t *client);
+//static int parse_options(_ipp_client_t *client, cups_option_t **options);
+static void *process_client(_ipp_client_t *client);
+static int process_http(_ipp_client_t *client);
+static int process_ipp(_ipp_client_t *client);
+static void *process_job(_ipp_job_t *job);
+static int respond_http(_ipp_client_t *client, http_status_t code,
+ const char *content_coding,
+ const char *type, size_t length);
+static void respond_ipp(_ipp_client_t *client, ipp_status_t status,
+ const char *message, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+static void respond_unsupported(_ipp_client_t *client,
+ ipp_attribute_t *attr);
+static void run_printer(_ipp_printer_t *printer);
+static char *time_string(time_t tv, char *buffer, size_t bufsize);
+static void update_device_attributes_no_lock(_ipp_printer_t *printer);
+static void update_device_state_no_lock(_ipp_printer_t *printer);
+static void usage(int status) __attribute__((noreturn));
+static int valid_doc_attributes(_ipp_client_t *client);
+static int valid_job_attributes(_ipp_client_t *client);
+
+
+/*
+ * Globals...
+ */
+
+static int KeepFiles = 0,
+ Verbosity = 0;
+//static _cups_mutex_t SubscriptionMutex = _CUPS_MUTEX_INITIALIZER;
+static _cups_cond_t SubscriptionCondition = _CUPS_COND_INITIALIZER;
+
+
+/*
+ * 'main()' - Main entry to the sample infrastructure server.
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line args */
+ char *argv[]) /* I - Command-line arguments */
+{
+ int i; /* Looping var */
+ const char *opt, /* Current option character */
+ *servername = NULL, /* Server host name */
+ *name = NULL; /* Printer name */
+#ifdef HAVE_SSL
+ const char *keypath = NULL; /* Keychain path */
+#endif /* HAVE_SSL */
+ int port = 0; /* Port number (0 = auto) */
+ char directory[1024] = "", /* Spool directory */
+ hostname[1024], /* Auto-detected hostname */
+ proxy_user[256] = "", /* Proxy username */
+ *proxy_pass = NULL; /* Proxy password */
+ _ipp_printer_t *printer; /* Printer object */
+
+
+ /*
+ * Parse command-line arguments...
+ */
+
+ for (i = 1; i < argc; i ++)
+ if (argv[i][0] == '-')
+ {
+ for (opt = argv[i] + 1; *opt; opt ++)
+ {
+ switch (*opt)
+ {
+#ifdef HAVE_SSL
+ case 'K' : /* -K keypath */
+ i ++;
+ if (i >= argc)
+ usage(1);
+ keypath = argv[i];
+ break;
+#endif /* HAVE_SSL */
+
+ case 'd' : /* -d spool-directory */
+ i ++;
+ if (i >= argc)
+ usage(1);
+ strlcpy(directory, argv[i], sizeof(directory));
+ break;
+
+ case 'h' : /* -h (show help) */
+ usage(0);
+
+ case 'k' : /* -k (keep files) */
+ KeepFiles = 1;
+ break;
+
+ case 'n' : /* -n hostname */
+ i ++;
+ if (i >= argc)
+ usage(1);
+ servername = argv[i];
+ break;
+
+ case 'p' : /* -p port */
+ i ++;
+ if (i >= argc || !isdigit(argv[i][0] & 255))
+ usage(1);
+ port = atoi(argv[i]);
+ break;
+
+ case 'u' : /* -u user:pass */
+ i ++;
+ if (i >= argc)
+ usage(1);
+ strlcpy(proxy_user, argv[i], sizeof(proxy_user));
+ if ((proxy_pass = strchr(proxy_user, ':')) != NULL)
+ *proxy_pass++ = '\0';
+ break;
+
+ case 'v' : /* -v (be verbose) */
+ Verbosity ++;
+ break;
+
+ default : /* Unknown */
+ fprintf(stderr, "Unknown option \"-%c\".\n", *opt);
+ usage(1);
+ }
+ }
+ }
+ else if (!name)
+ {
+ name = argv[i];
+ }
+ else
+ {
+ fprintf(stderr, "Unexpected command-line argument \"%s\"\n", argv[i]);
+ usage(1);
+ }
+
+ if (!name)
+ usage(1);
+
+ /*
+ * Apply defaults as needed...
+ */
+
+ if (!servername)
+ servername = httpGetHostname(NULL, hostname, sizeof(hostname));
+
+ if (!port)
+ {
+#ifdef WIN32
+ /*
+ * Windows is almost always used as a single user system, so use a default port
+ * number of 8631.
+ */
+
+ port = 8631;
+
+#else
+ /*
+ * Use 8000 + UID mod 1000 for the default port number...
+ */
+
+ port = 8000 + ((int)getuid() % 1000);
+#endif /* WIN32 */
+
+ fprintf(stderr, "Listening on port %d.\n", port);
+ }
+
+ if (!directory[0])
+ {
+ snprintf(directory, sizeof(directory), "/tmp/ippserver.%d", (int)getpid());
+
+ if (mkdir(directory, 0777) && errno != EEXIST)
+ {
+ fprintf(stderr, "Unable to create spool directory \"%s\": %s\n",
+ directory, strerror(errno));
+ usage(1);
+ }
+
+ if (Verbosity)
+ fprintf(stderr, "Using spool directory \"%s\".\n", directory);
+ }
+
+ if (!proxy_user[0])
+ {
+ strlcpy(proxy_user, "test", sizeof(proxy_user));
+
+ if (Verbosity)
+ fputs("Using proxy username \"test\".\n", stderr);
+ }
+
+ if (!proxy_pass)
+ {
+ proxy_pass = "test123";
+
+ if (Verbosity)
+ fputs("Using proxy password \"test123\".\n", stderr);
+ }
+
+#ifdef HAVE_SSL
+ cupsSetServerCredentials(keypath, servername, 1);
+#endif /* HAVE_SSL */
+
+ /*
+ * Create the printer...
+ */
+
+ if ((printer = create_printer(servername, port, name, directory, proxy_user, proxy_pass)) == NULL)
+ return (1);
+
+ /*
+ * Run the print service...
+ */
+
+ run_printer(printer);
+
+ /*
+ * Destroy the printer and exit...
+ */
+
+ delete_printer(printer);
+
+ return (0);
+}
+
+
+/*
+ * 'add_event()' - Add an event to a subscription.
+ */
+
+static void
+add_event(_ipp_printer_t *printer, /* I - Printer */
+ _ipp_job_t *job, /* I - Job, if any */
+ _ipp_event_t event, /* I - Event */
+ const char *message, /* I - Printf-style notify-text message */
+ ...) /* I - Additional printf arguments */
+{
+ _ipp_subscription_t *sub; /* Current subscription */
+ ipp_t *n; /* Notify attributes */
+ char text[1024]; /* notify-text value */
+ va_list ap; /* Argument pointer */
+
+
+ va_start(ap, message);
+ vsnprintf(text, sizeof(text), message, ap);
+ va_end(ap);
+
+ for (sub = (_ipp_subscription_t *)cupsArrayFirst(printer->subscriptions);
+ sub;
+ sub = (_ipp_subscription_t *)cupsArrayNext(printer->subscriptions))
+ {
+ if (sub->mask & event && (!sub->job || job == sub->job))
+ {
+ _cupsRWLockWrite(&sub->rwlock);
+
+ n = ippNew();
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_CHARSET, "notify-charset", NULL, "utf-8");
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_LANGUAGE, "notify-natural-language", NULL, "en");
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-printer-up-time", time(NULL) - printer->start_time);
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI, "notify-printer-uri", NULL, printer->uri);
+ if (job)
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-job-id", job->id);
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-subcription-id", sub->id);
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI, "notify-subscription-uuid", NULL, sub->uuid);
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-sequence-number", ++ sub->last_sequence);
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "notify-subscribed-event", NULL, get_notify_subscribed_event(event));
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT, "notify-text", NULL, text);
+ if (event & _IPP_EVENT_PRINTER_ALL)
+ {
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "printer-state", printer->state);
+ copy_printer_state_reasons(n, IPP_TAG_EVENT_NOTIFICATION, printer);
+ }
+ if (event & _IPP_EVENT_JOB_ALL)
+ {
+ ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "job-state", job->state);
+ copy_job_state_reasons(n, IPP_TAG_EVENT_NOTIFICATION, job);
+ if (event == _IPP_EVENT_JOB_CREATED)
+ {
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "job-name", NULL, job->name);
+ ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+ }
+ }
+
+ cupsArrayAdd(sub->events, n);
+ if (cupsArrayCount(sub->events) > 100)
+ {
+ n = (ipp_t *)cupsArrayFirst(sub->events);
+ cupsArrayRemove(sub->events, n);
+ ippDelete(n);
+ sub->first_sequence ++;
+ }
+
+ _cupsRWUnlock(&sub->rwlock);
+ _cupsCondBroadcast(&SubscriptionCondition);
+ }
+ }
+}
+
+
+/*
+ * 'check_jobs()' - Check for new jobs to process.
+ */
+
+static void
+check_jobs(_ipp_printer_t *printer) /* I - Printer */
+{
+ _ipp_job_t *job; /* Current job */
+
+
+ if (printer->processing_job)
+ return;
+
+ _cupsRWLockWrite(&(printer->rwlock));
+ for (job = (_ipp_job_t *)cupsArrayFirst(printer->active_jobs);
+ job;
+ job = (_ipp_job_t *)cupsArrayNext(printer->active_jobs))
+ {
+ if (job->state == IPP_JSTATE_PENDING)
+ {
+ if (!_cupsThreadCreate((_cups_thread_func_t)process_job, job))
+ {
+ job->state = IPP_JSTATE_ABORTED;
+ job->completed = time(NULL);
+
+ add_event(printer, job, _IPP_EVENT_JOB_COMPLETED, "Job aborted because creation of processing thread failed.");
+ }
+ break;
+ }
+ }
+ _cupsRWUnlock(&(printer->rwlock));
+}
+
+
+/*
+ * 'clean_jobs()' - Clean out old (completed) jobs.
+ */
+
+static void
+clean_jobs(_ipp_printer_t *printer) /* I - Printer */
+{
+ _ipp_job_t *job; /* Current job */
+ time_t cleantime; /* Clean time */
+
+
+ if (cupsArrayCount(printer->jobs) == 0)
+ return;
+
+ cleantime = time(NULL) - 60;
+
+ _cupsRWLockWrite(&(printer->rwlock));
+ for (job = (_ipp_job_t *)cupsArrayFirst(printer->jobs);
+ job;
+ job = (_ipp_job_t *)cupsArrayNext(printer->jobs))
+ if (job->completed && job->completed < cleantime)
+ {
+ cupsArrayRemove(printer->jobs, job);
+ delete_job(job);
+ }
+ else
+ break;
+ _cupsRWUnlock(&(printer->rwlock));
+}
+
+
+/*
+ * 'compare_active_jobs()' - Compare two active jobs.
+ */
+
+static int /* O - Result of comparison */
+compare_active_jobs(_ipp_job_t *a, /* I - First job */
+ _ipp_job_t *b) /* I - Second job */
+{
+ int diff; /* Difference */
+
+
+ if ((diff = b->priority - a->priority) == 0)
+ diff = b->id - a->id;
+
+ return (diff);
+}
+
+
+/*
+ * 'compare_completed_jobs()' - Compare two completed jobs.
+ */
+
+static int /* O - Result of comparison */
+compare_completed_jobs(_ipp_job_t *a, /* I - First job */
+ _ipp_job_t *b) /* I - Second job */
+{
+ int diff; /* Difference */
+
+
+ if ((diff = a->completed - b->completed) == 0)
+ diff = b->id - a->id;
+
+ return (diff);
+}
+
+
+/*
+ * 'compare_devices()' - Compare two devices...
+ */
+
+static int /* O - Result of comparison */
+compare_devices(_ipp_device_t *a, /* I - First device */
+ _ipp_device_t *b) /* I - Second device */
+{
+ return (strcmp(a->uuid, b->uuid));
+}
+
+
+/*
+ * 'compare_jobs()' - Compare two jobs.
+ */
+
+static int /* O - Result of comparison */
+compare_jobs(_ipp_job_t *a, /* I - First job */
+ _ipp_job_t *b) /* I - Second job */
+{
+ return (b->id - a->id);
+}
+
+
+/*
+ * 'copy_attributes()' - Copy attributes from one request to another.
+ */
+
+static void
+copy_attributes(ipp_t *to, /* I - Destination request */
+ ipp_t *from, /* I - Source request */
+ cups_array_t *ra, /* I - Requested attributes */
+ ipp_tag_t group_tag, /* I - Group to copy */
+ int quickcopy) /* I - Do a quick copy? */
+{
+ _ipp_filter_t filter; /* Filter data */
+
+
+ filter.ra = ra;
+ filter.group_tag = group_tag;
+
+ ippCopyAttributes(to, from, quickcopy, (ipp_copycb_t)filter_cb, &filter);
+}
+
+
+/*
+ * 'copy_job_attrs()' - Copy job attributes to the response.
+ */
+
+static void
+copy_job_attributes(
+ _ipp_client_t *client, /* I - Client */
+ _ipp_job_t *job, /* I - Job */
+ cups_array_t *ra) /* I - requested-attributes */
+{
+ copy_attributes(client->response, job->attrs, ra, IPP_TAG_JOB, 0);
+
+ if (!ra || cupsArrayFind(ra, "date-time-at-completed"))
+ {
+ if (job->completed)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+ }
+
+ if (!ra || cupsArrayFind(ra, "date-time-at-processing"))
+ {
+ if (job->processing)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-processing", ippTimeToDate(job->processing));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+ }
+
+ if (!ra || cupsArrayFind(ra, "job-impressions"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions", job->impressions);
+
+ if (!ra || cupsArrayFind(ra, "job-impressions-completed"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", job->impcompleted);
+
+ if (!ra || cupsArrayFind(ra, "job-printer-up-time"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-printer-up-time", (int)(time(NULL) - client->printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "job-state"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_ENUM,
+ "job-state", job->state);
+
+ if (!ra || cupsArrayFind(ra, "job-state-message"))
+ {
+ if (job->dev_state_message)
+ {
+ ippAddString(client->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, job->dev_state_message);
+ }
+ else
+ {
+ const char *message = ""; /* Message string */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ message = "Job pending.";
+ break;
+
+ case IPP_JSTATE_HELD :
+ if (job->state_reasons & _IPP_JREASON_JOB_INCOMING)
+ message = "Job incoming.";
+ else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+ message = "Job held.";
+ else
+ message = "Job created.";
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ if (job->state_reasons & _IPP_JREASON_PROCESSING_TO_STOP_POINT)
+ {
+ if (job->cancel)
+ message = "Cancel in progress.";
+ else
+ message = "Abort in progress.";
+ }
+ else
+ message = "Job printing.";
+ break;
+
+ case IPP_JSTATE_STOPPED :
+ message = "Job stopped.";
+ break;
+
+ case IPP_JSTATE_CANCELED :
+ message = "Job canceled.";
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ message = "Job aborted.";
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ message = "Job completed.";
+ break;
+ }
+
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, message);
+ }
+ }
+
+ if (!ra || cupsArrayFind(ra, "job-state-reasons"))
+ copy_job_state_reasons(client->response, IPP_TAG_JOB, job);
+/*
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+ NULL, "none");
+ break;
+
+ case IPP_JSTATE_HELD :
+ if (job->fd >= 0)
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "job-state-reasons", NULL, "job-incoming");
+ else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "job-state-reasons", NULL, "job-hold-until-specified");
+ else
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "job-state-reasons", NULL, "job-data-insufficient");
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ if (job->cancel)
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "job-state-reasons", NULL, "processing-to-stop-point");
+ else
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "job-state-reasons", NULL, "job-printing");
+ break;
+
+ case IPP_JSTATE_STOPPED :
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+ NULL, "job-stopped");
+ break;
+
+ case IPP_JSTATE_CANCELED :
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+ NULL, "job-canceled-by-user");
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+ NULL, "aborted-by-system");
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ ippAddString(client->response, IPP_TAG_JOB,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+ NULL, "job-completed-successfully");
+ break;
+ }
+*/
+
+ if (!ra || cupsArrayFind(ra, "time-at-completed"))
+ ippAddInteger(client->response, IPP_TAG_JOB,
+ job->completed ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
+ "time-at-completed", (int)(job->completed - client->printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "time-at-processing"))
+ ippAddInteger(client->response, IPP_TAG_JOB,
+ job->processing ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
+ "time-at-processing", (int)(job->processing - client->printer->start_time));
+}
+
+
+/*
+ * 'copy_job_state_reasons()' - Copy printer-state-reasons values.
+ */
+
+static void
+copy_job_state_reasons(
+ ipp_t *ipp, /* I - Attributes */
+ ipp_tag_t group_tag, /* I - Group */
+ _ipp_job_t *job) /* I - Printer */
+{
+ _ipp_jreason_t creasons; /* Combined job-state-reasons */
+
+
+ creasons = job->state_reasons | job->dev_state_reasons;
+
+ if (!creasons)
+ {
+ ippAddString(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons", NULL, "none");
+ }
+ else
+ {
+ int i, /* Looping var */
+ num_reasons = 0;/* Number of reasons */
+ _ipp_jreason_t reason; /* Current reason */
+ const char *reasons[32]; /* Reason strings */
+
+ for (i = 0, reason = 1; i < (int)(sizeof(_ipp_jreasons) / sizeof(_ipp_jreasons[0])); i ++, reason <<= 1)
+ {
+ if (creasons & reason)
+ reasons[num_reasons ++] = _ipp_jreasons[i];
+ }
+
+ ippAddStrings(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons", num_reasons, NULL, reasons);
+ }
+}
+
+
+/*
+ * 'copy_printer_state_reasons()' - Copy printer-state-reasons values.
+ */
+
+static void
+copy_printer_state_reasons(
+ ipp_t *ipp, /* I - Attributes */
+ ipp_tag_t group_tag, /* I - Group */
+ _ipp_printer_t *printer) /* I - Printer */
+{
+ _ipp_preason_t creasons = printer->state_reasons | printer->dev_reasons;
+ /* Combined reasons */
+
+
+ if (creasons == _IPP_PREASON_NONE)
+ {
+ ippAddString(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-state-reasons", NULL, "none");
+ }
+ else
+ {
+ int i, /* Looping var */ num_reasons = 0;/* Number of reasons */
+ _ipp_preason_t reason; /* Current reason */
+ const char *reasons[32]; /* Reason strings */
+
+ for (i = 0, reason = 1; i < (int)(sizeof(_ipp_preasons) / sizeof(_ipp_preasons[0])); i ++, reason <<= 1)
+ {
+ if (creasons & reason)
+ reasons[num_reasons ++] = _ipp_preasons[i];
+ }
+
+ ippAddStrings(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-state-reasons", num_reasons, NULL, reasons);
+ }
+}
+
+
+/*
+ * 'copy_sub_attrs()' - Copy job attributes to the response.
+ */
+
+static void
+copy_subscription_attributes(
+ _ipp_client_t *client, /* I - Client */
+ _ipp_subscription_t *sub, /* I - Subscription */
+ cups_array_t *ra) /* I - requested-attributes */
+{
+ copy_attributes(client->response, sub->attrs, ra, IPP_TAG_SUBSCRIPTION, 0);
+
+ if (!ra || cupsArrayFind(ra, "notify-lease-expiration-time"))
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-expiration-time", (int)(sub->expire - client->printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "notify-printer-up-time"))
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-printer-up-time", (int)(time(NULL) - client->printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "notify-sequence-number"))
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-sequence-number", sub->last_sequence);
+}
+
+
+/*
+ * 'create_client()' - Accept a new network connection and create a client
+ * object.
+ */
+
+static _ipp_client_t * /* O - Client */
+create_client(_ipp_printer_t *printer, /* I - Printer */
+ int sock) /* I - Listen socket */
+{
+ _ipp_client_t *client; /* Client */
+
+
+ if ((client = calloc(1, sizeof(_ipp_client_t))) == NULL)
+ {
+ perror("Unable to allocate memory for client");
+ return (NULL);
+ }
+
+ client->printer = printer;
+ client->fetch_file = -1;
+
+ /*
+ * Accept the client and get the remote address...
+ */
+
+ if ((client->http = httpAcceptConnection(sock, 1)) == NULL)
+ {
+ perror("Unable to accept client connection");
+
+ free(client);
+
+ return (NULL);
+ }
+
+ httpGetHostname(client->http, client->hostname, sizeof(client->hostname));
+
+ if (Verbosity)
+ fprintf(stderr, "Accepted connection from %s\n", client->hostname);
+
+ return (client);
+}
+
+
+/*
+ * 'create_device()' - Create an output device tracking object.
+ */
+
+static _ipp_device_t * /* O - Device */
+create_device(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ ipp_attribute_t *uuid; /* output-device-uuid */
+
+
+ if ((uuid = ippFindAttribute(client->request, "output-device-uuid", IPP_TAG_URI)) == NULL)
+ return (NULL);
+
+ if ((device = calloc(1, sizeof(_ipp_device_t))) == NULL)
+ return (NULL);
+
+ _cupsRWInit(&device->rwlock);
+
+ device->uuid = strdup(ippGetString(uuid, 0, NULL));
+ device->state = IPP_PSTATE_STOPPED;
+
+ _cupsRWLockWrite(&client->printer->rwlock);
+ cupsArrayAdd(client->printer->devices, device);
+ _cupsRWUnlock(&client->printer->rwlock);
+
+ return (device);
+}
+
+
+/*
+ * 'create_job()' - Create a new job object from a Print-Job or Create-Job
+ * request.
+ */
+
+static _ipp_job_t * /* O - Job */
+create_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *attr; /* Job attribute */
+ char uri[1024], /* job-uri value */
+ uuid[64]; /* job-uuid value */
+
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ /*
+ * Allocate and initialize the job object...
+ */
+
+ if ((job = calloc(1, sizeof(_ipp_job_t))) == NULL)
+ {
+ perror("Unable to allocate memory for job");
+ return (NULL);
+ }
+
+ job->printer = client->printer;
+ job->attrs = ippNew();
+ job->state = IPP_JSTATE_HELD;
+ job->fd = -1;
+
+ /*
+ * Copy all of the job attributes...
+ */
+
+ copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
+ /*
+ * Get the requesting-user-name, document format, and priority...
+ */
+
+ if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_INTEGER)) != NULL)
+ job->priority = ippGetInteger(attr, 0);
+ else
+ job->priority = 50;
+
+ if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL)
+ job->username = ippGetString(attr, 0, NULL);
+ else
+ job->username = "anonymous";
+
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+
+ if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB)
+ {
+ if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else
+ job->format = "application/octet-stream";
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_INTEGER)) != NULL)
+ job->impressions = ippGetInteger(attr, 0);
+
+ if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_NAME)) != NULL)
+ job->name = ippGetString(attr, 0, NULL);
+
+ /*
+ * Add job description attributes and add to the jobs array...
+ */
+
+ job->id = client->printer->next_job_id ++;
+
+ snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+ httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
+
+ ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
+ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
+
+ cupsArrayAdd(client->printer->jobs, job);
+ cupsArrayAdd(client->printer->active_jobs, job);
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ return (job);
+}
+
+
+/*
+ * 'create_job_filename()' - Create the filename for a document in a job.
+ */
+
+static void create_job_filename(
+ _ipp_printer_t *printer, /* I - Printer */
+ _ipp_job_t *job, /* I - Job */
+ const char *format, /* I - Format or NULL */
+ char *fname, /* I - Filename buffer */
+ size_t fnamesize) /* I - Size of filename buffer */
+{
+ char name[256], /* "Safe" filename */
+ *nameptr; /* Pointer into filename */
+ const char *ext, /* Filename extension */
+ *job_name; /* job-name value */
+ ipp_attribute_t *job_name_attr; /* job-name attribute */
+
+
+ /*
+ * Make a name from the job-name attribute...
+ */
+
+ if ((job_name_attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL)
+ job_name = ippGetString(job_name_attr, 0, NULL);
+ else
+ job_name = "untitled";
+
+ for (nameptr = name; *job_name && nameptr < (name + sizeof(name) - 1); job_name ++)
+ if (isalnum(*job_name & 255) || *job_name == '-')
+ *nameptr++ = (char)tolower(*job_name & 255);
+ else
+ *nameptr++ = '_';
+
+ *nameptr = '\0';
+
+ /*
+ * Figure out the extension...
+ */
+
+ if (!format)
+ format = job->format;
+
+ if (!strcasecmp(format, "image/jpeg"))
+ ext = "jpg";
+ else if (!strcasecmp(format, "image/png"))
+ ext = "png";
+ else if (!strcasecmp(format, "image/pwg-raster"))
+ ext = "ras";
+ else if (!strcasecmp(format, "image/urf"))
+ ext = "urf";
+ else if (!strcasecmp(format, "application/pdf"))
+ ext = "pdf";
+ else if (!strcasecmp(format, "application/postscript"))
+ ext = "ps";
+ else
+ ext = "prn";
+
+ /*
+ * Create a filename with the job-id, job-name, and document-format (extension)...
+ */
+
+ snprintf(fname, fnamesize, "%s/%d-%s.%s", printer->directory, job->id, name, ext);
+}
+
+
+/*
+ * 'create_listener()' - Create a listener socket.
+ */
+
+static int /* O - Listener socket or -1 on error */
+create_listener(int family, /* I - Address family */
+ int port) /* I - Port number */
+{
+ int sock; /* Listener socket */
+ http_addrlist_t *addrlist; /* Listen address */
+ char service[255]; /* Service port */
+
+
+ snprintf(service, sizeof(service), "%d", port);
+ if ((addrlist = httpAddrGetList(NULL, family, service)) == NULL)
+ return (-1);
+
+ sock = httpAddrListen(&(addrlist->addr), port);
+
+ httpAddrFreeList(addrlist);
+
+ return (sock);
+}
+
+
+/*
+ * 'create_printer()' - Create, register, and listen for connections to a
+ * printer object.
+ */
+
+static _ipp_printer_t * /* O - Printer */
+create_printer(const char *servername, /* I - Server hostname (NULL for default) */
+ int port, /* I - Port number */
+ const char *name, /* I - printer-name */
+ const char *directory, /* I - Spool directory */
+ const char *proxy_user, /* I - Proxy account username */
+ const char *proxy_pass) /* I - Proxy account password */
+{
+ _ipp_printer_t *printer; /* Printer */
+ char uri[1024], /* Printer URI */
+ adminurl[1024], /* printer-more-info URI */
+ supplyurl[1024],/* printer-supply-info-uri URI */
+ uuid[128]; /* printer-uuid */
+ int k_supported; /* Maximum file size supported */
+#ifdef HAVE_STATVFS
+ struct statvfs spoolinfo; /* FS info for spool directory */
+ double spoolsize; /* FS size */
+#elif defined(HAVE_STATFS)
+ struct statfs spoolinfo; /* FS info for spool directory */
+ double spoolsize; /* FS size */
+#endif /* HAVE_STATVFS */
+ static const char * const versions[] =/* ipp-versions-supported values */
+ {
+ "1.0",
+ "1.1",
+ "2.0"
+ };
+ static const char * const features[] =/* ipp-features-supported values */
+ {
+ "document-object",
+ "ipp-everywhere",
+ "infrastructure-printer",
+ "page-overrides"
+ };
+ static const int ops[] = /* operations-supported values */
+ {
+ IPP_OP_PRINT_JOB,
+ IPP_OP_PRINT_URI,
+ IPP_OP_VALIDATE_JOB,
+ IPP_OP_CREATE_JOB,
+ IPP_OP_SEND_DOCUMENT,
+ IPP_OP_SEND_URI,
+ IPP_OP_CANCEL_JOB,
+ IPP_OP_GET_JOB_ATTRIBUTES,
+ IPP_OP_GET_JOBS,
+ IPP_OP_GET_PRINTER_ATTRIBUTES,
+ IPP_OP_GET_PRINTER_SUPPORTED_VALUES,
+ IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS,
+ IPP_OP_CREATE_JOB_SUBSCRIPTIONS,
+ IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES,
+ IPP_OP_GET_SUBSCRIPTIONS,
+ IPP_OP_RENEW_SUBSCRIPTION,
+ IPP_OP_CANCEL_SUBSCRIPTION,
+ IPP_OP_GET_NOTIFICATIONS,
+ IPP_OP_GET_DOCUMENT_ATTRIBUTES,
+ IPP_OP_GET_DOCUMENTS,
+ IPP_OP_CANCEL_MY_JOBS,
+ IPP_OP_CLOSE_JOB,
+ IPP_OP_IDENTIFY_PRINTER,
+ IPP_OP_VALIDATE_DOCUMENT,
+ _IPP_OP_ACKNOWLEDGE_DOCUMENT,
+ _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER,
+ _IPP_OP_ACKNOWLEDGE_JOB,
+ _IPP_OP_FETCH_DOCUMENT,
+ _IPP_OP_FETCH_JOB,
+ _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES,
+ _IPP_OP_UPDATE_ACTIVE_JOBS,
+ _IPP_OP_UPDATE_DOCUMENT_STATUS,
+ _IPP_OP_UPDATE_JOB_STATUS,
+ _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES,
+ _IPP_OP_DEREGISTER_OUTPUT_DEVICE
+ };
+ static const char * const charsets[] =/* charset-supported values */
+ {
+ "us-ascii",
+ "utf-8"
+ };
+ static const char * const compressions[] =/* compression-supported values */
+ {
+#ifdef HAVE_LIBZ
+ "deflate",
+ "gzip",
+#endif /* HAVE_LIBZ */
+ "none"
+ };
+ static const char * const notify_attributes[] =
+ { /* notify-attributes-supported */
+ "printer-state-change-time",
+ "notify-lease-expiration-time",
+ "notify-subscriber-user-name"
+ };
+ static const char * const reference_uri_schemes_supported[] =
+ { /* reference-uri-schemes-supported */
+ "file",
+ "ftp",
+ "http"
+#ifdef HAVE_SSL
+ , "https"
+#endif /* HAVE_SSL */
+ };
+ static const char * const which_jobs[] =
+ { /* which-jobs-supported values */
+ "completed",
+ "not-completed",
+ "aborted",
+ "all",
+ "canceled",
+ "pending",
+ "pending-held",
+ "processing",
+ "processing-stopped"
+ };
+
+
+ /*
+ * Allocate memory for the printer...
+ */
+
+ if ((printer = calloc(1, sizeof(_ipp_printer_t))) == NULL)
+ {
+ perror("ippserver: Unable to allocate memory for printer");
+ return (NULL);
+ }
+
+ printer->ipv4 = -1;
+ printer->ipv6 = -1;
+ printer->name = strdup(name);
+ printer->directory = strdup(directory);
+ printer->hostname = strdup(servername);
+ printer->port = port;
+ printer->start_time = time(NULL);
+ printer->config_time = printer->start_time;
+ printer->state = IPP_PSTATE_IDLE;
+ printer->state_reasons = _IPP_PREASON_NONE;
+ printer->state_time = printer->start_time;
+ printer->jobs = cupsArrayNew3((cups_array_func_t)compare_jobs, NULL, NULL, 0, NULL, (cups_afree_func_t)delete_job);
+ printer->active_jobs = cupsArrayNew((cups_array_func_t)compare_active_jobs, NULL);
+ printer->completed_jobs = cupsArrayNew((cups_array_func_t)compare_completed_jobs, NULL);
+ printer->next_job_id = 1;
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+ printer->hostname, printer->port, "/ipp/print");
+ printer->uri = strdup(uri);
+ printer->urilen = strlen(uri);
+
+ if (proxy_user)
+ printer->proxy_user = strdup(proxy_user);
+ if (proxy_pass)
+ printer->proxy_pass = strdup(proxy_pass);
+
+ printer->devices = cupsArrayNew((cups_array_func_t)compare_devices, NULL);
+
+ _cupsRWInit(&(printer->rwlock));
+
+ /*
+ * Create the listener sockets...
+ */
+
+ if ((printer->ipv4 = create_listener(AF_INET, printer->port)) < 0)
+ {
+ perror("Unable to create IPv4 listener");
+ goto bad_printer;
+ }
+
+ if ((printer->ipv6 = create_listener(AF_INET6, printer->port)) < 0)
+ {
+ perror("Unable to create IPv6 listener");
+ goto bad_printer;
+ }
+
+ /*
+ * Prepare values for the printer attributes...
+ */
+
+ httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL, printer->hostname, printer->port, "/");
+ httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), "http", NULL, printer->hostname, printer->port, "/supplies");
+
+ if (Verbosity)
+ {
+ fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
+ fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
+ fprintf(stderr, "printer-uri=\"%s\"\n", uri);
+ }
+
+ /*
+ * Get the maximum spool size based on the size of the filesystem used for
+ * the spool directory. If the host OS doesn't support the statfs call
+ * or the filesystem is larger than 2TiB, always report INT_MAX.
+ */
+
+#ifdef HAVE_STATVFS
+ if (statvfs(printer->directory, &spoolinfo))
+ k_supported = INT_MAX;
+ else if ((spoolsize = (double)spoolinfo.f_frsize *
+ spoolinfo.f_blocks / 1024) > INT_MAX)
+ k_supported = INT_MAX;
+ else
+ k_supported = (int)spoolsize;
+
+#elif defined(HAVE_STATFS)
+ if (statfs(printer->directory, &spoolinfo))
+ k_supported = INT_MAX;
+ else if ((spoolsize = (double)spoolinfo.f_bsize *
+ spoolinfo.f_blocks / 1024) > INT_MAX)
+ k_supported = INT_MAX;
+ else
+ k_supported = (int)spoolsize;
+
+#else
+ k_supported = INT_MAX;
+#endif /* HAVE_STATVFS */
+
+ /*
+ * Create the printer attributes. This list of attributes is sorted to improve
+ * performance when the client provides a requested-attributes attribute...
+ */
+
+ printer->attrs = ippNew();
+
+ /* charset-configured */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_CHARSET),
+ "charset-configured", NULL, "utf-8");
+
+ /* charset-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_CHARSET),
+ "charset-supported", sizeof(charsets) / sizeof(charsets[0]),
+ NULL, charsets);
+
+ /* compression-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "compression-supported",
+ (int)(sizeof(compressions) / sizeof(compressions[0])), NULL,
+ compressions);
+
+ /* generated-natural-language-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_LANGUAGE),
+ "generated-natural-language-supported", NULL, "en");
+
+ /* ipp-features-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
+ /* ipp-versions-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]), NULL, versions);
+
+ /* ippget-event-life */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "ippget-event-life", 300);
+
+ /* job-ids-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-ids-supported", 1);
+
+ /* job-k-octets-supported */
+ ippAddRange(printer->attrs, IPP_TAG_PRINTER, "job-k-octets-supported", 0,
+ k_supported);
+
+ /* job-priority-default */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+ "job-priority-default", 50);
+
+ /* job-priority-supported */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+ "job-priority-supported", 100);
+
+ /* multiple-document-jobs-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "multiple-document-jobs-supported", 0);
+
+ /* multiple-operation-time-out */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "multiple-operation-time-out", 60);
+
+ /* multiple-operation-time-out-action */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "abort-job");
+
+ /* natural-language-configured */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_LANGUAGE),
+ "natural-language-configured", NULL, "en");
+
+ /* notify-attributes-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-attributes-supported", sizeof(notify_attributes) / sizeof(notify_attributes[0]), NULL, notify_attributes);
+
+ /* notify-events-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events-default", NULL, "job-completed");
+
+ /* notify-events-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events-supported", sizeof(_ipp_events) / sizeof(_ipp_events[0]), NULL, _ipp_events);
+
+ /* notify-lease-duration-default */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-lease-duration-default", 86400);
+
+ /* notify-lease-duration-supported */
+ ippAddRange(printer->attrs, IPP_TAG_PRINTER, "notify-lease-duration-supported", 0, _IPP_NOTIFY_LEASE_DURATION_MAX);
+
+ /* notify-max-events-supported */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-lease-duration-default", (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])));
+
+ /* notify-pull-method-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-pull-method-supported", NULL, "ippget");
+
+ /* operations-supported */
+ ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
+ "operations-supported", sizeof(ops) / sizeof(ops[0]), ops);
+
+ /* printer-get-attributes-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
+ /* printer-is-accepting-jobs */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
+
+ /* printer-info */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, name);
+
+ /* printer-more-info */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
+
+ /* printer-name */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, name);
+
+ /* printer-supply-info-uri */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
+
+ /* printer-uri-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
+
+ /* printer-uuid */
+ httpAssembleUUID(printer->hostname, port, name, 0, uuid, sizeof(uuid));
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
+
+ /* reference-uri-scheme-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_URISCHEME),
+ "reference-uri-schemes-supported",
+ (int)(sizeof(reference_uri_schemes_supported) /
+ sizeof(reference_uri_schemes_supported[0])),
+ NULL, reference_uri_schemes_supported);
+
+ /* uri-authentication-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "uri-authentication-supported", NULL, "basic");
+
+ /* uri-security-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "uri-security-supported", NULL, "tls");
+
+ /* which-jobs-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+ IPP_CONST_TAG(IPP_TAG_KEYWORD),
+ "which-jobs-supported",
+ sizeof(which_jobs) / sizeof(which_jobs[0]), NULL, which_jobs);
+
+ debug_attributes("Printer", printer->attrs, 0);
+
+ /*
+ * Return it!
+ */
+
+ return (printer);
+
+
+ /*
+ * If we get here we were unable to create the printer...
+ */
+
+ bad_printer:
+
+ delete_printer(printer);
+ return (NULL);
+}
+
+
+/*
+ * 'create_subscription()' - Create a new subscription object from a
+ * Print-Job, Create-Job, or Create-xxx-Subscription
+ * request.
+ */
+
+static _ipp_subscription_t * /* O - Subscription object */
+create_subscription(
+ _ipp_printer_t *printer, /* I - Printer */
+ _ipp_job_t *job, /* I - Job, if any */
+ int interval, /* I - Interval for progress events */
+ int lease, /* I - Lease duration */
+ const char *username, /* I - User creating the subscription */
+ ipp_attribute_t *notify_events, /* I - Events to monitor */
+ ipp_attribute_t *notify_attributes, /* I - Attributes to report */
+ ipp_attribute_t *notify_user_data) /* I - User data, if any */
+{
+ _ipp_subscription_t *sub; /* Subscription */
+ ipp_attribute_t *attr; /* Subscription attribute */
+ char uuid[64]; /* notify-subscription-uuid value */
+
+
+ /*
+ * Allocate and initialize the subscription object...
+ */
+
+ if ((sub = calloc(1, sizeof(_ipp_subscription_t))) == NULL)
+ {
+ perror("Unable to allocate memory for subscription");
+ return (NULL);
+ }
+
+ _cupsRWLockWrite(&(printer->rwlock));
+
+ sub->id = printer->next_sub_id ++;
+ sub->mask = notify_events ? get_notify_events_bits(notify_events) : _IPP_EVENT_DEFAULT;
+ sub->printer = printer;
+ sub->job = job;
+ sub->interval = interval;
+ sub->lease = lease;
+ sub->attrs = ippNew();
+
+ if (lease)
+ sub->expire = time(NULL) + sub->lease;
+ else
+ sub->expire = INT_MAX;
+
+ _cupsRWInit(&(sub->rwlock));
+
+ /*
+ * Add subscription description attributes and add to the subscriptions
+ * array...
+ */
+
+ ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id);
+
+ httpAssembleUUID(printer->hostname, printer->port, printer->name, -sub->id, uuid, sizeof(uuid));
+ attr = ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-subscription-uuid", NULL, uuid);
+ sub->uuid = ippGetString(attr, 0, NULL);
+
+ ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-printer-uri", NULL, printer->uri);
+
+ if (job)
+ ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-job-id", job->id);
+ else
+ ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", sub->lease);
+
+ attr = ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_NAME, "notify-subscriber-user-name", NULL, username);
+ sub->username = ippGetString(attr, 0, NULL);
+
+ if (notify_events)
+ ippCopyAttribute(sub->attrs, notify_events, 0);
+ else
+ ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events", NULL, _IPP_EVENT_DEFAULT_STRING);
+
+ ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-pull-method", NULL, "ippget");
+
+ if (notify_attributes)
+ ippCopyAttribute(sub->attrs, notify_attributes, 0);
+
+ if (notify_user_data)
+ ippCopyAttribute(sub->attrs, notify_user_data, 0);
+
+ sub->events = cupsArrayNew3(NULL, NULL, NULL, 0, NULL, (cups_afree_func_t)ippDelete);
+
+ cupsArrayAdd(printer->subscriptions, sub);
+
+ _cupsRWUnlock(&(printer->rwlock));
+
+ return (sub);
+}
+
+
+/*
+ * 'debug_attributes()' - Print attributes in a request or response.
+ */
+
+static void
+debug_attributes(const char *title, /* I - Title */
+ ipp_t *ipp, /* I - Request/response */
+ int type) /* I - 0 = object, 1 = request, 2 = response */
+{
+ ipp_tag_t group_tag; /* Current group */
+ ipp_attribute_t *attr; /* Current attribute */
+ char buffer[2048]; /* String buffer for value */
+ int major, minor; /* Version */
+
+
+ if (Verbosity <= 1)
+ return;
+
+ fprintf(stderr, "%s:\n", title);
+ major = ippGetVersion(ipp, &minor);
+ fprintf(stderr, " version=%d.%d\n", major, minor);
+ if (type == 1)
+ fprintf(stderr, " operation-id=%s(%04x)\n",
+ ippOpString(ippGetOperation(ipp)), ippGetOperation(ipp));
+ else if (type == 2)
+ fprintf(stderr, " status-code=%s(%04x)\n",
+ ippErrorString(ippGetStatusCode(ipp)), ippGetStatusCode(ipp));
+ fprintf(stderr, " request-id=%d\n\n", ippGetRequestId(ipp));
+
+ for (attr = ippFirstAttribute(ipp), group_tag = IPP_TAG_ZERO;
+ attr;
+ attr = ippNextAttribute(ipp))
+ {
+ if (ippGetGroupTag(attr) != group_tag)
+ {
+ group_tag = ippGetGroupTag(attr);
+ fprintf(stderr, " %s\n", ippTagString(group_tag));
+ }
+
+ if (ippGetName(attr))
+ {
+ ippAttributeString(attr, buffer, sizeof(buffer));
+ fprintf(stderr, " %s (%s%s) %s\n", ippGetName(attr),
+ ippGetCount(attr) > 1 ? "1setOf " : "",
+ ippTagString(ippGetValueTag(attr)), buffer);
+ }
+ }
+}
+
+
+/*
+ * 'delete_client()' - Close the socket and free all memory used by a client
+ * object.
+ */
+
+static void
+delete_client(_ipp_client_t *client) /* I - Client */
+{
+ if (Verbosity)
+ fprintf(stderr, "Closing connection from %s\n", client->hostname);
+
+ /*
+ * Flush pending writes before closing...
+ */
+
+ httpFlushWrite(client->http);
+
+ /*
+ * Free memory...
+ */
+
+ httpClose(client->http);
+
+ ippDelete(client->request);
+ ippDelete(client->response);
+
+ free(client);
+}
+
+
+/*
+ * 'delete_device()' - Remove a device from a printer.
+ *
+ * Note: Caller is responsible for locking the printer object.
+ */
+
+static void
+delete_device(_ipp_device_t *device) /* I - Device */
+{
+ /*
+ * Free memory used for the device...
+ */
+
+ _cupsRWDeinit(&device->rwlock);
+
+ if (device->name)
+ free(device->name);
+
+ free(device->uuid);
+
+ ippDelete(device->attrs);
+
+ free(device);
+}
+
+
+/*
+ * 'delete_job()' - Remove from the printer and free all memory used by a job
+ * object.
+ */
+
+static void
+delete_job(_ipp_job_t *job) /* I - Job */
+{
+ if (Verbosity)
+ fprintf(stderr, "Removing job #%d from history.\n", job->id);
+
+ _cupsRWLockWrite(&job->rwlock);
+
+ ippDelete(job->attrs);
+
+ if (job->filename)
+ {
+ if (!KeepFiles)
+ unlink(job->filename);
+
+ free(job->filename);
+ }
+
+ _cupsRWDeinit(&job->rwlock);
+
+ free(job);
+}
+
+
+/*
+ * 'delete_printer()' - Unregister, close listen sockets, and free all memory
+ * used by a printer object.
+ */
+
+static void
+delete_printer(_ipp_printer_t *printer) /* I - Printer */
+{
+ _cupsRWLockWrite(&printer->rwlock);
+
+ if (printer->ipv4 >= 0)
+ close(printer->ipv4);
+
+ if (printer->ipv6 >= 0)
+ close(printer->ipv6);
+
+ if (printer->name)
+ free(printer->name);
+ if (printer->directory)
+ free(printer->directory);
+ if (printer->hostname)
+ free(printer->hostname);
+ if (printer->uri)
+ free(printer->uri);
+ if (printer->proxy_user)
+ free(printer->proxy_user);
+ if (printer->proxy_pass)
+ free(printer->proxy_pass);
+
+
+ ippDelete(printer->attrs);
+ ippDelete(printer->dev_attrs);
+
+ cupsArrayDelete(printer->active_jobs);
+ cupsArrayDelete(printer->completed_jobs);
+ cupsArrayDelete(printer->jobs);
+ cupsArrayDelete(printer->subscriptions);
+
+ _cupsRWDeinit(&printer->rwlock);
+
+ free(printer);
+}
+
+
+/*
+ * 'delete_subscription()' - Delete a subscription.
+ */
+
+static void
+delete_subscription(
+ _ipp_subscription_t *sub) /* I - Subscription */
+{
+ sub->pending_delete = 1;
+
+ _cupsCondBroadcast(&SubscriptionCondition);
+
+ _cupsRWLockWrite(&sub->rwlock);
+
+ ippDelete(sub->attrs);
+ cupsArrayDelete(sub->events);
+
+ _cupsRWDeinit(&sub->rwlock);
+
+ free(sub);
+}
+
+
+/*
+ * 'filter_cb()' - Filter printer attributes based on the requested array.
+ */
+
+static int /* O - 1 to copy, 0 to ignore */
+filter_cb(_ipp_filter_t *filter, /* I - Filter parameters */
+ ipp_t *dst, /* I - Destination (unused) */
+ ipp_attribute_t *attr) /* I - Source attribute */
+{
+ /*
+ * Filter attributes as needed...
+ */
+
+ (void)dst;
+
+ ipp_tag_t group = ippGetGroupTag(attr);
+ const char *name = ippGetName(attr);
+
+ if ((filter->group_tag != IPP_TAG_ZERO && group != filter->group_tag && group != IPP_TAG_ZERO) || !name || (!strcmp(name, "media-col-database") && !cupsArrayFind(filter->ra, (void *)name)))
+ return (0);
+
+ return (!filter->ra || cupsArrayFind(filter->ra, (void *)name) != NULL);
+}
+
+
+/*
+ * 'find_device()' - Find a device.
+ */
+
+static _ipp_device_t * /* I - Device */
+find_device(_ipp_client_t *client) /* I - Client */
+{
+ ipp_attribute_t *uuid; /* output-device-uuid */
+ _ipp_device_t key, /* Search key */
+ *device; /* Matching device */
+
+
+ if ((uuid = ippFindAttribute(client->request, "output-device-uuid", IPP_TAG_URI)) == NULL)
+ return (NULL);
+
+ key.uuid = (char *)ippGetString(uuid, 0, NULL);
+
+ _cupsRWLockRead(&client->printer->rwlock);
+ device = (_ipp_device_t *)cupsArrayFind(client->printer->devices, &key);
+ _cupsRWUnlock(&client->printer->rwlock);
+
+ return (device);
+}
+
+
+/*
+ * 'find_job()' - Find a job specified in a request.
+ */
+
+static _ipp_job_t * /* O - Job or NULL */
+find_job(_ipp_client_t *client, /* I - Client */
+ int job_id) /* I - Job ID to find or 0 to lookup */
+{
+ ipp_attribute_t *attr; /* job-id or job-uri attribute */
+ _ipp_job_t key, /* Job search key */
+ *job; /* Matching job, if any */
+
+
+ if (job_id > 0)
+ {
+ key.id = job_id;
+ }
+ else if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
+ {
+ const char *uri = ippGetString(attr, 0, NULL);
+
+ if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
+ uri[client->printer->urilen] == '/')
+ key.id = atoi(uri + client->printer->urilen + 1);
+ else
+ return (NULL);
+ }
+ else if ((attr = ippFindAttribute(client->request, "job-id", IPP_TAG_INTEGER)) != NULL)
+ {
+ key.id = ippGetInteger(attr, 0);
+ }
+
+ _cupsRWLockRead(&(client->printer->rwlock));
+ job = (_ipp_job_t *)cupsArrayFind(client->printer->jobs, &key);
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ return (job);
+}
+
+
+/*
+ * 'find_subscription()' - Find a subcription.
+ */
+
+static _ipp_subscription_t * /* O - Subscription */
+find_subscription(_ipp_client_t *client,/* I - Client */
+ int sub_id) /* I - Subscription ID or 0 */
+{
+ ipp_attribute_t *notify_subscription_id;
+ /* notify-subscription-id */
+ _ipp_subscription_t key, /* Search key */
+ *sub; /* Matching subscription */
+
+
+ if (sub_id > 0)
+ key.id = sub_id;
+ else if ((notify_subscription_id = ippFindAttribute(client->request, "notify-subscription-id", IPP_TAG_INTEGER)) == NULL)
+ return (NULL);
+ else
+ key.id = ippGetInteger(notify_subscription_id, 0);
+
+ _cupsRWLockRead(&client->printer->rwlock);
+ sub = (_ipp_subscription_t *)cupsArrayFind(client->printer->subscriptions, &key);
+ _cupsRWUnlock(&client->printer->rwlock);
+
+ return (sub);
+}
+
+
+/*
+ * 'get_job_state_reasons_bits()' - Get the bits associates with "job-state-reasons" values.
+ */
+
+static _ipp_jreason_t /* O - Bits */
+get_job_state_reasons_bits(
+ ipp_attribute_t *attr) /* I - "job-state-reasons" attribute */
+{
+ int i, j, /* Looping vars */
+ count; /* Number of "job-state-reasons" values */
+ const char *keyword; /* "job-state-reasons" value */
+ _ipp_jreason_t jreasons = _IPP_JREASON_NONE;
+ /* Bits for "job-state-reasons" values */
+
+
+ count = ippGetCount(attr);
+ for (i = 0; i < count; i ++)
+ {
+ keyword = ippGetString(attr, i, NULL);
+
+ for (j = 0; j < (int)(sizeof(_ipp_jreasons) / sizeof(_ipp_jreasons[0])); j ++)
+ {
+ if (!strcmp(keyword, _ipp_jreasons[j]))
+ {
+ jreasons |= 1 << j;
+ break;
+ }
+ }
+ }
+
+ return (jreasons);
+}
+
+
+/*
+ * 'get_notify_event_bits()' - Get the bits associated with "notify-events" values.
+ */
+
+static _ipp_event_t /* O - Bits */
+get_notify_events_bits(
+ ipp_attribute_t *attr) /* I - "notify-events" attribute */
+{
+ int i, j, /* Looping vars */
+ count; /* Number of "notify-events" values */
+ const char *keyword; /* "notify-events" value */
+ _ipp_event_t events = _IPP_EVENT_NONE;
+ /* Bits for "notify-events" values */
+
+
+ count = ippGetCount(attr);
+ for (i = 0; i < count; i ++)
+ {
+ keyword = ippGetString(attr, i, NULL);
+
+ for (j = 0; j < (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])); j ++)
+ {
+ if (!strcmp(keyword, _ipp_jreasons[j]))
+ {
+ events |= 1 << j;
+ break;
+ }
+ }
+ }
+
+ return (events);
+}
+
+
+/*
+ * 'get_notify_subscribed_event()' - Get the event name.
+ */
+
+static const char * /* O - Event name */
+get_notify_subscribed_event(
+ _ipp_event_t event) /* I - Event bit */
+{
+ int i; /* Looping var */
+ _ipp_event_t mask; /* Current mask */
+
+ for (i = 0, mask = 1; i < (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])); i ++, mask <<= 1)
+ if (event & mask)
+ return (_ipp_events[i]);
+
+ return ("none");
+}
+
+
+/*
+ * 'get_printer_state_reasons_bits()' - Get the bits associated with "printer-state-reasons" values.
+ */
+
+static _ipp_preason_t /* O - Bits */
+get_printer_state_reasons_bits(
+ ipp_attribute_t *attr) /* I - "printer-state-reasons" bits */
+{
+ int i, j, /* Looping vars */
+ count; /* Number of "printer-state-reasons" values */
+ const char *keyword; /* "printer-state-reasons" value */
+ _ipp_preason_t preasons = _IPP_PREASON_NONE;
+ /* Bits for "printer-state-reasons" values */
+
+
+ count = ippGetCount(attr);
+ for (i = 0; i < count; i ++)
+ {
+ keyword = ippGetString(attr, i, NULL);
+
+ for (j = 0; j < (int)(sizeof(_ipp_preasons) / sizeof(_ipp_preasons[0])); j ++)
+ {
+ if (!strcmp(keyword, _ipp_preasons[j]))
+ {
+ preasons |= 1 << j;
+ break;
+ }
+ }
+ }
+
+ return (preasons);
+}
+
+
+/*
+ * 'html_escape()' - Write a HTML-safe string.
+ */
+
+static void
+html_escape(_ipp_client_t *client, /* I - Client */
+ const char *s, /* I - String to write */
+ size_t slen) /* I - Number of characters to write */
+{
+ const char *start, /* Start of segment */
+ *end; /* End of string */
+
+
+ start = s;
+ end = s + (slen > 0 ? slen : strlen(s));
+
+ while (*s && s < end)
+ {
+ if (*s == '&' || *s == '<')
+ {
+ if (s > start)
+ httpWrite2(client->http, start, (size_t)(s - start));
+
+ if (*s == '&')
+ httpWrite2(client->http, "&", 5);
+ else
+ httpWrite2(client->http, "<", 4);
+
+ start = s + 1;
+ }
+
+ s ++;
+ }
+
+ if (s > start)
+ httpWrite2(client->http, start, (size_t)(s - start));
+}
+
+
+/*
+ * 'html_footer()' - Show the web interface footer.
+ *
+ * This function also writes the trailing 0-length chunk.
+ */
+
+static void
+html_footer(_ipp_client_t *client) /* I - Client */
+{
+ html_printf(client,
+ "</div>\n"
+ "</body>\n"
+ "</html>\n");
+ httpWrite2(client->http, "", 0);
+}
+
+
+/*
+ * 'html_header()' - Show the web interface header and title.
+ */
+
+static void
+html_header(_ipp_client_t *client, /* I - Client */
+ const char *title) /* I - Title */
+{
+ html_printf(client,
+ "<!doctype html>\n"
+ "<html>\n"
+ "<head>\n"
+ "<title>%s</title>\n"
+ "<link rel=\"shortcut icon\" href=\"/icon.png\" type=\"image/png\">\n"
+ "<link rel=\"apple-touch-icon\" href=\"/icon.png\" type=\"image/png\">\n"
+ "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n"
+ "<meta name=\"viewport\" content=\"width=device-width\">\n"
+ "<style>\n"
+ "body { font-family: sans-serif; margin: 0; }\n"
+ "div.body { padding: 0px 10px 10px; }\n"
+ "blockquote { background: #dfd; border-radius: 5px; color: #006; padding: 10px; }\n"
+ "table.form { border-collapse: collapse; margin-top: 10px; width: 100%%; }\n"
+ "table.form td, table.form th { padding: 5px 2px; width: 50%%; }\n"
+ "table.form th { text-align: right; }\n"
+ "table.striped { border-bottom: solid thin black; border-collapse: collapse; width: 100%%; }\n"
+ "table.striped tr:nth-child(even) { background: #fcfcfc; }\n"
+ "table.striped tr:nth-child(odd) { background: #f0f0f0; }\n"
+ "table.striped th { background: white; border-bottom: solid thin black; text-align: left; vertical-align: bottom; }\n"
+ "table.striped td { margin: 0; padding: 5px; vertical-align: top; }\n"
+ "table.nav { border-collapse: collapse; width: 100%%; }\n"
+ "table.nav td { margin: 0; text-align: center; }\n"
+ "td.nav a, td.nav a:active, td.nav a:hover, td.nav a:hover:link, td.nav a:hover:link:visited, td.nav a:link, td.nav a:link:visited, td.nav a:visited { background: inherit; color: inherit; font-size: 80%%; text-decoration: none; }\n"
+ "td.nav { background: #333; color: #fff; padding: 4px 8px; width: 33%%; }\n"
+ "td.nav.sel { background: #fff; color: #000; font-weight: bold; }\n"
+ "td.nav:hover { background: #666; color: #fff; }\n"
+ "td.nav:active { background: #000; color: #ff0; }\n"
+ "</style>\n"
+ "</head>\n"
+ "<body>\n"
+ "<table class=\"nav\"><tr>"
+ "<td class=\"nav%s\"><a href=\"/\">Status</a></td>"
+ "<td class=\"nav%s\"><a href=\"/supplies\">Supplies</a></td>"
+ "<td class=\"nav%s\"><a href=\"/media\">Media</a></td>"
+ "</tr></table>\n"
+ "<div class=\"body\">\n", title, !strcmp(client->uri, "/") ? " sel" : "", !strcmp(client->uri, "/supplies") ? " sel" : "", !strcmp(client->uri, "/media") ? " sel" : "");
+}
+
+
+/*
+ * 'html_printf()' - Send formatted text to the client, quoting as needed.
+ */
+
+static void
+html_printf(_ipp_client_t *client, /* I - Client */
+ const char *format, /* I - Printf-style format string */
+ ...) /* I - Additional arguments as needed */
+{
+ va_list ap; /* Pointer to arguments */
+ const char *start; /* Start of string */
+ char size, /* Size character (h, l, L) */
+ type; /* Format type character */
+ int width, /* Width of field */
+ prec; /* Number of characters of precision */
+ char tformat[100], /* Temporary format string for sprintf() */
+ *tptr, /* Pointer into temporary format */
+ temp[1024]; /* Buffer for formatted numbers */
+ char *s; /* Pointer to string */
+
+
+ /*
+ * Loop through the format string, formatting as needed...
+ */
+
+ va_start(ap, format);
+ start = format;
+
+ while (*format)
+ {
+ if (*format == '%')
+ {
+ if (format > start)
+ httpWrite2(client->http, start, (size_t)(format - start));
+
+ tptr = tformat;
+ *tptr++ = *format++;
+
+ if (*format == '%')
+ {
+ httpWrite2(client->http, "%", 1);
+ format ++;
+ start = format;
+ continue;
+ }
+ else if (strchr(" -+#\'", *format))
+ *tptr++ = *format++;
+
+ if (*format == '*')
+ {
+ /*
+ * Get width from argument...
+ */
+
+ format ++;
+ width = va_arg(ap, int);
+
+ snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", width);
+ tptr += strlen(tptr);
+ }
+ else
+ {
+ width = 0;
+
+ while (isdigit(*format & 255))
+ {
+ if (tptr < (tformat + sizeof(tformat) - 1))
+ *tptr++ = *format;
+
+ width = width * 10 + *format++ - '0';
+ }
+ }
+
+ if (*format == '.')
+ {
+ if (tptr < (tformat + sizeof(tformat) - 1))
+ *tptr++ = *format;
+
+ format ++;
+
+ if (*format == '*')
+ {
+ /*
+ * Get precision from argument...
+ */
+
+ format ++;
+ prec = va_arg(ap, int);
+
+ snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", prec);
+ tptr += strlen(tptr);
+ }
+ else
+ {
+ prec = 0;
+
+ while (isdigit(*format & 255))
+ {
+ if (tptr < (tformat + sizeof(tformat) - 1))
+ *tptr++ = *format;
+
+ prec = prec * 10 + *format++ - '0';
+ }
+ }
+ }
+
+ if (*format == 'l' && format[1] == 'l')
+ {
+ size = 'L';
+
+ if (tptr < (tformat + sizeof(tformat) - 2))
+ {
+ *tptr++ = 'l';
+ *tptr++ = 'l';
+ }
+
+ format += 2;
+ }
+ else if (*format == 'h' || *format == 'l' || *format == 'L')
+ {
+ if (tptr < (tformat + sizeof(tformat) - 1))
+ *tptr++ = *format;
+
+ size = *format++;
+ }
+ else
+ size = 0;
+
+
+ if (!*format)
+ {
+ start = format;
+ break;
+ }
+
+ if (tptr < (tformat + sizeof(tformat) - 1))
+ *tptr++ = *format;
+
+ type = *format++;
+ *tptr = '\0';
+ start = format;
+
+ switch (type)
+ {
+ case 'E' : /* Floating point formats */
+ case 'G' :
+ case 'e' :
+ case 'f' :
+ case 'g' :
+ if ((size_t)(width + 2) > sizeof(temp))
+ break;
+
+ sprintf(temp, tformat, va_arg(ap, double));
+
+ httpWrite2(client->http, temp, strlen(temp));
+ break;
+
+ case 'B' : /* Integer formats */
+ case 'X' :
+ case 'b' :
+ case 'd' :
+ case 'i' :
+ case 'o' :
+ case 'u' :
+ case 'x' :
+ if ((size_t)(width + 2) > sizeof(temp))
+ break;
+
+# ifdef HAVE_LONG_LONG
+ if (size == 'L')
+ sprintf(temp, tformat, va_arg(ap, long long));
+ else
+# endif /* HAVE_LONG_LONG */
+ if (size == 'l')
+ sprintf(temp, tformat, va_arg(ap, long));
+ else
+ sprintf(temp, tformat, va_arg(ap, int));
+
+ httpWrite2(client->http, temp, strlen(temp));
+ break;
+
+ case 'p' : /* Pointer value */
+ if ((size_t)(width + 2) > sizeof(temp))
+ break;
+
+ sprintf(temp, tformat, va_arg(ap, void *));
+
+ httpWrite2(client->http, temp, strlen(temp));
+ break;
+
+ case 'c' : /* Character or character array */
+ if (width <= 1)
+ {
+ temp[0] = (char)va_arg(ap, int);
+ temp[1] = '\0';
+ html_escape(client, temp, 1);
+ }
+ else
+ html_escape(client, va_arg(ap, char *), (size_t)width);
+ break;
+
+ case 's' : /* String */
+ if ((s = va_arg(ap, char *)) == NULL)
+ s = "(null)";
+
+ html_escape(client, s, strlen(s));
+ break;
+ }
+ }
+ else
+ format ++;
+ }
+
+ if (format > start)
+ httpWrite2(client->http, start, (size_t)(format - start));
+
+ va_end(ap);
+}
+
+
+/*
+ * 'ipp_acknowledge_document()' - Acknowledge receipt of a document.
+ */
+
+static void
+ipp_acknowledge_document(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *attr; /* Attribute */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+ return;
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_acknowledge_identify_printer()' - Acknowledge an identify command.
+ */
+
+static void
+ipp_acknowledge_identify_printer(
+ _ipp_client_t *client) /* I - Client */
+{
+ // TODO: Implement this!
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_acknowledge_job()' - Acknowledge receipt of a job.
+ */
+
+static void
+ipp_acknowledge_job(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (job->dev_uuid && strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_AUTHORIZED, "Job not assigned to device.");
+ return;
+ }
+
+ if (!(job->state_reasons & _IPP_JREASON_JOB_FETCHABLE))
+ {
+ respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Job not fetchable.");
+ return;
+ }
+
+ if (!job->dev_uuid)
+ job->dev_uuid = strdup(device->uuid);
+
+ job->state_reasons &= (_ipp_jreason_t)~_IPP_JREASON_JOB_FETCHABLE;
+
+ add_event(client->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job acknowledged.");
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_cancel_job()' - Cancel a job.
+ */
+
+static void
+ipp_cancel_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job information */
+
+
+ /*
+ * Get the job...
+ */
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+ return;
+ }
+
+ /*
+ * See if the job is already completed, canceled, or aborted; if so,
+ * we can't cancel...
+ */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_CANCELED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is already canceled - can\'t cancel.", job->id);
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is already aborted - can\'t cancel.", job->id);
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is already completed - can\'t cancel.", job->id);
+ break;
+
+ default :
+ /*
+ * Cancel the job...
+ */
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ if (job->state == IPP_JSTATE_PROCESSING ||
+ (job->state == IPP_JSTATE_HELD && job->fd >= 0))
+ job->cancel = 1;
+ else
+ {
+ job->state = IPP_JSTATE_CANCELED;
+ job->completed = time(NULL);
+ }
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ add_event(client->printer, job, _IPP_EVENT_JOB_COMPLETED, NULL);
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ break;
+ }
+}
+
+
+/*
+ * 'ipp_cancel_my_jobs()' - Cancel a user's jobs.
+ */
+
+static void
+ipp_cancel_my_jobs(
+ _ipp_client_t *client) /* I - Client */
+{
+ // TODO: Implement this!
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_cancel_subscription()' - Cancel a subscription.
+ */
+
+static void
+ipp_cancel_subscription(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_subscription_t *sub; /* Subscription */
+
+
+ if ((sub = find_subscription(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+ return;
+ }
+
+ _cupsRWLockWrite(&client->printer->rwlock);
+ cupsArrayRemove(client->printer->subscriptions, sub);
+ delete_subscription(sub);
+ _cupsRWUnlock(&client->printer->rwlock);
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_close_job()' - Close an open job.
+ */
+
+static void
+ipp_close_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job information */
+
+
+ /*
+ * Get the job...
+ */
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+ return;
+ }
+
+ /*
+ * See if the job is already completed, canceled, or aborted; if so,
+ * we can't cancel...
+ */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_CANCELED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is canceled - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is aborted - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is completed - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ case IPP_JSTATE_STOPPED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is already closed.", job->id);
+ break;
+
+ default :
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ break;
+ }
+}
+
+
+/*
+ * 'ipp_create_job()' - Create a job object.
+ */
+
+static void
+ipp_create_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* New job */
+ cups_array_t *ra; /* Attributes to send in response */
+
+
+ /*
+ * Validate print job attributes...
+ */
+
+ if (!valid_job_attributes(client))
+ {
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Do we have a file to print?
+ */
+
+ if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Unexpected document data following request.");
+ return;
+ }
+
+ /*
+ * Create the job...
+ */
+
+ if ((job = create_job(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_TOO_MANY_JOBS, "Too many jobs are queued.");
+ return;
+ }
+
+ /*
+ * Return the job info...
+ */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+ cupsArrayAdd(ra, "job-id");
+ cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-message");
+ cupsArrayAdd(ra, "job-state-reasons");
+ cupsArrayAdd(ra, "job-uri");
+
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+
+ /*
+ * Add any subscriptions...
+ */
+
+ client->job = job;
+ ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_create_xxx_subscriptions()' - Create job and printer subscriptions.
+ */
+
+static void
+ipp_create_xxx_subscriptions(
+ _ipp_client_t *client)
+{
+ _ipp_subscription_t *sub; /* Subscription */
+ ipp_attribute_t *attr; /* Subscription attribute */
+ const char *username; /* requesting-user-name or
+ authenticated username */
+ int num_subs = 0, /* Number of subscriptions */
+ ok_subs = 0; /* Number of good subscriptions */
+
+
+ /*
+ * For the Create-xxx-Subscriptions operations, queue up a successful-ok
+ * response...
+ */
+
+ if (ippGetOperation(client->request) == IPP_OP_CREATE_JOB_SUBSCRIPTIONS || ippGetOperation(client->request) == IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS)
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ /*
+ * Get the authenticated user name, if any...
+ */
+
+ if (client->username[0])
+ username = client->username;
+ else if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL && ippGetGroupTag(attr) == IPP_TAG_OPERATION && ippGetCount(attr) == 1)
+ username = ippGetString(attr, 0, NULL);
+ else
+ username = "guest";
+
+ /*
+ * Skip past the initial attributes to the first subscription group.
+ */
+
+ attr = ippFirstAttribute(client->request);
+ while (attr && ippGetGroupTag(attr) != IPP_TAG_SUBSCRIPTION)
+ attr = ippNextAttribute(client->request);
+
+ while (attr)
+ {
+ _ipp_job_t *job = NULL; /* Job */
+ const char *attrname, /* Attribute name */
+ *pullmethod = NULL;
+ /* notify-pull-method */
+ ipp_attribute_t *notify_attributes = NULL,
+ /* notify-attributes */
+ *notify_events = NULL,
+ /* notify-events */
+ *notify_user_data = NULL;
+ /* notify-user-data */
+ int interval = 0, /* notify-time-interval */
+ lease = _IPP_NOTIFY_LEASE_DURATION_DEFAULT;
+ /* notify-lease-duration */
+ ipp_status_t status = IPP_STATUS_OK;
+ /* notify-status-code */
+
+ num_subs ++;
+
+ while (attr)
+ {
+ if ((attrname = ippGetName(attr)) == NULL)
+ break;
+
+ if (!strcmp(attrname, "notify-recipient-uri"))
+ {
+ /*
+ * Push notifications not supported.
+ */
+
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else if (!strcmp(attrname, "notify-pull-method"))
+ {
+ pullmethod = ippGetString(attr, 0, NULL);
+
+ if (ippGetValueTag(attr) != IPP_TAG_KEYWORD || ippGetCount(attr) != 1 || !pullmethod || strcmp(pullmethod, "ippget"))
+ {
+ ippCopyAttribute(client->response, attr, 0);
+ pullmethod = NULL;
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ }
+ }
+ else if (!strcmp(attrname, "notify-attributes"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+
+ notify_attributes = attr;
+ }
+ else if (!strcmp(attrname, "notify-charset"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_CHARSET || ippGetCount(attr) != 1 ||
+ (strcmp(ippGetString(attr, 0, NULL), "us-ascii") && strcmp(ippGetString(attr, 0, NULL), "utf-8")))
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ }
+ else if (!strcmp(attrname, "notify-natural-language"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_LANGUAGE || ippGetCount(attr) != 1 || strcmp(ippGetString(attr, 0, NULL), "en"))
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ }
+ else if (!strcmp(attrname, "notify-user-data"))
+ {
+ int datalen; /* Length of data */
+
+ if (ippGetValueTag(attr) != IPP_TAG_STRING || ippGetCount(attr) != 1 || !ippGetOctetString(attr, 0, &datalen) || datalen > 63)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else
+ notify_user_data = attr;
+ }
+ else if (!strcmp(attrname, "notify-events"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else
+ notify_events = attr;
+ }
+ else if (!strcmp(attrname, "notify-lease-duration"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else
+ lease = ippGetInteger(attr, 0);
+ }
+ else if (!strcmp(attrname, "notify-time-interval"))
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else
+ interval = ippGetInteger(attr, 0);
+ }
+ else if (!strcmp(attrname, "notify-job-id"))
+ {
+ if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB_SUBSCRIPTIONS || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 1)
+ {
+ status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ else if ((job = find_job(client, ippGetInteger(attr, 0))) == NULL)
+ {
+ status = IPP_STATUS_ERROR_NOT_FOUND;
+ ippCopyAttribute(client->response, attr, 0);
+ }
+ }
+
+ attr = ippNextAttribute(client->request);
+ }
+
+ if (status)
+ {
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", status);
+ }
+ else if (!pullmethod)
+ {
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_BAD_REQUEST);
+ }
+ else
+ {
+ switch (ippGetOperation(client->request))
+ {
+ case IPP_OP_PRINT_JOB :
+ case IPP_OP_PRINT_URI :
+ case IPP_OP_CREATE_JOB :
+ job = client->job;
+ break;
+
+ default :
+ break;
+ }
+
+ if ((sub = create_subscription(client->printer, job, interval, lease, username, notify_events, notify_attributes, notify_user_data)) == NULL)
+ {
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id);
+ ok_subs ++;
+ }
+ else
+ ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_INTERNAL);
+ }
+ }
+
+ if (ok_subs == 0)
+ ippSetStatusCode(client->response, IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS);
+ else if (ok_subs != num_subs)
+ ippSetStatusCode(client->response, IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS);
+}
+
+
+/*
+ * 'ipp_deregister_output_device()' - Unregister an output device.
+ */
+
+static void
+ipp_deregister_output_device(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+
+
+ /*
+ * Find the device...
+ */
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Output device not found.");
+ return;
+ }
+
+ /*
+ * Remove the device from the printer...
+ */
+
+ _cupsRWLockWrite(&client->printer->rwlock);
+
+ cupsArrayRemove(client->printer->devices, device);
+
+ update_device_attributes_no_lock(client->printer);
+ update_device_state_no_lock(client->printer);
+
+ _cupsRWUnlock(&client->printer->rwlock);
+
+ /*
+ * Delete the device...
+ */
+
+ delete_device(device);
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_fetch_document()' - Download a document.
+ */
+
+static void
+ipp_fetch_document(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *attr; /* Attribute */
+ int compression; /* compression */
+ char filename[1024]; /* Job filename */
+ const char *format; /* document-format */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "compression-accepted", IPP_TAG_KEYWORD)) != NULL)
+ compression = !strcmp(ippGetString(attr, 0, NULL), "gzip");
+ else
+ compression = 0;
+
+ if ((attr = ippFindAttribute(client->request, "document-format-accepted", IPP_TAG_MIMETYPE)) != NULL)
+ {
+ int i, /* Looping var */
+ count = ippGetCount(attr); /* Number of values */
+
+
+ for (i = 0; i < count; i ++)
+ {
+ format = ippGetString(attr, i, NULL);
+
+ create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+ if (!access(filename, R_OK))
+ break;
+ }
+
+ if (i >= count)
+ {
+ respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Document not available in requested format.");
+ return;
+ }
+ }
+ else if ((attr = ippFindAttribute(job->attrs, "document-format", IPP_TAG_MIMETYPE)) != NULL)
+ format = ippGetString(attr, 0, NULL);
+ else
+ {
+ respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Document format unknown.");
+ return;
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ ippAddString(client->response, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
+ ippAddString(client->response, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression ? "gzip" : "none");
+
+ client->fetch_file = open(filename, O_RDONLY);
+}
+
+
+/*
+ * 'ipp_fetch_job()' - Download a job.
+ */
+
+static void
+ipp_fetch_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (job->dev_uuid && strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+ return;
+ }
+
+ if (!(job->state_reasons & _IPP_JREASON_JOB_FETCHABLE))
+ {
+ respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Job not fetchable.");
+ return;
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ copy_attributes(client->response, job->attrs, NULL, IPP_TAG_JOB, 0);
+}
+
+
+/*
+ * 'ipp_get_document_attributes()' - Get the attributes for a document object.
+ *
+ * Note: This implementation only supports single document jobs so we
+ * synthesize the information for a single document from the job.
+ */
+
+static void
+ipp_get_document_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ // TODO: Implement this!
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_documents()' - Get the list of documents in a job.
+ *
+ * Note: This implementation only supports single document jobs so we
+ * synthesize the information for a single document from the job.
+ */
+
+static void
+ipp_get_documents(_ipp_client_t *client)/* I - Client */
+{
+ // TODO: Implement this!
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_job_attributes()' - Get the attributes for a job object.
+ */
+
+static void
+ipp_get_job_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job */
+ cups_array_t *ra; /* requested-attributes */
+
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job not found.");
+ return;
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = ippCreateRequestedArray(client->request);
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_jobs()' - Get a list of job objects.
+ */
+
+static void
+ipp_get_jobs(_ipp_client_t *client) /* I - Client */
+{
+ ipp_attribute_t *attr; /* Current attribute */
+ const char *which_jobs = NULL;
+ /* which-jobs values */
+ int job_comparison; /* Job comparison */
+ ipp_jstate_t job_state; /* job-state value */
+ int first_job_id, /* First job ID */
+ limit, /* Maximum number of jobs to return */
+ count; /* Number of jobs that match */
+ const char *username; /* Username */
+ _ipp_job_t *job; /* Current job pointer */
+ cups_array_t *ra; /* Requested attributes array */
+
+
+ /*
+ * See if the "which-jobs" attribute have been specified...
+ */
+
+ if ((attr = ippFindAttribute(client->request, "which-jobs",
+ IPP_TAG_KEYWORD)) != NULL)
+ {
+ which_jobs = ippGetString(attr, 0, NULL);
+ fprintf(stderr, "%s Get-Jobs which-jobs=%s", client->hostname, which_jobs);
+ }
+
+ if (!which_jobs || !strcmp(which_jobs, "not-completed"))
+ {
+ job_comparison = -1;
+ job_state = IPP_JSTATE_STOPPED;
+ }
+ else if (!strcmp(which_jobs, "completed"))
+ {
+ job_comparison = 1;
+ job_state = IPP_JSTATE_CANCELED;
+ }
+ else if (!strcmp(which_jobs, "aborted"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_ABORTED;
+ }
+ else if (!strcmp(which_jobs, "all"))
+ {
+ job_comparison = 1;
+ job_state = IPP_JSTATE_PENDING;
+ }
+ else if (!strcmp(which_jobs, "canceled"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_CANCELED;
+ }
+ else if (!strcmp(which_jobs, "pending"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_PENDING;
+ }
+ else if (!strcmp(which_jobs, "pending-held"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_HELD;
+ }
+ else if (!strcmp(which_jobs, "processing"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_PROCESSING;
+ }
+ else if (!strcmp(which_jobs, "processing-stopped"))
+ {
+ job_comparison = 0;
+ job_state = IPP_JSTATE_STOPPED;
+ }
+ else
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+ "The which-jobs value \"%s\" is not supported.", which_jobs);
+ ippAddString(client->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD,
+ "which-jobs", NULL, which_jobs);
+ return;
+ }
+
+ /*
+ * See if they want to limit the number of jobs reported...
+ */
+
+ if ((attr = ippFindAttribute(client->request, "limit",
+ IPP_TAG_INTEGER)) != NULL)
+ {
+ limit = ippGetInteger(attr, 0);
+
+ fprintf(stderr, "%s Get-Jobs limit=%d", client->hostname, limit);
+ }
+ else
+ limit = 0;
+
+ if ((attr = ippFindAttribute(client->request, "first-job-id",
+ IPP_TAG_INTEGER)) != NULL)
+ {
+ first_job_id = ippGetInteger(attr, 0);
+
+ fprintf(stderr, "%s Get-Jobs first-job-id=%d", client->hostname,
+ first_job_id);
+ }
+ else
+ first_job_id = 1;
+
+ /*
+ * See if we only want to see jobs for a specific user...
+ */
+
+ username = NULL;
+
+ if ((attr = ippFindAttribute(client->request, "my-jobs",
+ IPP_TAG_BOOLEAN)) != NULL)
+ {
+ int my_jobs = ippGetBoolean(attr, 0);
+
+ fprintf(stderr, "%s Get-Jobs my-jobs=%s\n", client->hostname,
+ my_jobs ? "true" : "false");
+
+ if (my_jobs)
+ {
+ if ((attr = ippFindAttribute(client->request, "requesting-user-name",
+ IPP_TAG_NAME)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Need requesting-user-name with my-jobs.");
+ return;
+ }
+
+ username = ippGetString(attr, 0, NULL);
+
+ fprintf(stderr, "%s Get-Jobs requesting-user-name=\"%s\"\n",
+ client->hostname, username);
+ }
+ }
+
+ /*
+ * OK, build a list of jobs for this printer...
+ */
+
+ ra = ippCreateRequestedArray(client->request);
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ _cupsRWLockRead(&(client->printer->rwlock));
+
+ for (count = 0, job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs);
+ (limit <= 0 || count < limit) && job;
+ job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+ {
+ /*
+ * Filter out jobs that don't match...
+ */
+
+ if ((job_comparison < 0 && job->state > job_state) ||
+ (job_comparison == 0 && job->state != job_state) ||
+ (job_comparison > 0 && job->state < job_state) ||
+ job->id < first_job_id ||
+ (username && job->username &&
+ strcasecmp(username, job->username)))
+ continue;
+
+ if (count > 0)
+ ippAddSeparator(client->response);
+
+ count ++;
+ copy_job_attributes(client, job, ra);
+ }
+
+ cupsArrayDelete(ra);
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+}
+
+
+/*
+ * 'ipp_get_notifications()' - Get notification events for one or more subscriptions.
+ */
+
+static void
+ipp_get_notifications(
+ _ipp_client_t *client) /* I - Client */
+{
+ ipp_attribute_t *sub_ids, /* notify-subscription-ids */
+ *seq_nums, /* notify-sequence-numbers */
+ *notify_wait; /* Wait for events? */
+ int i, /* Looping vars */
+ count, /* Number of IDs */
+ first = 1, /* First event? */
+ seq_num; /* Sequence number */
+ _ipp_subscription_t *sub; /* Current subscription */
+ ipp_t *event; /* Current event */
+
+
+ if ((sub_ids = ippFindAttribute(client->request, "notify-subscription-ids", IPP_TAG_INTEGER)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing notify-subscription-ids attribute.");
+ return;
+ }
+
+ count = ippGetCount(sub_ids);
+ seq_nums = ippFindAttribute(client->request, "notify-sequence-numbers", IPP_TAG_INTEGER);
+ notify_wait = ippFindAttribute(client->request, "notify-wait", IPP_TAG_BOOLEAN);
+
+ if (seq_nums && count != ippGetCount(seq_nums))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The notify-subscription-ids and notify-sequence-numbers attributes are different lengths.");
+ return;
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ ippAddInteger(client->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-get-interval", 30);
+
+ for (i = 0; i < count; i ++)
+ {
+ if ((sub = find_subscription(client, ippGetInteger(sub_ids, i))) == NULL)
+ continue;
+
+ seq_num = ippGetInteger(seq_nums, i);
+ if (seq_num < sub->first_sequence)
+ seq_num = sub->first_sequence;
+
+ if (seq_num > sub->last_sequence)
+ continue;
+
+ for (event = (ipp_t *)cupsArrayIndex(sub->events, seq_num - sub->first_sequence);
+ event;
+ event = (ipp_t *)cupsArrayNext(sub->events))
+ {
+ if (first)
+ first = 0;
+ else
+ ippAddSeparator(client->response);
+
+ ippCopyAttributes(client->response, event, 0, NULL, NULL);
+ }
+ }
+}
+
+
+/*
+ * 'ipp_get_output_device_attributes()' - Get attributes for an output device.
+ */
+
+static void
+ipp_get_output_device_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ // TODO: Implement this!
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_printer_attributes()' - Get the attributes for a printer object.
+ */
+
+static void
+ipp_get_printer_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ cups_array_t *ra; /* Requested attributes array */
+ _ipp_printer_t *printer; /* Printer */
+
+
+ /*
+ * Send the attributes...
+ */
+
+ ra = ippCreateRequestedArray(client->request);
+ printer = client->printer;
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ _cupsRWLockRead(&(printer->rwlock));
+
+ copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
+ IPP_TAG_CUPS_CONST);
+ copy_attributes(client->response, printer->dev_attrs, ra, IPP_TAG_ZERO, IPP_TAG_ZERO);
+
+ if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", (int)(printer->config_time - printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-current-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
+
+
+ if (!ra || cupsArrayFind(ra, "printer-state"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM,
+ "printer-state", printer->state > printer->dev_state ? printer->state : printer->dev_state);
+
+ if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", (int)(printer->state_time - printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-state-message"))
+ {
+ static const char * const messages[] = { "Idle.", "Printing.", "Stopped." };
+
+ if (printer->state > printer->dev_state)
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->state - IPP_PSTATE_IDLE]);
+ else
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->dev_state - IPP_PSTATE_IDLE]);
+ }
+
+ if (!ra || cupsArrayFind(ra, "printer-state-reasons"))
+ copy_printer_state_reasons(client->response, IPP_TAG_PRINTER, printer);
+
+ if (!ra || cupsArrayFind(ra, "printer-up-time"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "queued-job-count"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", cupsArrayCount(printer->active_jobs));
+
+ _cupsRWUnlock(&(printer->rwlock));
+
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_printer_supported_values()' - Return the supported values for
+ * the infrastructure printer.
+ */
+
+static void
+ipp_get_printer_supported_values(
+ _ipp_client_t *client) /* I - Client */
+{
+ cups_array_t *ra = ippCreateRequestedArray(client->request);
+ /* Requested attributes */
+
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ copy_attributes(client->response, client->printer->attrs, ra, IPP_TAG_PRINTER, 1);
+
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_subscription_attributes()' - Get attributes for a subscription.
+ */
+
+static void
+ipp_get_subscription_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_subscription_t *sub; /* Subscription */
+ cups_array_t *ra = ippCreateRequestedArray(client->request);
+ /* Requested attributes */
+
+
+ if ((sub = find_subscription(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+ }
+ else
+ {
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ copy_subscription_attributes(client, sub, ra);
+ }
+
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_subscriptions()' - Get attributes for all subscriptions.
+ */
+
+static void
+ipp_get_subscriptions(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_subscription_t *sub; /* Current subscription */
+ cups_array_t *ra = ippCreateRequestedArray(client->request);
+ /* Requested attributes */
+ int first = 1; /* First time? */
+
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ _cupsRWLockRead(&client->printer->rwlock);
+ for (sub = (_ipp_subscription_t *)cupsArrayFirst(client->printer->subscriptions);
+ sub;
+ sub = (_ipp_subscription_t *)cupsArrayNext(client->printer->subscriptions))
+ {
+ if (first)
+ first = 0;
+ else
+ ippAddSeparator(client->response);
+
+ copy_subscription_attributes(client, sub, ra);
+ }
+
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_identify_printer()' - Beep or display a message.
+ */
+
+static void
+ipp_identify_printer(
+ _ipp_client_t *client) /* I - Client */
+{
+ /* TODO: Do something */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_print_job()' - Create a job object with an attached document.
+ */
+
+static void
+ipp_print_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* New job */
+ char filename[1024], /* Filename buffer */
+ buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes read */
+ cups_array_t *ra; /* Attributes to send in response */
+
+
+ /*
+ * Validate print job attributes...
+ */
+
+ if (!valid_job_attributes(client))
+ {
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Do we have a file to print?
+ */
+
+ if (httpGetState(client->http) == HTTP_STATE_POST_SEND)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No file in request.");
+ return;
+ }
+
+ /*
+ * Print the job...
+ */
+
+ if ((job = create_job(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BUSY,
+ "Currently printing another job.");
+ return;
+ }
+
+ /*
+ * Create a file for the request data...
+ */
+
+ create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+ if (Verbosity)
+ fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
+
+ if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0)
+ {
+ job->state = IPP_JSTATE_ABORTED;
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to create print file: %s", strerror(errno));
+ return;
+ }
+
+ while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0)
+ {
+ if (write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+
+ if (bytes < 0)
+ {
+ /*
+ * Got an error while reading the print data, so abort this job.
+ */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to read print file.");
+ return;
+ }
+
+ if (close(job->fd))
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+
+ job->fd = -1;
+ job->filename = strdup(filename);
+ job->state = IPP_JSTATE_PENDING;
+
+ /*
+ * Process the job, if possible...
+ */
+
+ check_jobs(client->printer);
+
+ /*
+ * Return the job info...
+ */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+ cupsArrayAdd(ra, "job-id");
+ cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-message");
+ cupsArrayAdd(ra, "job-state-reasons");
+ cupsArrayAdd(ra, "job-uri");
+
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+
+ /*
+ * Process any pending subscriptions...
+ */
+
+ client->job = job;
+ ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_print_uri()' - Create a job object with a referenced document.
+ */
+
+static void
+ipp_print_uri(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* New job */
+ ipp_attribute_t *uri; /* document-uri */
+ char scheme[256], /* URI scheme */
+ userpass[256], /* Username and password info */
+ hostname[256], /* Hostname */
+ resource[1024]; /* Resource path */
+ int port; /* Port number */
+ http_uri_status_t uri_status; /* URI decode status */
+ http_encryption_t encryption; /* Encryption to use, if any */
+ http_t *http; /* Connection for http/https URIs */
+ http_status_t status; /* Access status for http/https URIs */
+ int infile; /* Input file for local file URIs */
+ char filename[1024], /* Filename buffer */
+ buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes read */
+ cups_array_t *ra; /* Attributes to send in response */
+ static const char * const uri_status_strings[] =
+ { /* URI decode errors */
+ "URI too large.",
+ "Bad arguments to function.",
+ "Bad resource in URI.",
+ "Bad port number in URI.",
+ "Bad hostname in URI.",
+ "Bad username in URI.",
+ "Bad scheme in URI.",
+ "Bad/empty URI."
+ };
+
+
+ /*
+ * Validate print job attributes...
+ */
+
+ if (!valid_job_attributes(client))
+ {
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Do we have a file to print?
+ */
+
+ if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Unexpected document data following request.");
+ return;
+ }
+
+ /*
+ * Do we have a document URI?
+ */
+
+ if ((uri = ippFindAttribute(client->request, "document-uri",
+ IPP_TAG_URI)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri.");
+ return;
+ }
+
+ if (ippGetCount(uri) != 1)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Too many document-uri values.");
+ return;
+ }
+
+ uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+ scheme, sizeof(scheme), userpass,
+ sizeof(userpass), hostname, sizeof(hostname),
+ &port, resource, sizeof(resource));
+ if (uri_status < HTTP_URI_STATUS_OK)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s",
+ uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]);
+ return;
+ }
+
+ if (strcmp(scheme, "file") &&
+#ifdef HAVE_SSL
+ strcmp(scheme, "https") &&
+#endif /* HAVE_SSL */
+ strcmp(scheme, "http"))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME,
+ "URI scheme \"%s\" not supported.", scheme);
+ return;
+ }
+
+ if (!strcmp(scheme, "file") && access(resource, R_OK))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to access URI: %s", strerror(errno));
+ return;
+ }
+
+ /*
+ * Print the job...
+ */
+
+ if ((job = create_job(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BUSY,
+ "Currently printing another job.");
+ return;
+ }
+
+ /*
+ * Create a file for the request data...
+ */
+
+ if (!strcasecmp(job->format, "image/jpeg"))
+ snprintf(filename, sizeof(filename), "%s/%d.jpg",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "image/png"))
+ snprintf(filename, sizeof(filename), "%s/%d.png",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "application/pdf"))
+ snprintf(filename, sizeof(filename), "%s/%d.pdf",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "application/postscript"))
+ snprintf(filename, sizeof(filename), "%s/%d.ps",
+ client->printer->directory, job->id);
+ else
+ snprintf(filename, sizeof(filename), "%s/%d.prn",
+ client->printer->directory, job->id);
+
+ if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0)
+ {
+ job->state = IPP_JSTATE_ABORTED;
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to create print file: %s", strerror(errno));
+ return;
+ }
+
+ if (!strcmp(scheme, "file"))
+ {
+ if ((infile = open(resource, O_RDONLY)) < 0)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to access URI: %s", strerror(errno));
+ return;
+ }
+
+ do
+ {
+ if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 &&
+ (errno == EAGAIN || errno == EINTR))
+ bytes = 1;
+ else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ close(infile);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+ while (bytes > 0);
+
+ close(infile);
+ }
+ else
+ {
+#ifdef HAVE_SSL
+ if (port == 443 || !strcmp(scheme, "https"))
+ encryption = HTTP_ENCRYPTION_ALWAYS;
+ else
+#endif /* HAVE_SSL */
+ encryption = HTTP_ENCRYPTION_IF_REQUESTED;
+
+ if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption,
+ 1, 30000, NULL)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to connect to %s: %s", hostname,
+ cupsLastErrorString());
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ return;
+ }
+
+ httpClearFields(http);
+ httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
+ if (httpGet(http, resource))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to GET URI: %s", strerror(errno));
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+ return;
+ }
+
+ while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
+
+ if (status != HTTP_STATUS_OK)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to GET URI: %s", httpStatus(status));
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+ return;
+ }
+
+ while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0)
+ {
+ if (write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+
+ httpClose(http);
+ }
+
+ if (close(job->fd))
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+
+ job->fd = -1;
+ job->filename = strdup(filename);
+ job->state = IPP_JSTATE_PENDING;
+
+ /* TODO: Do something different here - only process if the printer is idle */
+ /*
+ * Process the job...
+ */
+
+ check_jobs(client->printer);
+
+ /*
+ * Return the job info...
+ */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+ cupsArrayAdd(ra, "job-id");
+ cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-reasons");
+ cupsArrayAdd(ra, "job-uri");
+
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+
+ /*
+ * Process any pending subscriptions...
+ */
+
+ client->job = job;
+ ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_renew_subscription()' - Renew a subscription.
+ */
+
+static void
+ipp_renew_subscription(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_subscription_t *sub; /* Subscription */
+ ipp_attribute_t *attr; /* notify-lease-duration */
+ int lease; /* Lease duration in seconds */
+
+
+ if ((sub = find_subscription(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+ return;
+ }
+
+ if (sub->job)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Per-job subscriptions cannot be renewed.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "notify-lease-duration", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetGroupTag(attr) != IPP_TAG_SUBSCRIPTION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, "Bad notify-lease-duration.");
+ return;
+ }
+
+ lease = ippGetInteger(attr, 0);
+ }
+ else
+ lease = _IPP_NOTIFY_LEASE_DURATION_DEFAULT;
+
+ sub->lease = lease;
+
+ if (lease)
+ sub->expire = time(NULL) + sub->lease;
+ else
+ sub->expire = INT_MAX;
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_send_document()' - Add an attached document to a job object created with
+ * Create-Job.
+ */
+
+static void
+ipp_send_document(_ipp_client_t *client)/* I - Client */
+{
+ _ipp_job_t *job; /* Job information */
+ char filename[1024], /* Filename buffer */
+ buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes read */
+ ipp_attribute_t *attr; /* Current attribute */
+ cups_array_t *ra; /* Attributes to send in response */
+
+
+ /*
+ * Get the job...
+ */
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * See if we already have a document for this job or the job has already
+ * in a non-pending state...
+ */
+
+ if (job->state > IPP_JSTATE_HELD)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job is not in a pending state.");
+ httpFlush(client->http);
+ return;
+ }
+ else if (job->filename || job->fd >= 0)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED,
+ "Multiple document jobs are not supported.");
+ httpFlush(client->http);
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "last-document",
+ IPP_TAG_ZERO)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Missing required last-document attribute.");
+ httpFlush(client->http);
+ return;
+ }
+ else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 ||
+ !ippGetBoolean(attr, 0))
+ {
+ respond_unsupported(client, attr);
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Validate document attributes...
+ */
+
+ if (!valid_doc_attributes(client))
+ {
+ httpFlush(client->http);
+ return;
+ }
+
+ copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
+ /*
+ * Get the document format for the job...
+ */
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else
+ job->format = "application/octet-stream";
+
+ /*
+ * Create a file for the request data...
+ */
+
+ create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+ if (Verbosity)
+ fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
+
+ job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ if (job->fd < 0)
+ {
+ job->state = IPP_JSTATE_ABORTED;
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to create print file: %s", strerror(errno));
+ return;
+ }
+
+ while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0)
+ {
+ if (write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+
+ if (bytes < 0)
+ {
+ /*
+ * Got an error while reading the print data, so abort this job.
+ */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to read print file.");
+ return;
+ }
+
+ if (close(job->fd))
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ job->fd = -1;
+ job->filename = strdup(filename);
+ job->state = IPP_JSTATE_PENDING;
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ /*
+ * Process the job, if possible...
+ */
+
+ check_jobs(client->printer);
+
+ /*
+ * Return the job info...
+ */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+ cupsArrayAdd(ra, "job-id");
+ cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-reasons");
+ cupsArrayAdd(ra, "job-uri");
+
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_send_uri()' - Add a referenced document to a job object created with
+ * Create-Job.
+ */
+
+static void
+ipp_send_uri(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job information */
+ ipp_attribute_t *uri; /* document-uri */
+ char scheme[256], /* URI scheme */
+ userpass[256], /* Username and password info */
+ hostname[256], /* Hostname */
+ resource[1024]; /* Resource path */
+ int port; /* Port number */
+ http_uri_status_t uri_status; /* URI decode status */
+ http_encryption_t encryption; /* Encryption to use, if any */
+ http_t *http; /* Connection for http/https URIs */
+ http_status_t status; /* Access status for http/https URIs */
+ int infile; /* Input file for local file URIs */
+ char filename[1024], /* Filename buffer */
+ buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes read */
+ ipp_attribute_t *attr; /* Current attribute */
+ cups_array_t *ra; /* Attributes to send in response */
+ static const char * const uri_status_strings[] =
+ { /* URI decode errors */
+ "URI too large.",
+ "Bad arguments to function.",
+ "Bad resource in URI.",
+ "Bad port number in URI.",
+ "Bad hostname in URI.",
+ "Bad username in URI.",
+ "Bad scheme in URI.",
+ "Bad/empty URI."
+ };
+
+
+ /*
+ * Get the job...
+ */
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * See if we already have a document for this job or the job has already
+ * in a non-pending state...
+ */
+
+ if (job->state > IPP_JSTATE_HELD)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job is not in a pending state.");
+ httpFlush(client->http);
+ return;
+ }
+ else if (job->filename || job->fd >= 0)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED,
+ "Multiple document jobs are not supported.");
+ httpFlush(client->http);
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "last-document",
+ IPP_TAG_ZERO)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Missing required last-document attribute.");
+ httpFlush(client->http);
+ return;
+ }
+ else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 ||
+ !ippGetBoolean(attr, 0))
+ {
+ respond_unsupported(client, attr);
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Validate document attributes...
+ */
+
+ if (!valid_doc_attributes(client))
+ {
+ httpFlush(client->http);
+ return;
+ }
+
+ /*
+ * Do we have a file to print?
+ */
+
+ if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Unexpected document data following request.");
+ return;
+ }
+
+ /*
+ * Do we have a document URI?
+ */
+
+ if ((uri = ippFindAttribute(client->request, "document-uri",
+ IPP_TAG_URI)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri.");
+ return;
+ }
+
+ if (ippGetCount(uri) != 1)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Too many document-uri values.");
+ return;
+ }
+
+ uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+ scheme, sizeof(scheme), userpass,
+ sizeof(userpass), hostname, sizeof(hostname),
+ &port, resource, sizeof(resource));
+ if (uri_status < HTTP_URI_STATUS_OK)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s",
+ uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]);
+ return;
+ }
+
+ if (strcmp(scheme, "file") &&
+#ifdef HAVE_SSL
+ strcmp(scheme, "https") &&
+#endif /* HAVE_SSL */
+ strcmp(scheme, "http"))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME,
+ "URI scheme \"%s\" not supported.", scheme);
+ return;
+ }
+
+ if (!strcmp(scheme, "file") && access(resource, R_OK))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to access URI: %s", strerror(errno));
+ return;
+ }
+
+ /*
+ * Get the document format for the job...
+ */
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ if ((attr = ippFindAttribute(job->attrs, "document-format",
+ IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else
+ job->format = "application/octet-stream";
+
+ /*
+ * Create a file for the request data...
+ */
+
+ if (!strcasecmp(job->format, "image/jpeg"))
+ snprintf(filename, sizeof(filename), "%s/%d.jpg",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "image/png"))
+ snprintf(filename, sizeof(filename), "%s/%d.png",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "application/pdf"))
+ snprintf(filename, sizeof(filename), "%s/%d.pdf",
+ client->printer->directory, job->id);
+ else if (!strcasecmp(job->format, "application/postscript"))
+ snprintf(filename, sizeof(filename), "%s/%d.ps",
+ client->printer->directory, job->id);
+ else
+ snprintf(filename, sizeof(filename), "%s/%d.prn",
+ client->printer->directory, job->id);
+
+ job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ if (job->fd < 0)
+ {
+ job->state = IPP_JSTATE_ABORTED;
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to create print file: %s", strerror(errno));
+ return;
+ }
+
+ if (!strcmp(scheme, "file"))
+ {
+ if ((infile = open(resource, O_RDONLY)) < 0)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to access URI: %s", strerror(errno));
+ return;
+ }
+
+ do
+ {
+ if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 &&
+ (errno == EAGAIN || errno == EINTR))
+ bytes = 1;
+ else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ close(infile);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+ while (bytes > 0);
+
+ close(infile);
+ }
+ else
+ {
+#ifdef HAVE_SSL
+ if (port == 443 || !strcmp(scheme, "https"))
+ encryption = HTTP_ENCRYPTION_ALWAYS;
+ else
+#endif /* HAVE_SSL */
+ encryption = HTTP_ENCRYPTION_IF_REQUESTED;
+
+ if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption,
+ 1, 30000, NULL)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to connect to %s: %s", hostname,
+ cupsLastErrorString());
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ return;
+ }
+
+ httpClearFields(http);
+ httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
+ if (httpGet(http, resource))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to GET URI: %s", strerror(errno));
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+ return;
+ }
+
+ while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
+
+ if (status != HTTP_STATUS_OK)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+ "Unable to GET URI: %s", httpStatus(status));
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+ return;
+ }
+
+ while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0)
+ {
+ if (write(job->fd, buffer, (size_t)bytes) < bytes)
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+
+ close(job->fd);
+ job->fd = -1;
+
+ unlink(filename);
+ httpClose(http);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+ }
+
+ httpClose(http);
+ }
+
+ if (close(job->fd))
+ {
+ int error = errno; /* Write error */
+
+ job->state = IPP_JSTATE_ABORTED;
+ job->fd = -1;
+
+ unlink(filename);
+
+ respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+ "Unable to write print file: %s", strerror(error));
+ return;
+ }
+
+ _cupsRWLockWrite(&(client->printer->rwlock));
+
+ job->fd = -1;
+ job->filename = strdup(filename);
+ job->state = IPP_JSTATE_PENDING;
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+
+ /*
+ * Process the job, if possible...
+ */
+
+ check_jobs(client->printer);
+
+ /*
+ * Return the job info...
+ */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+ cupsArrayAdd(ra, "job-id");
+ cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-reasons");
+ cupsArrayAdd(ra, "job-uri");
+
+ copy_job_attributes(client, job, ra);
+ cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_update_active_jobs()' - Update the list of active jobs.
+ */
+
+static void
+ipp_update_active_jobs(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Output device */
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *job_ids, /* job-ids */
+ *job_states; /* output-device-job-states */
+ int i, /* Looping var */
+ count, /* Number of values */
+ num_different = 0,
+ /* Number of jobs with different states */
+ different[1000],/* Jobs with different states */
+ num_unsupported = 0,
+ /* Number of unsupported job-ids */
+ unsupported[1000];
+ /* Unsupported job-ids */
+ ipp_jstate_t states[1000]; /* Different job state values */
+
+
+ /*
+ * Process the job-ids and output-device-job-states values...
+ */
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job_ids = ippFindAttribute(client->request, "job-ids", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(job_ids) != IPP_TAG_OPERATION || ippGetValueTag(job_ids) != IPP_TAG_INTEGER)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, job_ids ? "Bad job-ids attribute." : "Missing required job-ids attribute.");
+ return;
+ }
+
+ if ((job_states = ippFindAttribute(client->request, "output-device-job-states", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(job_states) != IPP_TAG_OPERATION || ippGetValueTag(job_states) != IPP_TAG_ENUM)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, job_ids ? "Bad output-device-job-states attribute." : "Missing required output-device-job-states attribute.");
+ return;
+ }
+
+ count = ippGetCount(job_ids);
+ if (count != ippGetCount(job_states))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The job-ids and output-device-job-states attributes do not have the same number of values.");
+ return;
+ }
+
+ for (i = 0; i < count; i ++)
+ {
+ if ((job = find_job(client, ippGetInteger(job_ids, i))) == NULL || !job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+ {
+ if (num_unsupported < 1000)
+ unsupported[num_unsupported ++] = ippGetInteger(job_ids, i);
+ }
+ else
+ {
+ ipp_jstate_t state = (ipp_jstate_t)ippGetInteger(job_states, i);
+
+ if (job->state >= IPP_JSTATE_STOPPED && state != job->state)
+ {
+ if (num_different < 1000)
+ {
+ different[num_different] = job->id;
+ states[num_different ++] = job->state;
+ }
+ }
+ else
+ job->dev_state = state;
+ }
+ }
+
+ /*
+ * Then look for jobs assigned to the device but not listed...
+ */
+
+ for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs);
+ job && num_different < 1000;
+ job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+ {
+ if (job->dev_uuid && !strcmp(job->dev_uuid, device->uuid) && !ippContainsInteger(job_ids, job->id))
+ {
+ different[num_different] = job->id;
+ states[num_different ++] = job->state;
+ }
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ if (num_different > 0)
+ {
+ ippAddIntegers(client->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-ids", num_different, different);
+ ippAddIntegers(client->response, IPP_TAG_OPERATION, IPP_TAG_ENUM, "output-device-job-states", num_different, (int *)states);
+ }
+
+ if (num_unsupported > 0)
+ {
+ ippAddIntegers(client->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_INTEGER, "job-ids", num_unsupported, unsupported);
+ }
+}
+
+
+/*
+ * 'ipp_update_document_status()' - Update the state of a document.
+ */
+
+static void
+ipp_update_document_status(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *attr; /* Attribute */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "impressions-completed", IPP_TAG_INTEGER)) != NULL)
+ {
+ job->impcompleted = ippGetInteger(attr, 0);
+ add_event(client->printer, job, _IPP_EVENT_JOB_PROGRESS, NULL);
+ }
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_update_job_status()' - Update the state of a job.
+ */
+
+static void
+ipp_update_job_status(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ _ipp_job_t *job; /* Job */
+ ipp_attribute_t *attr; /* Attribute */
+ _ipp_event_t events = _IPP_EVENT_NONE;
+ /* Event(s) */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+ return;
+ }
+
+ if ((job = find_job(client, 0)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+ return;
+ }
+
+ if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+ return;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-impressions-completed", IPP_TAG_INTEGER)) != NULL)
+ {
+ job->impcompleted = ippGetInteger(attr, 0);
+ events |= _IPP_EVENT_JOB_PROGRESS;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "output-device-job-state", IPP_TAG_ENUM)) != NULL)
+ {
+ job->dev_state = (ipp_jstate_t)ippGetInteger(attr, 0);
+ events |= _IPP_EVENT_JOB_STATE_CHANGED;
+ }
+
+ if ((attr = ippFindAttribute(client->request, "output-device-job-state-reasons", IPP_TAG_KEYWORD)) != NULL)
+ {
+ job->dev_state_reasons = get_job_state_reasons_bits(attr);
+ events |= _IPP_EVENT_JOB_STATE_CHANGED;
+ }
+
+ if (events)
+ add_event(client->printer, job, events, NULL);
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_update_output_device_attributes()' - Update the values for an output device.
+ */
+
+static void
+ipp_update_output_device_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ _ipp_device_t *device; /* Device */
+ ipp_attribute_t *attr, /* Current attribute */
+ *dev_attr; /* Device attribute */
+ _ipp_event_t events = _IPP_EVENT_NONE;
+ /* Config/state changed? */
+
+
+ if ((device = find_device(client)) == NULL)
+ {
+ if ((device = create_device(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Unable to add output device.");
+ return;
+ }
+ }
+
+ _cupsRWLockWrite(&device->rwlock);
+
+ attr = ippFirstAttribute(client->request);
+ while (attr && ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+ attr = ippNextAttribute(client->request);
+
+ for (; attr; attr = ippNextAttribute(client->request))
+ {
+ const char *attrname = ippGetName(attr),
+ /* Attribute name */
+ *dotptr; /* Pointer to dot in name */
+
+ /*
+ * Skip attributes we don't care about...
+ */
+
+ if (!attrname)
+ continue;
+
+ if (strncmp(attrname, "copies", 6) && strncmp(attrname, "document-format", 15) && strncmp(attrname, "finishings", 10) && strncmp(attrname, "media", 5) && strncmp(attrname, "print-", 6) && strncmp(attrname, "sides", 5) && strncmp(attrname, "printer-alert", 13) && strncmp(attrname, "printer-input", 13) && strncmp(attrname, "printer-output", 14) && strncmp(attrname, "printer-resolution", 18) && strncmp(attrname, "pwg-raster", 10) && strncmp(attrname, "urf-", 4))
+ continue;
+
+ if (strncmp(attrname, "printer-alert", 13) || strncmp(attrname, "printer-state", 13))
+ events |= _IPP_EVENT_PRINTER_CONFIG_CHANGED;
+ else
+ events |= _IPP_EVENT_PRINTER_STATE_CHANGED;
+
+ if (!strcmp(attrname, "media-col-ready") || !strcmp(attrname, "media-ready"))
+ events |= _IPP_EVENT_PRINTER_MEDIA_CHANGED;
+
+ if (!strcmp(attrname, "finishings-col-ready") || !strcmp(attrname, "finishings-ready"))
+ events |= _IPP_EVENT_PRINTER_FINISHINGS_CHANGED;
+
+ if ((dotptr = strrchr(attrname, '.')) != NULL && isdigit(dotptr[1] & 255))
+ {
+#if 0
+ /*
+ * Sparse representation: name.NNN or name.NNN-NNN
+ */
+
+ char temp[256], /* Temporary name string */
+ *tempptr; /* Pointer into temporary string */
+ int low, high; /* Low and high numbers in range */
+
+ low = (int)strtol(dotptr + 1, (char **)&dotptr, 10);
+ if (dotptr && *dotptr == '-')
+ high = (int)strtol(dotptr + 1, NULL, 10);
+ else
+ high = low;
+
+ strlcpy(temp, attrname, sizeof(temp));
+ if ((tempptr = strrchr(temp, '.')) != NULL)
+ *tempptr = '\0';
+
+ if ((dev_attr = ippFindAttribute(device->attrs, temp, IPP_TAG_ZERO)) != NULL)
+ {
+ }
+ else
+#endif /* 0 */
+ respond_unsupported(client, attr);
+ }
+ else
+ {
+ /*
+ * Regular representation - replace or delete current attribute,
+ * if any...
+ */
+
+ if ((dev_attr = ippFindAttribute(device->attrs, attrname, IPP_TAG_ZERO)) != NULL)
+ ippDeleteAttribute(device->attrs, dev_attr);
+
+ if (ippGetValueTag(attr) != IPP_TAG_DELETEATTR)
+ ippCopyAttribute(device->attrs, attr, 0);
+ }
+ }
+
+ _cupsRWUnlock(&device->rwlock);
+
+ if (events)
+ {
+ _cupsRWLockWrite(&client->printer->rwlock);
+ if (events & _IPP_EVENT_PRINTER_CONFIG_CHANGED)
+ update_device_attributes_no_lock(client->printer);
+ if (events & _IPP_EVENT_PRINTER_STATE_CHANGED)
+ update_device_state_no_lock(client->printer);
+ _cupsRWUnlock(&client->printer->rwlock);
+
+ add_event(client->printer, NULL, events, NULL);
+ }
+}
+
+
+/*
+ * 'ipp_validate_document()' - Validate document creation attributes.
+ */
+
+static void
+ipp_validate_document(
+ _ipp_client_t *client) /* I - Client */
+{
+ if (valid_doc_attributes(client))
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_validate_job()' - Validate job creation attributes.
+ */
+
+static void
+ipp_validate_job(_ipp_client_t *client) /* I - Client */
+{
+ if (valid_job_attributes(client))
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+#if 0
+/*
+ * 'parse_options()' - Parse URL options into CUPS options.
+ *
+ * The client->options string is destroyed by this function.
+ */
+
+static int /* O - Number of options */
+parse_options(_ipp_client_t *client, /* I - Client */
+ cups_option_t **options) /* O - Options */
+{
+ char *name, /* Name */
+ *value, /* Value */
+ *next; /* Next name=value pair */
+ int num_options = 0; /* Number of options */
+
+
+ *options = NULL;
+
+ for (name = client->options; name && *name; name = next)
+ {
+ if ((value = strchr(name, '=')) == NULL)
+ break;
+
+ *value++ = '\0';
+ if ((next = strchr(value, '&')) != NULL)
+ *next++ = '\0';
+
+ num_options = cupsAddOption(name, value, num_options, options);
+ }
+
+ return (num_options);
+}
+#endif /* 0 */
+
+
+/*
+ * 'process_client()' - Process client requests on a thread.
+ */
+
+static void * /* O - Exit status */
+process_client(_ipp_client_t *client) /* I - Client */
+{
+ /*
+ * Loop until we are out of requests or timeout (30 seconds)...
+ */
+
+#ifdef HAVE_SSL
+ int first_time = 1; /* First time request? */
+#endif /* HAVE_SSL */
+
+ while (httpWait(client->http, 30000))
+ {
+#ifdef HAVE_SSL
+ if (first_time)
+ {
+ /*
+ * See if we need to negotiate a TLS connection...
+ */
+
+ char buf[1]; /* First byte from client */
+
+ if (recv(httpGetFd(client->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0])))
+ {
+ fprintf(stderr, "%s Starting HTTPS session.\n", client->hostname);
+
+ if (httpEncryption(client->http, HTTP_ENCRYPTION_ALWAYS))
+ {
+ fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+ break;
+ }
+
+ fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+ }
+
+ first_time = 0;
+ }
+#endif /* HAVE_SSL */
+
+ if (!process_http(client))
+ break;
+ }
+
+ /*
+ * Close the conection to the client and return...
+ */
+
+ delete_client(client);
+
+ return (NULL);
+}
+
+
+/*
+ * 'process_http()' - Process a HTTP request.
+ */
+
+int /* O - 1 on success, 0 on failure */
+process_http(_ipp_client_t *client) /* I - Client connection */
+{
+ char uri[1024]; /* URI */
+ http_state_t http_state; /* HTTP state */
+ http_status_t http_status; /* HTTP status */
+ ipp_state_t ipp_state; /* State of IPP transfer */
+ char scheme[32], /* Method/scheme */
+ userpass[128], /* Username:password */
+ hostname[HTTP_MAX_HOST];
+ /* Hostname */
+ int port; /* Port number */
+ const char *encoding; /* Content-Encoding value */
+ static const char * const http_states[] =
+ { /* Strings for logging HTTP method */
+ "WAITING",
+ "OPTIONS",
+ "GET",
+ "GET_SEND",
+ "HEAD",
+ "POST",
+ "POST_RECV",
+ "POST_SEND",
+ "PUT",
+ "PUT_RECV",
+ "DELETE",
+ "TRACE",
+ "CONNECT",
+ "STATUS",
+ "UNKNOWN_METHOD",
+ "UNKNOWN_VERSION"
+ };
+
+
+ /*
+ * Clear state variables...
+ */
+
+ ippDelete(client->request);
+ ippDelete(client->response);
+
+ client->request = NULL;
+ client->response = NULL;
+ client->operation = HTTP_STATE_WAITING;
+
+ /*
+ * Read a request from the connection...
+ */
+
+ while ((http_state = httpReadRequest(client->http, uri,
+ sizeof(uri))) == HTTP_STATE_WAITING)
+ usleep(1);
+
+ /*
+ * Parse the request line...
+ */
+
+ if (http_state == HTTP_STATE_ERROR)
+ {
+ if (httpError(client->http) == EPIPE)
+ fprintf(stderr, "%s Client closed connection.\n", client->hostname);
+ else
+ fprintf(stderr, "%s Bad request line (%s).\n", client->hostname,
+ strerror(httpError(client->http)));
+
+ return (0);
+ }
+ else if (http_state == HTTP_STATE_UNKNOWN_METHOD)
+ {
+ fprintf(stderr, "%s Bad/unknown operation.\n", client->hostname);
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+ else if (http_state == HTTP_STATE_UNKNOWN_VERSION)
+ {
+ fprintf(stderr, "%s Bad HTTP version.\n", client->hostname);
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+
+ fprintf(stderr, "%s %s %s\n", client->hostname, http_states[http_state],
+ uri);
+
+ /*
+ * Separate the URI into its components...
+ */
+
+ if (httpSeparateURI(HTTP_URI_CODING_MOST, uri, scheme, sizeof(scheme),
+ userpass, sizeof(userpass),
+ hostname, sizeof(hostname), &port,
+ client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK &&
+ (http_state != HTTP_STATE_OPTIONS || strcmp(uri, "*")))
+ {
+ fprintf(stderr, "%s Bad URI \"%s\".\n", client->hostname, uri);
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+
+ if ((client->options = strchr(client->uri, '?')) != NULL)
+ *(client->options)++ = '\0';
+
+ /*
+ * Process the request...
+ */
+
+ client->start = time(NULL);
+ client->operation = httpGetState(client->http);
+
+ /*
+ * Parse incoming parameters until the status changes...
+ */
+
+ while ((http_status = httpUpdate(client->http)) == HTTP_STATUS_CONTINUE);
+
+ if (http_status != HTTP_STATUS_OK)
+ {
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+
+ if (!httpGetField(client->http, HTTP_FIELD_HOST)[0] &&
+ httpGetVersion(client->http) >= HTTP_VERSION_1_1)
+ {
+ /*
+ * HTTP/1.1 and higher require the "Host:" field...
+ */
+
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+
+ /*
+ * Handle HTTP Upgrade...
+ */
+
+ if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
+ "Upgrade"))
+ {
+#ifdef HAVE_SSL
+ if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
+ {
+ if (!respond_http(client, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, NULL, 0))
+ return (0);
+
+ fprintf(stderr, "%s Upgrading to encrypted connection.\n", client->hostname);
+
+ if (httpEncryption(client->http, HTTP_ENCRYPTION_REQUIRED))
+ {
+ fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+ return (0);
+ }
+
+ fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+ }
+ else
+#endif /* HAVE_SSL */
+
+ if (!respond_http(client, HTTP_STATUS_NOT_IMPLEMENTED, NULL, NULL, 0))
+ return (0);
+ }
+
+ /*
+ * Handle HTTP Expect...
+ */
+
+ if (httpGetExpect(client->http) &&
+ (client->operation == HTTP_STATE_POST ||
+ client->operation == HTTP_STATE_PUT))
+ {
+ if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
+ {
+ /*
+ * Send 100-continue header...
+ */
+
+ if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
+ return (0);
+ }
+ else
+ {
+ /*
+ * Send 417-expectation-failed header...
+ */
+
+ if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
+ return (0);
+ }
+ }
+
+ /*
+ * Handle new transfers...
+ */
+
+ encoding = httpGetContentEncoding(client->http);
+
+ switch (client->operation)
+ {
+ case HTTP_STATE_OPTIONS :
+ /*
+ * Do OPTIONS command...
+ */
+
+ return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
+
+ case HTTP_STATE_HEAD :
+#if 0 /* TODO: Work out icon support */
+ if (!strcmp(client->uri, "/icon.png"))
+ return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
+ else
+#endif /* 0 */
+ if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
+ return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+
+ case HTTP_STATE_GET :
+#if 0 /* TODO: Work out icon support */
+ if (!strcmp(client->uri, "/icon.png"))
+ {
+ /*
+ * Send PNG icon file.
+ */
+
+ int fd; /* Icon file */
+ struct stat fileinfo; /* Icon file information */
+ char buffer[4096]; /* Copy buffer */
+ ssize_t bytes; /* Bytes */
+
+ fprintf(stderr, "Icon file is \"%s\".\n", client->printer->icon);
+
+ if (!stat(client->printer->icon, &fileinfo) &&
+ (fd = open(client->printer->icon, O_RDONLY)) >= 0)
+ {
+ if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png",
+ (size_t)fileinfo.st_size))
+ {
+ close(fd);
+ return (0);
+ }
+
+ while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+ httpWrite2(client->http, buffer, (size_t)bytes);
+
+ httpFlushWrite(client->http);
+
+ close(fd);
+ }
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ }
+ else
+#endif /* 0 */
+ if (!strcmp(client->uri, "/"))
+ {
+ /*
+ * Show web status page...
+ */
+
+ _ipp_job_t *job; /* Current job */
+ int i; /* Looping var */
+ _ipp_preason_t reason; /* Current reason */
+ static const char * const reasons[] =
+ { /* Reason strings */
+ "Other",
+ "Cover Open",
+ "Input Tray Missing",
+ "Marker Supply Empty",
+ "Marker Supply Low",
+ "Marker Waste Almost Full",
+ "Marker Waste Full",
+ "Media Empty",
+ "Media Jam",
+ "Media Low",
+ "Media Needed",
+ "Moving to Paused",
+ "Paused",
+ "Spool Area Full",
+ "Toner Empty",
+ "Toner Low"
+ };
+
+ if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+ return (0);
+
+ html_header(client, client->printer->name);
+ html_printf(client,
+ "<p><img align=\"right\" src=\"/icon.png\" width=\"64\" height=\"64\"><b>ippserver (" CUPS_SVERSION ")</b></p>\n"
+ "<p>%s, %d job(s).", client->printer->state == IPP_PSTATE_IDLE ? "Idle" : client->printer->state == IPP_PSTATE_PROCESSING ? "Printing" : "Stopped", cupsArrayCount(client->printer->jobs));
+ for (i = 0, reason = 1; i < (int)(sizeof(reasons) / sizeof(reasons[0])); i ++, reason <<= 1)
+ if (client->printer->state_reasons & reason)
+ html_printf(client, "\n<br> %s", reasons[i]);
+ html_printf(client, "</p>\n");
+
+ if (cupsArrayCount(client->printer->jobs) > 0)
+ {
+ _cupsRWLockRead(&(client->printer->rwlock));
+
+ html_printf(client, "<table class=\"striped\" summary=\"Jobs\"><thead><tr><th>Job #</th><th>Name</th><th>Owner</th><th>When</th></tr></thead><tbody>\n");
+ for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+ {
+ char when[256], /* When job queued/started/finished */
+ hhmmss[64]; /* Time HH:MM:SS */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ case IPP_JSTATE_HELD :
+ snprintf(when, sizeof(when), "Queued at %s", time_string(job->created, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_PROCESSING :
+ case IPP_JSTATE_STOPPED :
+ snprintf(when, sizeof(when), "Started at %s", time_string(job->processing, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_ABORTED :
+ snprintf(when, sizeof(when), "Aborted at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_CANCELED :
+ snprintf(when, sizeof(when), "Canceled at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_COMPLETED :
+ snprintf(when, sizeof(when), "Completed at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ }
+
+ html_printf(client, "<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", job->id, job->name, job->username, when);
+ }
+ html_printf(client, "</tbody></table>\n");
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+ }
+ html_footer(client);
+
+ return (1);
+ }
+#if 0 /* TODO: Pull media and supply info from device attrs */
+ else if (!strcmp(client->uri, "/media"))
+ {
+ /*
+ * Show web media page...
+ */
+
+ int i, /* Looping var */
+ num_options; /* Number of form options */
+ cups_option_t *options; /* Form options */
+ static const char * const sizes[] =
+ { /* Size strings */
+ "ISO A4",
+ "ISO A5",
+ "ISO A6",
+ "DL Envelope",
+ "US Legal",
+ "US Letter",
+ "#10 Envelope",
+ "3x5 Photo",
+ "3.5x5 Photo",
+ "4x6 Photo",
+ "5x7 Photo"
+ };
+ static const char * const types[] =
+ /* Type strings */
+ {
+ "Auto",
+ "Cardstock",
+ "Envelope",
+ "Labels",
+ "Other",
+ "Glossy Photo",
+ "High-Gloss Photo",
+ "Matte Photo",
+ "Satin Photo",
+ "Semi-Gloss Photo",
+ "Plain",
+ "Letterhead",
+ "Transparency"
+ };
+ static const int sheets[] = /* Number of sheets */
+ {
+ 250,
+ 100,
+ 25,
+ 5,
+ 0
+ };
+
+ if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+ return (0);
+
+ html_header(client, client->printer->name);
+
+ if ((num_options = parse_options(client, &options)) > 0)
+ {
+ /*
+ * WARNING: A real printer/server implementation MUST NOT implement
+ * media updates via a GET request - GET requests are supposed to be
+ * idempotent (without side-effects) and we obviously are not
+ * authenticating access here. This form is provided solely to
+ * enable testing and development!
+ */
+
+ const char *val; /* Form value */
+
+ if ((val = cupsGetOption("main_size", num_options, options)) != NULL)
+ client->printer->main_size = atoi(val);
+ if ((val = cupsGetOption("main_type", num_options, options)) != NULL)
+ client->printer->main_type = atoi(val);
+ if ((val = cupsGetOption("main_level", num_options, options)) != NULL)
+ client->printer->main_level = atoi(val);
+
+ if ((val = cupsGetOption("envelope_size", num_options, options)) != NULL)
+ client->printer->envelope_size = atoi(val);
+ if ((val = cupsGetOption("envelope_level", num_options, options)) != NULL)
+ client->printer->envelope_level = atoi(val);
+
+ if ((val = cupsGetOption("photo_size", num_options, options)) != NULL)
+ client->printer->photo_size = atoi(val);
+ if ((val = cupsGetOption("photo_type", num_options, options)) != NULL)
+ client->printer->photo_type = atoi(val);
+ if ((val = cupsGetOption("photo_level", num_options, options)) != NULL)
+ client->printer->photo_level = atoi(val);
+
+ if ((client->printer->main_level < 100 && client->printer->main_level > 0) || (client->printer->envelope_level < 25 && client->printer->envelope_level > 0) || (client->printer->photo_level < 25 && client->printer->photo_level > 0))
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_LOW;
+ else
+ client->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_LOW;
+
+ if ((client->printer->main_level == 0 && client->printer->main_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->envelope_level == 0 && client->printer->envelope_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->photo_level == 0 && client->printer->photo_size > _IPP_MEDIA_SIZE_NONE))
+ {
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_EMPTY;
+ if (client->printer->active_job)
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+ }
+ else
+ client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MEDIA_EMPTY | _IPP_PREASON_MEDIA_NEEDED);
+
+ html_printf(client, "<blockquote>Media updated.</blockquote>\n");
+ }
+
+ html_printf(client, "<form method=\"GET\" action=\"/media\">\n");
+
+ html_printf(client, "<table class=\"form\" summary=\"Media\">\n");
+ html_printf(client, "<tr><th>Main Tray:</th><td><select name=\"main_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (!strstr(sizes[i], "Envelope") && !strstr(sizes[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"main_type\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+ if (!strstr(types[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_type ? " selected" : "", types[i]);
+ html_printf(client, "</select> <select name=\"main_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->main_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
+ html_printf(client,
+ "<tr><th>Envelope Feeder:</th><td><select name=\"envelope_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (strstr(sizes[i], "Envelope"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->envelope_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"envelope_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->envelope_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
+ html_printf(client,
+ "<tr><th>Photo Tray:</th><td><select name=\"photo_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (strstr(sizes[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"photo_type\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+ if (strstr(types[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_type ? " selected" : "", types[i]);
+ html_printf(client, "</select> <select name=\"photo_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->photo_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
+ html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Media\"></td></tr></table></form>\n");
+ html_footer(client);
+
+ return (1);
+ }
+ else if (!strcmp(client->uri, "/supplies"))
+ {
+ /*
+ * Show web supplies page...
+ */
+
+ int i, j, /* Looping vars */
+ num_options; /* Number of form options */
+ cups_option_t *options; /* Form options */
+ static const int levels[] = { 0, 5, 10, 25, 50, 75, 90, 95, 100 };
+
+ if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+ return (0);
+
+ html_header(client, client->printer->name);
+
+ if ((num_options = parse_options(client, &options)) > 0)
+ {
+ /*
+ * WARNING: A real printer/server implementation MUST NOT implement
+ * supply updates via a GET request - GET requests are supposed to be
+ * idempotent (without side-effects) and we obviously are not
+ * authenticating access here. This form is provided solely to
+ * enable testing and development!
+ */
+
+ char name[64]; /* Form field */
+ const char *val; /* Form value */
+
+ client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MARKER_SUPPLY_EMPTY | _IPP_PREASON_MARKER_SUPPLY_LOW | _IPP_PREASON_MARKER_WASTE_ALMOST_FULL | _IPP_PREASON_MARKER_WASTE_FULL | _IPP_PREASON_TONER_EMPTY | _IPP_PREASON_TONER_LOW);
+
+ for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+ {
+ snprintf(name, sizeof(name), "supply_%d", i);
+ if ((val = cupsGetOption(name, num_options, options)) != NULL)
+ {
+ int level = client->printer->supplies[i] = atoi(val);
+ /* New level */
+
+ if (i < 4)
+ {
+ if (level == 0)
+ client->printer->state_reasons |= _IPP_PREASON_TONER_EMPTY;
+ else if (level < 10)
+ client->printer->state_reasons |= _IPP_PREASON_TONER_LOW;
+ }
+ else
+ {
+ if (level == 100)
+ client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_FULL;
+ else if (level > 90)
+ client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_ALMOST_FULL;
+ }
+ }
+ }
+
+ html_printf(client, "<blockquote>Supplies updated.</blockquote>\n");
+ }
+
+ html_printf(client, "<form method=\"GET\" action=\"/supplies\">\n");
+
+ html_printf(client, "<table class=\"form\" summary=\"Supplies\">\n");
+ for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+ {
+ html_printf(client, "<tr><th>%s:</th><td><select name=\"supply_%d\">", printer_supplies[i], i);
+ for (j = 0; j < (int)(sizeof(levels) / sizeof(levels[0])); j ++)
+ html_printf(client, "<option value=\"%d\"%s>%d%%</option>", levels[j], levels[j] == client->printer->supplies[i] ? " selected" : "", levels[j]);
+ html_printf(client, "</select></td></tr>\n");
+ }
+ html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Supplies\"></td></tr>\n</table>\n</form>\n");
+ html_footer(client);
+
+ return (1);
+ }
+#endif /* 0 */
+ else
+ return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+ break;
+
+ case HTTP_STATE_POST :
+ if (strcmp(httpGetField(client->http, HTTP_FIELD_CONTENT_TYPE),
+ "application/ipp"))
+ {
+ /*
+ * Not an IPP request...
+ */
+
+ return (respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0));
+ }
+
+ /*
+ * Read the IPP request...
+ */
+
+ client->request = ippNew();
+
+ while ((ipp_state = ippRead(client->http,
+ client->request)) != IPP_STATE_DATA)
+ {
+ if (ipp_state == IPP_STATE_ERROR)
+ {
+ fprintf(stderr, "%s IPP read error (%s).\n", client->hostname,
+ cupsLastErrorString());
+ respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+ return (0);
+ }
+ }
+
+ /*
+ * Now that we have the IPP request, process the request...
+ */
+
+ return (process_ipp(client));
+
+ default :
+ break; /* Anti-compiler-warning-code */
+ }
+
+ return (1);
+}
+
+
+/*
+ * 'process_ipp()' - Process an IPP request.
+ */
+
+static int /* O - 1 on success, 0 on error */
+process_ipp(_ipp_client_t *client) /* I - Client */
+{
+ ipp_tag_t group; /* Current group tag */
+ ipp_attribute_t *attr; /* Current attribute */
+ ipp_attribute_t *charset; /* Character set attribute */
+ ipp_attribute_t *language; /* Language attribute */
+ ipp_attribute_t *uri; /* Printer URI attribute */
+ int major, minor; /* Version number */
+ const char *name; /* Name of attribute */
+
+
+ debug_attributes("Request", client->request, 1);
+
+ /*
+ * First build an empty response message for this request...
+ */
+
+ client->operation_id = ippGetOperation(client->request);
+ client->response = ippNewResponse(client->request);
+
+ /*
+ * Then validate the request header and required attributes...
+ */
+
+ major = ippGetVersion(client->request, &minor);
+
+ if (major < 1 || major > 2)
+ {
+ /*
+ * Return an error, since we only support IPP 1.x and 2.x.
+ */
+
+ respond_ipp(client, IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED,
+ "Bad request version number %d.%d.", major, minor);
+ }
+ else if (ippGetRequestId(client->request) <= 0)
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad request-id %d.",
+ ippGetRequestId(client->request));
+ else if (!ippFirstAttribute(client->request))
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "No attributes in request.");
+ else
+ {
+ /*
+ * Make sure that the attributes are provided in the correct order and
+ * don't repeat groups...
+ */
+
+ for (attr = ippFirstAttribute(client->request),
+ group = ippGetGroupTag(attr);
+ attr;
+ attr = ippNextAttribute(client->request))
+ {
+ if (ippGetGroupTag(attr) < group && ippGetGroupTag(attr) != IPP_TAG_ZERO)
+ {
+ /*
+ * Out of order; return an error...
+ */
+
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Attribute groups are out of order (%x < %x).",
+ ippGetGroupTag(attr), group);
+ break;
+ }
+ else
+ group = ippGetGroupTag(attr);
+ }
+
+ if (!attr)
+ {
+ /*
+ * Then make sure that the first three attributes are:
+ *
+ * attributes-charset
+ * attributes-natural-language
+ * printer-uri/job-uri
+ */
+
+ attr = ippFirstAttribute(client->request);
+ name = ippGetName(attr);
+ if (attr && name && !strcmp(name, "attributes-charset") &&
+ ippGetValueTag(attr) == IPP_TAG_CHARSET)
+ charset = attr;
+ else
+ charset = NULL;
+
+ attr = ippNextAttribute(client->request);
+ name = ippGetName(attr);
+
+ if (attr && name && !strcmp(name, "attributes-natural-language") &&
+ ippGetValueTag(attr) == IPP_TAG_LANGUAGE)
+ language = attr;
+ else
+ language = NULL;
+
+ if ((attr = ippFindAttribute(client->request, "printer-uri",
+ IPP_TAG_URI)) != NULL)
+ uri = attr;
+ else if ((attr = ippFindAttribute(client->request, "job-uri",
+ IPP_TAG_URI)) != NULL)
+ uri = attr;
+ else
+ uri = NULL;
+
+ if (charset &&
+ strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
+ strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
+ {
+ /*
+ * Bad character set...
+ */
+
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Unsupported character set \"%s\".",
+ ippGetString(charset, 0, NULL));
+ }
+ else if (!charset || !language || !uri)
+ {
+ /*
+ * Return an error, since attributes-charset,
+ * attributes-natural-language, and printer-uri/job-uri are required
+ * for all operations.
+ */
+
+ respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+ "Missing required attributes.");
+ }
+ else
+ {
+ char scheme[32], /* URI scheme */
+ userpass[32], /* Username/password in URI */
+ host[256], /* Host name in URI */
+ resource[256]; /* Resource path in URI */
+ int port; /* Port number in URI */
+
+ name = ippGetName(uri);
+
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+ scheme, sizeof(scheme),
+ userpass, sizeof(userpass),
+ host, sizeof(host), &port,
+ resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+ respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+ "Bad %s value '%s'.", name, ippGetString(uri, 0, NULL));
+ else if ((!strcmp(name, "job-uri") && strncmp(resource, "/ipp/print/", 11)) ||
+ (!strcmp(name, "printer-uri") && strcmp(resource, "/ipp/print")))
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.",
+ name, ippGetString(uri, 0, NULL));
+ else
+ {
+ /*
+ * Try processing the operation...
+ */
+
+ switch ((int)ippGetOperation(client->request))
+ {
+ case IPP_OP_PRINT_JOB :
+ ipp_print_job(client);
+ break;
+
+ case IPP_OP_PRINT_URI :
+ ipp_print_uri(client);
+ break;
+
+ case IPP_OP_VALIDATE_JOB :
+ ipp_validate_job(client);
+ break;
+
+ case IPP_OP_CREATE_JOB :
+ ipp_create_job(client);
+ break;
+
+ case IPP_OP_SEND_DOCUMENT :
+ ipp_send_document(client);
+ break;
+
+ case IPP_OP_SEND_URI :
+ ipp_send_uri(client);
+ break;
+
+ case IPP_OP_CANCEL_JOB :
+ ipp_cancel_job(client);
+ break;
+
+ case IPP_OP_CANCEL_MY_JOBS :
+ ipp_cancel_my_jobs(client);
+ break;
+
+ case IPP_OP_GET_JOB_ATTRIBUTES :
+ ipp_get_job_attributes(client);
+ break;
+
+ case IPP_OP_GET_JOBS :
+ ipp_get_jobs(client);
+ break;
+
+ case IPP_OP_GET_PRINTER_ATTRIBUTES :
+ ipp_get_printer_attributes(client);
+ break;
+
+ case IPP_OP_GET_PRINTER_SUPPORTED_VALUES :
+ ipp_get_printer_supported_values(client);
+ break;
+
+ case IPP_OP_CLOSE_JOB :
+ ipp_close_job(client);
+ break;
+
+ case IPP_OP_IDENTIFY_PRINTER :
+ ipp_identify_printer(client);
+ break;
+
+ case IPP_OP_CANCEL_SUBSCRIPTION :
+ ipp_cancel_subscription(client);
+ break;
+
+ case IPP_OP_CREATE_JOB_SUBSCRIPTIONS :
+ case IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS :
+ ipp_create_xxx_subscriptions(client);
+ break;
+
+ case IPP_OP_GET_NOTIFICATIONS :
+ ipp_get_notifications(client);
+ break;
+
+ case IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES :
+ ipp_get_subscription_attributes(client);
+ break;
+
+ case IPP_OP_GET_SUBSCRIPTIONS :
+ ipp_get_subscriptions(client);
+ break;
+
+ case IPP_OP_RENEW_SUBSCRIPTION :
+ ipp_renew_subscription(client);
+ break;
+
+ case IPP_OP_GET_DOCUMENT_ATTRIBUTES :
+ ipp_get_document_attributes(client);
+ break;
+
+ case IPP_OP_GET_DOCUMENTS :
+ ipp_get_documents(client);
+ break;
+
+ case IPP_OP_VALIDATE_DOCUMENT :
+ ipp_validate_document(client);
+ break;
+
+ case _IPP_OP_ACKNOWLEDGE_DOCUMENT :
+ ipp_acknowledge_document(client);
+ break;
+
+ case _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER :
+ ipp_acknowledge_identify_printer(client);
+ break;
+
+ case _IPP_OP_ACKNOWLEDGE_JOB :
+ ipp_acknowledge_job(client);
+ break;
+
+ case _IPP_OP_FETCH_DOCUMENT :
+ ipp_fetch_document(client);
+ break;
+
+ case _IPP_OP_FETCH_JOB :
+ ipp_fetch_job(client);
+ break;
+
+ case _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES :
+ ipp_get_output_device_attributes(client);
+ break;
+
+ case _IPP_OP_UPDATE_ACTIVE_JOBS :
+ ipp_update_active_jobs(client);
+ break;
+
+ case _IPP_OP_UPDATE_DOCUMENT_STATUS :
+ ipp_update_document_status(client);
+ break;
+
+ case _IPP_OP_UPDATE_JOB_STATUS :
+ ipp_update_job_status(client);
+ break;
+
+ case _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES :
+ ipp_update_output_device_attributes(client);
+ break;
+
+ case _IPP_OP_DEREGISTER_OUTPUT_DEVICE :
+ ipp_deregister_output_device(client);
+ break;
+
+ default :
+ respond_ipp(client, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED,
+ "Operation not supported.");
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * Send the HTTP header and return...
+ */
+
+ if (httpGetState(client->http) != HTTP_STATE_POST_SEND)
+ httpFlush(client->http); /* Flush trailing (junk) data */
+
+ return (respond_http(client, HTTP_STATUS_OK, NULL, "application/ipp",
+ client->fetch_file >= 0 ? 0 : ippLength(client->response)));
+}
+
+
+/*
+ * 'process_job()' - Process a print job.
+ */
+
+static void * /* O - Thread exit status */
+process_job(_ipp_job_t *job) /* I - Job */
+{
+ job->state = IPP_JSTATE_PROCESSING;
+ job->printer->state = IPP_PSTATE_PROCESSING;
+ job->processing = time(NULL);
+ job->printer->processing_job = job;
+
+ add_event(job->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job processing.");
+
+ /*
+ * TODO: Perform any preprocessing needed...
+ */
+
+ // job->state_reasons |= _IPP_JREASON_JOB_TRANSFORMING;
+ // job->state_reasons &= ~_IPP_JREASON_JOB_TRANSFORMING;
+
+ /*
+ * Set the state to processing-stopped, fetchable, then send a
+ * notification.
+ */
+
+ job->state = IPP_JSTATE_STOPPED;
+ job->state_reasons |= _IPP_JREASON_JOB_FETCHABLE;
+
+ add_event(job->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job fetchable.");
+
+ return (NULL);
+}
+
+
+/*
+ * 'respond_http()' - Send a HTTP response.
+ */
+
+int /* O - 1 on success, 0 on failure */
+respond_http(
+ _ipp_client_t *client, /* I - Client */
+ http_status_t code, /* I - HTTP status of response */
+ const char *content_encoding, /* I - Content-Encoding of response */
+ const char *type, /* I - MIME media type of response */
+ size_t length) /* I - Length of response */
+{
+ char message[1024]; /* Text message */
+
+
+ fprintf(stderr, "%s %s\n", client->hostname, httpStatus(code));
+
+ if (code == HTTP_STATUS_CONTINUE)
+ {
+ /*
+ * 100-continue doesn't send any headers...
+ */
+
+ return (httpWriteResponse(client->http, HTTP_STATUS_CONTINUE) == 0);
+ }
+
+ /*
+ * Format an error message...
+ */
+
+ if (!type && !length && code != HTTP_STATUS_OK && code != HTTP_STATUS_SWITCHING_PROTOCOLS)
+ {
+ snprintf(message, sizeof(message), "%d - %s\n", code, httpStatus(code));
+
+ type = "text/plain";
+ length = strlen(message);
+ }
+ else
+ message[0] = '\0';
+
+ /*
+ * Send the HTTP response header...
+ */
+
+ httpClearFields(client->http);
+
+ if (code == HTTP_STATUS_METHOD_NOT_ALLOWED ||
+ client->operation == HTTP_STATE_OPTIONS)
+ httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST");
+
+ if (type)
+ {
+ if (!strcmp(type, "text/html"))
+ httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE,
+ "text/html; charset=utf-8");
+ else
+ httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE, type);
+
+ if (content_encoding)
+ httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, content_encoding);
+ }
+
+ httpSetLength(client->http, length);
+
+ if (httpWriteResponse(client->http, code) < 0)
+ return (0);
+
+ /*
+ * Send the response data...
+ */
+
+ if (message[0])
+ {
+ /*
+ * Send a plain text message.
+ */
+
+ if (httpPrintf(client->http, "%s", message) < 0)
+ return (0);
+
+ if (httpWrite2(client->http, "", 0) < 0)
+ return (0);
+ }
+ else if (client->response)
+ {
+ /*
+ * Send an IPP response...
+ */
+
+ debug_attributes("Response", client->response, 2);
+
+ ippSetState(client->response, IPP_STATE_IDLE);
+
+ if (ippWrite(client->http, client->response) != IPP_STATE_DATA)
+ return (0);
+
+ if (client->fetch_file >= 0)
+ {
+ ssize_t bytes; /* Bytes read */
+ char buffer[32768]; /* Buffer */
+
+ if (client->fetch_compression)
+ httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, "gzip");
+
+ while ((bytes = read(client->fetch_file, buffer, sizeof(buffer))) > 0)
+ httpWrite2(client->http, buffer, (size_t)bytes);
+
+ httpWrite2(client->http, "", 0);
+ close(client->fetch_file);
+ client->fetch_file = -1;
+ }
+ }
+
+ return (1);
+}
+
+
+/*
+ * 'respond_ipp()' - Send an IPP response.
+ */
+
+static void
+respond_ipp(_ipp_client_t *client, /* I - Client */
+ ipp_status_t status, /* I - status-code */
+ const char *message, /* I - printf-style status-message */
+ ...) /* I - Additional args as needed */
+{
+ const char *formatted = NULL; /* Formatted message */
+
+
+ ippSetStatusCode(client->response, status);
+
+ if (message)
+ {
+ va_list ap; /* Pointer to additional args */
+ ipp_attribute_t *attr; /* New status-message attribute */
+
+ va_start(ap, message);
+ if ((attr = ippFindAttribute(client->response, "status-message",
+ IPP_TAG_TEXT)) != NULL)
+ ippSetStringfv(client->response, &attr, 0, message, ap);
+ else
+ attr = ippAddStringfv(client->response, IPP_TAG_OPERATION, IPP_TAG_TEXT,
+ "status-message", NULL, message, ap);
+ va_end(ap);
+
+ formatted = ippGetString(attr, 0, NULL);
+ }
+
+ if (formatted)
+ fprintf(stderr, "%s %s %s (%s)\n", client->hostname,
+ ippOpString(client->operation_id), ippErrorString(status),
+ formatted);
+ else
+ fprintf(stderr, "%s %s %s\n", client->hostname,
+ ippOpString(client->operation_id), ippErrorString(status));
+}
+
+
+/*
+ * 'respond_unsupported()' - Respond with an unsupported attribute.
+ */
+
+static void
+respond_unsupported(
+ _ipp_client_t *client, /* I - Client */
+ ipp_attribute_t *attr) /* I - Atribute */
+{
+ ipp_attribute_t *temp; /* Copy of attribute */
+
+
+ respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+ "Unsupported %s %s%s value.", ippGetName(attr),
+ ippGetCount(attr) > 1 ? "1setOf " : "",
+ ippTagString(ippGetValueTag(attr)));
+
+ temp = ippCopyAttribute(client->response, attr, 0);
+ ippSetGroupTag(client->response, &temp, IPP_TAG_UNSUPPORTED_GROUP);
+}
+
+
+/*
+ * 'run_printer()' - Run the printer service.
+ */
+
+static void
+run_printer(_ipp_printer_t *printer) /* I - Printer */
+{
+ int num_fds; /* Number of file descriptors */
+ struct pollfd polldata[3]; /* poll() data */
+ int timeout; /* Timeout for poll() */
+ _ipp_client_t *client; /* New client */
+
+
+ /*
+ * Setup poll() data for the Bonjour service socket and IPv4/6 listeners...
+ */
+
+ polldata[0].fd = printer->ipv4;
+ polldata[0].events = POLLIN;
+
+ polldata[1].fd = printer->ipv6;
+ polldata[1].events = POLLIN;
+
+ num_fds = 2;
+
+ /*
+ * Loop until we are killed or have a hard error...
+ */
+
+ for (;;)
+ {
+ if (cupsArrayCount(printer->jobs))
+ timeout = 10;
+ else
+ timeout = -1;
+
+ if (poll(polldata, (nfds_t)num_fds, timeout) < 0 && errno != EINTR)
+ {
+ perror("poll() failed");
+ break;
+ }
+
+ if (polldata[0].revents & POLLIN)
+ {
+ if ((client = create_client(printer, printer->ipv4)) != NULL)
+ {
+ if (!_cupsThreadCreate((_cups_thread_func_t)process_client, client))
+ {
+ perror("Unable to create client thread");
+ delete_client(client);
+ }
+ }
+ }
+
+ if (polldata[1].revents & POLLIN)
+ {
+ if ((client = create_client(printer, printer->ipv6)) != NULL)
+ {
+ if (!_cupsThreadCreate((_cups_thread_func_t)process_client, client))
+ {
+ perror("Unable to create client thread");
+ delete_client(client);
+ }
+ }
+ }
+
+ /*
+ * Clean out old jobs...
+ */
+
+ clean_jobs(printer);
+ }
+}
+
+
+/*
+ * 'time_string()' - Return the local time in hours, minutes, and seconds.
+ */
+
+static char *
+time_string(time_t tv, /* I - Time value */
+ char *buffer, /* I - Buffer */
+ size_t bufsize) /* I - Size of buffer */
+{
+ struct tm *curtime = localtime(&tv);
+ /* Local time */
+
+ strftime(buffer, bufsize, "%X", curtime);
+ return (buffer);
+}
+
+
+/*
+ * 'update_device_attributes_no_lock()' - Update the composite device attributes.
+ *
+ * Note: Caller MUST lock the printer object for writing before using.
+ */
+
+static void
+update_device_attributes_no_lock(
+ _ipp_printer_t *printer) /* I - Printer */
+{
+ _ipp_device_t *device; /* Current device */
+ ipp_t *dev_attrs; /* Device attributes */
+
+
+ /* TODO: Support multiple output devices, icons, etc... */
+ device = (_ipp_device_t *)cupsArrayFirst(printer->devices);
+ dev_attrs = ippNew();
+
+ if (device)
+ copy_attributes(dev_attrs, device->attrs, NULL, IPP_TAG_PRINTER, 0);
+
+ ippDelete(printer->dev_attrs);
+ printer->dev_attrs = dev_attrs;
+
+ printer->config_time = time(NULL);
+}
+
+
+/*
+ * 'update_device_status_no_lock()' - Update the composite device state.
+ *
+ * Note: Caller MUST lock the printer object for writing before using.
+ */
+
+static void
+update_device_state_no_lock(
+ _ipp_printer_t *printer) /* I - Printer */
+{
+ _ipp_device_t *device; /* Current device */
+ ipp_attribute_t *attr; /* Current attribute */
+
+
+ /* TODO: Support multiple output devices, icons, etc... */
+ device = (_ipp_device_t *)cupsArrayFirst(printer->devices);
+
+ if ((attr = ippFindAttribute(device->attrs, "printer-state", IPP_TAG_ENUM)) != NULL)
+ printer->dev_state = (ipp_pstate_t)ippGetInteger(attr, 0);
+ else
+ printer->dev_state = IPP_PSTATE_STOPPED;
+
+ if ((attr = ippFindAttribute(device->attrs, "printer-state-reasons", IPP_TAG_KEYWORD)) != NULL)
+ printer->dev_reasons = get_printer_state_reasons_bits(attr);
+ else
+ printer->dev_reasons = _IPP_PREASON_PAUSED;
+
+ printer->state_time = time(NULL);
+}
+
+
+/*
+ * 'usage()' - Show program usage.
+ */
+
+static void
+usage(int status) /* O - Exit status */
+{
+ if (!status)
+ {
+ puts(CUPS_SVERSION " - Copyright 2010-2014 by Apple Inc. All rights reserved.");
+ puts("");
+ }
+
+ puts("Usage: ippinfra [options] \"name\"");
+ puts("");
+ puts("Options:");
+ printf("-d spool-directory Spool directory "
+ "(default=/tmp/ippserver.%d)\n", (int)getpid());
+ puts("-h Show program help");
+ puts("-k Keep job spool files");
+ puts("-n hostname Hostname for printer");
+ puts("-p port Port number (default=auto)");
+ puts("-u user:pass Set proxy username and password");
+ puts("-v[vvv] Be (very) verbose");
+
+ exit(status);
+}
+
+
+/*
+ * 'valid_doc_attributes()' - Determine whether the document attributes are
+ * valid.
+ *
+ * When one or more document attributes are invalid, this function adds a
+ * suitable response and attributes to the unsupported group.
+ */
+
+static int /* O - 1 if valid, 0 if not */
+valid_doc_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ int valid = 1; /* Valid attributes? */
+ ipp_op_t op = ippGetOperation(client->request);
+ /* IPP operation */
+ const char *op_name = ippOpString(op);
+ /* IPP operation name */
+ ipp_attribute_t *attr, /* Current attribute */
+ *supported; /* xxx-supported attribute */
+ const char *compression = NULL,
+ /* compression value */
+ *format = NULL; /* document-format value */
+
+
+ /*
+ * Check operation attributes...
+ */
+
+ if ((attr = ippFindAttribute(client->request, "compression", IPP_TAG_ZERO)) != NULL)
+ {
+ /*
+ * If compression is specified, only accept a supported value in a Print-Job
+ * or Send-Document request...
+ */
+
+ compression = ippGetString(attr, 0, NULL);
+ supported = ippFindAttribute(client->printer->attrs,
+ "compression-supported", IPP_TAG_KEYWORD);
+
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
+ ippGetGroupTag(attr) != IPP_TAG_OPERATION ||
+ (op != IPP_OP_PRINT_JOB && op != IPP_OP_SEND_DOCUMENT &&
+ op != IPP_OP_VALIDATE_JOB) ||
+ !ippContainsString(supported, compression))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else
+ {
+ fprintf(stderr, "%s %s compression=\"%s\"\n", client->hostname, op_name, compression);
+
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "compression-supplied", NULL, compression);
+
+ if (strcmp(compression, "none"))
+ {
+ if (Verbosity)
+ fprintf(stderr, "Receiving job file with \"%s\" compression.\n", compression);
+ httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, compression);
+ }
+ }
+ }
+
+ /*
+ * Is it a format we support?
+ */
+
+ if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_MIMETYPE ||
+ ippGetGroupTag(attr) != IPP_TAG_OPERATION)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else
+ {
+ format = ippGetString(attr, 0, NULL);
+
+ fprintf(stderr, "%s %s document-format=\"%s\"\n",
+ client->hostname, op_name, format);
+
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, format);
+ }
+ }
+ else
+ {
+ format = ippGetString(ippFindAttribute(client->printer->attrs, "document-format-default", IPP_TAG_MIMETYPE), 0, NULL);
+ if (!format)
+ format = "application/octet-stream"; /* Should never happen */
+
+ attr = ippAddString(client->request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
+ }
+
+ if (!strcmp(format, "application/octet-stream") && (ippGetOperation(client->request) == IPP_OP_PRINT_JOB || ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
+ {
+ /*
+ * Auto-type the file using the first 8 bytes of the file...
+ */
+
+ unsigned char header[8]; /* First 8 bytes of file */
+
+ memset(header, 0, sizeof(header));
+ httpPeek(client->http, (char *)header, sizeof(header));
+
+ if (!memcmp(header, "%PDF", 4))
+ format = "application/pdf";
+ else if (!memcmp(header, "%!", 2))
+ format = "application/postscript";
+ else if (!memcmp(header, "\377\330\377", 3) && header[3] >= 0xe0 && header[3] <= 0xef)
+ format = "image/jpeg";
+ else if (!memcmp(header, "\211PNG", 4))
+ format = "image/png";
+ else if (!memcmp(header, "RAS2", 4))
+ format = "image/pwg-raster";
+ else if (!memcmp(header, "UNIRAST", 8))
+ format = "image/urf";
+ else
+ format = NULL;
+
+ if (format)
+ {
+ fprintf(stderr, "%s %s Auto-typed document-format=\"%s\"\n",
+ client->hostname, op_name, format);
+
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, format);
+ }
+ }
+
+ if (op != IPP_OP_CREATE_JOB && (supported = ippFindAttribute(client->printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL && !ippContainsString(supported, format))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+
+ /*
+ * document-name
+ */
+
+ if ((attr = ippFindAttribute(client->request, "document-name", IPP_TAG_NAME)) != NULL)
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
+ return (valid);
+}
+
+
+/*
+ * 'valid_job_attributes()' - Determine whether the job attributes are valid.
+ *
+ * When one or more job attributes are invalid, this function adds a suitable
+ * response and attributes to the unsupported group.
+ */
+
+static int /* O - 1 if valid, 0 if not */
+valid_job_attributes(
+ _ipp_client_t *client) /* I - Client */
+{
+ int i, /* Looping var */
+ valid = 1; /* Valid attributes? */
+ ipp_attribute_t *attr, /* Current attribute */
+ *supported; /* xxx-supported attribute */
+
+
+ /*
+ * Check operation attributes...
+ */
+
+ valid = valid_doc_attributes(client);
+
+ /*
+ * Check the various job template attributes...
+ */
+
+ if ((attr = ippFindAttribute(client->request, "copies", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
+ ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 999)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BOOLEAN)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 ||
+ (ippGetValueTag(attr) != IPP_TAG_NAME &&
+ ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+ ippGetValueTag(attr) != IPP_TAG_KEYWORD) ||
+ strcmp(ippGetString(attr, 0, NULL), "no-hold"))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 0)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 ||
+ (ippGetValueTag(attr) != IPP_TAG_NAME &&
+ ippGetValueTag(attr) != IPP_TAG_NAMELANG))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+
+ ippSetGroupTag(client->request, &attr, IPP_TAG_JOB);
+ }
+ else
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
+
+ if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
+ ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 100)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-sheets", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 ||
+ (ippGetValueTag(attr) != IPP_TAG_NAME &&
+ ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+ ippGetValueTag(attr) != IPP_TAG_KEYWORD) ||
+ strcmp(ippGetString(attr, 0, NULL), "none"))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "media", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 ||
+ (ippGetValueTag(attr) != IPP_TAG_NAME &&
+ ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+ ippGetValueTag(attr) != IPP_TAG_KEYWORD))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else
+ {
+#if 0 /* TODO: Validate media */
+ for (i = 0;
+ i < (int)(sizeof(media_supported) / sizeof(media_supported[0]));
+ i ++)
+ if (!strcmp(ippGetString(attr, 0, NULL), media_supported[i]))
+ break;
+
+ if (i >= (int)(sizeof(media_supported) / sizeof(media_supported[0])))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+#endif /* 0 */
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "media-col", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 ||
+ ippGetValueTag(attr) != IPP_TAG_BEGIN_COLLECTION)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ /* TODO: check for valid media-col */
+ }
+
+ if ((attr = ippFindAttribute(client->request, "multiple-document-handling", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
+ (strcmp(ippGetString(attr, 0, NULL),
+ "separate-documents-uncollated-copies") &&
+ strcmp(ippGetString(attr, 0, NULL),
+ "separate-documents-collated-copies")))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "orientation-requested", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
+ ippGetInteger(attr, 0) < IPP_ORIENT_PORTRAIT ||
+ ippGetInteger(attr, 0) > IPP_ORIENT_REVERSE_PORTRAIT)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "page-ranges", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetValueTag(attr) != IPP_TAG_RANGE)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "print-quality", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
+ ippGetInteger(attr, 0) < IPP_QUALITY_DRAFT ||
+ ippGetInteger(attr, 0) > IPP_QUALITY_HIGH)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "printer-resolution", IPP_TAG_ZERO)) != NULL)
+ {
+ supported = ippFindAttribute(client->printer->dev_attrs, "printer-resolution-supported", IPP_TAG_RESOLUTION);
+
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_RESOLUTION ||
+ !supported)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else
+ {
+ int count, /* Number of supported values */
+ xdpi, /* Horizontal resolution for job template attribute */
+ ydpi, /* Vertical resolution for job template attribute */
+ sydpi; /* Vertical resolution for supported value */
+ ipp_res_t units, /* Units for job template attribute */
+ sunits; /* Units for supported value */
+
+ xdpi = ippGetResolution(attr, 0, &ydpi, &units);
+ count = ippGetCount(supported);
+
+ for (i = 0; i < count; i ++)
+ {
+ if (xdpi == ippGetResolution(supported, i, &sydpi, &sunits) && ydpi == sydpi && units == sunits)
+ break;
+ }
+
+ if (i >= count)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "sides", IPP_TAG_ZERO)) != NULL)
+ {
+ const char *sides = ippGetString(attr, 0, NULL);
+ /* "sides" value... */
+
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else if ((supported = ippFindAttribute(client->printer->dev_attrs, "sides-supported", IPP_TAG_KEYWORD)) != NULL)
+ {
+ if (!ippContainsString(supported, sides))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+ else if (strcmp(sides, "one-sided"))
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ return (valid);
+}
+
+
+/*
+ * End of "$Id: ippinfra.c 12237 2014-11-03 13:07:32Z msweet $".
+ */
--- /dev/null
+.\"
+.\" "$Id$"
+.\"
+.\" ippinfra man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" 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/".
+.\"
+.TH ippinfra 1 "CUPS" "16 September 2014" "Apple Inc."
+.SH NAME
+ippinfra \- a simple ipp infrastructure server
+.SH SYNOPSIS
+.B ippinfra
+[
+.B \-d
+.I spool-directory
+] [
+.B \-h
+] [
+.B \-k
+] [
+.B \-n
+.I hostname
+] [
+.B \-p
+.I port
+] [
+.B \-u
+.I username:password
+] [
+.B \-v[vvv]
+]
+.I service-name
+.SH DESCRIPTION
+.B ippinfra
+is a simple Internet Printing Protocol (IPP) infrastructure server conforming to the IPP Shared Infrastructure Extensions (INFRA) specification. It can be used as a very basic infrastructure server between standard IPP clients and IPP proxies conforming to the INFRA specification.
+.SH OPTIONS
+The following options are recognized by
+.B ippinfra:
+.TP 5
+\fB\-d \fIspool-directory\fR
+Specifies the directory that will hold the print files.
+The default is a directory under the user's current temporary directory.
+.TP 5
+.B \-h
+Shows program help.
+.TP 5
+.B \-k
+Keeps the print documents in the spool directory rather than deleting them.
+.TP 5
+\fB\-n \fIhostname\fR
+Specifies the hostname that is reported by the server.
+The default is the name returned by the
+.BR hostname (1)
+command.
+.TP 5
+\fB\-p \fIport\fR
+Specifies the port number to listen on.
+The default is a user-specific number from 8000 to 8999.
+.TP 5
+\fB\-u \fIusername:password\fR
+Specifies the username and password for the IPP proxy.
+The default is "test:test123".
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippinfra
+program returns 1 if it is unable to process the command-line arguments.
+Otherwise
+.B ippinfra
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippinfra
+program is unique to CUPS and conforms to the IPP Shared Infrastructure Extensions (INFRA) specification as an Infrastructure Printer.
+.SH EXAMPLES
+Run
+.B ippinfra
+with a service name of My Cool Printer:
+.nf
+
+ ippinfra "My Cool Printer"
+.fi
+.LP
+Specify a proxy username of "foo" and password of "bar":
+.nf
+
+ ippinfra \-u foo:bar "My Cool Printer"
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
--- /dev/null
+/*
+ * "$Id: ippproxy.c 12191 2014-10-01 19:00:21Z msweet $"
+ *
+ * CUPS Cloud Proxy for HP PCL and IPP Everywhere printers.
+ *
+ * Copyright 2014 by Apple Inc.
+ */
+
+#include <cups/cups.h>
+
+
+/*
+ * 'main()' - Main entry for cupsproxy.
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line arguments */
+ char *argv[]) /* I - Command-line arguments */
+{
+ (void)argc;
+ (void)argv;
+
+ return (0);
+}
+
+
+/*
+ * End of "$Id: ippproxy.c 12191 2014-10-01 19:00:21Z msweet $".
+ */
--- /dev/null
+.\"
+.\" "$Id$"
+.\"
+.\" ippproxy man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" 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/".
+.\"
+.TH ippproxy 1 "CUPS" "16 September 2014" "Apple Inc."
+.SH NAME
+ippproxy \- a simple ipp proxy client
+.SH SYNOPSIS
+.B ippproxy
+[
+.B \-v[vvv]
+]
+.I infrastructure-printer-uri
+.I local-printer-uri
+.SH DESCRIPTION
+.B ippproxy
+is a simple IPP proxy client conforming to the IPP Shared Infrastructure Extensions (INFRA) specification. It can be used to proxy access to a local IPP printer through an Infrastructure Printer such as
+.BR ippinfra (1).
+.SH OPTIONS
+The following options are recognized by
+.B ippproxy:
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippproxy
+program returns 1 if it is unable to process the command-line arguments or connect to either the infrastructure or local printers.
+Otherwise
+.B ippproxy
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippproxy
+program is unique to CUPS and conforms to the IPP Shared Infrastructure Extensions (INFRA) specification.
+.SH EXAMPLE
+Run
+.B ippproxy
+with an infrastructure URI of "ipps://host.example.com/ipp/print" and a local URI of "ipp://10.0.1.2/ipp/print":
+.nf
+
+ ippproxy ipps://host.example.com/ipp/print ipp://10.0.1.2/ipp/print
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
/*
- * "$Id: ippserver.c 12486 2015-02-04 13:13:21Z msweet $"
+ * "$Id: ippserver.c 12598 2015-05-05 18:57:57Z msweet $"
*
* Sample IPP Everywhere server for CUPS.
*
static const int pwg_raster_document_resolution_supported[] =
{
150,
- 300,
- 600
+ 300
};
static const char * const pwg_raster_document_type_supported[] =
{
- "black-1",
- "cmyk-8",
- "sgray-8",
- "srgb-8",
- "srgb-16"
+ "black_1",
+ "cmyk_8",
+ "sgray_8",
+ "srgb_8",
+ "srgb_16"
};
static const char * const reference_uri_schemes_supported[] =
{ /* reference-uri-schemes-supported */
"CP1",
"IS1-5-7",
"MT1-2-3-4-5-6-8-9-10-11-12-13",
- "RS600",
+ "RS300",
"SRGB24",
"V1.4",
"W8",
{
static const char * const names[] =
{
+ "job-account-id",
"job-accounting-user-id",
"job-password"
};
if (client->printer->state_reasons & reason)
html_printf(client, "\n<br> %s", reasons[i]);
html_printf(client, "</p>\n");
-
+
if (cupsArrayCount(client->printer->jobs) > 0)
{
_cupsRWLockRead(&(client->printer->rwlock));
# ifdef HAVE_SSL
TXTRecordSetValue(&ipp_txt, "TLS", 3, "1.2");
# endif /* HAVE_SSL */
+ if (strstr(formats, "image/urf"))
+ TXTRecordSetValue(&ipp_txt, "URF", 66, "CP1,IS1-5-7,MT1-2-3-4-5-6-8-9-10-11-12-13,RS300,SRGB24,V1.4,W8,DM1");
+
+ TXTRecordSetValue(&ipp_txt, "txtvers", 1, "1");
+ TXTRecordSetValue(&ipp_txt, "qtotal", 1, "1");
/*
* Register the _printer._tcp (LPD) service type with a port number of 0 to
/*
- * End of "$Id: ippserver.c 12486 2015-02-04 13:13:21Z msweet $".
+ * End of "$Id: ippserver.c 12598 2015-05-05 18:57:57Z msweet $".
*/
/*
- * "$Id: ipptool.c 12465 2015-02-01 02:47:23Z msweet $"
+ * "$Id: ipptool.c 12644 2015-05-19 21:22:35Z msweet $"
*
* ipptool command for CUPS.
*
typedef struct _cups_expect_s /**** Expected attribute info ****/
{
int optional, /* Optional attribute? */
- not_expect; /* Don't expect attribute? */
+ not_expect, /* Don't expect attribute? */
+ expect_all; /* Expect all attributes to match/not match */
char *name, /* Attribute name */
*of_type, /* Type name */
*same_count_as, /* Parallel attribute name */
*if_defined, /* Only required if variable defined */
*if_not_defined, /* Only required if variable is not defined */
*with_value, /* Attribute must include this value */
+ *with_value_from, /* Attribute must have one of the values in this attribute */
*define_match, /* Variable to define on match */
*define_no_match, /* Variable to define on no-match */
*define_value; /* Variable to define with value */
static int with_value(FILE *outfile, cups_array_t *errors, char *value, int flags,
ipp_attribute_t *attr, char *matchbuf,
size_t matchlen);
+static int with_value_from(cups_array_t *errors, ipp_attribute_t *fromattr, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
/*
_cups_strcasecmp(token, "WITH-HOSTNAME") &&
_cups_strcasecmp(token, "WITH-RESOURCE") &&
_cups_strcasecmp(token, "WITH-SCHEME") &&
- _cups_strcasecmp(token, "WITH-VALUE"))
+ _cups_strcasecmp(token, "WITH-VALUE") &&
+ _cups_strcasecmp(token, "WITH-VALUE-FROM"))
last_expect = NULL;
if (_cups_strcasecmp(token, "DEFINE-MATCH") &&
last_status->repeat_match = 0;
last_status->repeat_no_match = 0;
}
- else if (!_cups_strcasecmp(token, "EXPECT"))
+ else if (!_cups_strcasecmp(token, "EXPECT") || !_cups_strcasecmp(token, "EXPECT-ALL"))
{
/*
* Expected attributes...
*/
+ int expect_all = !_cups_strcasecmp(token, "EXPECT-ALL");
+
if (num_expects >= (int)(sizeof(expects) / sizeof(expects[0])))
{
print_fatal_error(outfile, "Too many EXPECT's on line %d.", linenum);
memset(last_expect, 0, sizeof(_cups_expect_t));
last_expect->repeat_limit = 1000;
+ last_expect->expect_all = expect_all;
if (token[0] == '!')
{
goto test_exit;
}
}
+ else if (!_cups_strcasecmp(token, "WITH-VALUE-FROM"))
+ {
+ if (!get_token(fp, temp, sizeof(temp), &linenum))
+ {
+ print_fatal_error(outfile, "Missing %s value on line %d.", token, linenum);
+ pass = 0;
+ goto test_exit;
+ }
+
+ if (last_expect)
+ {
+ /*
+ * Expand any variables in the value and then save it.
+ */
+
+ expand_variables(vars, token, temp, sizeof(token));
+
+ last_expect->with_value_from = strdup(token);
+ last_expect->with_flags = _CUPS_WITH_LITERAL;
+ }
+ else
+ {
+ print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token,
+ linenum);
+ pass = 0;
+ goto test_exit;
+ }
+ }
else if (!_cups_strcasecmp(token, "DISPLAY"))
{
/*
get_variable(vars, expect->if_not_defined))
continue;
- found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
+ found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
- if ((found && expect->not_expect) ||
- (!found && !(expect->not_expect || expect->optional)) ||
- (found && !expect_matches(expect, found->value_tag)) ||
- (found && expect->in_group &&
- found->group_tag != expect->in_group))
- {
- if (expect->define_no_match)
- set_variable(outfile, vars, expect->define_no_match, "1");
- else if (!expect->define_match && !expect->define_value)
+ do
+ {
+ if ((found && expect->not_expect) ||
+ (!found && !(expect->not_expect || expect->optional)) ||
+ (found && !expect_matches(expect, found->value_tag)) ||
+ (found && expect->in_group &&
+ found->group_tag != expect->in_group))
{
- if (found && expect->not_expect)
- add_stringf(errors, "NOT EXPECTED: %s", expect->name);
- else if (!found && !(expect->not_expect || expect->optional))
- add_stringf(errors, "EXPECTED: %s", expect->name);
- else if (found)
+ if (expect->define_no_match)
+ set_variable(outfile, vars, expect->define_no_match, "1");
+ else if (!expect->define_match && !expect->define_value)
{
- if (!expect_matches(expect, found->value_tag))
- add_stringf(errors, "EXPECTED: %s OF-TYPE %s (got %s)",
- expect->name, expect->of_type,
- ippTagString(found->value_tag));
-
- if (expect->in_group && found->group_tag != expect->in_group)
- add_stringf(errors, "EXPECTED: %s IN-GROUP %s (got %s).",
- expect->name, ippTagString(expect->in_group),
- ippTagString(found->group_tag));
- }
- }
+ if (found && expect->not_expect)
+ add_stringf(errors, "NOT EXPECTED: %s", expect->name);
+ else if (!found && !(expect->not_expect || expect->optional))
+ add_stringf(errors, "EXPECTED: %s", expect->name);
+ else if (found)
+ {
+ if (!expect_matches(expect, found->value_tag))
+ add_stringf(errors, "EXPECTED: %s OF-TYPE %s (got %s)",
+ expect->name, expect->of_type,
+ ippTagString(found->value_tag));
+
+ if (expect->in_group && found->group_tag != expect->in_group)
+ add_stringf(errors, "EXPECTED: %s IN-GROUP %s (got %s).",
+ expect->name, ippTagString(expect->in_group),
+ ippTagString(found->group_tag));
+ }
+ }
- if (expect->repeat_no_match &&
- repeat_count < expect->repeat_limit)
- repeat_test = 1;
+ if (expect->repeat_no_match &&
+ repeat_count < expect->repeat_limit)
+ repeat_test = 1;
- continue;
- }
+ break;
+ }
- if (found)
- ippAttributeString(found, buffer, sizeof(buffer));
+ if (found)
+ ippAttributeString(found, buffer, sizeof(buffer));
- if (found &&
- !with_value(outfile, NULL, expect->with_value, expect->with_flags, found,
- buffer, sizeof(buffer)))
- {
- if (expect->define_no_match)
- set_variable(outfile, vars, expect->define_no_match, "1");
- else if (!expect->define_match && !expect->define_value &&
- !expect->repeat_match && !expect->repeat_no_match)
+ if (found && expect->with_value_from && !with_value_from(NULL, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer)))
{
- if (expect->with_flags & _CUPS_WITH_REGEX)
- add_stringf(errors, "EXPECTED: %s %s /%s/",
- expect->name,
- (expect->with_flags & _CUPS_WITH_ALL) ?
- "WITH-ALL-VALUES" : "WITH-VALUE",
- expect->with_value);
- else
- add_stringf(errors, "EXPECTED: %s %s \"%s\"",
- expect->name,
- (expect->with_flags & _CUPS_WITH_ALL) ?
- "WITH-ALL-VALUES" : "WITH-VALUE",
- expect->with_value);
-
- with_value(outfile, errors, expect->with_value, expect->with_flags, found,
- buffer, sizeof(buffer));
- }
+ if (expect->define_no_match)
+ set_variable(outfile, vars, expect->define_no_match, "1");
+ else if (!expect->define_match && !expect->define_value && !expect->repeat_match && !expect->repeat_no_match)
+ {
+ add_stringf(errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from);
- if (expect->repeat_no_match &&
- repeat_count < expect->repeat_limit)
- repeat_test = 1;
+ with_value_from(errors, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer));
+ }
- continue;
- }
+ if (expect->repeat_no_match && repeat_count < expect->repeat_limit)
+ repeat_test = 1;
- if (found && expect->count > 0 &&
- found->num_values != expect->count)
- {
- if (expect->define_no_match)
- set_variable(outfile, vars, expect->define_no_match, "1");
- else if (!expect->define_match && !expect->define_value)
- {
- add_stringf(errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
- expect->count, found->num_values);
+ break;
}
+ else if (found && !with_value(outfile, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
+ {
+ if (expect->define_no_match)
+ set_variable(outfile, vars, expect->define_no_match, "1");
+ else if (!expect->define_match && !expect->define_value &&
+ !expect->repeat_match && !expect->repeat_no_match)
+ {
+ if (expect->with_flags & _CUPS_WITH_REGEX)
+ add_stringf(errors, "EXPECTED: %s %s /%s/",
+ expect->name,
+ (expect->with_flags & _CUPS_WITH_ALL) ?
+ "WITH-ALL-VALUES" : "WITH-VALUE",
+ expect->with_value);
+ else
+ add_stringf(errors, "EXPECTED: %s %s \"%s\"",
+ expect->name,
+ (expect->with_flags & _CUPS_WITH_ALL) ?
+ "WITH-ALL-VALUES" : "WITH-VALUE",
+ expect->with_value);
+
+ with_value(outfile, errors, expect->with_value, expect->with_flags, found,
+ buffer, sizeof(buffer));
+ }
- if (expect->repeat_no_match &&
- repeat_count < expect->repeat_limit)
- repeat_test = 1;
-
- continue;
- }
+ if (expect->repeat_no_match &&
+ repeat_count < expect->repeat_limit)
+ repeat_test = 1;
- if (found && expect->same_count_as)
- {
- attrptr = ippFindAttribute(response, expect->same_count_as,
- IPP_TAG_ZERO);
+ break;
+ }
- if (!attrptr || attrptr->num_values != found->num_values)
+ if (found && expect->count > 0 &&
+ found->num_values != expect->count)
{
if (expect->define_no_match)
set_variable(outfile, vars, expect->define_no_match, "1");
else if (!expect->define_match && !expect->define_value)
{
- if (!attrptr)
- add_stringf(errors,
- "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
- "(not returned)", expect->name,
- found->num_values, expect->same_count_as);
- else if (attrptr->num_values != found->num_values)
- add_stringf(errors,
- "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
- "(%d values)", expect->name, found->num_values,
- expect->same_count_as, attrptr->num_values);
+ add_stringf(errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
+ expect->count, found->num_values);
}
if (expect->repeat_no_match &&
- repeat_count < expect->repeat_limit)
+ repeat_count < expect->repeat_limit)
repeat_test = 1;
- continue;
+ break;
}
- }
- if (found && expect->define_match)
- set_variable(outfile, vars, expect->define_match, "1");
-
- if (found && expect->define_value)
- {
- if (!expect->with_value)
+ if (found && expect->same_count_as)
{
- int last = ippGetCount(found) - 1;
- /* Last element in attribute */
+ attrptr = ippFindAttribute(response, expect->same_count_as,
+ IPP_TAG_ZERO);
- switch (ippGetValueTag(found))
+ if (!attrptr || attrptr->num_values != found->num_values)
{
- case IPP_TAG_ENUM :
- case IPP_TAG_INTEGER :
- snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
- break;
-
- case IPP_TAG_BOOLEAN :
- if (ippGetBoolean(found, last))
- strlcpy(buffer, "true", sizeof(buffer));
- else
- strlcpy(buffer, "false", sizeof(buffer));
- break;
+ if (expect->define_no_match)
+ set_variable(outfile, vars, expect->define_no_match, "1");
+ else if (!expect->define_match && !expect->define_value)
+ {
+ if (!attrptr)
+ add_stringf(errors,
+ "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
+ "(not returned)", expect->name,
+ found->num_values, expect->same_count_as);
+ else if (attrptr->num_values != found->num_values)
+ add_stringf(errors,
+ "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
+ "(%d values)", expect->name, found->num_values,
+ expect->same_count_as, attrptr->num_values);
+ }
- case IPP_TAG_RESOLUTION :
- {
- int xres, /* Horizontal resolution */
- yres; /* Vertical resolution */
- ipp_res_t units; /* Resolution units */
+ if (expect->repeat_no_match &&
+ repeat_count < expect->repeat_limit)
+ repeat_test = 1;
- xres = ippGetResolution(found, last, &yres, &units);
+ break;
+ }
+ }
- if (xres == yres)
- snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
- else
- snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
- }
- break;
+ if (found && expect->define_match)
+ set_variable(outfile, vars, expect->define_match, "1");
- case IPP_TAG_CHARSET :
- case IPP_TAG_KEYWORD :
- case IPP_TAG_LANGUAGE :
- case IPP_TAG_MIMETYPE :
- case IPP_TAG_NAME :
- case IPP_TAG_NAMELANG :
- case IPP_TAG_TEXT :
- case IPP_TAG_TEXTLANG :
- case IPP_TAG_URI :
- case IPP_TAG_URISCHEME :
- strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
- break;
+ if (found && expect->define_value)
+ {
+ if (!expect->with_value)
+ {
+ int last = ippGetCount(found) - 1;
+ /* Last element in attribute */
- default :
- ippAttributeString(found, buffer, sizeof(buffer));
- break;
+ switch (ippGetValueTag(found))
+ {
+ case IPP_TAG_ENUM :
+ case IPP_TAG_INTEGER :
+ snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+ break;
+
+ case IPP_TAG_BOOLEAN :
+ if (ippGetBoolean(found, last))
+ strlcpy(buffer, "true", sizeof(buffer));
+ else
+ strlcpy(buffer, "false", sizeof(buffer));
+ break;
+
+ case IPP_TAG_RESOLUTION :
+ {
+ int xres, /* Horizontal resolution */
+ yres; /* Vertical resolution */
+ ipp_res_t units; /* Resolution units */
+
+ xres = ippGetResolution(found, last, &yres, &units);
+
+ if (xres == yres)
+ snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ }
+ break;
+
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_NAME :
+ case IPP_TAG_NAMELANG :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+ break;
+
+ default :
+ ippAttributeString(found, buffer, sizeof(buffer));
+ break;
+ }
}
- }
- set_variable(outfile, vars, expect->define_value, buffer);
- }
+ set_variable(outfile, vars, expect->define_value, buffer);
+ }
- if (found && expect->repeat_match &&
- repeat_count < expect->repeat_limit)
- repeat_test = 1;
+ if (found && expect->repeat_match &&
+ repeat_count < expect->repeat_limit)
+ repeat_test = 1;
+ }
+ while (expect->expect_all && (found = ippFindNextAttribute(response, expect->name, IPP_TAG_ZERO)) != NULL);
}
}
value = getenv(temp);
src += tempptr - temp + 5;
}
- else if (vars)
+ else
{
if (src[1] == '{')
{
src += tempptr - temp + 1;
}
- else
- {
- value = "$";
- src ++;
- }
if (value)
{
/*
- * End of "$Id: ipptool.c 12465 2015-02-01 02:47:23Z msweet $".
+ * 'with_value_from()' - Test a WITH-VALUE-FROM predicate.
+ */
+
+static int /* O - 1 on match, 0 on non-match */
+with_value_from(
+ cups_array_t *errors, /* I - Errors array */
+ ipp_attribute_t *fromattr, /* I - "From" attribute */
+ ipp_attribute_t *attr, /* I - Attribute to compare */
+ char *matchbuf, /* I - Buffer to hold matching value */
+ size_t matchlen) /* I - Length of match buffer */
+{
+ int i, j, /* Looping vars */
+ count = ippGetCount(attr), /* Number of attribute values */
+ match = 1; /* Match? */
+
+
+ *matchbuf = '\0';
+
+ /*
+ * Compare the from value(s) to the attribute value(s)...
+ */
+
+ switch (ippGetValueTag(attr))
+ {
+ case IPP_TAG_INTEGER :
+ if (ippGetValueTag(fromattr) != IPP_TAG_INTEGER && ippGetValueTag(fromattr) != IPP_TAG_RANGE)
+ goto wrong_value_tag;
+
+ for (i = 0; i < count; i ++)
+ {
+ int value = ippGetInteger(attr, i);
+ /* Current integer value */
+
+ if (ippContainsInteger(fromattr, value))
+ {
+ if (!matchbuf[0])
+ snprintf(matchbuf, matchlen, "%d", value);
+ }
+ else
+ {
+ add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value);
+ match = 0;
+ }
+ }
+ break;
+
+ case IPP_TAG_ENUM :
+ if (ippGetValueTag(fromattr) != IPP_TAG_ENUM)
+ goto wrong_value_tag;
+
+ for (i = 0; i < count; i ++)
+ {
+ int value = ippGetInteger(attr, i);
+ /* Current integer value */
+
+ if (ippContainsInteger(fromattr, value))
+ {
+ if (!matchbuf[0])
+ snprintf(matchbuf, matchlen, "%d", value);
+ }
+ else
+ {
+ add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value);
+ match = 0;
+ }
+ }
+ break;
+
+ case IPP_TAG_RESOLUTION :
+ if (ippGetValueTag(fromattr) != IPP_TAG_RESOLUTION)
+ goto wrong_value_tag;
+
+ for (i = 0; i < count; i ++)
+ {
+ int xres, yres;
+ ipp_res_t units;
+ int fromcount = ippGetCount(fromattr);
+ int fromxres, fromyres;
+ ipp_res_t fromunits;
+
+ xres = ippGetResolution(attr, i, &yres, &units);
+
+ for (j = 0; j < fromcount; j ++)
+ {
+ fromxres = ippGetResolution(fromattr, j, &fromyres, &fromunits);
+ if (fromxres == xres && fromyres == yres && fromunits == units)
+ break;
+ }
+
+ if (j < fromcount)
+ {
+ if (!matchbuf[0])
+ {
+ if (xres == yres)
+ snprintf(matchbuf, matchlen, "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ snprintf(matchbuf, matchlen, "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ }
+ }
+ else
+ {
+ if (xres == yres)
+ add_stringf(errors, "GOT: %s=%d%s", ippGetName(attr), xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ add_stringf(errors, "GOT: %s=%dx%d%s", ippGetName(attr), xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+
+ match = 0;
+ }
+ }
+ break;
+
+ case IPP_TAG_NOVALUE :
+ case IPP_TAG_UNKNOWN :
+ return (1);
+
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_NAME :
+ case IPP_TAG_NAMELANG :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ for (i = 0; i < count; i ++)
+ {
+ const char *value = ippGetString(attr, i, NULL);
+ /* Current string value */
+
+ if (ippContainsString(fromattr, value))
+ {
+ if (!matchbuf[0])
+ strlcpy(matchbuf, value, matchlen);
+ }
+ else
+ {
+ add_stringf(errors, "GOT: %s='%s'", ippGetName(attr), value);
+ match = 0;
+ }
+ }
+ break;
+
+ default :
+ match = 0;
+ break;
+ }
+
+ return (match);
+
+ /* value tag mismatch between fromattr and attr */
+ wrong_value_tag :
+
+ add_stringf(errors, "GOT: %s OF-TYPE %s", ippGetName(attr), ippTagString(ippGetValueTag(attr)));
+
+ return (0);
+}
+
+
+/*
+ * End of "$Id: ipptool.c 12644 2015-05-19 21:22:35Z msweet $".
*/
#!/bin/sh
#
-# "$Id: run-stp-tests.sh 12658 2015-05-22 17:53:45Z msweet $"
+# "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
#
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
if test -d $root/.svn; then
rev=`svn info . | grep Revision: | awk '{print $2}'`
- strfile=$BASE/cups-str-2.0-r$rev-$user.html
+ strfile=$BASE/cups-str-2.1-r$rev-$user.html
else
- strfile=$BASE/cups-str-2.0-$date-$user.html
+ strfile=$BASE/cups-str-2.1-$date-$user.html
fi
rm -f $strfile
echo ""
echo "Running IPP compliance tests..."
-echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
+echo "<H1><A NAME='IPP'>1 - IPP Compliance Tests</A></H1>" >>$strfile
echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
echo ""
echo "Running command tests..."
-echo "<H1>2 - Command Tests</H1>" >>$strfile
+echo "<H1><A NAME='COMMAND'>2 - Command Tests</A></H1>" >>$strfile
echo "<P>This section provides the results to the command tests" >>$strfile
echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
echo $date by $user on `hostname`. >>$strfile
#
kill $cupsd
-
-#
-# Append the log files for post-mortim...
-#
-
-echo "<H1>3 - Log Files</H1>" >>$strfile
+wait $cupsd
+cupsdstatus=$?
#
# Verify counts...
echo "Test Summary"
echo ""
-echo "<H2>Summary</H2>" >>$strfile
+echo "<H1><A NAME='SUMMARY'>3 - Test Summary</A></H1>" >>$strfile
+
+if test $cupsdstatus != 0; then
+ echo "FAIL: cupsd failed with exit status $cupsdstatus."
+ echo "<p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: cupsd exited with no errors."
+ echo "<p>PASS: cupsd exited with no errors.</p>" >>$strfile
+fi
# Job control files
count=`ls -1 $BASE/spool | wc -l`
echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
fi
+#
# Log files...
-echo "<H2>access_log</H2>" >>$strfile
+#
+
+echo "<H1><A NAME='LOGS'>4 - Log Files</A></H1>" >>$strfile
+
+echo "<H2><A NAME='access_log'>access_log</A></H2>" >>$strfile
echo "<PRE>" >>$strfile
sed -e '1,$s/&/&/g' -e '1,$s/</</g' $BASE/log/access_log >>$strfile
echo "</PRE>" >>$strfile
-echo "<H2>error_log</H2>" >>$strfile
+echo "<H2><A NAME='error_log'>error_log</A></H2>" >>$strfile
echo "<PRE>" >>$strfile
$GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
echo "</PRE>" >>$strfile
-echo "<H2>page_log</H2>" >>$strfile
+echo "<H2><A NAME='page_log'>page_log</A></H2>" >>$strfile
echo "<PRE>" >>$strfile
sed -e '1,$s/&/&/g' -e '1,$s/</</g' $BASE/log/page_log >>$strfile
echo "</PRE>" >>$strfile
fi
#
-# End of "$Id: run-stp-tests.sh 12658 2015-05-22 17:53:45Z msweet $"
+# End of "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
#
<HTML>
<HEAD>
<META NAME="Description" CONTENT="CUPS Test Report">
- <META NAME="COPYRIGHT" CONTENT="Copyright 2007-2013, All Rights Reserved">
- <META NAME="DOCNUMBER" CONTENT="CUPS-STR-2.0">
+ <META NAME="COPYRIGHT" CONTENT="Copyright 2007-2015, All Rights Reserved">
+ <META NAME="DOCNUMBER" CONTENT="CUPS-STR-2.1">
<META NAME="Author" CONTENT="Apple Inc.">
- <TITLE>CUPS 2.0 Software Test Report</TITLE>
+ <TITLE>CUPS 2.1 Software Test Report</TITLE>
<STYLE TYPE="text/css"><!--
PRE {
font-size: 80%;
</HEAD>
<BODY>
-<H1>CUPS 2.0 Software Test Report</H1>
+<H1>CUPS 2.1 Software Test Report</H1>
<P>This software test report provides detailed test results that
-are used to evaluate the stability and compliance of CUPS Version 2.0.
+are used to evaluate the stability and compliance of CUPS Version 2.1.
<H2>Document Overview</H2>
<P>This software test plan is organized into the following sections:
<UL>
- <LI>1 - IPP Compliance Tests</LI>
- <LI>2 - Command Tests</LI>
- <LI>3 - Log Files</LI>
+ <LI><A HREF="#IPP">1 - IPP Compliance Tests</A></LI>
+ <LI><A HREF="#COMMAND">2 - Command Tests</A></LI>
+ <LI><A HREF="#SUMMARY">3 - Test Summary</A></LI>
+ <LI><A HREF="#LOGS">4 - Log Files</A><UL>
+ <LI><A HREF="#access_log">access_log</A></LI>
+ <LI><A HREF="#error_log">error_log</A></LI>
+ <LI><A HREF="#page_log">page_log</A></LI>
+ </UL></LI>
</UL>
/*
- * "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $"
+ * "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $"
*
* Configuration file for CUPS on Windows.
*
- * 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
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.0.4"
-#define CUPS_MINIMAL "CUPS/2.0.4"
+#define CUPS_SVERSION "CUPS v2.1svn"
+#define CUPS_MINIMAL "CUPS/2.1svn"
/*
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $".
+ * End of "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $".
*/
buildPhases = (
);
dependencies = (
+ 274EE2861A03EEEE003213D1 /* PBXTargetDependency */,
+ 274EE2881A03EEEE003213D1 /* PBXTargetDependency */,
726AD704135E8AA1002C930D /* PBXTargetDependency */,
2767FC5419267469000F61D3 /* PBXTargetDependency */,
273BF6DE1333B6370022CAAB /* PBXTargetDependency */,
buildPhases = (
);
dependencies = (
+ 27A034871A8BDC6900650675 /* PBXTargetDependency */,
+ 274EE2821A03EEE0003213D1 /* PBXTargetDependency */,
+ 274EE2841A03EEE0003213D1 /* PBXTargetDependency */,
274FF5E313332D4300317ECB /* PBXTargetDependency */,
72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */,
72F75A711336FACD004BB496 /* PBXTargetDependency */,
270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; };
270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */ = {isa = PBXBuildFile; fileRef = 270CCDBB135E3D3E00007BE2 /* testmime.c */; };
273BF6C71333B5370022CAAB /* testcups.c in Sources */ = {isa = PBXBuildFile; fileRef = 273BF6C61333B5370022CAAB /* testcups.c */; };
+ 274EE2611A03EDCA003213D1 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; };
+ 274EE2621A03EDCA003213D1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; };
+ 274EE2631A03EDCA003213D1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; };
+ 274EE2641A03EDCA003213D1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; };
+ 274EE2651A03EDCA003213D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; };
+ 274EE2661A03EDCA003213D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; };
+ 274EE2721A03EDCB003213D1 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; };
+ 274EE2731A03EDCB003213D1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; };
+ 274EE2741A03EDCB003213D1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; };
+ 274EE2751A03EDCB003213D1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; };
+ 274EE2761A03EDCB003213D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; };
+ 274EE2771A03EDCB003213D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; };
+ 274EE27E1A03EE0B003213D1 /* ippinfra.c in Sources */ = {isa = PBXBuildFile; fileRef = 274EE27D1A03EE0B003213D1 /* ippinfra.c */; };
+ 274EE2801A03EE41003213D1 /* ippproxy.c in Sources */ = {isa = PBXBuildFile; fileRef = 274EE27F1A03EE41003213D1 /* ippproxy.c */; };
274FF5D913332CC700317ECB /* cups-driverd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D613332CC700317ECB /* cups-driverd.cxx */; };
274FF5DA13332CC700317ECB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D713332CC700317ECB /* util.c */; };
274FF5DD13332D0600317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; };
278C58EB136B64B000836530 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; };
278C58EC136B64B000836530 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; };
+ 27A034821A8BDC3A00650675 /* lpadmin.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08D137A3F5200FAFEF6 /* lpadmin.c */; };
+ 27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
7200511218F492F200E7B81B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; };
720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
720DD6D31358FDDE0064AA82 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 720DD6D21358FDDE0064AA82 /* snmp.c */; };
remoteGlobalIDString = 273BF6BC1333B5000022CAAB;
remoteInfo = testcups;
};
+ 274EE25D1A03EDCA003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274FF6891333B1C400317ECB;
+ remoteInfo = libcups_static;
+ };
+ 274EE26E1A03EDCB003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274FF6891333B1C400317ECB;
+ remoteInfo = libcups_static;
+ };
+ 274EE2811A03EEE0003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274EE25B1A03EDCA003213D1;
+ remoteInfo = ippinfra;
+ };
+ 274EE2831A03EEE0003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274EE26C1A03EDCB003213D1;
+ remoteInfo = ippproxy;
+ };
+ 274EE2851A03EEEE003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274EE25B1A03EDCA003213D1;
+ remoteInfo = ippinfra;
+ };
+ 274EE2871A03EEEE003213D1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274EE26C1A03EDCB003213D1;
+ remoteInfo = ippproxy;
+ };
274FF5DB13332CF900317ECB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
remoteGlobalIDString = 274FF6891333B1C400317ECB;
remoteInfo = libcups_static;
};
+ 27A034831A8BDC4A00650675 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 72220EAD1333047D00FCA411;
+ remoteInfo = libcups;
+ };
+ 27A034861A8BDC6900650675 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 27A0347A1A8BDB1200650675;
+ remoteInfo = lpadmin;
+ };
720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 274EE2671A03EDCA003213D1 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 274EE2781A03EDCB003213D1 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
274FF5CA13332B1F00317ECB /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 1;
};
+ 27A034791A8BDB1200650675 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
720DD6C01358FD5F0064AA82 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
2732E092137A3F5200FAFEF6 /* lpstat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpstat.c; path = ../systemv/lpstat.c; sourceTree = "<group>"; };
273BF6BD1333B5000022CAAB /* testcups */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcups; sourceTree = BUILT_PRODUCTS_DIR; };
273BF6C61333B5370022CAAB /* testcups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcups.c; path = ../cups/testcups.c; sourceTree = "<group>"; };
+ 274EE26B1A03EDCA003213D1 /* ippserver copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ippserver copy"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 274EE27C1A03EDCB003213D1 /* ippserver copy copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ippserver copy copy"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 274EE27D1A03EE0B003213D1 /* ippinfra.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippinfra.c; path = ../test/ippinfra.c; sourceTree = "<group>"; };
+ 274EE27F1A03EE41003213D1 /* ippproxy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippproxy.c; path = ../test/ippproxy.c; sourceTree = "<group>"; };
274FF5CC13332B1F00317ECB /* cups-driverd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-driverd"; sourceTree = BUILT_PRODUCTS_DIR; };
274FF5D613332CC700317ECB /* cups-driverd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "cups-driverd.cxx"; path = "../scheduler/cups-driverd.cxx"; sourceTree = "<group>"; };
274FF5D713332CC700317ECB /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = ../scheduler/util.c; sourceTree = "<group>"; };
278C58E6136B64B000836530 /* Kerberos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kerberos.framework; path = /System/Library/Frameworks/Kerberos.framework; sourceTree = "<absolute>"; };
278C58E7136B64B000836530 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
278C58E8136B64B000836530 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
+ 27A0347B1A8BDB1300650675 /* lpadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpadmin; sourceTree = BUILT_PRODUCTS_DIR; };
27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; };
720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = "<group>"; };
724379C41333FFC7009631B9 /* usb-darwin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "usb-darwin.c"; path = "../backend/usb-darwin.c"; sourceTree = "<group>"; };
724379C51333FFC7009631B9 /* usb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = usb.c; path = ../backend/usb.c; sourceTree = "<group>"; };
724379CA1334000E009631B9 /* ieee1284.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ieee1284.c; path = ../backend/ieee1284.c; sourceTree = "<group>"; };
+ 72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpd.socket"; path = "../scheduler/org.cups.cups-lpd.socket"; sourceTree = SOURCE_ROOT; };
+ 72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpdAT.service.in"; path = "../scheduler/org.cups.cups-lpdAT.service.in"; sourceTree = SOURCE_ROOT; };
7258EAE2134594C4009286F1 /* rastertopwg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertopwg; sourceTree = BUILT_PRODUCTS_DIR; };
7258EAEC134594EB009286F1 /* rastertopwg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rastertopwg.c; path = ../filter/rastertopwg.c; sourceTree = "<group>"; };
726AD6F7135E88F0002C930D /* ippserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ippserver; sourceTree = BUILT_PRODUCTS_DIR; };
7271882313746EA8001A2036 /* rastertolabel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rastertolabel.c; path = ../filter/rastertolabel.c; sourceTree = "<group>"; };
7271883C1374AB14001A2036 /* mime-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mime-private.h"; path = "../scheduler/mime-private.h"; sourceTree = "<group>"; };
727AD5B619100A58009F6862 /* tls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tls.c; path = ../cups/tls.c; sourceTree = "<group>"; };
- 727EF02F192E3498001EF690 /* admin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = admin.c; path = "../cgi-bin/admin.c"; sourceTree = "<group>"; };
+ 727EF02F192E3498001EF690 /* admin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = admin.c; path = "../cgi-bin/admin.c"; sourceTree = "<group>"; wrapsLines = 1; };
727EF030192E3498001EF690 /* cgi-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "cgi-private.h"; path = "../cgi-bin/cgi-private.h"; sourceTree = "<group>"; };
727EF031192E3498001EF690 /* cgi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cgi.h; path = "../cgi-bin/cgi.h"; sourceTree = "<group>"; };
727EF032192E3498001EF690 /* classes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = classes.c; path = "../cgi-bin/classes.c"; sourceTree = "<group>"; };
728FB7EC1536161C005426E1 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
728FB7EF1536167A005426E1 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = /usr/lib/libiconv.dylib; sourceTree = "<absolute>"; };
728FB7F01536167A005426E1 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = /usr/lib/libresolv.dylib; sourceTree = "<absolute>"; };
+ 729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-2.0.txt"; path = "../CHANGES-2.0.txt"; sourceTree = "<group>"; };
+ 729D4B571A2CB48700692B21 /* CHANGES-IPPTOOL.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-IPPTOOL.txt"; path = "../CHANGES-IPPTOOL.txt"; sourceTree = "<group>"; };
72A4332F155844CF002E172D /* libcups_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
72C16CB8137B195D007E4BF4 /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../scheduler/file.c; sourceTree = SOURCE_ROOT; };
72CF95E018A13543000FCAE4 /* dest-job.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dest-job.c"; path = "../cups/dest-job.c"; sourceTree = "<group>"; };
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 274EE2601A03EDCA003213D1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 274EE2611A03EDCA003213D1 /* libcups_static.a in Frameworks */,
+ 274EE2621A03EDCA003213D1 /* CoreFoundation.framework in Frameworks */,
+ 274EE2631A03EDCA003213D1 /* libresolv.dylib in Frameworks */,
+ 274EE2641A03EDCA003213D1 /* libz.dylib in Frameworks */,
+ 274EE2651A03EDCA003213D1 /* Security.framework in Frameworks */,
+ 274EE2661A03EDCA003213D1 /* SystemConfiguration.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 274EE2711A03EDCB003213D1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 274EE2721A03EDCB003213D1 /* libcups_static.a in Frameworks */,
+ 274EE2731A03EDCB003213D1 /* CoreFoundation.framework in Frameworks */,
+ 274EE2741A03EDCB003213D1 /* libresolv.dylib in Frameworks */,
+ 274EE2751A03EDCB003213D1 /* libz.dylib in Frameworks */,
+ 274EE2761A03EDCB003213D1 /* Security.framework in Frameworks */,
+ 274EE2771A03EDCB003213D1 /* SystemConfiguration.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
274FF5C913332B1F00317ECB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 27A034781A8BDB1200650675 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
720DD6BF1358FD5F0064AA82 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
2732E08B137A3F5200FAFEF6 /* cupstestdsc.c */,
72F75A5B1336F988004BB496 /* cupstestppd.c */,
72CF95F218A19165000FCAE4 /* ippfind.c */,
+ 274EE27D1A03EE0B003213D1 /* ippinfra.c */,
+ 274EE27F1A03EE41003213D1 /* ippproxy.c */,
726AD701135E8A90002C930D /* ippserver.c */,
276683F91337F7A9000D33D0 /* ipptool.c */,
2732E08C137A3F5200FAFEF6 /* lp.c */,
72A4332F155844CF002E172D /* libcups_static.a */,
72CF95F118A19134000FCAE4 /* ipptool copy */,
2767FC5019266A0D000F61D3 /* testdest */,
+ 274EE26B1A03EDCA003213D1 /* ippserver copy */,
+ 274EE27C1A03EDCB003213D1 /* ippserver copy copy */,
+ 27A0347B1A8BDB1300650675 /* lpadmin */,
);
name = Products;
sourceTree = "<group>";
72E65BDC18DC852700097E89 /* Makefile */,
7226369B18AE6D19004ED309 /* org.cups.cups-lpd.plist */,
72E65BD518DC818400097E89 /* org.cups.cups-lpd.plist.in */,
+ 72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */,
+ 72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */,
72E65BD618DC818400097E89 /* org.cups.cupsd.path.in */,
7226369C18AE6D19004ED309 /* org.cups.cupsd.plist */,
72E65BD718DC818400097E89 /* org.cups.cupsd.service.in */,
72E65BD818DC818400097E89 /* org.cups.cupsd.socket.in */,
- 72D53A3615B4929D003F877F /* colorman.c */,
- 72D53A3715B4929D003F877F /* colorman.h */,
72220F6913330B0C00FCA411 /* auth.c */,
72220F6A13330B0C00FCA411 /* auth.h */,
72220F6B13330B0C00FCA411 /* banners.c */,
72220F7013330B0C00FCA411 /* classes.h */,
72220F7113330B0C00FCA411 /* client.c */,
72220F7213330B0C00FCA411 /* client.h */,
+ 72D53A3615B4929D003F877F /* colorman.c */,
+ 72D53A3715B4929D003F877F /* colorman.h */,
72220F7313330B0C00FCA411 /* conf.c */,
72220F7413330B0C00FCA411 /* conf.h */,
72220F7513330B0C00FCA411 /* cupsd.h */,
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 8;
- wrapsLines = 0;
+ wrapsLines = 1;
};
72E65BA218DC796500097E89 /* Autoconf Files */ = {
isa = PBXGroup;
72E65BB818DC79F800097E89 /* Documentation */ = {
isa = PBXGroup;
children = (
- 72E65BDE18DCA35700097E89 /* CHANGES.txt */,
- 72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */,
- 72E65BDF18DCA35700097E89 /* CREDITS.txt */,
- 72E65BE018DCA35700097E89 /* INSTALL.txt */,
- 72E65BE118DCA35700097E89 /* IPPTOOL.txt */,
- 72E65BE218DCA35700097E89 /* LICENSE.txt */,
- 72E65BE318DCA35700097E89 /* README.txt */,
- 72E65BB918DC7A3600097E89 /* doc */,
- 72E65BBA18DC7A3600097E89 /* man */,
72E65BBB18DC7A6B00097E89 /* api-array.header */,
72E65BBC18DC7A6B00097E89 /* api-array.shtml */,
72E65BBD18DC7A6B00097E89 /* api-cups.header */,
72E65BCA18DC7A7E00097E89 /* api-ppdc.shtml */,
72E65BCB18DC7A9800097E89 /* api-raster.header */,
72E65BCC18DC7A9800097E89 /* api-raster.shtml */,
+ 72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */,
+ 729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */,
+ 729D4B571A2CB48700692B21 /* CHANGES-IPPTOOL.txt */,
+ 72E65BDE18DCA35700097E89 /* CHANGES.txt */,
+ 72E65BDF18DCA35700097E89 /* CREDITS.txt */,
+ 72E65BB918DC7A3600097E89 /* doc */,
+ 72E65BE018DCA35700097E89 /* INSTALL.txt */,
+ 72E65BE118DCA35700097E89 /* IPPTOOL.txt */,
+ 72E65BE218DCA35700097E89 /* LICENSE.txt */,
+ 72E65BBA18DC7A3600097E89 /* man */,
72E65BCD18DC7A9800097E89 /* postscript-driver.header */,
72E65BCE18DC7A9800097E89 /* postscript-driver.shtml */,
72E65BCF18DC7A9800097E89 /* ppd-compiler.header */,
72E65BD018DC7A9800097E89 /* ppd-compiler.shtml */,
72E65BD118DC7A9800097E89 /* raster-driver.header */,
72E65BD218DC7A9800097E89 /* raster-driver.shtml */,
+ 72E65BE318DCA35700097E89 /* README.txt */,
72E65BD318DC7A9800097E89 /* spec-ppd.header */,
72E65BD418DC7A9800097E89 /* spec-ppd.shtml */,
);
productReference = 273BF6BD1333B5000022CAAB /* testcups */;
productType = "com.apple.product-type.tool";
};
+ 274EE25B1A03EDCA003213D1 /* ippinfra */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 274EE2681A03EDCA003213D1 /* Build configuration list for PBXNativeTarget "ippinfra" */;
+ buildPhases = (
+ 274EE25E1A03EDCA003213D1 /* Sources */,
+ 274EE2601A03EDCA003213D1 /* Frameworks */,
+ 274EE2671A03EDCA003213D1 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 274EE25C1A03EDCA003213D1 /* PBXTargetDependency */,
+ );
+ name = ippinfra;
+ productName = ippserver;
+ productReference = 274EE26B1A03EDCA003213D1 /* ippserver copy */;
+ productType = "com.apple.product-type.tool";
+ };
+ 274EE26C1A03EDCB003213D1 /* ippproxy */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 274EE2791A03EDCB003213D1 /* Build configuration list for PBXNativeTarget "ippproxy" */;
+ buildPhases = (
+ 274EE26F1A03EDCB003213D1 /* Sources */,
+ 274EE2711A03EDCB003213D1 /* Frameworks */,
+ 274EE2781A03EDCB003213D1 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 274EE26D1A03EDCB003213D1 /* PBXTargetDependency */,
+ );
+ name = ippproxy;
+ productName = ippserver;
+ productReference = 274EE27C1A03EDCB003213D1 /* ippserver copy copy */;
+ productType = "com.apple.product-type.tool";
+ };
274FF5CB13332B1F00317ECB /* cups-driverd */ = {
isa = PBXNativeTarget;
buildConfigurationList = 274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */;
productReference = 278C58CB136B640300836530 /* testhttp */;
productType = "com.apple.product-type.tool";
};
+ 27A0347A1A8BDB1200650675 /* lpadmin */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */;
+ buildPhases = (
+ 27A034771A8BDB1200650675 /* Sources */,
+ 27A034781A8BDB1200650675 /* Frameworks */,
+ 27A034791A8BDB1200650675 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 27A034841A8BDC4A00650675 /* PBXTargetDependency */,
+ );
+ name = lpadmin;
+ productName = lpadmin;
+ productReference = 27A0347B1A8BDB1300650675 /* lpadmin */;
+ productType = "com.apple.product-type.tool";
+ };
720DD6C11358FD5F0064AA82 /* snmp */ = {
isa = PBXNativeTarget;
buildConfigurationList = 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */;
attributes = {
LastUpgradeCheck = 0600;
ORGANIZATIONNAME = "Apple Inc.";
+ TargetAttributes = {
+ 27A0347A1A8BDB1200650675 = {
+ CreatedOnToolsVersion = 6.1.1;
+ };
+ };
};
buildConfigurationList = 72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */;
compatibilityVersion = "Xcode 3.2";
724379461333FEA9009631B9 /* dnssd */,
724378FC1333E43E009631B9 /* ipp */,
72CF95E618A19134000FCAE4 /* ippfind */,
+ 274EE25B1A03EDCA003213D1 /* ippinfra */,
+ 274EE26C1A03EDCB003213D1 /* ippproxy */,
726AD6F6135E88F0002C930D /* ippserver */,
276683EF1337F78E000D33D0 /* ipptool */,
+ 27A0347A1A8BDB1200650675 /* lpadmin */,
724379171333E532009631B9 /* lpd */,
2766836F1337AC79000D33D0 /* ppdc */,
2766837C1337AC8C000D33D0 /* ppdhtml */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 274EE25E1A03EDCA003213D1 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 274EE27E1A03EE0B003213D1 /* ippinfra.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 274EE26F1A03EDCB003213D1 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 274EE2801A03EE41003213D1 /* ippproxy.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
274FF5C813332B1F00317ECB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 27A034771A8BDB1200650675 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 27A034821A8BDC3A00650675 /* lpadmin.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
720DD6BE1358FD5F0064AA82 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
target = 273BF6BC1333B5000022CAAB /* testcups */;
targetProxy = 273BF6DD1333B6370022CAAB /* PBXContainerItemProxy */;
};
+ 274EE25C1A03EDCA003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274FF6891333B1C400317ECB /* libcups_static */;
+ targetProxy = 274EE25D1A03EDCA003213D1 /* PBXContainerItemProxy */;
+ };
+ 274EE26D1A03EDCB003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274FF6891333B1C400317ECB /* libcups_static */;
+ targetProxy = 274EE26E1A03EDCB003213D1 /* PBXContainerItemProxy */;
+ };
+ 274EE2821A03EEE0003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274EE25B1A03EDCA003213D1 /* ippinfra */;
+ targetProxy = 274EE2811A03EEE0003213D1 /* PBXContainerItemProxy */;
+ };
+ 274EE2841A03EEE0003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274EE26C1A03EDCB003213D1 /* ippproxy */;
+ targetProxy = 274EE2831A03EEE0003213D1 /* PBXContainerItemProxy */;
+ };
+ 274EE2861A03EEEE003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274EE25B1A03EDCA003213D1 /* ippinfra */;
+ targetProxy = 274EE2851A03EEEE003213D1 /* PBXContainerItemProxy */;
+ };
+ 274EE2881A03EEEE003213D1 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274EE26C1A03EDCB003213D1 /* ippproxy */;
+ targetProxy = 274EE2871A03EEEE003213D1 /* PBXContainerItemProxy */;
+ };
274FF5DC13332CF900317ECB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 72220EAD1333047D00FCA411 /* libcups */;
target = 274FF6891333B1C400317ECB /* libcups_static */;
targetProxy = 278C58D7136B642F00836530 /* PBXContainerItemProxy */;
};
+ 27A034841A8BDC4A00650675 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 72220EAD1333047D00FCA411 /* libcups */;
+ targetProxy = 27A034831A8BDC4A00650675 /* PBXContainerItemProxy */;
+ };
+ 27A034871A8BDC6900650675 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 27A0347A1A8BDB1200650675 /* lpadmin */;
+ targetProxy = 27A034861A8BDC6900650675 /* PBXContainerItemProxy */;
+ };
720DD6CF1358FD790064AA82 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 72220EAD1333047D00FCA411 /* libcups */;
};
name = Release;
};
+ 274EE2691A03EDCA003213D1 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "ippserver copy";
+ };
+ name = Debug;
+ };
+ 274EE26A1A03EDCA003213D1 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "ippserver copy";
+ };
+ name = Release;
+ };
+ 274EE27A1A03EDCB003213D1 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "ippserver copy copy";
+ };
+ name = Debug;
+ };
+ 274EE27B1A03EDCB003213D1 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "ippserver copy copy";
+ };
+ name = Release;
+ };
274FF5D313332B1F00317ECB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Release;
};
+ 27A0347F1A8BDB1300650675 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ INSTALL_PATH = /usr/sbin;
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ };
+ name = Debug;
+ };
+ 27A034801A8BDB1300650675 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ INSTALL_PATH = /usr/sbin;
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ };
+ name = Release;
+ };
720DD6C91358FD5F0064AA82 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 274EE2681A03EDCA003213D1 /* Build configuration list for PBXNativeTarget "ippinfra" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 274EE2691A03EDCA003213D1 /* Debug */,
+ 274EE26A1A03EDCA003213D1 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 274EE2791A03EDCB003213D1 /* Build configuration list for PBXNativeTarget "ippproxy" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 274EE27A1A03EDCB003213D1 /* Debug */,
+ 274EE27B1A03EDCB003213D1 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */ = {
isa = XCConfigurationList;
buildConfigurations = (
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 27A0347F1A8BDB1300650675 /* Debug */,
+ 27A034801A8BDB1300650675 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
/*
- * "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $"
+ * "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $"
*
* Configuration file for CUPS and Xcode.
*
#ifndef _CUPS_CONFIG_H_
#define _CUPS_CONFIG_H_
+#include <AvailabilityMacros.h>
+
/*
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.0.4"
-#define CUPS_MINIMAL "CUPS/2.0.4"
+#define CUPS_SVERSION "CUPS v2.1svn"
+#define CUPS_MINIMAL "CUPS/2.1svn"
/*
#define HAVE_VSYSLOG 1
+/*
+ * Do we have the ASL functions?
+ */
+
+#define HAVE_ASL_H
+
+
+/*
+ * Do we have the systemd journal functions?
+ */
+
+/*#undef HAVE_SYSTEMD_SD_JOURNAL_H*/
+
+
/*
* Do we have the (v)snprintf() functions?
*/
#define HAVE_SECKEYCHAINOPEN 1
+/*
+ * Do we have (a working) SSLSetEnabledCiphers function?
+ */
+
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_11_AND_LATER
+# define HAVE_SSLSETENABLEDCIPHERS 1
+#endif /* AVAILABLE_MAC_OS_X_VERSION_10_11_AND_LATER */
+
+
/*
* Do we have libpaper?
*/
#define HAVE_LAUNCH_H 1
#define HAVE_LAUNCHD 1
-#undef HAVE_LAUNCH_ACTIVATE_SOCKET
+#define HAVE_LAUNCH_ACTIVATE_SOCKET 1
/*
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $".
+ * End of "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $".
*/