summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt76
-rw-r--r--Makedefs.in8
-rw-r--r--Makefile35
-rw-r--r--README.txt2
-rw-r--r--backend/backend-private.h12
-rw-r--r--backend/ieee1284.c8
-rw-r--r--backend/ipp.c47
-rw-r--r--backend/lpd.c5
-rw-r--r--backend/runloop.c10
-rw-r--r--backend/snmp.c305
-rw-r--r--berkeley/lpc.c6
-rw-r--r--berkeley/lpq.c9
-rw-r--r--berkeley/lpr.c8
-rw-r--r--berkeley/lprm.c10
-rw-r--r--cgi-bin/admin.c102
-rw-r--r--cgi-bin/ipp-var.c5
-rw-r--r--config-scripts/cups-common.m46
-rw-r--r--config-scripts/cups-defaults.m48
-rw-r--r--config-scripts/cups-directories.m432
-rw-r--r--config-scripts/cups-manpages.m412
-rw-r--r--configure.in18
-rwxr-xr-xcups-config.in5
-rw-r--r--cups/Makefile5
-rw-r--r--cups/adminutil.c45
-rw-r--r--cups/attr.c50
-rw-r--r--cups/cups.h8
-rw-r--r--cups/dir.h10
-rw-r--r--cups/file.c5
-rw-r--r--cups/file.h14
-rw-r--r--cups/http.c35
-rw-r--r--cups/http.h14
-rw-r--r--cups/i18n.h5
-rw-r--r--cups/ipp-support.c35
-rw-r--r--cups/ipp.h10
-rw-r--r--cups/langprintf.c50
-rw-r--r--cups/language.c6
-rw-r--r--cups/libcups_s.exp1
-rw-r--r--cups/localize.c25
-rw-r--r--cups/notify.c6
-rw-r--r--cups/ppd.c8
-rw-r--r--cups/testi18n.c9
-rw-r--r--cups/testppd.c22
-rw-r--r--cups/transcode.c8
-rw-r--r--cups/usersys.c20
-rw-r--r--desktop/cups.desktop10
-rw-r--r--doc/help/ref-snmp-conf.html17
-rw-r--r--doc/help/translation.html53
-rw-r--r--filter/pstops.c14
-rw-r--r--init/org.cups.cups-lpd.plist33
-rw-r--r--man/cups-snmp.conf.man7
-rw-r--r--packaging/cups.list.in58
-rw-r--r--packaging/installer.gifbin0 -> 2686 bytes
-rw-r--r--scheduler/Dependencies157
-rw-r--r--scheduler/Makefile21
-rw-r--r--scheduler/auth.c13
-rw-r--r--scheduler/client.c189
-rw-r--r--scheduler/client.h5
-rw-r--r--scheduler/conf.c65
-rw-r--r--scheduler/cups-lpd.c12
-rw-r--r--scheduler/cups-polld.c97
-rw-r--r--scheduler/dirsvc.c37
-rw-r--r--scheduler/dirsvc.h5
-rw-r--r--scheduler/ipp.c125
-rw-r--r--scheduler/job.c43
-rw-r--r--scheduler/job.h6
-rw-r--r--scheduler/main.c10
-rw-r--r--scheduler/mime.h12
-rw-r--r--scheduler/policy.c8
-rw-r--r--scheduler/printers.c16
-rw-r--r--scheduler/printers.h5
-rw-r--r--scheduler/statbuf.c6
-rw-r--r--scheduler/subscriptions.c16
-rw-r--r--scheduler/sysman.c7
-rw-r--r--scheduler/testlpd.c550
-rw-r--r--systemv/accept.c6
-rw-r--r--systemv/cancel.c6
-rw-r--r--systemv/cupsaddsmb.c6
-rw-r--r--systemv/cupstestdsc.c8
-rw-r--r--systemv/cupstestppd.c88
-rw-r--r--systemv/lp.c6
-rw-r--r--systemv/lpadmin.c6
-rw-r--r--systemv/lpinfo.c6
-rw-r--r--systemv/lpmove.c6
-rw-r--r--systemv/lpoptions.c6
-rw-r--r--systemv/lppasswd.c6
-rw-r--r--systemv/lpstat.c39
-rw-r--r--templates/Makefile5
-rw-r--r--templates/es/norestart.tmpl2
-rw-r--r--templates/job-cancel.tmpl2
-rw-r--r--templates/jobs.tmpl2
-rw-r--r--templates/norestart.tmpl2
-rw-r--r--test/4.2-cups-printer-ops.test6
-rw-r--r--test/4.4-subscription-ops.test10
-rw-r--r--test/ipptest.c8
-rwxr-xr-xtools/testosx5
95 files changed, 2306 insertions, 642 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index f55439e5f..5ac921349 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,80 @@
-CHANGES.txt - 2006-07-18
+CHANGES.txt - 2006-08-29
------------------------
+CHANGES IN CUPS V1.2.3
+
+ - The scheduler did not send job-state or
+ job-config-changed events when a job was held,
+ released, or changed (STR #1947)
+ - The scheduler now aborts if the configuration file and
+ directory checks fail (STR #1941)
+ - Fixed a problem with ippPort() not using the port
+ number that was set via the client.conf file or
+ CUPS_SERVER environment variable (STR #1945)
+ - HTTP headers were not buffered (STR #1899)
+ - Some IPP printers (HP) did not like UTF-8 job names
+ (STR #1837)
+ - The CUPS desktop icon is now localized for Polish (STR
+ #1920)
+ - Printer options were not always honored when printing
+ from Windows clients (STR #1839)
+ - The openssl command would lock up the scheduler when
+ generating an encryption certificate on some platforms
+ due to a lack of entropy for the random number
+ generator (STR #1876)
+ - The web admin page did not recognize that "Listen 631"
+ enabled remote access (STR #1908)
+ - The web admin page did not check whether changes were
+ made to the Basic Server Settings check boxes (STR
+ #1908)
+ - The IPP backend could generate N*N copies in certain
+ edge cases.
+ - The scheduler did not restore remote printers properly
+ when BrowseShortNames was enabled (STR #1893)
+ - Polling did not handle changes to the network
+ environment on Mac OS X (STR #1896)
+ - The "make test" subscription tests used invalid
+ notify-recipient-uri values (STR #1910)
+ - Printers could be left in an undefined state on system
+ sleep (STR #1905)
+ - The Berkeley and System V commands did not always use
+ the expected character set (STR #1915)
+ - Remote printing fixes (STR #1881)
+ - The cupstestppd utility did not validate translation
+ strings for custom options properly.
+ - Multi-language PPD files were not properly localized in
+ the web interface (STR #1913)
+ - The admin page's simple settings options did not check
+ for local domain socket or IPv6 addresses and did not
+ use "localhost" as the listen address.
+ - An empty BrowseProtocols, BrowseLocalProtocols, or
+ BrowseRemoteProtocols line would crash the scheduler
+ instead of disabling the corresponding browsing options.
+ - The scheduler now logs IPP operation status as debug
+ messages instead of info or error.
+ - cupsFileRewind() didn't clear the end-of-file state.
+ - cupstestppd didn't report the actual misspelling of the
+ 1284DeviceID attribute (STR #1849)
+ - BrowseRelay didn't work on Debian (STR #1887)
+ - configure --without-languages didn't work (STR #1879)
+ - Manually added remote printers did not work (STR #1881)
+ - The <cups/backend.h> header was not installed.
+ - Updated the build files for Autoconf 2.60 (STR #1853)
+ - The scheduler incorrectly terminated the polling
+ processes after receiving a partial log line.
+ - The cups-lpd mini-daemon reported "No printer-state
+ attribute found" errors when reporting the queue status
+ (PR #6250, STR #1821)
+ - SNMP backend improvements (STR #1737, STR #1742, STR
+ #1790, STR #1835, STR #1880)
+ - The scheduler erroneously reported an error with the
+ CGI pipe (STR #1860)
+ - Fixed HP-UX compile problems (STR #1858, STR #1859)
+ - cupstestppd crashed with some PPD files (STR #1864)
+ - The <cups/dir.h> and <cups/file.h> header files did not
+ work with C++.
+
+
CHANGES IN CUPS V1.2.2
- Documentation updates (STR #1765, STR #1780)
diff --git a/Makedefs.in b/Makedefs.in
index 10198cc49..97c55e09c 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -1,5 +1,5 @@
#
-# "$Id: Makedefs.in 5609 2006-05-30 20:31:10Z mike $"
+# "$Id: Makedefs.in 5799 2006-08-03 00:54:38Z mike $"
#
# Common makefile definitions for the Common UNIX Printing System (CUPS).
#
@@ -174,12 +174,16 @@ UNINSTALL64 = @UNINSTALL64@
# We have to define these first because autoconf uses ${prefix}
# and ${exec_prefix} for most of the other directories...
#
+# The "datarootdir" variable may not get defined if you are using
+# a version of autoconf prior to 2.60.
+#
# This is immediately followed by definition in ALL CAPS for the
# needed directories...
#
bindir = @bindir@
datadir = @datadir@
+datarootdir = @datarootdir@
exec_prefix = @exec_prefix@
includedir = @includedir@
infodir = @infodir@
@@ -265,5 +269,5 @@ DBUSDIR = @DBUSDIR@
#
-# End of "$Id: Makedefs.in 5609 2006-05-30 20:31:10Z mike $"
+# End of "$Id: Makedefs.in 5799 2006-08-03 00:54:38Z mike $"
#
diff --git a/Makefile b/Makefile
index d1fe2d02d..45dd92c05 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 5547 2006-05-19 12:44:29Z mike $"
+# "$Id: Makefile 5902 2006-08-29 15:51:19Z mike $"
#
# Top-level Makefile for the Common UNIX Printing System (CUPS).
#
@@ -121,8 +121,9 @@ install: installhdrs
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
$(INSTALL_DATA) init/Localizable.strings $(BUILDROOT)$(INITDDIR)/Resources/English.lproj/Localizable.strings; \
elif test "$(INITDDIR)" = "/System/Library/LaunchDaemons"; then \
- echo Installing LaunchDaemons configuration file...; \
+ echo Installing LaunchDaemons configuration files...; \
$(INSTALL_DATA) init/org.cups.cupsd.plist $(BUILDROOT)$(DEFAULT_LAUNCHD_CONF); \
+ $(INSTALL_DATA) init/org.cups.cups-lpd.plist $(BUILDROOT)/System/Library/LaunchDaemons; \
else \
echo Installing RC script...; \
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
@@ -220,24 +221,44 @@ uninstall:
# Run the test suite...
#
-check test: all
+test: all
echo Running CUPS test suite...
cd test; ./run-stp-tests.sh
+check: all
+ echo Running CUPS test suite with defaults...
+ cd test; ./run-stp-tests.sh 1 0 n
+
+
#
# Make software distributions using EPM (http://www.easysw.com/epm/)...
#
-EPMFLAGS = -v
+EPMFLAGS = -v --output-dir dist $(EPMARCH)
-aix bsd deb depot inst osx pkg rpm setld slackware swinstall tardist:
+aix bsd deb depot inst pkg rpm setld slackware swinstall tardist:
epm $(EPMFLAGS) -f $@ cups packaging/cups.list
epm:
- epm $(EPMFLAGS) cups packaging/cups.list
+ epm $(EPMFLAGS) -s packaging/installer.gif cups packaging/cups.list
+
+osx:
+ epm $(EPMFLAGS) -f osx -s packaging/installer.tif cups packaging/cups.list
+
+.PHONEY: dist
+dist: all
+ $(RM) -r dist
+ $(MAKE) $(MFLAGS) epm
+ case `uname` in \
+ *BSD*) $(MAKE) $(MFLAGS) bsd;; \
+ Darwin*) $(MAKE) $(MFLAGS) osx;; \
+ IRIX*) $(MAKE) $(MFLAGS) tardist;; \
+ Linux*) $(MAKE) $(MFLAGS) rpm;; \
+ SunOS*) $(MAKE) $(MFLAGS) pkg;; \
+ esac
#
-# End of "$Id: Makefile 5547 2006-05-19 12:44:29Z mike $".
+# End of "$Id: Makefile 5902 2006-08-29 15:51:19Z mike $".
#
diff --git a/README.txt b/README.txt
index 4595be8c4..34983cd94 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-README - CUPS v1.2.0 - 2006-05-08
+README - CUPS v1.2.3 - 2006-08-28
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt"
diff --git a/backend/backend-private.h b/backend/backend-private.h
index f9384931c..14b93cc87 100644
--- a/backend/backend-private.h
+++ b/backend/backend-private.h
@@ -1,5 +1,5 @@
/*
- * "$Id: backend-private.h 5592 2006-05-27 03:11:52Z mike $"
+ * "$Id: backend-private.h 5771 2006-07-20 18:06:20Z mike $"
*
* Backend support definitions for the Common UNIX Printing System (CUPS).
*
@@ -45,9 +45,9 @@
* C++ magic...
*/
-# ifdef _cplusplus
+# ifdef __cplusplus
extern "C" {
-# endif /* _cplusplus */
+# endif /* __cplusplus */
/*
@@ -62,12 +62,12 @@ extern int backendGetMakeModel(const char *device_id, char *make_model,
extern ssize_t backendRunLoop(int print_fd, int device_fd, int use_bc);
-# ifdef _cplusplus
+# ifdef __cplusplus
}
-# endif /* _cplusplus */
+# endif /* __cplusplus */
#endif /* !_CUPS_BACKEND_PRIVATE_H_ */
/*
- * End of "$Id: backend-private.h 5592 2006-05-27 03:11:52Z mike $".
+ * End of "$Id: backend-private.h 5771 2006-07-20 18:06:20Z mike $".
*/
diff --git a/backend/ieee1284.c b/backend/ieee1284.c
index f564215e0..f54149367 100644
--- a/backend/ieee1284.c
+++ b/backend/ieee1284.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ieee1284.c 5591 2006-05-26 19:51:59Z mike $"
+ * "$Id: ieee1284.c 5866 2006-08-23 03:03:49Z mike $"
*
* IEEE-1284 support functions for the Common UNIX Printing System (CUPS).
*
@@ -233,6 +233,8 @@ backendGetDeviceID(
if (!strcasecmp(manufacturer, "Hewlett-Packard"))
strcpy(manufacturer, "HP");
+ else if (!strcasecmp(manufacturer, "Lexmark International"))
+ strcpy(manufacturer, "Lexmark");
}
else
{
@@ -399,6 +401,8 @@ backendGetMakeModel(
{
if (!strncasecmp(mfg, "Hewlett-Packard", 15))
strlcpy(make_model, "HP", make_model_size);
+ else if (!strncasecmp(mfg, "Lexmark International", 21))
+ strlcpy(make_model, "Lexmark", make_model_size);
else
strlcpy(make_model, mfg, make_model_size);
@@ -495,5 +499,5 @@ backendGetMakeModel(
/*
- * End of "$Id: ieee1284.c 5591 2006-05-26 19:51:59Z mike $".
+ * End of "$Id: ieee1284.c 5866 2006-08-23 03:03:49Z mike $".
*/
diff --git a/backend/ipp.c b/backend/ipp.c
index e64d6c44c..73ad5f6f4 100644
--- a/backend/ipp.c
+++ b/backend/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.c 5724 2006-07-12 19:42:35Z mike $"
+ * "$Id: ipp.c 5889 2006-08-24 21:44:35Z mike $"
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
@@ -132,13 +132,13 @@ main(int argc, /* I - Number of command-line args */
ipp_attribute_t *format_sup; /* document-format-supported */
ipp_attribute_t *printer_state; /* printer-state attribute */
ipp_attribute_t *printer_accepting; /* printer-is-accepting-jobs */
- int copies; /* Number of copies remaining */
+ int copies, /* Number of copies for job */
+ copies_remaining; /* Number of copies remaining */
const char *content_type; /* CONTENT_TYPE environment variable */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Actions for POSIX signals */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
int version; /* IPP version */
- int reasons; /* Number of printer-state-reasons */
static const char * const pattrs[] =
{ /* Printer attributes we want */
"copies-supported",
@@ -214,6 +214,9 @@ main(int argc, /* I - Number of command-line args */
if ((content_type = getenv("CONTENT_TYPE")) == NULL)
content_type = "application/octet-stream";
+ if (!strncmp(content_type, "printer/", 8))
+ content_type = "application/vnd.cups-raw";
+
/*
* Extract the hostname and printer name from the URI...
*/
@@ -736,19 +739,25 @@ main(int argc, /* I - Number of command-line args */
* See if the printer supports multiple copies...
*/
+ copies = atoi(argv[4]);
+
if (copies_sup || argc < 7)
- copies = 1;
+ {
+ copies_remaining = 1;
+
+ if (argc < 7)
+ copies = 1;
+ }
else
- copies = atoi(argv[4]);
+ copies_remaining = copies;
/*
* Then issue the print-job request...
*/
- reasons = 0;
job_id = 0;
- while (copies > 0)
+ while (copies_remaining > 0)
{
/*
* Build the IPP request...
@@ -775,7 +784,13 @@ main(int argc, /* I - Number of command-line args */
fprintf(stderr, "DEBUG: requesting-user-name = \"%s\"\n", argv[2]);
- if (argv[3][0])
+ /*
+ * Only add a "job-name" attribute if the remote server supports
+ * copy generation - some IPP implementations like HP's don't seem
+ * to like UTF-8 job names (STR #1837)...
+ */
+
+ if (argv[3][0] && copies_sup)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
argv[3]);
@@ -822,8 +837,9 @@ main(int argc, /* I - Number of command-line args */
* number of copies to 1...
*/
- content_type = "application/postscript";
- copies = 1;
+ content_type = "application/postscript";
+ copies = 1;
+ copies_remaining = 1;
}
}
#endif /* __APPLE__ */
@@ -851,8 +867,9 @@ main(int argc, /* I - Number of command-line args */
*/
cupsEncodeOptions(request, num_options, options);
+
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies",
- atoi(argv[4]));
+ copies);
}
cupsFreeOptions(num_options, options);
@@ -952,13 +969,13 @@ main(int argc, /* I - Number of command-line args */
if (ipp_status <= IPP_OK_CONFLICT && argc > 6)
{
fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1);
- copies --;
+ copies_remaining --;
}
else if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
ipp_status == IPP_PRINTER_BUSY)
break;
else
- copies --;
+ copies_remaining --;
/*
* Wait for the job to complete...
@@ -1300,6 +1317,8 @@ password_cb(const char *prompt) /* I - Prompt (not used) */
#endif /* __APPLE__ */
exit(CUPS_BACKEND_AUTH_REQUIRED);
+
+ return (NULL); /* Eliminate compiler warning */
}
}
@@ -1622,5 +1641,5 @@ sigterm_handler(int sig) /* I - Signal */
/*
- * End of "$Id: ipp.c 5724 2006-07-12 19:42:35Z mike $".
+ * End of "$Id: ipp.c 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/backend/lpd.c b/backend/lpd.c
index ef7ef05d3..218dba737 100644
--- a/backend/lpd.c
+++ b/backend/lpd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpd.c 5495 2006-05-05 17:58:07Z mike $"
+ * "$Id: lpd.c 5886 2006-08-24 19:53:17Z mike $"
*
* Line Printer Daemon backend for the Common UNIX Printing System (CUPS).
*
@@ -261,6 +261,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
/* We want to pass utf-8 characters, not re-map them (3071945) */
sanitize_title = 0;
+ /* Get the default timeout from a system preference... */
{
CFPropertyListRef pvalue; /* Preference value */
SInt32 toval; /* Timeout value */
@@ -1230,5 +1231,5 @@ sigterm_handler(int sig) /* I - Signal */
/*
- * End of "$Id: lpd.c 5495 2006-05-05 17:58:07Z mike $".
+ * End of "$Id: lpd.c 5886 2006-08-24 19:53:17Z mike $".
*/
diff --git a/backend/runloop.c b/backend/runloop.c
index 03bb09282..82673a447 100644
--- a/backend/runloop.c
+++ b/backend/runloop.c
@@ -1,5 +1,5 @@
/*
- * "$Id: runloop.c 5726 2006-07-12 20:00:11Z mike $"
+ * "$Id: runloop.c 5776 2006-07-26 20:55:13Z mike $"
*
* Common run loop API for the Common UNIX Printing System (CUPS).
*
@@ -33,7 +33,11 @@
*/
#include "backend-private.h"
-#include <sys/select.h>
+#ifdef __hpux
+# include <sys/time.h>
+#else
+# include <sys/select.h>
+#endif /* __hpux */
/*
@@ -254,5 +258,5 @@ backendRunLoop(int print_fd, /* I - Print file descriptor */
/*
- * End of "$Id: runloop.c 5726 2006-07-12 20:00:11Z mike $".
+ * End of "$Id: runloop.c 5776 2006-07-26 20:55:13Z mike $".
*/
diff --git a/backend/snmp.c b/backend/snmp.c
index 56e7ad9e7..4a90f2ebc 100644
--- a/backend/snmp.c
+++ b/backend/snmp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: snmp.c 5736 2006-07-13 19:59:36Z mike $"
+ * "$Id: snmp.c 5898 2006-08-28 18:54:10Z mike $"
*
* SNMP discovery backend for the Common UNIX Printing System (CUPS).
*
@@ -52,6 +52,7 @@
* packed integer value.
* compare_cache() - Compare two cache entries.
* debug_printf() - Display some debugging information.
+ * do_request() - Do a non-blocking IPP request.
* fix_make_model() - Fix common problems in the make-and-model
* string.
* free_array() - Free an array of strings.
@@ -59,7 +60,7 @@
* get_interface_addresses() - Get the broadcast address(es) associated
* with an interface.
* hex_debug() - Output hex debugging data...
- * list_devices() - List all of the devices we found...
+ * list_device() - List a device we found...
* open_snmp_socket() - Open the SNMP broadcast socket.
* password_cb() - Handle authentication requests.
* probe_device() - Probe a device to discover whether it is a
@@ -194,6 +195,13 @@ typedef struct snmp_packet_s /**** SNMP packet ****/
/*
+ * Private CUPS API to set the last error...
+ */
+
+extern void _cupsSetError(ipp_status_t status, const char *message);
+
+
+/*
* Local functions...
*/
@@ -238,6 +246,8 @@ static int asn1_size_oid(const int *oid);
static int asn1_size_packed(int integer);
static int compare_cache(snmp_cache_t *a, snmp_cache_t *b);
static void debug_printf(const char *format, ...);
+static ipp_t *do_request(http_t *http, ipp_t *request,
+ const char *resource);
static void fix_make_model(char *make_model,
const char *old_make_model,
int make_model_size);
@@ -245,7 +255,7 @@ static void free_array(cups_array_t *a);
static void free_cache(void);
static http_addrlist_t *get_interface_addresses(const char *ifname);
static void hex_debug(unsigned char *buffer, size_t len);
-static void list_devices(void);
+static void list_device(snmp_cache_t *cache);
static int open_snmp_socket(void);
static const char *password_cb(const char *prompt);
static void probe_device(snmp_cache_t *device);
@@ -278,6 +288,7 @@ static int DeviceDescOID[] = { 1, 3, 6, 1, 2, 1, 25, 3,
static unsigned DeviceTypeRequest;
static unsigned DeviceDescRequest;
static int HostNameLookups = 0;
+static int MaxRunTime = 10;
static struct timeval StartTime;
@@ -290,6 +301,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
int fd; /* SNMP socket */
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+ struct sigaction action; /* Actions for POSIX signals */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
@@ -309,6 +323,23 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
cupsSetPasswordCB(password_cb);
/*
+ * Catch SIGALRM signals...
+ */
+
+#ifdef HAVE_SIGSET
+ sigset(SIGALRM, alarm_handler);
+#elif defined(HAVE_SIGACTION)
+ memset(&action, 0, sizeof(action));
+
+ sigemptyset(&action.sa_mask);
+ sigaddset(&action.sa_mask, SIGALRM);
+ action.sa_handler = alarm_handler;
+ sigaction(SIGALRM, &action, NULL);
+#else
+ signal(SIGALRM, alarm_handler);
+#endif /* HAVE_SIGSET */
+
+ /*
* Open the SNMP socket...
*/
@@ -330,12 +361,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
scan_devices(fd);
/*
- * Display the results...
- */
-
- list_devices();
-
- /*
* Close, free, and return with no errors...
*/
@@ -384,7 +409,7 @@ add_cache(http_addr_t *addr, /* I - Device IP address */
debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", "
"id=\"%s\", make_and_model=\"%s\")\n",
- addr, addrname, uri ? uri : "(null)", id ? id : "(null)",
+ addr, addrname, uri ? uri : "(null)", id ? id : "(null)",
make_and_model ? make_and_model : "(null)");
temp = calloc(1, sizeof(snmp_cache_t));
@@ -402,6 +427,9 @@ add_cache(http_addr_t *addr, /* I - Device IP address */
temp->make_and_model = strdup(make_and_model);
cupsArrayAdd(Devices, temp);
+
+ if (uri)
+ list_device(temp);
}
@@ -418,6 +446,10 @@ alarm_handler(int sig) /* I - Signal number */
(void)sig;
+#if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION)
+ signal(SIGALRM, alarm_handler);
+#endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
+
if (DebugLevel)
write(2, "DEBUG: ALARM!\n", 14);
}
@@ -1228,6 +1260,173 @@ debug_printf(const char *format, /* I - Printf-style format string */
/*
+ * 'do_request()' - Do a non-blocking IPP request.
+ */
+
+static ipp_t * /* O - Response data or NULL */
+do_request(http_t *http, /* I - HTTP connection to server */
+ ipp_t *request, /* I - IPP request */
+ const char *resource) /* I - HTTP resource for POST */
+{
+ ipp_t *response; /* IPP response data */
+ http_status_t status; /* Status of HTTP request */
+ ipp_state_t state; /* State of IPP processing */
+
+
+ /*
+ * Setup the HTTP variables needed...
+ */
+
+ httpClearFields(http);
+ httpSetLength(http, ippLength(request));
+ httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
+
+ /*
+ * Do the POST request...
+ */
+
+ debug_printf("DEBUG: %.3f POST %s...\n", run_time(), resource);
+
+ if (httpPost(http, resource))
+ {
+ if (httpReconnect(http))
+ {
+ _cupsSetError(IPP_DEVICE_ERROR, "Unable to reconnect");
+ return (NULL);
+ }
+ else if (httpPost(http, resource))
+ {
+ _cupsSetError(IPP_GONE, "Unable to POST");
+ return (NULL);
+ }
+ }
+
+ /*
+ * Send the IPP data...
+ */
+
+ request->state = IPP_IDLE;
+ status = HTTP_CONTINUE;
+
+ while ((state = ippWrite(http, request)) != IPP_DATA)
+ if (state == IPP_ERROR)
+ {
+ status = HTTP_ERROR;
+ break;
+ }
+ else if (httpCheck(http))
+ {
+ if ((status = httpUpdate(http)) != HTTP_CONTINUE)
+ break;
+ }
+
+ /*
+ * Get the server's return status...
+ */
+
+ debug_printf("DEBUG: %.3f Getting response...\n", run_time());
+
+ while (status == HTTP_CONTINUE)
+ if (httpWait(http, 1000))
+ status = httpUpdate(http);
+ else
+ {
+ status = HTTP_ERROR;
+ http->error = ETIMEDOUT;
+ }
+
+ if (status != HTTP_OK)
+ {
+ /*
+ * Flush any error message...
+ */
+
+ httpFlush(http);
+ response = NULL;
+ }
+ else
+ {
+ /*
+ * Read the response...
+ */
+
+ response = ippNew();
+
+ while ((state = ippRead(http, response)) != IPP_DATA)
+ if (state == IPP_ERROR)
+ {
+ /*
+ * Delete the response...
+ */
+
+ ippDelete(response);
+ response = NULL;
+
+ _cupsSetError(IPP_SERVICE_UNAVAILABLE, strerror(errno));
+ break;
+ }
+ }
+
+ /*
+ * Delete the original request and return the response...
+ */
+
+ ippDelete(request);
+
+ if (response)
+ {
+ ipp_attribute_t *attr; /* status-message attribute */
+
+
+ attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
+
+ _cupsSetError(response->request.status.status_code,
+ attr ? attr->values[0].string.text :
+ ippErrorString(response->request.status.status_code));
+ }
+ else if (status != HTTP_OK)
+ {
+ switch (status)
+ {
+ case HTTP_NOT_FOUND :
+ _cupsSetError(IPP_NOT_FOUND, httpStatus(status));
+ break;
+
+ case HTTP_UNAUTHORIZED :
+ _cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status));
+ break;
+
+ case HTTP_FORBIDDEN :
+ _cupsSetError(IPP_FORBIDDEN, httpStatus(status));
+ break;
+
+ case HTTP_BAD_REQUEST :
+ _cupsSetError(IPP_BAD_REQUEST, httpStatus(status));
+ break;
+
+ case HTTP_REQUEST_TOO_LARGE :
+ _cupsSetError(IPP_REQUEST_VALUE, httpStatus(status));
+ break;
+
+ case HTTP_NOT_IMPLEMENTED :
+ _cupsSetError(IPP_OPERATION_NOT_SUPPORTED, httpStatus(status));
+ break;
+
+ case HTTP_NOT_SUPPORTED :
+ _cupsSetError(IPP_VERSION_NOT_SUPPORTED, httpStatus(status));
+ break;
+
+ default :
+ _cupsSetError(IPP_SERVICE_UNAVAILABLE, httpStatus(status));
+ break;
+ }
+ }
+
+ return (response);
+}
+
+
+/*
* 'fix_make_model()' - Fix common problems in the make-and-model string.
*/
@@ -1288,6 +1487,16 @@ fix_make_model(
_cups_strcpy(mmptr, mmptr + 7);
}
+ if ((mmptr = strstr(make_model, " Network")) != NULL)
+ {
+ /*
+ * Drop unnecessary informational text, e.g. "Xerox DocuPrint N2025
+ * Network LaserJet - 2.12" becomes "Xerox DocuPrint N2025"...
+ */
+
+ *mmptr = '\0';
+ }
+
if ((mmptr = strchr(make_model, ',')) != NULL)
{
/*
@@ -1422,24 +1631,18 @@ hex_debug(unsigned char *buffer, /* I - Buffer */
/*
- * 'list_devices()' - List all of the devices we found...
+ * 'list_device()' - List a device we found...
*/
static void
-list_devices(void)
+list_device(snmp_cache_t *cache) /* I - Cached device */
{
- snmp_cache_t *cache; /* Cached device */
-
-
- for (cache = (snmp_cache_t *)cupsArrayFirst(Devices);
- cache;
- cache = (snmp_cache_t *)cupsArrayNext(Devices))
- if (cache->uri)
- printf("network %s \"%s\" \"%s %s\" \"%s\"\n",
- cache->uri,
- cache->make_and_model ? cache->make_and_model : "Unknown",
- cache->make_and_model ? cache->make_and_model : "Unknown",
- cache->addrname, cache->id ? cache->id : "");
+ if (cache->uri)
+ printf("network %s \"%s\" \"%s %s\" \"%s\"\n",
+ cache->uri,
+ cache->make_and_model ? cache->make_and_model : "Unknown",
+ cache->make_and_model ? cache->make_and_model : "Unknown",
+ cache->addrname, cache->id ? cache->id : "");
}
@@ -1524,7 +1727,29 @@ probe_device(snmp_cache_t *device) /* I - Device */
debug_printf("DEBUG: %.3f Probing %s...\n", run_time(), device->addrname);
- if ((http = httpConnect(device->addrname, 631)) != NULL)
+ if (device->make_and_model &&
+ (!strncasecmp(device->make_and_model, "Xerox", 5) ||
+ !strncasecmp(device->make_and_model, "Kyocera", 7)))
+ {
+ /*
+ * Xerox and Kyocera printers often lock up on IPP probes, so exclude
+ * them from the IPP connection test...
+ */
+
+ http = NULL;
+ }
+ else
+ {
+ /*
+ * Otherwise, try connecting for up to 1 second...
+ */
+
+ alarm(1);
+ http = httpConnect(device->addrname, 631);
+ alarm(0);
+ }
+
+ if (http);
{
/*
* IPP is supported...
@@ -1551,8 +1776,6 @@ probe_device(snmp_cache_t *device) /* I - Device */
};
- debug_printf("DEBUG: %s supports IPP!\n", device->addrname);
-
/*
* Use non-blocking IO...
*/
@@ -1569,6 +1792,13 @@ probe_device(snmp_cache_t *device) /* I - Device */
i ++)
{
/*
+ * Stop early if we are out of time...
+ */
+
+ if (MaxRunTime > 0 && run_time() >= MaxRunTime)
+ break;
+
+ /*
* Don't look past /ipp if we have found a working URI...
*/
@@ -1578,16 +1808,14 @@ probe_device(snmp_cache_t *device) /* I - Device */
httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
device->addrname, 631, resources[i]);
- debug_printf("DEBUG: Trying %s (num_uris=%d)\n", uri, num_uris);
-
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
- response = cupsDoRequest(http, request, resources[i]);
+ response = do_request(http, request, resources[i]);
- debug_printf("DEBUG: %s %s (%s)\n", uri,
+ debug_printf("DEBUG: %.3f %s %s (%s)\n", run_time(), uri,
ippErrorString(cupsLastError()), cupsLastErrorString());
if (response && response->request.status.status_code == IPP_OK)
@@ -1726,6 +1954,7 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
int linenum; /* Line number */
const char *cups_serverroot; /* CUPS_SERVERROOT env var */
const char *debug; /* CUPS_DEBUG_LEVEL env var */
+ const char *runtime; /* CUPS_MAX_RUN_TIME env var */
/*
@@ -1741,6 +1970,9 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
if ((debug = getenv("CUPS_DEBUG_LEVEL")) != NULL)
DebugLevel = atoi(debug);
+ if ((runtime = getenv("CUPS_MAX_RUN_TIME")) != NULL)
+ MaxRunTime = atoi(runtime);
+
/*
* Find the snmp.conf file...
*/
@@ -1777,6 +2009,8 @@ read_snmp_conf(const char *address) /* I - Single address to probe */
!strcasecmp(value, "yes") ||
!strcasecmp(value, "true") ||
!strcasecmp(value, "double");
+ else if (!strcasecmp(line, "MaxRunTime"))
+ MaxRunTime = atoi(value);
else
fprintf(stderr, "ERROR: Unknown directive %s on line %d of %s!\n",
line, linenum, filename);
@@ -2075,7 +2309,9 @@ scan_devices(int fd) /* I - SNMP socket */
for (device = (snmp_cache_t *)cupsArrayFirst(Devices);
device;
device = (snmp_cache_t *)cupsArrayNext(Devices))
- if (!device->uri)
+ if (MaxRunTime > 0 && run_time() >= MaxRunTime)
+ break;
+ else if (!device->uri)
probe_device(device);
debug_printf("DEBUG: %.3f Scan complete!\n", run_time());
@@ -2169,7 +2405,6 @@ try_connect(http_addr_t *addr, /* I - Socket address */
addr->ipv4.sin_port = htons(port);
- signal(SIGALRM, alarm_handler);
alarm(1);
status = connect(fd, (void *)addr, httpAddrLength(addr));
@@ -2211,9 +2446,11 @@ update_cache(snmp_cache_t *device, /* I - Device */
device->make_and_model = strdup(make_model);
}
+
+ list_device(device);
}
/*
- * End of "$Id: snmp.c 5736 2006-07-13 19:59:36Z mike $".
+ * End of "$Id: snmp.c 5898 2006-08-28 18:54:10Z mike $".
*/
diff --git a/berkeley/lpc.c b/berkeley/lpc.c
index 271d60477..c00a23a7a 100644
--- a/berkeley/lpc.c
+++ b/berkeley/lpc.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpc.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: lpc.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lpc" command for the Common UNIX Printing System (CUPS).
*
@@ -65,6 +65,8 @@ main(int argc, /* I - Number of command-line arguments */
*params; /* Pointer to parameters */
+ _cupsSetLocale();
+
/*
* Connect to the scheduler...
*/
@@ -518,5 +520,5 @@ show_status(http_t *http, /* I - HTTP connection to server */
/*
- * End of "$Id: lpc.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: lpc.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/berkeley/lpq.c b/berkeley/lpq.c
index 43f01c620..78387fd5d 100644
--- a/berkeley/lpq.c
+++ b/berkeley/lpq.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpq.c 5638 2006-06-06 20:08:13Z mike $"
+ * "$Id: lpq.c 5838 2006-08-17 14:41:42Z mike $"
*
* "lpq" command for the Common UNIX Printing System (CUPS).
*
@@ -76,9 +76,10 @@ main(int argc, /* I - Number of command-line arguments */
longstatus; /* Show file details */
int num_dests; /* Number of destinations */
cups_dest_t *dests; /* Destinations */
- cups_lang_t *language; /* Language */
+ _cupsSetLocale();
+
/*
* Check for command-line options...
*/
@@ -90,8 +91,8 @@ main(int argc, /* I - Number of command-line arguments */
interval = 0;
longstatus = 0;
all = 0;
- language = cupsLangDefault();
num_dests = 0;
+ dests = NULL;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
@@ -675,5 +676,5 @@ usage(void)
/*
- * End of "$Id: lpq.c 5638 2006-06-06 20:08:13Z mike $".
+ * End of "$Id: lpq.c 5838 2006-08-17 14:41:42Z mike $".
*/
diff --git a/berkeley/lpr.c b/berkeley/lpr.c
index f6b5fb3b7..90b73bf4d 100644
--- a/berkeley/lpr.c
+++ b/berkeley/lpr.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpr.c 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: lpr.c 5838 2006-08-17 14:41:42Z mike $"
*
* "lpr" command for the Common UNIX Printing System (CUPS).
*
@@ -87,13 +87,14 @@ main(int argc, /* I - Number of command-line arguments */
ssize_t bytes; /* Bytes copied */
off_t filesize; /* Size of temp file */
int temp; /* Temporary file descriptor */
- cups_lang_t *language; /* Language information */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Signal action */
struct sigaction oldaction; /* Old signal action */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+ _cupsSetLocale();
+
deletefile = 0;
printer = NULL;
num_dests = 0;
@@ -102,7 +103,6 @@ main(int argc, /* I - Number of command-line arguments */
options = NULL;
num_files = 0;
title = NULL;
- language = cupsLangDefault();
for (i = 1; i < argc; i ++)
if (argv[i][0] == '-')
@@ -529,5 +529,5 @@ sighandler(int s) /* I - Signal number */
/*
- * End of "$Id: lpr.c 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: lpr.c 5838 2006-08-17 14:41:42Z mike $".
*/
diff --git a/berkeley/lprm.c b/berkeley/lprm.c
index 41f35ca12..574f26507 100644
--- a/berkeley/lprm.c
+++ b/berkeley/lprm.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $"
+ * "$Id: lprm.c 5878 2006-08-24 15:55:42Z mike $"
*
* "lprm" command for the Common UNIX Printing System (CUPS).
*
@@ -55,13 +55,14 @@ main(int argc, /* I - Number of command-line arguments */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
ipp_op_t op; /* Operation */
- cups_lang_t *language; /* Language */
int num_dests; /* Number of destinations */
cups_dest_t *dests, /* Destinations */
*defdest; /* Default destination */
http_encryption_t encryption; /* Encryption? */
+ _cupsSetLocale();
+
/*
* Setup to cancel individual print jobs...
*/
@@ -72,7 +73,6 @@ main(int argc, /* I - Number of command-line arguments */
response = NULL;
http = NULL;
encryption = cupsEncryption();
- language = cupsLangDefault();
/*
* Open a connection to the server...
@@ -273,7 +273,7 @@ main(int argc, /* I - Number of command-line arguments */
}
/*
- * If nothing has been cancelled yet, cancel the current job on the specified
+ * If nothing has been canceled yet, cancel the current job on the specified
* (or default) printer...
*/
@@ -294,5 +294,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * End of "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $".
+ * End of "$Id: lprm.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
index 85142e3a0..6536c86f7 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -1,5 +1,5 @@
/*
- * "$Id: admin.c 5572 2006-05-22 18:47:09Z mike $"
+ * "$Id: admin.c 5878 2006-08-24 15:55:42Z mike $"
*
* Administration CGI for the Common UNIX Printing System (CUPS).
*
@@ -1597,39 +1597,97 @@ do_config_server(http_t *http) /* I - HTTP connection */
int num_settings; /* Number of server settings */
cups_option_t *settings; /* Server settings */
+ const char *debug_logging, /* DEBUG_LOGGING value */
+ *remote_admin, /* REMOTE_ADMIN value */
+ *remote_printers,
+ /* REMOTE_PRINTERS value */
+ *share_printers,/* SHARE_PRINTERS value */
+ *user_cancel_any;
+ /* USER_CANCEL_ANY value */
- num_settings = 0;
- num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
- cgiGetVariable("DEBUG_LOGGING") ? "1" : "0",
- num_settings, &settings);
- num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
- cgiGetVariable("REMOTE_ADMIN") ? "1" : "0",
- num_settings, &settings);
- num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
- cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0",
- num_settings, &settings);
- num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
- cgiGetVariable("SHARE_PRINTERS") ? "1" : "0",
- num_settings, &settings);
- num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
- cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0",
- num_settings, &settings);
-
-
- if (!_cupsAdminSetServerSettings(http, num_settings, settings))
+ /*
+ * Get the checkbox values from the form...
+ */
+
+ debug_logging = cgiGetVariable("DEBUG_LOGGING") ? "1" : "0";
+ remote_admin = cgiGetVariable("REMOTE_ADMIN") ? "1" : "0";
+ remote_printers = cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0";
+ share_printers = cgiGetVariable("SHARE_PRINTERS") ? "1" : "0";
+ user_cancel_any = cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0";
+
+ /*
+ * Get the current server settings...
+ */
+
+ if (!_cupsAdminGetServerSettings(http, &num_settings, &settings))
{
cgiStartHTML(cgiText(_("Change Settings")));
cgiSetVariable("MESSAGE",
cgiText(_("Unable to change server settings:")));
cgiSetVariable("ERROR", cupsLastErrorString());
cgiCopyTemplateLang("error.tmpl");
+ cgiEndHTML();
+ return;
+ }
+
+ /*
+ * See if the settings have changed...
+ */
+
+ if (strcmp(debug_logging, cupsGetOption(CUPS_SERVER_DEBUG_LOGGING,
+ num_settings, settings)) ||
+ strcmp(remote_admin, cupsGetOption(CUPS_SERVER_REMOTE_ADMIN,
+ num_settings, settings)) ||
+ strcmp(remote_printers, cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS,
+ num_settings, settings)) ||
+ strcmp(share_printers, cupsGetOption(CUPS_SERVER_SHARE_PRINTERS,
+ num_settings, settings)) ||
+ strcmp(user_cancel_any, cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY,
+ num_settings, settings)))
+ {
+ /*
+ * Settings *have* changed, so save the changes...
+ */
+
+ cupsFreeOptions(num_settings, settings);
+
+ num_settings = 0;
+ num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING,
+ debug_logging, num_settings, &settings);
+ num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN,
+ remote_admin, num_settings, &settings);
+ num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
+ remote_printers, num_settings, &settings);
+ num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
+ share_printers, num_settings, &settings);
+ num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
+ user_cancel_any, num_settings, &settings);
+
+ if (!_cupsAdminSetServerSettings(http, num_settings, settings))
+ {
+ cgiStartHTML(cgiText(_("Change Settings")));
+ cgiSetVariable("MESSAGE",
+ cgiText(_("Unable to change server settings:")));
+ cgiSetVariable("ERROR", cupsLastErrorString());
+ cgiCopyTemplateLang("error.tmpl");
+ }
+ else
+ {
+ cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
+ cgiStartHTML(cgiText(_("Change Settings")));
+ cgiCopyTemplateLang("restart.tmpl");
+ }
}
else
{
+ /*
+ * No changes...
+ */
+
cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
cgiStartHTML(cgiText(_("Change Settings")));
- cgiCopyTemplateLang("restart.tmpl");
+ cgiCopyTemplateLang("norestart.tmpl");
}
cupsFreeOptions(num_settings, settings);
@@ -2893,5 +2951,5 @@ match_string(const char *a, /* I - First string */
/*
- * End of "$Id: admin.c 5572 2006-05-22 18:47:09Z mike $".
+ * End of "$Id: admin.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/cgi-bin/ipp-var.c b/cgi-bin/ipp-var.c
index 0b515f123..c312d8bff 100644
--- a/cgi-bin/ipp-var.c
+++ b/cgi-bin/ipp-var.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp-var.c 5572 2006-05-22 18:47:09Z mike $"
+ * "$Id: ipp-var.c 5838 2006-08-17 14:41:42Z mike $"
*
* CGI <-> IPP variable routines for the Common UNIX Printing System (CUPS).
*
@@ -110,6 +110,7 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */
*/
num_attrs = 0;
+ attrs[0] = NULL; /* Eliminate compiler warning */
while ((ch = getc(in)) != EOF)
if (ch == '\\')
@@ -1279,5 +1280,5 @@ cgiText(const char *message) /* I - Message */
/*
- * End of "$Id: ipp-var.c 5572 2006-05-22 18:47:09Z mike $".
+ * End of "$Id: ipp-var.c 5838 2006-08-17 14:41:42Z mike $".
*/
diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4
index 5495beaa0..d8c4d01f2 100644
--- a/config-scripts/cups-common.m4
+++ b/config-scripts/cups-common.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-common.m4 5466 2006-04-26 19:52:27Z mike $"
+dnl "$Id: cups-common.m4 5843 2006-08-17 18:49:31Z mike $"
dnl
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -29,7 +29,7 @@ dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Versio number information...
-CUPS_VERSION="1.2svn"
+CUPS_VERSION="1.2.3"
CUPS_REVISION=""
if test -z "$CUPS_REVISION" -a -d .svn; then
CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -265,5 +265,5 @@ AC_SUBST(DEFAULT_IPP_PORT)
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT)
dnl
-dnl End of "$Id: cups-common.m4 5466 2006-04-26 19:52:27Z mike $".
+dnl End of "$Id: cups-common.m4 5843 2006-08-17 18:49:31Z mike $".
dnl
diff --git a/config-scripts/cups-defaults.m4 b/config-scripts/cups-defaults.m4
index 6b99cb575..a46cf3835 100644
--- a/config-scripts/cups-defaults.m4
+++ b/config-scripts/cups-defaults.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $"
+dnl "$Id: cups-defaults.m4 5804 2006-08-04 16:51:58Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
@@ -25,7 +25,9 @@ dnl
dnl Default langugages...
AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es ja pl sv" ],
- LANGUAGES="$withval",
+ if test "x$withval" != xno; then
+ LANGUAGES="$withval"
+ fi,
LANGUAGES="de es ja pl sv")
AC_SUBST(LANGUAGES)
@@ -248,5 +250,5 @@ fi
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP")
dnl
-dnl End of "$Id: cups-defaults.m4 5745 2006-07-18 13:45:56Z mike $".
+dnl End of "$Id: cups-defaults.m4 5804 2006-08-04 16:51:58Z mike $".
dnl
diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4
index ece2b5820..595512b43 100644
--- a/config-scripts/cups-directories.m4
+++ b/config-scripts/cups-directories.m4
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $"
+dnl "$Id: cups-directories.m4 5905 2006-08-29 20:48:59Z mike $"
dnl
dnl Directory stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -57,6 +57,15 @@ if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then
sharedstatedir="/usr/com"
fi
+dnl Fix "datarootdir" variable if it hasn't been specified...
+if test "$datarootdir" = "\${prefix}/share"; then
+ if test "$prefix" = "/"; then
+ datarootdir="/usr/share"
+ else
+ datarootdir="$prefix/share"
+ fi
+fi
+
dnl Fix "datadir" variable if it hasn't been specified...
if test "$datadir" = "\${prefix}/share"; then
if test "$prefix" = "/"; then
@@ -64,6 +73,8 @@ if test "$datadir" = "\${prefix}/share"; then
else
datadir="$prefix/share"
fi
+elif test "$datadir" = "\${datarootdir}"; then
+ datadir="$datarootdir"
fi
dnl Fix "includedir" variable if it hasn't been specified...
@@ -182,12 +193,15 @@ AC_SUBST(INITDDIR)
dnl Xinetd support...
XINETD=""
-for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do
- if test -d $dir; then
- XINETD="$dir"
- break
- fi
-done
+
+if test ! -x /sbin/launchd; then
+ for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do
+ if test -d $dir; then
+ XINETD="$dir"
+ break
+ fi
+ done
+fi
AC_SUBST(XINETD)
@@ -197,7 +211,7 @@ AC_ARG_WITH(cachedir, [ --with-cachedir set path for cache files],cache
if test x$cachedir = x; then
if test "x$uname" = xDarwin; then
- CUPS_CACHEDIR="$localstatedir/tmp/cups"
+ CUPS_CACHEDIR="$localstatedir/spool/cups/cache"
else
CUPS_CACHEDIR="$localstatedir/cache/cups"
fi
@@ -302,5 +316,5 @@ AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$localstatedir/run/cups")
AC_SUBST(CUPS_STATEDIR)
dnl
-dnl End of "$Id: cups-directories.m4 5696 2006-06-26 18:34:20Z mike $".
+dnl End of "$Id: cups-directories.m4 5905 2006-08-29 20:48:59Z mike $".
dnl
diff --git a/config-scripts/cups-manpages.m4 b/config-scripts/cups-manpages.m4
index 1e6ae44de..41e8190cb 100644
--- a/config-scripts/cups-manpages.m4
+++ b/config-scripts/cups-manpages.m4
@@ -1,9 +1,9 @@
dnl
-dnl "$Id: cups-manpages.m4 5466 2006-04-26 19:52:27Z mike $"
+dnl "$Id: cups-manpages.m4 5799 2006-08-03 00:54:38Z mike $"
dnl
dnl Manpage stuff for the Common UNIX Printing System (CUPS).
dnl
-dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
+dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Easy Software Products and are protected by Federal
@@ -23,6 +23,12 @@ dnl WWW: http://www.cups.org
dnl
dnl Fix "mandir" variable...
+if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then
+ # New GNU "standards" break previous ones, so make sure we use
+ # the right default location for the operating system...
+ mandir="\${prefix}/man"
+fi
+
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
case "$uname" in
Darwin* | Linux | GNU | *BSD* | AIX*)
@@ -103,5 +109,5 @@ AC_SUBST(MAN8EXT)
AC_SUBST(MAN8DIR)
dnl
-dnl End of "$Id: cups-manpages.m4 5466 2006-04-26 19:52:27Z mike $".
+dnl End of "$Id: cups-manpages.m4 5799 2006-08-03 00:54:38Z mike $".
dnl
diff --git a/configure.in b/configure.in
index d9e4f6255..07909d7e1 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
dnl
-dnl "$Id: configure.in 5609 2006-05-30 20:31:10Z mike $"
+dnl "$Id: configure.in 5804 2006-08-04 16:51:58Z mike $"
dnl
dnl Configuration script for the Common UNIX Printing System (CUPS).
dnl
@@ -54,9 +54,17 @@ if test "x$LANGUAGES" != x; then
INSTALL_LANGUAGES="install-languages"
UNINSTALL_LANGUAGES="uninstall-languages"
for lang in $LANGUAGES; do
- LANGFILES="$LANGFILES doc/$lang/index.html"
- LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
- LANGFILES="$LANGFILES templates/$lang/header.tmpl"
+ if test -f doc/$lang/index.html.in; then
+ LANGFILES="$LANGFILES doc/$lang/index.html"
+ fi
+
+ if test -f templates/$lang/edit-config.tmpl.in; then
+ LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
+ fi
+
+ if test -f templates/$lang/header.tmpl.in; then
+ LANGFILES="$LANGFILES templates/$lang/header.tmpl"
+ fi
done
fi
@@ -75,5 +83,5 @@ AC_OUTPUT(Makedefs packaging/cups.list init/cups.sh init/cups-lpd cups-config
chmod +x cups-config
dnl
-dnl End of "$Id: configure.in 5609 2006-05-30 20:31:10Z mike $".
+dnl End of "$Id: configure.in 5804 2006-08-04 16:51:58Z mike $".
dnl
diff --git a/cups-config.in b/cups-config.in
index ef5084a64..81a982b47 100755
--- a/cups-config.in
+++ b/cups-config.in
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# "$Id: cups-config.in 5688 2006-06-23 20:33:08Z mike $"
+# "$Id: cups-config.in 5799 2006-08-03 00:54:38Z mike $"
#
# CUPS configuration utility.
#
@@ -32,6 +32,7 @@ bindir=@bindir@
includedir=@includedir@
libdir=@libdir@
imagelibdir=@libdir@
+datarootdir=@datadir@
datadir=@datadir@
sysconfdir=@sysconfdir@
cups_datadir=@CUPS_DATADIR@
@@ -150,5 +151,5 @@ while test $# -gt 0; do
done
#
-# End of "$Id: cups-config.in 5688 2006-06-23 20:33:08Z mike $".
+# End of "$Id: cups-config.in 5799 2006-08-03 00:54:38Z mike $".
#
diff --git a/cups/Makefile b/cups/Makefile
index 1af69254f..e0064b42e 100644
--- a/cups/Makefile
+++ b/cups/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 5628 2006-06-05 15:25:23Z mike $"
+# "$Id: Makefile 5801 2006-08-03 02:20:57Z mike $"
#
# API library Makefile for the Common UNIX Printing System (CUPS).
#
@@ -93,6 +93,7 @@ OBJS = \
HEADERS = \
adminutil.h \
array.h \
+ backend.h \
cups.h \
dir.h \
file.h \
@@ -449,5 +450,5 @@ include Dependencies
#
-# End of "$Id: Makefile 5628 2006-06-05 15:25:23Z mike $".
+# End of "$Id: Makefile 5801 2006-08-03 02:20:57Z mike $".
#
diff --git a/cups/adminutil.c b/cups/adminutil.c
index 3825b40bf..710780029 100644
--- a/cups/adminutil.c
+++ b/cups/adminutil.c
@@ -1,5 +1,5 @@
/*
- * "$Id: adminutil.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: adminutil.c 5878 2006-08-24 15:55:42Z mike $"
*
* Administration utility API definitions for the Common UNIX Printing
* System (CUPS).
@@ -103,7 +103,7 @@ cupsAdminCreateWindowsPPD(
linenum; /* Current line number */
time_t curtime; /* Current time */
struct tm *curdate; /* Current date */
- static const char *pattrs[] = /* Printer attributes we want */
+ static const char * const pattrs[] = /* Printer attributes we want */
{
"job-hold-until-supported",
"job-hold-until-default",
@@ -772,19 +772,31 @@ _cupsAdminGetServerSettings(
if (!value)
continue;
- if (!strcasecmp(line, "Port"))
- {
- remote_access = 1;
- }
- else if (!strcasecmp(line, "Listen"))
+ if (!strcasecmp(line, "Port") || !strcasecmp(line, "Listen"))
{
char *port; /* Pointer to port number, if any */
if ((port = strrchr(value, ':')) != NULL)
*port = '\0';
+ else if (isdigit(*value & 255))
+ {
+ /*
+ * Listen on a port number implies remote access...
+ */
+
+ remote_access = 1;
+ continue;
+ }
- if (strcasecmp(value, "localhost") && strcmp(value, "127.0.0.1"))
+ if (strcasecmp(value, "localhost") && strcmp(value, "127.0.0.1")
+#ifdef AF_LOCAL
+ && *value != '/'
+#endif /* AF_LOCAL */
+#ifdef AF_INET6
+ && strcmp(value, "::1")
+#endif /* AF_INET6 */
+ )
remote_access = 1;
}
else if (!strcasecmp(line, "Browsing"))
@@ -860,7 +872,14 @@ _cupsAdminGetServerSettings(
in_location = 0;
}
else if (!strcasecmp(line, "Allow") && in_admin_location &&
- strcasecmp(value, "localhost") && strcasecmp(value, "127.0.0.1"))
+ strcasecmp(value, "localhost") && strcasecmp(value, "127.0.0.1")
+#ifdef AF_LOCAL
+ && *value != '/'
+#endif /* AF_LOCAL */
+#ifdef AF_INET6
+ && strcmp(value, "::1")
+#endif /* AF_INET6 */
+ )
{
remote_admin = 1;
}
@@ -1084,7 +1103,7 @@ _cupsAdminSetServerSettings(
{
cupsFilePuts(temp, "# Only listen for connections from the local "
"machine.\n");
- cupsFilePrintf(temp, "Listen 127.0.0.1:%d\n", ippPort());
+ cupsFilePrintf(temp, "Listen localhost:%d\n", ippPort());
}
#ifdef CUPS_DEFAULT_DOMAINSOCKET
@@ -1440,7 +1459,7 @@ _cupsAdminSetServerSettings(
{
cupsFilePuts(temp,
"# Only listen for connections from the local machine.\n");
- cupsFilePrintf(temp, "Listen 127.0.0.1:%d\n", ippPort());
+ cupsFilePrintf(temp, "Listen localhost:%d\n", ippPort());
}
#ifdef CUPS_DEFAULT_DOMAINSOCKET
@@ -1768,7 +1787,7 @@ get_cupsd_conf(
* Read cupsd.conf via a HTTP GET request...
*/
- if ((fd = cupsTempFd(name, sizeof(name))) < 0)
+ if ((fd = cupsTempFd(name, namesize)) < 0)
{
*name = '\0';
@@ -1929,5 +1948,5 @@ write_option(cups_file_t *dstfp, /* I - PPD file */
/*
- * End of "$Id: adminutil.c 5753 2006-07-18 19:53:24Z mike $".
+ * End of "$Id: adminutil.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/cups/attr.c b/cups/attr.c
index 96b89ea05..56deac727 100644
--- a/cups/attr.c
+++ b/cups/attr.c
@@ -1,5 +1,5 @@
/*
- * "$Id: attr.c 5119 2006-02-16 15:52:06Z mike $"
+ * "$Id: attr.c 5826 2006-08-15 19:04:11Z mike $"
*
* PPD model-specific attribute routines for the Common UNIX Printing System
* (CUPS).
@@ -44,13 +44,18 @@
* @since CUPS 1.1.19@
*/
-ppd_attr_t * /* O - Attribute or NULL if not found */
-ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */
- const char *name, /* I - Attribute name */
- const char *spec) /* I - Specifier string or NULL */
+ppd_attr_t * /* O - Attribute or NULL if not found */
+ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */
+ const char *name, /* I - Attribute name */
+ const char *spec) /* I - Specifier string or NULL */
{
- ppd_attr_t key; /* Search key */
+ ppd_attr_t key, /* Search key */
+ *attr; /* Current attribute */
+ int diff; /* Current difference */
+
+ DEBUG_printf(("ppdFindAttr(ppd=%p, name=\"%s\", spec=\"%s\")\n", ppd,
+ name ? name : "(null)", spec ? spec : "(null)"));
/*
* Range check input...
@@ -72,7 +77,36 @@ ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */
* Return the first matching attribute, if any...
*/
- return ((ppd_attr_t *)cupsArrayFind(ppd->sorted_attrs, &key));
+ if ((attr = (ppd_attr_t *)cupsArrayFind(ppd->sorted_attrs, &key)) != NULL)
+ return (attr);
+ else if (spec)
+ return (NULL);
+
+ /*
+ * No match found, loop through the sorted attributes to see if we can
+ * find a "wildcard" match for the attribute...
+ */
+
+ for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs);
+ attr;
+ attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs))
+ {
+ if ((diff = strcasecmp(attr->name, name)) == 0)
+ break;
+
+ if (diff > 0)
+ {
+ /*
+ * All remaining attributes are > than the one we are trying to find...
+ */
+
+ cupsArrayIndex(ppd->sorted_attrs, cupsArrayCount(ppd->sorted_attrs));
+
+ return (NULL);
+ }
+ }
+
+ return (attr);
}
@@ -129,5 +163,5 @@ ppdFindNextAttr(ppd_file_t *ppd, /* I - PPD file data */
/*
- * End of "$Id: attr.c 5119 2006-02-16 15:52:06Z mike $".
+ * End of "$Id: attr.c 5826 2006-08-15 19:04:11Z mike $".
*/
diff --git a/cups/cups.h b/cups/cups.h
index 64b389a08..c74e52209 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -1,5 +1,5 @@
/*
- * "$Id: cups.h 5233 2006-03-06 03:39:28Z mike $"
+ * "$Id: cups.h 5805 2006-08-04 16:52:31Z mike $"
*
* API definitions for the Common UNIX Printing System (CUPS).
*
@@ -61,10 +61,10 @@ extern "C" {
* Constants...
*/
-# define CUPS_VERSION 1.0200
+# define CUPS_VERSION 1.0203
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 2
-# define CUPS_VERSION_PATCH 0
+# define CUPS_VERSION_PATCH 3
# define CUPS_DATE_ANY -1
@@ -244,5 +244,5 @@ extern cups_file_t *cupsTempFile2(char *filename, int len);
#endif /* !_CUPS_CUPS_H_ */
/*
- * End of "$Id: cups.h 5233 2006-03-06 03:39:28Z mike $".
+ * End of "$Id: cups.h 5805 2006-08-04 16:52:31Z mike $".
*/
diff --git a/cups/dir.h b/cups/dir.h
index 0fd52e8f1..ac5c5fc08 100644
--- a/cups/dir.h
+++ b/cups/dir.h
@@ -5,7 +5,7 @@
*
* This set of APIs abstracts enumeration of directory entries.
*
- * Copyright 1997-2005 by Easy Software Products, all rights reserved.
+ * Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -39,9 +39,9 @@
* C++ magic...
*/
-# ifdef _cplusplus
+# ifdef __cplusplus
extern "C" {
-# endif /* _cplusplus */
+# endif /* __cplusplus */
/*
@@ -67,9 +67,9 @@ extern cups_dentry_t *cupsDirRead(cups_dir_t *dp);
extern void cupsDirRewind(cups_dir_t *dp);
-# ifdef _cplusplus
+# ifdef __cplusplus
}
-# endif /* _cplusplus */
+# endif /* __cplusplus */
#endif /* !_CUPS_DIR_H_ */
/*
diff --git a/cups/file.c b/cups/file.c
index a5c1372f5..246972d76 100644
--- a/cups/file.c
+++ b/cups/file.c
@@ -1,5 +1,5 @@
/*
- * "$Id: file.c 5324 2006-03-23 16:47:46Z mike $"
+ * "$Id: file.c 5812 2006-08-09 22:42:51Z mike $"
*
* File functions for the Common UNIX Printing System (CUPS).
*
@@ -1260,6 +1260,7 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */
fp->pos = 0;
fp->ptr = NULL;
fp->end = NULL;
+ fp->eof = 0;
return (0);
}
@@ -2080,5 +2081,5 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
/*
- * End of "$Id: file.c 5324 2006-03-23 16:47:46Z mike $".
+ * End of "$Id: file.c 5812 2006-08-09 22:42:51Z mike $".
*/
diff --git a/cups/file.h b/cups/file.h
index 24649147b..b36aa0577 100644
--- a/cups/file.h
+++ b/cups/file.h
@@ -1,5 +1,5 @@
/*
- * "$Id: file.h 5319 2006-03-21 15:28:29Z mike $"
+ * "$Id: file.h 5769 2006-07-20 17:17:14Z mike $"
*
* Public file definitions for the Common UNIX Printing System (CUPS).
*
@@ -8,7 +8,7 @@
* our own file functions allows us to provide transparent support of
* gzip'd print files, PPD files, etc.
*
- * Copyright 1997-2005 by Easy Software Products, all rights reserved.
+ * Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -47,9 +47,9 @@ typedef off_t ssize_t; /* @private@ */
* C++ magic...
*/
-# ifdef _cplusplus
+# ifdef __cplusplus
extern "C" {
-# endif /* _cplusplus */
+# endif /* __cplusplus */
/*
@@ -103,11 +103,11 @@ extern int cupsFileUnlock(cups_file_t *fp);
extern ssize_t cupsFileWrite(cups_file_t *fp, const char *buf, size_t bytes);
-# ifdef _cplusplus
+# ifdef __cplusplus
}
-# endif /* _cplusplus */
+# endif /* __cplusplus */
#endif /* !_CUPS_FILE_H_ */
/*
- * End of "$Id: file.h 5319 2006-03-21 15:28:29Z mike $".
+ * End of "$Id: file.h 5769 2006-07-20 17:17:14Z mike $".
*/
diff --git a/cups/http.c b/cups/http.c
index 84e204620..504be39cf 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -1,5 +1,5 @@
/*
- * "$Id: http.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: http.c 5889 2006-08-24 21:44:35Z mike $"
*
* HTTP routines for the Common UNIX Printing System (CUPS).
*
@@ -1100,15 +1100,20 @@ httpPrintf(http_t *http, /* I - HTTP connection */
DEBUG_printf(("httpPrintf: %s", buf));
- if (http->wused)
+ if (http->data_encoding == HTTP_ENCODE_FIELDS)
+ return (httpWrite2(http, buf, bytes));
+ else
{
- DEBUG_puts(" flushing existing data...");
+ if (http->wused)
+ {
+ DEBUG_puts(" flushing existing data...");
- if (httpFlushWrite(http) < 0)
- return (-1);
- }
+ if (httpFlushWrite(http) < 0)
+ return (-1);
+ }
- return (http_write(http, buf, bytes));
+ return (http_write(http, buf, bytes));
+ }
}
@@ -1888,7 +1893,7 @@ httpWrite2(http_t *http, /* I - HTTP connection */
httpFlushWrite(http);
}
- if ((length + http->wused) <= sizeof(http->wbuffer))
+ if ((length + http->wused) < sizeof(http->wbuffer))
{
/*
* Write to buffer...
@@ -2155,10 +2160,19 @@ http_send(http_t *http, /* I - HTTP connection */
return (-1);
/*
+ * Flush any written data that is pending...
+ */
+
+ if (http->wused)
+ httpFlushWrite(http);
+
+ /*
* Send the request header...
*/
- http->state = request;
+ http->state = request;
+ http->data_encoding = HTTP_ENCODE_FIELDS;
+
if (request == HTTP_POST || request == HTTP_PUT)
http->state ++;
@@ -2211,6 +2225,7 @@ http_send(http_t *http, /* I - HTTP connection */
return (-1);
}
+ httpFlushWrite(http);
httpGetLength2(http);
httpClearFields(http);
@@ -2811,5 +2826,5 @@ http_write_ssl(http_t *http, /* I - HTTP connection */
/*
- * End of "$Id: http.c 5753 2006-07-18 19:53:24Z mike $".
+ * End of "$Id: http.c 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/cups/http.h b/cups/http.h
index 6303af452..2f8a28d73 100644
--- a/cups/http.h
+++ b/cups/http.h
@@ -1,5 +1,5 @@
/*
- * "$Id: http.h 5716 2006-07-11 17:56:57Z mike $"
+ * "$Id: http.h 5889 2006-08-24 21:44:35Z mike $"
*
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
* System (CUPS).
@@ -39,8 +39,8 @@
# include <winsock2.h>
# include <ws2tcpip.h>
# else
-# ifdef __sgi /* IRIX needs this for IPv6 support!?! */
-# define INET6
+# ifdef __sgi
+# define INET6 /* IRIX IPv6 support... */
# endif /* __sgi */
# include <unistd.h>
# include <sys/time.h>
@@ -53,6 +53,9 @@
# if !defined(__APPLE__) || !defined(TCP_NODELAY)
# include <netinet/tcp.h>
# endif /* !__APPLE__ || !TCP_NODELAY */
+# if defined(AF_UNIX) && !defined(AF_LOCAL)
+# define AF_LOCAL AF_UNIX /* Older UNIX's have old names... */
+# endif /* AF_UNIX && !AF_LOCAL */
# ifdef AF_LOCAL
# include <sys/un.h>
# endif /* AF_LOCAL */
@@ -139,7 +142,8 @@ typedef enum http_auth_e /**** HTTP authentication types ****/
typedef enum http_encoding_e /**** HTTP transfer encoding values ****/
{
HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */
- HTTP_ENCODE_CHUNKED /* Data is chunked */
+ HTTP_ENCODE_CHUNKED, /* Data is chunked */
+ HTTP_ENCODE_FIELDS /* Sending HTTP fields */
} http_encoding_t;
typedef enum http_encryption_e /**** HTTP encryption values ****/
@@ -504,5 +508,5 @@ extern ssize_t httpWrite2(http_t *http, const char *buffer,
#endif /* !_CUPS_HTTP_H_ */
/*
- * End of "$Id: http.h 5716 2006-07-11 17:56:57Z mike $".
+ * End of "$Id: http.h 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/cups/i18n.h b/cups/i18n.h
index 58de0eae5..14a5c1dd5 100644
--- a/cups/i18n.h
+++ b/cups/i18n.h
@@ -1,5 +1,5 @@
/*
- * "$Id: i18n.h 5366 2006-04-02 16:11:04Z mike $"
+ * "$Id: i18n.h 5833 2006-08-16 20:05:58Z mike $"
*
* (Private) localization support for the Common UNIX Printing System (CUPS).
*
@@ -105,6 +105,7 @@ extern const char *_cupsLangString(cups_lang_t *lang, const char *message);
extern void _cupsMessageFree(cups_array_t *a);
extern cups_array_t *_cupsMessageLoad(const char *filename);
extern const char *_cupsMessageLookup(cups_array_t *a, const char *m);
+extern void _cupsSetLocale(void);
# ifdef __cplusplus
}
@@ -113,5 +114,5 @@ extern const char *_cupsMessageLookup(cups_array_t *a, const char *m);
#endif /* !_CUPS_I18N_H_ */
/*
- * End of "$Id: i18n.h 5366 2006-04-02 16:11:04Z mike $".
+ * End of "$Id: i18n.h 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/cups/ipp-support.c b/cups/ipp-support.c
index fef06af1c..d4911d60c 100644
--- a/cups/ipp-support.c
+++ b/cups/ipp-support.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp-support.c 5246 2006-03-08 13:22:09Z mike $"
+ * "$Id: ipp-support.c 5905 2006-08-29 20:48:59Z mike $"
*
* Internet Printing Protocol support functions for the Common UNIX
* Printing System (CUPS).
@@ -304,19 +304,48 @@ ippPort(void)
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+ DEBUG_puts("ippPort()");
+
+ if (!cg->ipp_port)
+ {
+ /*
+ * See if the server definition includes the port number...
+ */
+
+ DEBUG_puts("ippPort: Not initialized...");
+
+ cupsServer();
+
+#ifdef DEBUG
+ if (cg->ipp_port)
+ puts("ippPort: Set via cupsServer()...");
+#endif /* DEBUG */
+ }
+
if (!cg->ipp_port)
{
if ((ipp_port = getenv("IPP_PORT")) != NULL)
+ {
+ DEBUG_puts("ippPort: Set via IPP_PORT...");
portnum = atoi(ipp_port);
+ }
else if ((port = getservbyname("ipp", NULL)) == NULL)
+ {
+ DEBUG_puts("ippPort: Set via CUPS_DEFAULT_IPP_PORT...");
portnum = CUPS_DEFAULT_IPP_PORT;
+ }
else
+ {
+ DEBUG_puts("ippPort: Set via ipp service entry...");
portnum = ntohs(port->s_port);
+ }
if (portnum > 0)
cg->ipp_port = portnum;
}
+ DEBUG_printf(("ippPort: Returning %d...\n", cg->ipp_port));
+
return (cg->ipp_port);
}
@@ -328,10 +357,12 @@ ippPort(void)
void
ippSetPort(int p) /* I - Port number to use */
{
+ DEBUG_printf(("ippSetPort(p=%d)\n", p));
+
_cupsGlobals()->ipp_port = p;
}
/*
- * End of "$Id: ipp-support.c 5246 2006-03-08 13:22:09Z mike $".
+ * End of "$Id: ipp-support.c 5905 2006-08-29 20:48:59Z mike $".
*/
diff --git a/cups/ipp.h b/cups/ipp.h
index 6435a0eca..32b578fc7 100644
--- a/cups/ipp.h
+++ b/cups/ipp.h
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.h 5138 2006-02-21 10:49:06Z mike $"
+ * "$Id: ipp.h 5878 2006-08-24 15:55:42Z mike $"
*
* Internet Printing Protocol definitions for the Common UNIX Printing
* System (CUPS).
@@ -172,10 +172,11 @@ typedef enum ipp_jstate_e /**** Job States.... */
IPP_JOB_HELD, /* Job is held for printing */
IPP_JOB_PROCESSING, /* Job is currently printing */
IPP_JOB_STOPPED, /* Job has been stopped */
- IPP_JOB_CANCELLED, /* Job has been cancelled */
+ IPP_JOB_CANCELED, /* Job has been canceled */
IPP_JOB_ABORTED, /* Job has aborted due to error */
IPP_JOB_COMPLETED /* Job has completed successfully */
} ipp_jstate_t;
+#define IPP_JOB_CANCELLED IPP_JOB_CANCELED
typedef enum ipp_pstate_e /**** Printer States.... */
{
@@ -304,10 +305,11 @@ typedef enum ipp_status_e /**** IPP status codes... ****/
IPP_TEMPORARY_ERROR, /* server-error-temporary-error */
IPP_NOT_ACCEPTING, /* server-error-not-accepting-jobs */
IPP_PRINTER_BUSY, /* server-error-busy */
- IPP_ERROR_JOB_CANCELLED, /* server-error-job-canceled */
+ IPP_ERROR_JOB_CANCELED, /* server-error-job-canceled */
IPP_MULTIPLE_JOBS_NOT_SUPPORTED, /* server-error-multiple-document-jobs-not-supported */
IPP_PRINTER_IS_DEACTIVATED /* server-error-printer-is-deactivated */
} ipp_status_t;
+#define IPP_ERROR_JOB_CANCELLED IPP_ERROR_JOB_CANCELED
typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character ****/
@@ -497,5 +499,5 @@ extern ipp_state_t ippWriteIO(void *dst, ipp_iocb_t cb, int blocking,
#endif /* !_CUPS_IPP_H_ */
/*
- * End of "$Id: ipp.h 5138 2006-02-21 10:49:06Z mike $".
+ * End of "$Id: ipp.h 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/cups/langprintf.c b/cups/langprintf.c
index 4430c6792..909692347 100644
--- a/cups/langprintf.c
+++ b/cups/langprintf.c
@@ -1,5 +1,5 @@
/*
- * "$Id: langprintf.c 4924 2006-01-13 01:55:20Z mike $"
+ * "$Id: langprintf.c 5833 2006-08-16 20:05:58Z mike $"
*
* Localized printf/puts functions for the Common UNIX Printing
* System (CUPS).
@@ -28,6 +28,7 @@
*
* _cupsLangPrintf() - Print a formatted message string to a file.
* _cupsLangPuts() - Print a static message string to a file.
+ * _cupsSetLocale() - Set the current locale.
*/
/*
@@ -139,5 +140,50 @@ _cupsLangPuts(FILE *fp, /* I - File to write to */
/*
- * End of "$Id: langprintf.c 4924 2006-01-13 01:55:20Z mike $".
+ * '_cupsSetLocale()' - Set the current locale.
+ */
+
+void
+_cupsSetLocale(void)
+{
+#ifdef LC_TIME
+ const char *lc_time; /* Current LC_TIME value */
+ char new_lc_time[255], /* New LC_TIME value */
+ *charset; /* Pointer to character set */
+#endif /* LC_TIME */
+
+
+ /*
+ * Set the locale so that times, etc. are displayed properly.
+ *
+ * Unfortunately, while we need the localized time value, we *don't*
+ * want to use the localized charset for the time value, so we need
+ * to set LC_TIME to the locale name with .UTF-8 on the end (if
+ * the locale includes a character set specifier...)
+ */
+
+ setlocale(LC_ALL, "");
+
+#ifdef LC_TIME
+ if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
+ lc_time = setlocale(LC_ALL, NULL);
+
+ if (lc_time)
+ {
+ strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
+ if ((charset = strchr(new_lc_time, '.')) == NULL)
+ charset = new_lc_time + strlen(new_lc_time);
+
+ strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
+ }
+ else
+ strcpy(new_lc_time, "C");
+
+ setlocale(LC_TIME, new_lc_time);
+#endif /* LC_TIME */
+}
+
+
+/*
+ * End of "$Id: langprintf.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/cups/language.c b/cups/language.c
index b74738dbf..d46c9fea9 100644
--- a/cups/language.c
+++ b/cups/language.c
@@ -1,5 +1,5 @@
/*
- * "$Id: language.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: language.c 5769 2006-07-20 17:17:14Z mike $"
*
* I18N/language support for the Common UNIX Printing System (CUPS).
*
@@ -1288,6 +1288,8 @@ cups_unquote(char *d, /* O - Unquoted string */
*d = *d * 8 + *s - '0';
s ++;
}
+
+ d ++;
}
else
{
@@ -1312,5 +1314,5 @@ cups_unquote(char *d, /* O - Unquoted string */
/*
- * End of "$Id: language.c 5753 2006-07-18 19:53:24Z mike $".
+ * End of "$Id: language.c 5769 2006-07-20 17:17:14Z mike $".
*/
diff --git a/cups/libcups_s.exp b/cups/libcups_s.exp
index a7afc43d1..cad2f10af 100644
--- a/cups/libcups_s.exp
+++ b/cups/libcups_s.exp
@@ -16,6 +16,7 @@ _cupsMessageFree
_cupsMessageLoad
_cupsMessageLookup
_cupsSetError
+_cupsSetLocale
_cupsStrAlloc
_cupsStrFlush
_cupsStrFormatd
diff --git a/cups/localize.c b/cups/localize.c
index b07609bbb..c2be099b4 100644
--- a/cups/localize.c
+++ b/cups/localize.c
@@ -1,5 +1,5 @@
/*
- * "$Id: localize.c 5391 2006-04-14 12:26:50Z mike $"
+ * "$Id: localize.c 5826 2006-08-15 19:04:11Z mike $"
*
* PPD custom option routines for the Common UNIX Printing System (CUPS).
*
@@ -80,6 +80,8 @@ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */
* Range check input...
*/
+ DEBUG_printf(("ppdLocalize(ppd=%p)\n", ppd));
+
if (!ppd)
return (-1);
@@ -93,6 +95,9 @@ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */
strlcpy(ll_CC, lang->language, sizeof(ll_CC));
strlcpy(ll, lang->language, sizeof(ll));
+ DEBUG_printf((" lang->language=\"%s\", ll=\"%s\", ll_CC=\"%s\"...\n",
+ lang->language, ll, ll_CC));
+
/*
* Now lookup all of the groups, options, choices, etc.
*/
@@ -165,17 +170,29 @@ ppd_text(ppd_file_t *ppd, /* I - PPD file */
ppd_attr_t *attr; /* Current attribute */
+ DEBUG_printf(("ppd_text(ppd=%p, keyword=\"%s\", spec=\"%s\", "
+ "ll_CC=\"%s\", ll=\"%s\")\n",
+ ppd, keyword, spec, ll_CC, ll));
+
/*
* Look for Keyword.ll_CC, then Keyword.ll...
*/
- snprintf(lkeyword, sizeof(lkeyword), "%s.%s", keyword, ll_CC);
+ snprintf(lkeyword, sizeof(lkeyword), "%s.%s", ll_CC, keyword);
if ((attr = ppdFindAttr(ppd, lkeyword, spec)) == NULL)
{
- snprintf(lkeyword, sizeof(lkeyword), "%s.%s", keyword, ll);
+ snprintf(lkeyword, sizeof(lkeyword), "%s.%s", ll, keyword);
attr = ppdFindAttr(ppd, lkeyword, spec);
}
+#ifdef DEBUG
+ if (attr)
+ printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec, attr->text,
+ attr->value ? attr->value : "");
+ else
+ puts(" NOT FOUND");
+#endif /* DEBUG */
+
/*
* Return text if we find it...
*/
@@ -185,5 +202,5 @@ ppd_text(ppd_file_t *ppd, /* I - PPD file */
/*
- * End of "$Id: localize.c 5391 2006-04-14 12:26:50Z mike $".
+ * End of "$Id: localize.c 5826 2006-08-15 19:04:11Z mike $".
*/
diff --git a/cups/notify.c b/cups/notify.c
index 2a89aca3c..752056636 100644
--- a/cups/notify.c
+++ b/cups/notify.c
@@ -1,5 +1,5 @@
/*
- * "$Id: notify.c 4961 2006-01-20 22:19:13Z mike $"
+ * "$Id: notify.c 5878 2006-08-24 15:55:42Z mike $"
*
* Notification routines for the Common UNIX Printing System (CUPS).
*
@@ -104,7 +104,7 @@ cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
case IPP_JOB_STOPPED :
state = _cupsLangString(lang, _("stopped"));
break;
- case IPP_JOB_CANCELLED :
+ case IPP_JOB_CANCELED :
state = _cupsLangString(lang, _("canceled"));
break;
case IPP_JOB_ABORTED :
@@ -207,5 +207,5 @@ cupsNotifyText(cups_lang_t *lang, /* I - Language data */
/*
- * End of "$Id: notify.c 4961 2006-01-20 22:19:13Z mike $".
+ * End of "$Id: notify.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/cups/ppd.c b/cups/ppd.c
index 540b14a8d..15abaa807 100644
--- a/cups/ppd.c
+++ b/cups/ppd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ppd.c 5333 2006-03-24 00:52:21Z mike $"
+ * "$Id: ppd.c 5826 2006-08-15 19:04:11Z mike $"
*
* PPD file routines for the Common UNIX Printing System (CUPS).
*
@@ -2037,10 +2037,8 @@ ppd_compare_attrs(ppd_attr_t *a, /* I - First attribute */
if ((ret = strcasecmp(a->name, b->name)) != 0)
return (ret);
- else if (a->spec[0] && b->spec[0])
- return (strcasecmp(a->spec, b->spec));
else
- return (0);
+ return (strcasecmp(a->spec, b->spec));
}
@@ -2938,5 +2936,5 @@ ppd_read(cups_file_t *fp, /* I - File to read from */
/*
- * End of "$Id: ppd.c 5333 2006-03-24 00:52:21Z mike $".
+ * End of "$Id: ppd.c 5826 2006-08-15 19:04:11Z mike $".
*/
diff --git a/cups/testi18n.c b/cups/testi18n.c
index 0fc439793..32e2e50b9 100644
--- a/cups/testi18n.c
+++ b/cups/testi18n.c
@@ -1,5 +1,5 @@
/*
- * "$Id: testi18n.c 5444 2006-04-20 18:16:54Z mike $"
+ * "$Id: testi18n.c 5838 2006-08-17 14:41:42Z mike $"
*
* Internationalization test for Common UNIX Printing System (CUPS).
*
@@ -82,7 +82,6 @@ main(int argc, /* I - Argument Count */
/* "A != <CJK U+4E42>." - use Windows 950 (Big5) or EUC-TW */
cups_utf8_t utf8dest[1024]; /* UTF-8 destination string */
cups_utf32_t utf32dest[1024]; /* UTF-32 destination string */
- _cups_vmap_t *vmap; /* VBCS charmap pointer */
/*
@@ -190,7 +189,7 @@ main(int argc, /* I - Argument Count */
fputs("_cupsCharmapGet(CUPS_EUC_JP): ", stdout);
- if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_JP)) == NULL)
+ if (!_cupsCharmapGet(CUPS_EUC_JP))
{
errors ++;
puts("FAIL");
@@ -204,7 +203,7 @@ main(int argc, /* I - Argument Count */
fputs("_cupsCharmapGet(CUPS_EUC_TW): ", stdout);
- if ((vmap = (_cups_vmap_t *)_cupsCharmapGet(CUPS_EUC_TW)) == NULL)
+ if (!_cupsCharmapGet(CUPS_EUC_TW))
{
errors ++;
puts("FAIL");
@@ -556,5 +555,5 @@ print_utf8(const char *msg, /* I - Message String */
/*
- * End of "$Id: testi18n.c 5444 2006-04-20 18:16:54Z mike $"
+ * End of "$Id: testi18n.c 5838 2006-08-17 14:41:42Z mike $"
*/
diff --git a/cups/testppd.c b/cups/testppd.c
index bdaf944a4..37032ff62 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: testppd.c 5700 2006-06-26 19:20:39Z mike $"
+ * "$Id: testppd.c 5826 2006-08-15 19:04:11Z mike $"
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
@@ -192,10 +192,18 @@ main(int argc, /* I - Number of command-line arguments */
else
{
int i, j, k; /* Looping vars */
+ ppd_attr_t *attr; /* Current attribute */
ppd_group_t *group; /* Option group */
ppd_option_t *option; /* Option */
+ char lang[255]; /* LANG environment variable */
+ if (argc > 2)
+ {
+ snprintf(lang, sizeof(lang), "LANG=%s", argv[2]);
+ putenv(lang);
+ }
+
ppdLocalize(ppd);
for (i = ppd->num_groups, group = ppd->groups;
@@ -203,7 +211,7 @@ main(int argc, /* I - Number of command-line arguments */
i --, group ++)
{
printf("%s (%s):\n", group->name, group->text);
-
+
for (j = group->num_options, option = group->options;
j > 0;
j --, option ++)
@@ -215,6 +223,14 @@ main(int argc, /* I - Number of command-line arguments */
option->choices[k].text);
}
}
+
+ puts("Attributes:");
+
+ for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs);
+ attr;
+ attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs))
+ printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec,
+ attr->text, attr->value ? attr->value : "");
}
}
@@ -223,5 +239,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * End of "$Id: testppd.c 5700 2006-06-26 19:20:39Z mike $".
+ * End of "$Id: testppd.c 5826 2006-08-15 19:04:11Z mike $".
*/
diff --git a/cups/transcode.c b/cups/transcode.c
index c7384d9cb..40bf2f054 100644
--- a/cups/transcode.c
+++ b/cups/transcode.c
@@ -1,5 +1,5 @@
/*
- * "$Id: transcode.c 5373 2006-04-06 20:03:32Z mike $"
+ * "$Id: transcode.c 5838 2006-08-17 14:41:42Z mike $"
*
* Transcoding support for the Common UNIX Printing System (CUPS).
*
@@ -408,7 +408,6 @@ cupsUTF8ToUTF32(
const cups_utf8_t *src, /* I - Source string */
const int maxout) /* I - Max output */
{
- size_t srclen; /* Source string length */
int i; /* Looping variable */
cups_utf8_t ch; /* Character value */
cups_utf8_t next; /* Next character value */
@@ -430,7 +429,6 @@ cupsUTF8ToUTF32(
*/
*dest++ = 0xfeff;
- srclen = strlen((char *)src);
for (i = maxout - 1; *src && i > 0; i --)
{
@@ -1142,7 +1140,7 @@ free_vbcs_charmap(_cups_vmap_t *vmap) /* I - Character set */
*/
-void * /* O - Charset map pointer */
+static void * /* O - Charset map pointer */
get_charmap(
const cups_encoding_t encoding) /* I - Encoding */
{
@@ -1585,5 +1583,5 @@ get_vbcs_charmap(
/*
- * End of "$Id: transcode.c 5373 2006-04-06 20:03:32Z mike $"
+ * End of "$Id: transcode.c 5838 2006-08-17 14:41:42Z mike $"
*/
diff --git a/cups/usersys.c b/cups/usersys.c
index b75dc3790..7c9a8a848 100644
--- a/cups/usersys.c
+++ b/cups/usersys.c
@@ -1,5 +1,5 @@
/*
- * "$Id: usersys.c 5182 2006-02-26 04:10:27Z mike $"
+ * "$Id: usersys.c 5902 2006-08-29 15:51:19Z mike $"
*
* User, system, and password routines for the Common UNIX Printing
* System (CUPS).
@@ -49,6 +49,7 @@
#ifdef WIN32
# include <windows.h>
#endif /* WIN32 */
+#include "debug.h"
/*
@@ -224,15 +225,21 @@ cupsServer(void)
linenum = 0;
while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum) != NULL)
+ {
+ DEBUG_printf(("cupsServer: %d: %s %s\n", linenum, line,
+ value ? value : "(null)"));
+
if (!strcasecmp(line, "ServerName") && value)
{
/*
* Got it!
*/
+ DEBUG_puts("cupsServer: Got a ServerName line!");
server = value;
break;
}
+ }
cupsFileClose(fp);
}
@@ -242,6 +249,8 @@ cupsServer(void)
* Copy the server name over and set the port number, if any...
*/
+ DEBUG_printf(("cupsServer: Using server \"%s\"...\n", server));
+
strlcpy(cg->server, server, sizeof(cg->server));
if (cg->server[0] != '/' && (port = strrchr(cg->server, ':')) != NULL &&
@@ -249,6 +258,7 @@ cupsServer(void)
{
*port++ = '\0';
+ DEBUG_printf(("cupsServer: Using port %d...\n", atoi(port)));
ippSetPort(atoi(port));
}
@@ -471,11 +481,17 @@ cups_open_client_conf(void)
snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home);
if ((fp = cupsFileOpen(filename, "r")) != NULL)
+ {
+ DEBUG_printf(("cups_open_client_conf: Using \"%s\"...\n", filename));
return (fp);
+ }
snprintf(filename, sizeof(filename), "%s/.cupsrc", home);
if ((fp = cupsFileOpen(filename, "r")) != NULL)
+ {
+ DEBUG_printf(("cups_open_client_conf: Using \"%s\"...\n", filename));
return (fp);
+ }
}
snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot);
@@ -484,5 +500,5 @@ cups_open_client_conf(void)
/*
- * End of "$Id: usersys.c 5182 2006-02-26 04:10:27Z mike $".
+ * End of "$Id: usersys.c 5902 2006-08-29 15:51:19Z mike $".
*/
diff --git a/desktop/cups.desktop b/desktop/cups.desktop
index a273a579f..a632eb793 100644
--- a/desktop/cups.desktop
+++ b/desktop/cups.desktop
@@ -1,14 +1,10 @@
[Desktop Entry]
Categories=Application;System;X-Red-Hat-Base;
-Comment=CUPS Web Interface
-Comment[en_US]=CUPS Web Interface
Encoding=UTF-8
Exec=htmlview http://localhost:631/
GenericName=
-GenericName[en_US]=
Icon=cups
MimeType=
-Name=Manage Printing
Path=
StartupNotify=false
Terminal=false
@@ -17,5 +13,11 @@ Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=
+Name=Manage Printing
+Name[en_US]=Manage Printing
+Comment=CUPS Web Interface
+Comment[en_US]=CUPS Web Interface
Name[es]=Administrar impresión
Comment[es]=Interfaz Web de CUPS
+Name[pl]=ZarzÄ…dzanie drukowaniem
+Comment[pl]=Interfejs WWW CUPS
diff --git a/doc/help/ref-snmp-conf.html b/doc/help/ref-snmp-conf.html
index 92d8f375a..e3047f24b 100644
--- a/doc/help/ref-snmp-conf.html
+++ b/doc/help/ref-snmp-conf.html
@@ -96,5 +96,22 @@ addresses are converted to hostnames or left as numeric IP addresses.</P>
<P>The default setting is <VAR>off</VAR>.</P>
+<H2 CLASS="title"><A NAME="MaxRunTime">MaxRunTime</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+MaxRunTime 10
+MaxRunTime 300
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>MaxRunTime</CODE> directive specifies the maxium
+number of seconds that the SNMP backend will spend looking for
+printer devices on the network.</P>
+
+<P>The default setting is <VAR>10</VAR>.</P>
+
</BODY>
</HTML>
diff --git a/doc/help/translation.html b/doc/help/translation.html
index 3ffb2de61..f820c0276 100644
--- a/doc/help/translation.html
+++ b/doc/help/translation.html
@@ -1,7 +1,7 @@
<HTML>
<!-- SECTION: Getting Started -->
<HEAD>
- <TITLE>Translating CUPS</TITLE>
+ <TITLE>Translating and Customizing CUPS</TITLE>
</HEAD>
<BODY>
@@ -20,6 +20,9 @@ files and directories:</P>
<UL>
+ <LI><VAR>desktop/cups.desktop</VAR> - the GNOME/KDE
+ desktop file pointing to the CUPS web interface</LI>
+
<LI><VAR>doc/images/button-*.gif</VAR> - the web
interface button images</LI>
@@ -33,14 +36,15 @@ files and directories:</P>
<LI><VAR>templates/*.tmpl</VAR> - the web interface
template files</LI>
-
+
</UL>
-<P>With the exception of the message catalogs, localization files
-are placed in subdirectories under the <VAR>doc</VAR> and
-<VAR>templates</VAR> using the locale name. Locale names are
-either <VAR>ll</VAR> or <VAR>ll_CC</VAR>, where "ll" is the
-2-letter language code and "CC" is the 2-letter country code.</P>
+<P>With the exception of the message catalogs and desktop file,
+localization files are placed in subdirectories under the
+<VAR>doc</VAR> and <VAR>templates</VAR> using the locale name.
+Locale names are either <VAR>ll</VAR> or <VAR>ll_CC</VAR>, where
+"ll" is the 2-letter language code and "CC" is the 2-letter
+country code.</P>
<P>All non-image files must be encoded using the UTF-8 character
set.</P>
@@ -48,15 +52,16 @@ set.</P>
<H2 CLASS="title"><A NAME="SUBMIT">Submitting a Translation for CUPS</A></H2>
-<P>To submit a translation for inclusion in CUPS, translate all
-of the button images, template files, the
+<P>To submit a translation for inclusion in CUPS, translate the
+desktop file, all of the button images, template files, the
<VAR>index.html.in</VAR> file, and the message catalog. Place
these files in the correct subdirectory in the CUPS source code
archive and run the following command to create an archive with
your files:</P>
<PRE CLASS="command">
-tar cvf <I>ll_CC</I>.tar.gz doc/<I>ll_CC</I> locale/<I>ll_CC</I>.po templates/<I>ll_CC</I>
+tar cvf <I>ll_CC</I>.tar.gz desktop/cups.desktop doc/<I>ll_CC</I> \
+ locale/cups_<I>ll_CC</I>.po templates/<I>ll_CC</I>
</PRE>
<P>Replace "ll_CC" with the locale name for your translation.
@@ -66,6 +71,19 @@ HREF="http://www.cups.org/str.php" TARGET="_blank">CUPS Bugs
translation to the report.</P>
+<H2 CLASS="title"><A NAME="DESKTOP">The Desktop File</A></H2>
+
+<P>The <VAR>desktop/cups.desktop</VAR> file provides a link to
+the CUPS web interface from desktop environments such as
+GNOME and KDE. To translate this file, add two lines to the
+bottom with the <tt>Name</tt> and <tt>Comment</tt> keys:</P>
+
+<PRE CLASS="command">
+Name[<I>ll_CC</I>]=<I>Translation of "Manage Printing"</I>
+Comment[<I>ll_CC</I>]=<I>Translation of "CUPS Web Interface"</I>
+</PRE>
+
+
<H2 CLASS="title"><A NAME="IMAGES">Button Images</A></H2>
<P>The web interface button images are used to activate functions
@@ -86,7 +104,7 @@ sub-menu. The button scripts will be available under a new
<VAR>Btns</VAR menu in the Gimp tool window.</P>
<P>When you have created all of the button images, edit the
-<VAR>doc/Makefile</VAR> file and add the locale name to the
+<VAR>Makedefs</VAR> file and add the locale name to the
<CODE>LANGUAGES</CODE> variable. You can then run "make
install" in the <VAR>doc</VAR> subdirectory to test the
translated buttons.</P>
@@ -339,10 +357,10 @@ type the following commands:</P>
<PRE CLASS="command">
cd locale
-cp cups.pot fr_CA.po
+cp cups.pot cups_fr_CA.po
</PRE>
-<P>Alternatively, you can copy the existing <VAR>fr.po</VAR>
+<P>Alternatively, you can copy the existing <VAR>cups_fr.po</VAR>
message catalog and then make any necessary changes.</P>
<P>Once you have make your copy of the file, edit it using your
@@ -350,7 +368,7 @@ favorite text editor or translation program to translate the text
to the desired language.</P>
<P>Finally, add your locale to the <CODE>LANGUAGES</CODE>
-variable in the <VAR>locale/Makefile</VAR> file and run the "make
+variable in the <VAR>Makedefs</VAR> file and run the "make
install" command in the <VAR>locale</VAR> subdirectory to test
the translation.</P>
@@ -379,7 +397,7 @@ Canadian French template files should be saved in the
<VAR>templates/fr_CA</VAR> subdirectory. After you have
translated all of the templates, add the locale to the
<CODE>LANGUAGES</CODE> variable in the
-<VAR>templates/Makefile</VAR> and run "make install" in the
+<VAR>Makedefs</VAR> file and run "make install" in the
<VAR>templates</VAR> subdirectory to test the translation.</P>
<DIV CLASS="table"><TABLE SUMMARY="Web Interface Template Files">
@@ -536,6 +554,11 @@ translated all of the templates, add the locale to the
printer.</TD>
</TR>
<TR>
+ <TD>norestart.tmpl</TD>
+ <TD>This template shows "server not restarted because no
+ changes were made to the configuration".</TD>
+</TR>
+<TR>
<TD>option-boolean.tmpl</TD>
<TD>This template is used to select a boolean PPD option.</TD>
</TR>
diff --git a/filter/pstops.c b/filter/pstops.c
index 544bff6b5..6cfca815d 100644
--- a/filter/pstops.c
+++ b/filter/pstops.c
@@ -1,5 +1,5 @@
/*
- * "$Id: pstops.c 5622 2006-06-01 23:43:21Z mike $"
+ * "$Id: pstops.c 5886 2006-08-24 19:53:17Z mike $"
*
* PostScript filter for the Common UNIX Printing System (CUPS).
*
@@ -1587,6 +1587,10 @@ copy_setup(cups_file_t *fp, /* I - File to read from */
break;
}
+ puts("%%BeginSetup");
+
+ do_setup(doc, ppd);
+
if (!strncmp(line, "%%BeginSetup", 12))
{
while (strncmp(line, "%%EndSetup", 10))
@@ -1603,7 +1607,7 @@ copy_setup(cups_file_t *fp, /* I - File to read from */
doc->num_options = include_feature(ppd, line, doc->num_options,
&(doc->options));
}
- else
+ else if (strncmp(line, "%%BeginSetup", 12))
fwrite(line, 1, linelen, stdout);
if ((linelen = cupsFileGetLine(fp, line, linesize)) == 0)
@@ -1615,10 +1619,6 @@ copy_setup(cups_file_t *fp, /* I - File to read from */
else
fputs("ERROR: Missing %%EndSetup!\n", stderr);
}
- else
- puts("%%BeginSetup");
-
- do_setup(doc, ppd);
puts("%%EndSetup");
@@ -2994,5 +2994,5 @@ write_labels(pstops_doc_t *doc, /* I - Document information */
/*
- * End of "$Id: pstops.c 5622 2006-06-01 23:43:21Z mike $".
+ * End of "$Id: pstops.c 5886 2006-08-24 19:53:17Z mike $".
*/
diff --git a/init/org.cups.cups-lpd.plist b/init/org.cups.cups-lpd.plist
new file mode 100644
index 000000000..f768e3338
--- /dev/null
+++ b/init/org.cups.cups-lpd.plist
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Disabled</key>
+ <true/>
+ <key>Label</key>
+ <string>org.cups.cups-lpd</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/usr/libexec/cups/daemon/cups-lpd</string>
+ <string>-o</string>
+ <string>document-format=application/octet-stream</string>
+ </array>
+ <key>Sockets</key>
+ <dict>
+ <key>Listeners</key>
+ <dict>
+ <key>SockServiceName</key>
+ <string>printer</string>
+ <key>SockType</key>
+ <string>stream</string>
+ </dict>
+ </dict>
+ <key>UserName</key>
+ <string>lp</string>
+ <key>inetdCompatibility</key>
+ <dict>
+ <key>Wait</key>
+ <false/>
+ </dict>
+</dict>
+</plist>
diff --git a/man/cups-snmp.conf.man b/man/cups-snmp.conf.man
index a0ad520e5..01f9c5d30 100644
--- a/man/cups-snmp.conf.man
+++ b/man/cups-snmp.conf.man
@@ -21,7 +21,7 @@
.\" EMail: cups-info@cups.org
.\" WWW: http://www.cups.org
.\"
-.TH snmp.conf 5 "Common UNIX Printing System" "18 April 2006" "Easy Software Products"
+.TH snmp.conf 5 "Common UNIX Printing System" "31 July 2006" "Easy Software Products"
.SH NAME
snmp.conf \- snmp configuration file for cups
.SH DESCRIPTION
@@ -68,6 +68,11 @@ HostNameLookups off
Specifies whether the addresses of printers should be converted
to hostnames or left as numeric IP addresses. The default is
"off".
+.TP 5
+MaxRunTime \fIseconds\fR
+.br
+Specifies the maximum number of seconds that the SNMP backend
+will scan the network for printers.
.SH SEE ALSO
http://localhost:631/help
.SH COPYRIGHT
diff --git a/packaging/cups.list.in b/packaging/cups.list.in
index 923b254f2..6101446d1 100644
--- a/packaging/cups.list.in
+++ b/packaging/cups.list.in
@@ -1,5 +1,5 @@
#
-# "$Id: cups.list.in 5745 2006-07-18 13:45:56Z mike $"
+# "$Id: cups.list.in 5900 2006-08-28 19:26:39Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
@@ -122,6 +122,7 @@
$prefix=@prefix@
$exec_prefix=@exec_prefix@
$bindir=@bindir@
+$datarootdir=@datarootdir@
$datadir=@datadir@
$includedir=@includedir@
$infodir=@infodir@
@@ -159,7 +160,7 @@ $SBINDIR=@sbindir@
$SERVERBIN=@CUPS_SERVERBIN@
$SERVERROOT=@CUPS_SERVERROOT@
$STATEDIR=@CUPS_STATEDIR@
-
+$XINETD=@XINETD@
$LIB32DIR=@LIB32DIR@
$LIB64DIR=@LIB64DIR@
@@ -290,22 +291,22 @@ l 0755 root sys /usr/bsd/lprm $BINDIR/lprm
%if DSOLIBS
%subpackage libs
%system hpux
-f 0755 root sys $LIBDIR/libcups.sl.2 cups/libcups.sl.2
+f 0755 root sys $LIBDIR/libcups.sl.2 cups/libcups.sl.2 nostrip()
l 0755 root sys $LIBDIR/libcups.sl libcups.sl.2
-f 0755 root sys $LIBDIR/libcupsimage.sl.2 filter/libcupsimage.sl.2
+f 0755 root sys $LIBDIR/libcupsimage.sl.2 filter/libcupsimage.sl.2 nostrip()
l 0755 root sys $LIBDIR/libcupsimage.sl libcupsimage.sl.2
%system aix
-f 0755 root sys $LIBDIR/libcups_s.a cups/libcups_s.a
-f 0755 root sys $LIBDIR/libcupsimage_s.a filter/libcupsimage_s.a
+f 0755 root sys $LIBDIR/libcups_s.a cups/libcups_s.a nostrip()
+f 0755 root sys $LIBDIR/libcupsimage_s.a filter/libcupsimage_s.a nostrip()
%system darwin
-f 0755 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib
+f 0755 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib nostrip()
l 0755 root sys $LIBDIR/libcups.dylib libcups.2.dylib
-f 0755 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib
+f 0755 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib nostrip()
l 0755 root sys $LIBDIR/libcupsimage.dylib libcupsimage.2.dylib
%system !hpux !aix !darwin
-f 0755 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2
+f 0755 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2 nostrip()
l 0755 root sys $LIBDIR/libcups.so libcups.so.2
-f 0755 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2
+f 0755 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2 nostrip()
l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
%system all
%subpackage
@@ -313,9 +314,9 @@ l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
%if LIB32DIR
%subpackage libs
-f 0755 root sys $LIB32DIR/libcups.so.2 cups/libcups.32.so.2
+f 0755 root sys $LIB32DIR/libcups.so.2 cups/libcups.32.so.2 nostrip()
l 0755 root sys $LIB32DIR/libcups.so libcups.so.2
-f 0755 root sys $LIB32DIR/libcupsimage.so.2 filter/libcupsimage.32.so.2
+f 0755 root sys $LIB32DIR/libcupsimage.so.2 filter/libcupsimage.32.so.2 nostrip()
l 0755 root sys $LIB32DIR/libcupsimage.so libcupsimage.so.2
%system all
%subpackage
@@ -323,9 +324,9 @@ l 0755 root sys $LIB32DIR/libcupsimage.so libcupsimage.so.2
%if LIB64DIR
%subpackage libs
-f 0755 root sys $LIB64DIR/libcups.so.2 cups/libcups.64.so.2
+f 0755 root sys $LIB64DIR/libcups.so.2 cups/libcups.64.so.2 nostrip()
l 0755 root sys $LIB64DIR/libcups.so libcups.so.2
-f 0755 root sys $LIB64DIR/libcupsimage.so.2 filter/libcupsimage.64.so.2
+f 0755 root sys $LIB64DIR/libcupsimage.so.2 filter/libcupsimage.64.so.2 nostrip()
l 0755 root sys $LIB64DIR/libcupsimage.so libcupsimage.so.2
%system all
%subpackage
@@ -342,7 +343,7 @@ d 0511 root $CUPS_PRIMARY_SYSTEM_GROUP $STATEDIR/certs -
# Data files
%subpackage de
-f 0644 root sys $LOCALEDIR/es/cups_de.po locale/cups_de.po
+f 0644 root sys $LOCALEDIR/de/cups_de.po locale/cups_de.po
%subpackage es
f 0644 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po
%subpackage ja
@@ -562,10 +563,31 @@ d 0755 root sys $AMANDIR/man$MAN8DIR -
f 0644 root sys $AMANDIR/man$MAN8DIR/cups-lpd.$MAN8EXT man/cups-lpd.$MAN8EXT
%subpackage
-# Startup script
-%system all
+# Startup scripts
+%system darwin
+f 0644 root sys /System/Library/LaunchDaemons/org.cups.cupsd.plist init/org.cups.cupsd.plist
+%postinstall <<EOF
+rm -f /System/Library/StartupItems/PrintingServices/PrintingServices
+launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
+launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
+EOF
+%subpackage lpd
+f 0644 root sys /System/Library/LaunchDaemons/org.cups.cups-lpd.plist init/org.cups.cups-lpd.plist
+%postinstall <<EOF
+rm -f /etc/xinetd.d/cups-lpd
+launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
+launchctl load /System/Library/LaunchDaemons/org.cups.cupsd-lpd.plist
+EOF
+%subpackage
+
+%system !darwin
i 0755 root sys cups init/cups.sh
+%subpackage lpd
+%if XINETD
+f 0644 root sys $XINETD/cups-lpd init/cups-lpd
+%endif
+%subpackage
#
-# End of "$Id: cups.list.in 5745 2006-07-18 13:45:56Z mike $".
+# End of "$Id: cups.list.in 5900 2006-08-28 19:26:39Z mike $".
#
diff --git a/packaging/installer.gif b/packaging/installer.gif
new file mode 100644
index 000000000..8fa635eb0
--- /dev/null
+++ b/packaging/installer.gif
Binary files differ
diff --git a/scheduler/Dependencies b/scheduler/Dependencies
index 7ca0a4300..d54993e2a 100644
--- a/scheduler/Dependencies
+++ b/scheduler/Dependencies
@@ -4,169 +4,177 @@ auth.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
auth.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
auth.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
auth.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-auth.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-auth.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-auth.o: banners.h dirsvc.h network.h subscriptions.h
+auth.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+auth.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+auth.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
banners.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
banners.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
banners.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
banners.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-banners.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-banners.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-banners.o: classes.h job.h conf.h banners.h dirsvc.h network.h
+banners.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+banners.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+banners.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
banners.o: subscriptions.h ../cups/dir.h
cert.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
cert.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
cert.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
cert.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-cert.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-cert.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-cert.o: banners.h dirsvc.h network.h subscriptions.h
+cert.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+cert.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+cert.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
classes.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
classes.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
classes.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
classes.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-classes.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-classes.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-classes.o: classes.h job.h conf.h banners.h dirsvc.h network.h
+classes.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+classes.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+classes.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
classes.o: subscriptions.h
client.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
client.o: ../cups/ipp-private.h ../cups/ipp.h cupsd.h ../cups/string.h
client.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
client.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-client.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-client.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-client.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+client.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+client.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+client.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+client.o: subscriptions.h
conf.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
conf.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
conf.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
conf.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-conf.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-conf.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-conf.o: banners.h dirsvc.h network.h subscriptions.h ../cups/dir.h
+conf.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+conf.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+conf.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+conf.o: ../cups/dir.h
dirsvc.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
dirsvc.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
dirsvc.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
dirsvc.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-dirsvc.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-dirsvc.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-dirsvc.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+dirsvc.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+dirsvc.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+dirsvc.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+dirsvc.o: subscriptions.h
env.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
env.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
env.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
env.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-env.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-env.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-env.o: banners.h dirsvc.h network.h subscriptions.h
+env.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+env.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+env.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
main.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
main.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
main.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
main.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-main.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-main.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-main.o: banners.h dirsvc.h network.h subscriptions.h
+main.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+main.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+main.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
ipp.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
ipp.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
ipp.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
ipp.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-ipp.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-ipp.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-ipp.o: banners.h dirsvc.h network.h subscriptions.h
+ipp.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+ipp.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+ipp.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
listen.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
listen.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
listen.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
listen.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-listen.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-listen.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-listen.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+listen.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+listen.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+listen.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+listen.o: subscriptions.h
job.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
job.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
job.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
job.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-job.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-job.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-job.o: banners.h dirsvc.h network.h subscriptions.h ../cups/backend.h
-job.o: ../cups/dir.h
+job.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+job.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+job.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+job.o: ../cups/backend.h ../cups/dir.h
log.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
log.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
log.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
log.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-log.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h statbuf.h
-log.o: cert.h auth.h client.h policy.h printers.h classes.h job.h conf.h
-log.o: banners.h dirsvc.h network.h subscriptions.h
-network.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
-network.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
+log.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h ../cups/debug.h
+log.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
+log.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+network.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
+network.o: ../cups/ipp-private.h ../cups/ipp.h cupsd.h ../cups/string.h
network.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
network.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-network.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-network.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-network.o: classes.h job.h conf.h banners.h dirsvc.h network.h
+network.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+network.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+network.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
network.o: subscriptions.h
policy.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
policy.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
policy.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
policy.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-policy.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-policy.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-policy.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+policy.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+policy.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+policy.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+policy.o: subscriptions.h
printers.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
printers.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h
printers.o: ../cups/string.h ../cups/array.h ../cups/cups.h ../cups/ppd.h
printers.o: ../cups/array.h ../cups/file.h ../cups/language.h mime.h
printers.o: ../cups/ipp.h ../cups/file.h ../cups/http.h ../cups/i18n.h
-printers.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h
-printers.o: policy.h printers.h classes.h job.h conf.h banners.h dirsvc.h
-printers.o: network.h subscriptions.h ../cups/transcode.h
+printers.o: ../cups/transcode.h ../cups/debug.h sysman.h statbuf.h cert.h
+printers.o: auth.h client.h policy.h printers.h classes.h job.h conf.h
+printers.o: banners.h dirsvc.h network.h subscriptions.h ../cups/dir.h
process.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
process.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
process.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
process.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-process.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-process.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-process.o: classes.h job.h conf.h banners.h dirsvc.h network.h
+process.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+process.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+process.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
process.o: subscriptions.h
quotas.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
quotas.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
quotas.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
quotas.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-quotas.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-quotas.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-quotas.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+quotas.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+quotas.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+quotas.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+quotas.o: subscriptions.h
server.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
server.o: ../cups/ipp-private.h ../cups/ipp.h cupsd.h ../cups/string.h
server.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
server.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-server.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-server.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-server.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+server.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+server.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+server.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+server.o: subscriptions.h
statbuf.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
statbuf.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
statbuf.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
statbuf.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-statbuf.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-statbuf.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-statbuf.o: classes.h job.h conf.h banners.h dirsvc.h network.h
+statbuf.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+statbuf.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+statbuf.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
statbuf.o: subscriptions.h
subscriptions.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
subscriptions.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h
subscriptions.o: ../cups/string.h ../cups/array.h ../cups/cups.h
subscriptions.o: ../cups/ppd.h ../cups/array.h ../cups/file.h
subscriptions.o: ../cups/language.h mime.h ../cups/ipp.h ../cups/file.h
-subscriptions.o: ../cups/http.h ../cups/i18n.h ../cups/debug.h sysman.h
-subscriptions.o: statbuf.h cert.h auth.h client.h policy.h printers.h
-subscriptions.o: classes.h job.h conf.h banners.h dirsvc.h network.h
-subscriptions.o: subscriptions.h
+subscriptions.o: ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+subscriptions.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h
+subscriptions.o: policy.h printers.h classes.h job.h conf.h banners.h
+subscriptions.o: dirsvc.h network.h subscriptions.h
sysman.o: cupsd.h ../cups/http-private.h ../config.h ../cups/http.h
sysman.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/string.h
sysman.o: ../cups/array.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
sysman.o: ../cups/file.h ../cups/language.h mime.h ../cups/ipp.h
-sysman.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/debug.h
-sysman.o: sysman.h statbuf.h cert.h auth.h client.h policy.h printers.h
-sysman.o: classes.h job.h conf.h banners.h dirsvc.h network.h subscriptions.h
+sysman.o: ../cups/file.h ../cups/http.h ../cups/i18n.h ../cups/transcode.h
+sysman.o: ../cups/debug.h sysman.h statbuf.h cert.h auth.h client.h policy.h
+sysman.o: printers.h classes.h job.h conf.h banners.h dirsvc.h network.h
+sysman.o: subscriptions.h
filter.o: ../cups/debug.h ../cups/string.h ../config.h mime.h ../cups/array.h
filter.o: ../cups/ipp.h ../cups/file.h
-mime.o: ../cups/dir.h ../cups/string.h ../config.h mime.h ../cups/array.h
-mime.o: ../cups/ipp.h ../cups/file.h
+mime.o: ../cups/debug.h ../cups/dir.h ../cups/string.h ../config.h mime.h
+mime.o: ../cups/array.h ../cups/ipp.h ../cups/file.h
type.o: ../cups/string.h ../config.h mime.h ../cups/array.h ../cups/ipp.h
type.o: ../cups/file.h ../cups/debug.h
cups-deviced.o: util.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
@@ -176,7 +184,7 @@ cups-deviced.o: ../config.h ../cups/array.h ../cups/dir.h
cups-driverd.o: util.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
cups-driverd.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
cups-driverd.o: ../cups/language.h ../cups/file.h ../cups/string.h
-cups-driverd.o: ../config.h ../cups/dir.h
+cups-driverd.o: ../config.h ../cups/dir.h ../cups/transcode.h
cups-lpd.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
cups-lpd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h ../cups/ppd.h
cups-lpd.o: ../cups/array.h ../cups/file.h ../cups/language.h
@@ -188,6 +196,9 @@ cups-polld.o: ../cups/language.h ../cups/string.h
testdirsvc.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
testdirsvc.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
testdirsvc.o: ../cups/string.h ../config.h
+testlpd.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
+testlpd.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+testlpd.o: ../cups/string.h ../config.h
testmime.o: ../cups/string.h ../config.h mime.h ../cups/array.h ../cups/ipp.h
testmime.o: ../cups/file.h ../cups/dir.h
testspeed.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/md5.h
diff --git a/scheduler/Makefile b/scheduler/Makefile
index f269c3849..58d362114 100644
--- a/scheduler/Makefile
+++ b/scheduler/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $"
+# "$Id: Makefile 5868 2006-08-23 19:39:39Z mike $"
#
# Scheduler Makefile for the Common UNIX Printing System (CUPS).
#
@@ -59,6 +59,7 @@ OBJS = \
cups-lpd.o \
cups-polld.o \
testdirsvc.o \
+ testlpd.o \
testmime.o \
testspeed.o \
util.o
@@ -70,6 +71,7 @@ TARGETS = \
cups-polld \
libmime.a \
testdirsvc \
+ testlpd \
testmime \
testspeed
@@ -251,6 +253,16 @@ testdirsvc: testdirsvc.o
#
+# Make the test program, "testlpd".
+#
+
+testlpd: testlpd.o ../cups/libcups.a cups-lpd
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o testlpd testlpd.o ../cups/libcups.a \
+ $(COMMONLIBS) $(LIBZ) $(SSLLIBS)
+
+
+#
# testmime
#
@@ -264,9 +276,10 @@ testmime: testmime.o libmime.a ../cups/libcups.a
# Make the test program, "testspeed".
#
-testspeed: testspeed.o ../cups/$(LIBCUPS)
+testspeed: testspeed.o ../cups/libcups.a
echo Linking $@...
- $(CC) $(LDFLAGS) -o testspeed testspeed.o $(LIBS)
+ $(CC) $(LDFLAGS) -o testspeed testspeed.o ../cups/libcups.a \
+ $(COMMONLIBS) $(LIBZ) $(SSLLIBS)
#
@@ -277,5 +290,5 @@ include Dependencies
#
-# End of "$Id: Makefile 5736 2006-07-13 19:59:36Z mike $".
+# End of "$Id: Makefile 5868 2006-08-23 19:39:39Z mike $".
#
diff --git a/scheduler/auth.c b/scheduler/auth.c
index efae9914c..a1a10406b 100644
--- a/scheduler/auth.c
+++ b/scheduler/auth.c
@@ -1,5 +1,5 @@
/*
- * "$Id: auth.c 5643 2006-06-07 20:58:29Z mike $"
+ * "$Id: auth.c 5840 2006-08-17 14:55:30Z mike $"
*
* Authorization routines for the Common UNIX Printing System (CUPS).
*
@@ -89,9 +89,9 @@ static cupsd_authmask_t *add_allow(cupsd_location_t *loc);
static cupsd_authmask_t *add_deny(cupsd_location_t *loc);
static int compare_locations(cupsd_location_t *a,
cupsd_location_t *b);
-#if !HAVE_LIBPAM
+#if !HAVE_LIBPAM && !defined(HAVE_USERSEC_H)
static char *cups_crypt(const char *pw, const char *salt);
-#endif /* !HAVE_LIBPAM */
+#endif /* !HAVE_LIBPAM && !HAVE_USERSEC_H */
static char *get_md5_password(const char *username,
const char *group, char passwd[33]);
#if HAVE_LIBPAM
@@ -540,7 +540,6 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */
*/
char *authmsg; /* Authentication message */
- char *loginmsg; /* Login message */
int reenter; /* ??? */
@@ -1871,7 +1870,7 @@ compare_locations(cupsd_location_t *a, /* I - First location */
}
-#if !HAVE_LIBPAM
+#if !HAVE_LIBPAM && !defined(HAVE_USERSEC_H)
/*
* 'cups_crypt()' - Encrypt the password using the DES or MD5 algorithms,
* as needed.
@@ -1991,7 +1990,7 @@ cups_crypt(const char *pw, /* I - Password string */
return (crypt(pw, salt));
}
}
-#endif /* !HAVE_LIBPAM */
+#endif /* !HAVE_LIBPAM && !HAVE_USERSEC_H */
/*
@@ -2171,5 +2170,5 @@ to64(char *s, /* O - Output string */
/*
- * End of "$Id: auth.c 5643 2006-06-07 20:58:29Z mike $".
+ * End of "$Id: auth.c 5840 2006-08-17 14:55:30Z mike $".
*/
diff --git a/scheduler/client.c b/scheduler/client.c
index c3c236f78..d5d1851a3 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -1,5 +1,5 @@
/*
- * "$Id: client.c 5739 2006-07-16 15:21:18Z mike $"
+ * "$Id: client.c 5898 2006-08-28 18:54:10Z mike $"
*
* Client routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -26,6 +26,7 @@
* cupsdAcceptClient() - Accept a new client.
* cupsdCloseAllClients() - Close all remote clients immediately.
* cupsdCloseClient() - Close a remote client.
+ * cupsdFlushHeader() - Flush the header fields to the client.
* cupsdReadClient() - Read data from a client.
* cupsdSendCommand() - Send output from a command via HTTP.
* cupsdSendError() - Send an error message via HTTP.
@@ -674,6 +675,19 @@ cupsdCloseClient(cupsd_client_t *con) /* I - Client to close */
/*
+ * 'cupsdFlushHeader()' - Flush the header fields to the client.
+ */
+
+void
+cupsdFlushHeader(cupsd_client_t *con) /* I - Client to flush to */
+{
+ httpFlushWrite(HTTP(con));
+
+ con->http.data_encoding = HTTP_ENCODE_LENGTH;
+}
+
+
+/*
* 'cupsdReadClient()' - Read data from a client.
*/
@@ -1024,6 +1038,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
httpPrintf(HTTP(con), "Upgrade: TLS/1.0,HTTP/1.1\r\n");
httpPrintf(HTTP(con), "Content-Length: 0\r\n");
httpPrintf(HTTP(con), "\r\n");
+ cupsdFlushHeader(con);
encrypt_client(con);
#else
@@ -1038,6 +1053,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
httpPrintf(HTTP(con), "Allow: GET, HEAD, OPTIONS, POST, PUT\r\n");
httpPrintf(HTTP(con), "Content-Length: 0\r\n");
httpPrintf(HTTP(con), "\r\n");
+ cupsdFlushHeader(con);
}
else if (!is_path_absolute(con->uri))
{
@@ -1065,6 +1081,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
httpPrintf(HTTP(con), "Upgrade: TLS/1.0,HTTP/1.1\r\n");
httpPrintf(HTTP(con), "Content-Length: 0\r\n");
httpPrintf(HTTP(con), "\r\n");
+ cupsdFlushHeader(con);
encrypt_client(con);
#else
@@ -1105,6 +1122,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
httpPrintf(HTTP(con), "Content-Length: 0\r\n");
httpPrintf(HTTP(con), "\r\n");
+ cupsdFlushHeader(con);
}
}
@@ -1538,6 +1556,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (httpPrintf(HTTP(con), "\r\n") < 0)
return (cupsdCloseClient(con));
+ cupsdFlushHeader(con);
+
cupsdLogRequest(con, HTTP_OK);
}
else if ((!strncmp(con->uri, "/admin/conf/", 12) &&
@@ -1601,6 +1621,8 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
if (httpPrintf(HTTP(con), "\r\n") < 0)
return (cupsdCloseClient(con));
+ cupsdFlushHeader(con);
+
con->http.state = HTTP_WAITING;
break;
@@ -2074,6 +2096,8 @@ cupsdSendError(cupsd_client_t *con, /* I - Connection */
else if (httpPrintf(HTTP(con), "\r\n") < 0)
return (0);
+ cupsdFlushHeader(con);
+
con->http.state = HTTP_WAITING;
return (1);
@@ -2093,6 +2117,10 @@ cupsdSendHeader(cupsd_client_t *con, /* I - Client to send to */
* Send the HTTP status header...
*/
+ httpFlushWrite(HTTP(con));
+
+ con->http.data_encoding = HTTP_ENCODE_FIELDS;
+
if (httpPrintf(HTTP(con), "HTTP/%d.%d %d %s\r\n", con->http.version / 100,
con->http.version % 100, code, httpStatus(code)) < 0)
return (0);
@@ -2106,7 +2134,10 @@ cupsdSendHeader(cupsd_client_t *con, /* I - Client to send to */
if (httpPrintf(HTTP(con), "\r\n") < 0)
return (0);
else
+ {
+ cupsdFlushHeader(con);
return (1);
+ }
}
if (httpPrintf(HTTP(con), "Date: %s\r\n", httpGetDateString(time(NULL))) < 0)
@@ -2191,7 +2222,7 @@ cupsdUpdateCGI(void)
if (!strchr(CGIStatusBuffer->buffer, '\n'))
break;
- if (ptr == NULL && errno)
+ if (ptr == NULL && !CGIStatusBuffer->bufused)
{
/*
* Fatal error on pipe - should never happen!
@@ -2274,15 +2305,13 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
return (0);
}
else if (!strncasecmp(buf, "Status:", 7))
- cupsdSendError(con, atoi(buf + 7));
+ cupsdSendError(con, (http_status_t)atoi(buf + 7));
else
{
cupsdSendHeader(con, HTTP_OK, NULL);
if (con->http.version == HTTP_1_1)
{
- con->http.data_encoding = HTTP_ENCODE_CHUNKED;
-
if (httpPrintf(HTTP(con), "Transfer-Encoding: chunked\r\n") < 0)
return (0);
}
@@ -2310,7 +2339,14 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
*/
if (con->field_col == 0)
+ {
con->got_fields = 1;
+
+ cupsdFlushHeader(con);
+
+ if (con->http.version == HTTP_1_1)
+ con->http.data_encoding = HTTP_ENCODE_CHUNKED;
+ }
else
con->field_col = 0;
}
@@ -3350,19 +3386,31 @@ static int /* O - 1 on success, 0 on failure */
make_certificate(void)
{
#if defined(HAVE_LIBSSL) && defined(HAVE_WAITPID)
- int pid, /* Process ID of command */
- status; /* Status of command */
- char command[1024], /* Command */
- *argv[11], /* Command-line arguments */
- *envp[MAX_ENV]; /* Environment variables */
+ int pid, /* Process ID of command */
+ status; /* Status of command */
+ char command[1024], /* Command */
+ *argv[11], /* Command-line arguments */
+ *envp[MAX_ENV + 1], /* Environment variables */
+ home[1024], /* HOME environment variable */
+ infofile[1024], /* Type-in information for cert */
+ seedfile[1024]; /* Random number seed file */
+ int envc, /* Number of environment variables */
+ bytes; /* Bytes written */
+ cups_file_t *fp; /* Seed/info file */
+ int infofd; /* Info file descriptor */
/*
- * Run the "openssl" command to generate a self-signed certificate
- * that is good for 10 years:
+ * Run the "openssl" command to seed the random number generator and
+ * generate a self-signed certificate that is good for 10 years:
+ *
+ * openssl rand -rand seedfile 1
*
* openssl req -new -x509 -keyout ServerKey \
* -out ServerCertificate -days 3650 -nodes
+ *
+ * The seeding step is crucial in ensuring that the openssl command
+ * does not block on systems without sufficient entropy...
*/
if (!cupsFileFind("openssl", getenv("PATH"), 1, command, sizeof(command)))
@@ -3372,6 +3420,108 @@ make_certificate(void)
return (0);
}
+ if (access("/dev/urandom", 0))
+ {
+ /*
+ * If the system doesn't provide /dev/urandom, then any random source
+ * will probably be blocking-style, so generate some random data to
+ * use as a seed for the certificate. Note that we have already
+ * seeded the random number generator in cupsdInitCerts()...
+ */
+
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "Seeding the random number generator...");
+
+ snprintf(home, sizeof(home), "HOME=%s", TempDir);
+
+ /*
+ * Write the seed file...
+ */
+
+ if ((fp = cupsTempFile2(seedfile, sizeof(seedfile))) == NULL)
+ {
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create seed file %s - %s",
+ seedfile, strerror(errno));
+ return (0);
+ }
+
+ for (bytes = 0; bytes < 262144; bytes ++)
+ cupsFilePutChar(fp, random());
+
+ cupsFileClose(fp);
+
+ /*
+ * Run the openssl command to seed its random number generator...
+ */
+
+ argv[0] = "openssl";
+ argv[1] = "rand";
+ argv[2] = "-rand";
+ argv[3] = seedfile;
+ argv[4] = "1";
+ argv[5] = NULL;
+
+ envc = cupsdLoadEnv(envp, MAX_ENV);
+ envp[envc++] = home;
+ envp[envc] = NULL;
+
+ if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
+ {
+ unlink(seedfile);
+ return (0);
+ }
+
+ while (waitpid(pid, &status, 0) < 0)
+ if (errno != EINTR)
+ {
+ status = 1;
+ break;
+ }
+
+ cupsdFinishProcess(pid, command, sizeof(command));
+
+ /*
+ * Remove the seed file, as it is no longer needed...
+ */
+
+ unlink(seedfile);
+
+ if (status)
+ {
+ if (WIFEXITED(status))
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to seed random number generator - "
+ "the openssl command stopped with status %d!",
+ WEXITSTATUS(status));
+ else
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to seed random number generator - "
+ "the openssl command crashed on signal %d!",
+ WTERMSIG(status));
+
+ return (0);
+ }
+ }
+
+ /*
+ * Create a file with the certificate information fields...
+ *
+ * Note: This assumes that the default questions are asked by the openssl
+ * command...
+ */
+
+ if ((fp = cupsTempFile2(infofile, sizeof(infofile))) == NULL)
+ {
+ cupsdLogMessage(CUPSD_LOG_ERROR,
+ "Unable to create certificate information file %s - %s",
+ infofile, strerror(errno));
+ return (0);
+ }
+
+ cupsFilePrintf(fp, ".\n.\n.\n%s\n.\n%s\n%s\n",
+ ServerName, ServerName, ServerAdmin);
+ cupsFileClose(fp);
+
cupsdLogMessage(CUPSD_LOG_INFO,
"Generating SSL server key and certificate...");
@@ -3390,8 +3540,17 @@ make_certificate(void)
cupsdLoadEnv(envp, MAX_ENV);
- if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
+ infofd = open(infofile, O_RDONLY);
+
+ if (!cupsdStartProcess(command, argv, envp, infofd, -1, -1, -1, 1, &pid))
+ {
+ close(infofd);
+ unlink(infofile);
return (0);
+ }
+
+ close(infofd);
+ unlink(infofile);
while (waitpid(pid, &status, 0) < 0)
if (errno != EINTR)
@@ -3993,6 +4152,8 @@ write_file(cupsd_client_t *con, /* I - Client connection */
if (httpPrintf(HTTP(con), "\r\n") < 0)
return (0);
+ cupsdFlushHeader(con);
+
con->http.data_encoding = HTTP_ENCODE_LENGTH;
con->http.data_remaining = filestats->st_size;
@@ -4011,5 +4172,5 @@ write_file(cupsd_client_t *con, /* I - Client connection */
/*
- * End of "$Id: client.c 5739 2006-07-16 15:21:18Z mike $".
+ * End of "$Id: client.c 5898 2006-08-28 18:54:10Z mike $".
*/
diff --git a/scheduler/client.h b/scheduler/client.h
index 7a7b70cd7..ef376cda8 100644
--- a/scheduler/client.h
+++ b/scheduler/client.h
@@ -1,5 +1,5 @@
/*
- * "$Id: client.h 5305 2006-03-18 03:05:12Z mike $"
+ * "$Id: client.h 5889 2006-08-24 21:44:35Z mike $"
*
* Client definitions for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -104,6 +104,7 @@ extern void cupsdAcceptClient(cupsd_listener_t *lis);
extern void cupsdCloseAllClients(void);
extern int cupsdCloseClient(cupsd_client_t *con);
extern void cupsdDeleteAllListeners(void);
+extern void cupsdFlushHeader(cupsd_client_t *con);
extern void cupsdPauseListening(void);
extern int cupsdProcessIPPRequest(cupsd_client_t *con);
extern int cupsdReadClient(cupsd_client_t *con);
@@ -121,5 +122,5 @@ extern int cupsdWriteClient(cupsd_client_t *con);
/*
- * End of "$Id: client.h 5305 2006-03-18 03:05:12Z mike $".
+ * End of "$Id: client.h 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/scheduler/conf.c b/scheduler/conf.c
index 42acaf083..4d4f1cf85 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -1,5 +1,5 @@
/*
- * "$Id: conf.c 5736 2006-07-13 19:59:36Z mike $"
+ * "$Id: conf.c 5905 2006-08-29 20:48:59Z mike $"
*
* Configuration routines for the Common UNIX Printing System (CUPS).
*
@@ -636,21 +636,21 @@ cupsdReadConfiguration(void)
* writable by the user and group in the cupsd.conf file...
*/
- check_permissions(CacheDir, NULL, 0775, RunUser, Group, 1, 1);
-/* check_permissions(CacheDir, "ppd", 0755, RunUser, Group, 1, 1);*/
-
- check_permissions(StateDir, NULL, 0755, RunUser, Group, 1, 1);
- check_permissions(StateDir, "certs", RunUser ? 0711 : 0511, User,
- SystemGroupIDs[0], 1, 1);
-
- check_permissions(ServerRoot, NULL, 0755, RunUser, Group, 1, 0);
- check_permissions(ServerRoot, "ppd", 0755, RunUser, Group, 1, 1);
- check_permissions(ServerRoot, "ssl", 0700, RunUser, Group, 1, 0);
- check_permissions(ServerRoot, "cupsd.conf", ConfigFilePerm, RunUser, Group,
- 0, 0);
- check_permissions(ServerRoot, "classes.conf", 0600, RunUser, Group, 0, 0);
- check_permissions(ServerRoot, "printers.conf", 0600, RunUser, Group, 0, 0);
- check_permissions(ServerRoot, "passwd.md5", 0600, User, Group, 0, 0);
+ if (check_permissions(CacheDir, NULL, 0775, RunUser, Group, 1, 1) < 0 ||
+ check_permissions(StateDir, NULL, 0755, RunUser, Group, 1, 1) < 0 ||
+ check_permissions(StateDir, "certs", RunUser ? 0711 : 0511, User,
+ SystemGroupIDs[0], 1, 1) < 0 ||
+ check_permissions(ServerRoot, NULL, 0755, RunUser, Group, 1, 0) < 0 ||
+ check_permissions(ServerRoot, "ppd", 0755, RunUser, Group, 1, 1) < 0 ||
+ check_permissions(ServerRoot, "ssl", 0700, RunUser, Group, 1, 0) < 0 ||
+ check_permissions(ServerRoot, "cupsd.conf", ConfigFilePerm, RunUser,
+ Group, 0, 0) < 0 ||
+ check_permissions(ServerRoot, "classes.conf", 0600, RunUser, Group,
+ 0, 0) < 0 ||
+ check_permissions(ServerRoot, "printers.conf", 0600, RunUser, Group,
+ 0, 0) < 0 ||
+ check_permissions(ServerRoot, "passwd.md5", 0600, User, Group, 0, 0) < 0)
+ return (0);
/*
* Update TempDir to the default if it hasn't been set already...
@@ -677,14 +677,14 @@ cupsdReadConfiguration(void)
"TMPDIR (%s) has the wrong permissions!", tmpdir);
else
cupsdSetString(&TempDir, tmpdir);
-
- if (!TempDir)
- cupsdLogMessage(CUPSD_LOG_INFO, "Using default TempDir of %s/tmp...",
- RequestRoot);
}
if (!TempDir)
+ {
+ cupsdLogMessage(CUPSD_LOG_INFO, "Using default TempDir of %s/tmp...",
+ RequestRoot);
cupsdSetStringf(&TempDir, "%s/tmp", RequestRoot);
+ }
}
/*
@@ -692,7 +692,8 @@ cupsdReadConfiguration(void)
* permissions...
*/
- check_permissions(RequestRoot, NULL, 0710, RunUser, Group, 1, 1);
+ if (check_permissions(RequestRoot, NULL, 0710, RunUser, Group, 1, 1) < 0)
+ return (0);
if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot)) ||
access(TempDir, 0))
@@ -702,7 +703,8 @@ cupsdReadConfiguration(void)
* is under the spool directory or does not exist...
*/
- check_permissions(TempDir, NULL, 01770, RunUser, Group, 1, 1);
+ if (check_permissions(TempDir, NULL, 01770, RunUser, Group, 1, 1) < 0)
+ return (0);
}
if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot)))
@@ -772,7 +774,7 @@ cupsdReadConfiguration(void)
if (MaxActiveJobs > (MaxFDs / 3))
MaxActiveJobs = MaxFDs / 3;
- if (Classification && strcasecmp(Classification, "none") == 0)
+ if (Classification && !strcasecmp(Classification, "none"))
cupsdClearString(&Classification);
if (Classification)
@@ -1112,7 +1114,7 @@ cupsdReadConfiguration(void)
* 'check_permissions()' - Fix the mode and ownership of a file or directory.
*/
-static int /* O - 0 on success, -1 on error */
+static int /* O - 0 on success, -1 on error, 1 on warning */
check_permissions(const char *filename, /* I - File/directory name */
const char *suffix, /* I - Additional file/directory name */
int mode, /* I - Permissions */
@@ -1158,7 +1160,7 @@ check_permissions(const char *filename, /* I - File/directory name */
dir_created = 1;
}
else
- return (-1);
+ return (create_dir ? -1 : 1);
}
/*
@@ -1190,7 +1192,7 @@ check_permissions(const char *filename, /* I - File/directory name */
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to change ownership of \"%s\" - %s", filename,
strerror(errno));
- return (-1);
+ return (1);
}
}
@@ -1203,7 +1205,7 @@ check_permissions(const char *filename, /* I - File/directory name */
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to change permissions of \"%s\" - %s", filename,
strerror(errno));
- return (-1);
+ return (1);
}
}
@@ -1947,6 +1949,13 @@ parse_protocols(const char *s) /* I - Space-delimited protocols */
/*
+ * Empty protocol line yields NULL pointer...
+ */
+
+ if (!s)
+ return (0);
+
+ /*
* Loop through the value string,...
*/
@@ -3280,5 +3289,5 @@ read_policy(cups_file_t *fp, /* I - Configuration file */
/*
- * End of "$Id: conf.c 5736 2006-07-13 19:59:36Z mike $".
+ * End of "$Id: conf.c 5905 2006-08-29 20:48:59Z mike $".
*/
diff --git a/scheduler/cups-lpd.c b/scheduler/cups-lpd.c
index 60b68090f..caa6bef9a 100644
--- a/scheduler/cups-lpd.c
+++ b/scheduler/cups-lpd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cups-lpd.c 5455 2006-04-24 13:49:59Z mike $"
+ * "$Id: cups-lpd.c 5878 2006-08-24 15:55:42Z mike $"
*
* Line Printer Daemon interface for the Common UNIX Printing System (CUPS).
*
@@ -471,7 +471,7 @@ get_printer(http_t *http, /* I - HTTP connection */
request = ippNewRequest(CUPS_GET_PRINTERS);
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes",
(int)(sizeof(requested) / sizeof(requested[0])),
NULL, requested);
@@ -597,7 +597,7 @@ get_printer(http_t *http, /* I - HTTP connection */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes",
(int)(sizeof(requested) / sizeof(requested[0])),
NULL, requested);
@@ -648,7 +648,7 @@ get_printer(http_t *http, /* I - HTTP connection */
if (state)
{
if ((attr = ippFindAttribute(response, "printer-state",
- IPP_TAG_INTEGER)) == NULL)
+ IPP_TAG_ENUM)) == NULL)
syslog(LOG_ERR, "No printer-state attribute found in "
"response from server!");
else
@@ -1387,7 +1387,7 @@ remove_jobs(const char *dest, /* I - Destination */
return (1);
}
else
- syslog(LOG_INFO, "Job ID %d cancelled", id);
+ syslog(LOG_INFO, "Job ID %d canceled", id);
}
httpClose(http);
@@ -1716,5 +1716,5 @@ smart_gets(char *s, /* I - Pointer to line buffer */
/*
- * End of "$Id: cups-lpd.c 5455 2006-04-24 13:49:59Z mike $".
+ * End of "$Id: cups-lpd.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/scheduler/cups-polld.c b/scheduler/cups-polld.c
index 259361d5b..be6bbb5e6 100644
--- a/scheduler/cups-polld.c
+++ b/scheduler/cups-polld.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cups-polld.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: cups-polld.c 5871 2006-08-23 20:55:33Z mike $"
*
* Polling daemon for the Common UNIX Printing System (CUPS).
*
@@ -23,9 +23,11 @@
*
* Contents:
*
- * main() - Open sockets and poll until we are killed...
- * dequote() - Remote quotes from a string.
- * poll_server() - Poll the server for the given set of printers or classes.
+ * main() - Open sockets and poll until we are killed...
+ * dequote() - Remote quotes from a string.
+ * poll_server() - Poll the server for the given set of printers or
+ * classes.
+ * sighup_handler() - Handle 'hangup' signals to restart polling.
*/
/*
@@ -38,6 +40,14 @@
#include <errno.h>
#include <cups/language.h>
#include <cups/string.h>
+#include <signal.h>
+
+
+/*
+ * Local globals...
+ */
+
+static int restart_polling = 1;
/*
@@ -47,6 +57,7 @@
static char *dequote(char *d, const char *s, int dlen);
static int poll_server(http_t *http, int sock, int port, int interval,
const char *prefix);
+static void sighup_handler(int sig);
/*
@@ -65,9 +76,29 @@ main(int argc, /* I - Number of command-line args */
int seconds, /* Seconds left from poll */
remain; /* Total remaining time to sleep */
char prefix[1024]; /* Prefix for log messages */
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+ struct sigaction action; /* Actions for POSIX signals */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
+ * Catch hangup signals for when the network changes...
+ */
+
+#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+ sigset(SIGHUP, sighup_handler);
+#elif defined(HAVE_SIGACTION)
+ memset(&action, 0, sizeof(action));
+
+ sigemptyset(&action.sa_mask);
+ sigaddset(&action.sa_mask, SIGHUP);
+ action.sa_handler = sighup_handler;
+ sigaction(SIGHUP, &action, NULL);
+#else
+ signal(SIGHUP, sighup_handler);
+#endif /* HAVE_SIGSET */
+
+ /*
* Don't buffer log messages...
*/
@@ -119,38 +150,43 @@ main(int argc, /* I - Number of command-line args */
}
/*
- * Open a connection to the server...
+ * Loop forever, asking for available printers and classes...
*/
- while ((http = httpConnectEncrypt(argv[1], atoi(argv[2]),
- cupsEncryption())) == NULL)
+ for (http = NULL;;)
{
- fprintf(stderr, "ERROR: %s Unable to connect to %s on port %s: %s\n",
- prefix, argv[1], argv[2],
- h_errno ? hstrerror(h_errno) : strerror(errno));
- sleep(interval);
- }
+ /*
+ * Open a connection to the server...
+ */
- /*
- * Loop forever, asking for available printers and classes...
- */
+ if (restart_polling || !http)
+ {
+ restart_polling = 0;
+ httpClose(http);
+
+ if ((http = httpConnectEncrypt(argv[1], atoi(argv[2]),
+ cupsEncryption())) == NULL)
+ {
+ fprintf(stderr, "ERROR: %s Unable to connect to %s on port %s: %s\n",
+ prefix, argv[1], argv[2],
+ h_errno ? hstrerror(h_errno) : strerror(errno));
+ }
+ }
- for (;;)
- {
/*
* Get the printers and classes...
*/
remain = interval;
- if ((seconds = poll_server(http, sock, port, interval, prefix)) > 0)
+ if (http && (seconds = poll_server(http, sock, port, interval, prefix)) > 0)
remain -= seconds;
/*
* Sleep for any remaining time...
*/
- if (remain > 0)
+ if (remain > 0 && !restart_polling)
sleep(remain);
}
}
@@ -260,6 +296,7 @@ poll_server(http_t *http, /* I - HTTP connection */
* Do the request and get back a response...
*/
+ seconds = time(NULL);
response = cupsDoRequest(http, request, "/");
if (cupsLastError() > IPP_OK_CONFLICT)
@@ -285,7 +322,6 @@ poll_server(http_t *http, /* I - HTTP connection */
fprintf(stderr, "DEBUG: %s Found %d printers.\n", prefix, max_count);
count = 0;
- seconds = time(NULL);
max_count = max_count / interval + 1;
/*
@@ -409,7 +445,7 @@ poll_server(http_t *http, /* I - HTTP connection */
sleep(1);
}
- if (!attr)
+ if (!attr || restart_polling)
break;
}
@@ -425,5 +461,22 @@ poll_server(http_t *http, /* I - HTTP connection */
/*
- * End of "$Id: cups-polld.c 5753 2006-07-18 19:53:24Z mike $".
+ * 'sighup_handler()' - Handle 'hangup' signals to restart polling.
+ */
+
+static void
+sighup_handler(int sig) /* I - Signal number */
+{
+ (void)sig;
+
+ restart_polling = 1;
+
+#if !defined(HAVE_SIGSET) && !defined(HAVE_SIGACTION)
+ signal(SIGHUP, sighup_handler);
+#endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
+}
+
+
+/*
+ * End of "$Id: cups-polld.c 5871 2006-08-23 20:55:33Z mike $".
*/
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
index c2e19a970..cb751549b 100644
--- a/scheduler/dirsvc.c
+++ b/scheduler/dirsvc.c
@@ -1,5 +1,5 @@
/*
- * "$Id: dirsvc.c 5724 2006-07-12 19:42:35Z mike $"
+ * "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
@@ -514,6 +514,23 @@ cupsdLoadRemoteCache(void)
/*
+ * 'cupsdRestartPolling()' - Restart polling servers as needed.
+ */
+
+void
+cupsdRestartPolling(void)
+{
+ int i; /* Looping var */
+ cupsd_dirsvc_poll_t *pollp; /* Current polling server */
+
+
+ for (i = 0, pollp = Polled; i < NumPolled; i ++, pollp ++)
+ if (pollp->pid)
+ kill(pollp->pid, SIGHUP);
+}
+
+
+/*
* 'cupsdSaveRemoteCache()' - Save the remote printer cache.
*/
@@ -1468,7 +1485,7 @@ cupsdUpdateCUPSBrowse(void)
if (cupsdCheckAuth(address, srcname, len, 1, &(Relays[i].from)))
if (sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(Relays[i].to),
- sizeof(http_addr_t)) <= 0)
+ httpAddrLength(&(Relays[i].to))) <= 0)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"cupsdUpdateCUPSBrowse: sendto failed for relay %d - %s.",
@@ -1609,7 +1626,7 @@ cupsdUpdatePolling(void)
if (!strchr(PollStatusBuffer->buffer, '\n'))
break;
- if (ptr == NULL)
+ if (ptr == NULL && !PollStatusBuffer->bufused)
{
/*
* All polling processes have died; stop polling...
@@ -1923,6 +1940,9 @@ process_browse_data(
else
return;
+ if (hptr && !*hptr)
+ *hptr = '.'; /* Resource FQDN */
+
if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames)
{
if ((p = cupsdFindClass(resource + 9)) != NULL)
@@ -2026,6 +2046,9 @@ process_browse_data(
else
return;
+ if (hptr && !*hptr)
+ *hptr = '.'; /* Resource FQDN */
+
if ((p = cupsdFindPrinter(name)) == NULL && BrowseShortNames)
{
if ((p = cupsdFindPrinter(resource + 10)) != NULL)
@@ -2566,7 +2589,7 @@ send_cups_browse(cupsd_printer_t *p) /* I - Printer to send */
sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(iface->broadcast),
- sizeof(struct sockaddr_in));
+ httpAddrLength(&(iface->broadcast)));
}
}
else if ((iface = cupsdNetIFFind(b->iface)) != NULL)
@@ -2607,7 +2630,7 @@ send_cups_browse(cupsd_printer_t *p) /* I - Printer to send */
sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(iface->broadcast),
- sizeof(struct sockaddr_in));
+ httpAddrLength(&(iface->broadcast)));
}
}
}
@@ -2628,7 +2651,7 @@ send_cups_browse(cupsd_printer_t *p) /* I - Printer to send */
if (sendto(BrowseSocket, packet, bytes, 0,
(struct sockaddr *)&(b->to),
- sizeof(struct sockaddr_in)) <= 0)
+ httpAddrLength(&(b->to))) <= 0)
{
/*
* Unable to send browse packet, so remove this address from the
@@ -3158,5 +3181,5 @@ slp_url_callback(
/*
- * End of "$Id: dirsvc.c 5724 2006-07-12 19:42:35Z mike $".
+ * End of "$Id: dirsvc.c 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/scheduler/dirsvc.h b/scheduler/dirsvc.h
index 171933f93..2e3a05988 100644
--- a/scheduler/dirsvc.h
+++ b/scheduler/dirsvc.h
@@ -1,5 +1,5 @@
/*
- * "$Id: dirsvc.h 5305 2006-03-18 03:05:12Z mike $"
+ * "$Id: dirsvc.h 5833 2006-08-16 20:05:58Z mike $"
*
* Directory services definitions for the Common UNIX Printing System
* (CUPS) scheduler.
@@ -164,6 +164,7 @@ VAR char *BrowseLDAPBindDN VALUE(NULL),
*/
extern void cupsdLoadRemoteCache(void);
+extern void cupsdRestartPolling(void);
extern void cupsdSaveRemoteCache(void);
extern void cupsdSendBrowseDelete(cupsd_printer_t *p);
extern void cupsdSendBrowseList(void);
@@ -180,5 +181,5 @@ extern void cupsdUpdateSLPBrowse(void);
/*
- * End of "$Id: dirsvc.h 5305 2006-03-18 03:05:12Z mike $".
+ * End of "$Id: dirsvc.h 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 28115133d..d32a71505 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipp.c 5736 2006-07-13 19:59:36Z mike $"
+ * "$Id: ipp.c 5907 2006-08-30 02:18:28Z mike $"
*
* IPP routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -630,7 +630,7 @@ cupsdProcessIPPRequest(
#ifdef CUPSD_USE_CHUNKING
/*
* Because older versions of CUPS (1.1.17 and older) and some IPP
- * clients do not implement chunking properly, we should not use
+ * clients do not implement chunking properly, we cannot use
* chunking by default. This may become the default in future
* CUPS releases, or we might add a configuration directive for
* it.
@@ -638,23 +638,25 @@ cupsdProcessIPPRequest(
if (con->http.version == HTTP_1_1)
{
- con->http.data_encoding = HTTP_ENCODE_CHUNKED;
-
httpPrintf(HTTP(con), "Transfer-Encoding: chunked\r\n\r\n");
+ cupsdFlushHeader(con);
+
+ con->http.data_encoding = HTTP_ENCODE_CHUNKED;
}
else
#endif /* CUPSD_USE_CHUNKING */
{
- con->http.data_encoding = HTTP_ENCODE_LENGTH;
- con->http.data_remaining = ippLength(con->response);
+ size_t length; /* Length of response */
- if (con->http.data_remaining < INT_MAX)
- con->http._data_remaining = con->http.data_remaining;
- else
- con->http._data_remaining = INT_MAX;
+
+ length = ippLength(con->response);
httpPrintf(HTTP(con), "Content-Length: " CUPS_LLFMT "\r\n\r\n",
- CUPS_LLCAST con->http.data_remaining);
+ CUPS_LLCAST length);
+ cupsdFlushHeader(con);
+
+ con->http.data_encoding = HTTP_ENCODE_LENGTH;
+ con->http.data_remaining = length;
}
cupsdLogMessage(CUPSD_LOG_DEBUG2,
@@ -784,7 +786,6 @@ add_class(cupsd_client_t *con, /* I - Client connection */
cupsd_printer_t *pclass, /* Class */
*member; /* Member printer/class */
cups_ptype_t dtype; /* Destination type */
- const char *dest; /* Printer or class name */
ipp_attribute_t *attr; /* Printer attribute */
int modify; /* Non-zero if we just modified */
char newname[IPP_MAX_NAME]; /* New class name */
@@ -1007,7 +1008,7 @@ add_class(cupsd_client_t *con, /* I - Client connection */
sizeof(method), username, sizeof(username), host,
sizeof(host), &port, resource, sizeof(resource));
- if ((dest = cupsdValidateDest(host, resource, &dtype, &member)) == NULL)
+ if (!cupsdValidateDest(host, resource, &dtype, &member))
{
/*
* Bad URI...
@@ -1467,7 +1468,7 @@ add_job(cupsd_client_t *con, /* I - Client connection */
ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
job->state = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_ENUM,
"job-state", IPP_JOB_STOPPED);
- job->state_value = job->state->values[0].integer;
+ job->state_value = (ipp_jstate_t)job->state->values[0].integer;
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,
@@ -1728,7 +1729,7 @@ add_job_state_reasons(
cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_job_state_reasons(%p[%d], %d)",
con, con->http.fd, job ? job->id : 0);
- switch (job ? job->state_value : IPP_JOB_CANCELLED)
+ switch (job ? job->state_value : IPP_JOB_CANCELED)
{
case IPP_JOB_PENDING :
dest = cupsdFindDest(job->dest);
@@ -1763,7 +1764,7 @@ add_job_state_reasons(
"job-state-reasons", NULL, "job-stopped");
break;
- case IPP_JOB_CANCELLED :
+ case IPP_JOB_CANCELED :
ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD,
"job-state-reasons", NULL, "job-canceled-by-user");
break;
@@ -1961,7 +1962,6 @@ add_job_uuid(cupsd_client_t *con, /* I - Client connection */
cupsd_job_t *job) /* I - Job */
{
char uuid[1024]; /* job-uuid string */
- ipp_attribute_t *attr; /* job-uuid attribute */
_cups_md5_state_t md5state; /* MD5 state */
unsigned char md5sum[16]; /* MD5 digest/sum */
@@ -1970,7 +1970,7 @@ add_job_uuid(cupsd_client_t *con, /* I - Client connection */
* First see if the job already has a job-uuid attribute; if so, return...
*/
- if ((attr = ippFindAttribute(job->attrs, "job-uuid", IPP_TAG_URI)) != NULL)
+ if (ippFindAttribute(job->attrs, "job-uuid", IPP_TAG_URI))
return;
/*
@@ -2872,7 +2872,7 @@ cancel_all_jobs(cupsd_client_t *con, /* I - Client connection */
cupsdCancelJobs(NULL, username, purge);
cupsdLogMessage(CUPSD_LOG_INFO, "All jobs were %s by \"%s\".",
- purge ? "purged" : "cancelled", get_username(con));
+ purge ? "purged" : "canceled", get_username(con));
}
else
{
@@ -2893,7 +2893,7 @@ cancel_all_jobs(cupsd_client_t *con, /* I - Client connection */
cupsdCancelJobs(dest, username, purge);
cupsdLogMessage(CUPSD_LOG_INFO, "All jobs on \"%s\" were %s by \"%s\".",
- dest, purge ? "purged" : "cancelled", get_username(con));
+ dest, purge ? "purged" : "canceled", get_username(con));
}
con->response->request.status.status_code = IPP_OK;
@@ -3043,17 +3043,17 @@ cancel_job(cupsd_client_t *con, /* I - Client connection */
}
/*
- * See if the job is already completed, cancelled, or aborted; if so,
+ * See if the job is already completed, canceled, or aborted; if so,
* we can't cancel...
*/
- if (job->state_value >= IPP_JOB_CANCELLED)
+ if (job->state_value >= IPP_JOB_CANCELED)
{
switch (job->state_value)
{
- case IPP_JOB_CANCELLED :
+ case IPP_JOB_CANCELED :
send_ipp_status(con, IPP_NOT_POSSIBLE,
- _("Job #%d is already cancelled - can\'t cancel."),
+ _("Job #%d is already canceled - can\'t cancel."),
jobid);
break;
@@ -3078,12 +3078,12 @@ cancel_job(cupsd_client_t *con, /* I - Client connection */
*/
cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
- "Job cancelled by \"%s\".", username);
+ "Job canceled by \"%s\".", username);
cupsdCancelJob(job, 0);
cupsdCheckJobs();
- cupsdLogMessage(CUPSD_LOG_INFO, "Job %d was cancelled by \"%s\".", jobid,
+ cupsdLogMessage(CUPSD_LOG_INFO, "Job %d was canceled by \"%s\".", jobid,
username);
con->response->request.status.status_code = IPP_OK;
@@ -4382,7 +4382,7 @@ copy_subscription_attrs(
*/
ippAddString(con->response, IPP_TAG_SUBSCRIPTION,
- IPP_TAG_KEYWORD | IPP_TAG_COPY,
+ (ipp_tag_t)(IPP_TAG_KEYWORD | IPP_TAG_COPY),
"notify-events", NULL, name);
}
else
@@ -4396,7 +4396,7 @@ copy_subscription_attrs(
count ++;
attr = ippAddStrings(con->response, IPP_TAG_SUBSCRIPTION,
- IPP_TAG_KEYWORD | IPP_TAG_COPY,
+ (ipp_tag_t)(IPP_TAG_KEYWORD | IPP_TAG_COPY),
"notify-events", count, NULL, NULL);
for (mask = 1, count = 0; mask < CUPSD_EVENT_ALL; mask <<= 1)
@@ -4676,7 +4676,6 @@ create_subscription(
http_status_t status; /* Policy status */
int i; /* Looping var */
ipp_attribute_t *attr; /* Current attribute */
- const char *dest; /* Destination */
cups_ptype_t dtype; /* Destination type (printer or class) */
char scheme[HTTP_MAX_URI],
/* Scheme portion of URI */
@@ -4725,23 +4724,20 @@ create_subscription(
if (!strcmp(resource, "/"))
{
- dest = NULL;
dtype = (cups_ptype_t)0;
printer = NULL;
}
else if (!strncmp(resource, "/printers", 9) && strlen(resource) <= 10)
{
- dest = NULL;
dtype = (cups_ptype_t)0;
printer = NULL;
}
else if (!strncmp(resource, "/classes", 8) && strlen(resource) <= 9)
{
- dest = NULL;
dtype = CUPS_PRINTER_CLASS;
printer = NULL;
}
- else if ((dest = cupsdValidateDest(host, resource, &dtype, &printer)) == NULL)
+ else if (!cupsdValidateDest(host, resource, &dtype, &printer))
{
/*
* Bad URI...
@@ -5734,7 +5730,6 @@ get_printer_attrs(cupsd_client_t *con, /* I - Client connection */
ipp_attribute_t *uri) /* I - Printer URI */
{
http_status_t status; /* Policy status */
- const char *dest; /* Destination */
cups_ptype_t dtype; /* Destination type (printer or class) */
char method[HTTP_MAX_URI],
/* Method portion of URI */
@@ -5760,7 +5755,7 @@ get_printer_attrs(cupsd_client_t *con, /* I - Client connection */
sizeof(method), username, sizeof(username), host,
sizeof(host), &port, resource, sizeof(resource));
- if ((dest = cupsdValidateDest(host, resource, &dtype, &printer)) == NULL)
+ if (!cupsdValidateDest(host, resource, &dtype, &printer))
{
/*
* Bad URI...
@@ -6269,6 +6264,9 @@ hold_job(cupsd_client_t *con, /* I - Client connection */
cupsdHoldJob(job);
+ cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job,
+ "Job held by user.");
+
if ((newattr = ippFindAttribute(con->request, "job-hold-until",
IPP_TAG_KEYWORD)) == NULL)
newattr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
@@ -6302,6 +6300,9 @@ hold_job(cupsd_client_t *con, /* I - Client connection */
*/
cupsdSetJobHoldUntil(job, attr->values[0].string.text);
+
+ cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, job->printer, job,
+ "Job job-hold-until value changed by user.");
}
cupsdLogMessage(CUPSD_LOG_INFO, "Job %d was held by \"%s\".", jobid,
@@ -6323,8 +6324,7 @@ move_job(cupsd_client_t *con, /* I - Client connection */
ipp_attribute_t *attr; /* Current attribute */
int jobid; /* Job ID */
cupsd_job_t *job; /* Current job */
- const char *src, /* Source printer/class */
- *dest; /* Destination */
+ const char *src; /* Source printer/class */
cups_ptype_t stype, /* Source type (printer or class) */
dtype; /* Destination type (printer or class) */
char method[HTTP_MAX_URI], /* Method portion of URI */
@@ -6359,7 +6359,7 @@ move_job(cupsd_client_t *con, /* I - Client connection */
sizeof(method), username, sizeof(username), host,
sizeof(host), &port, resource, sizeof(resource));
- if ((dest = cupsdValidateDest(host, resource, &dtype, &dprinter)) == NULL)
+ if (!cupsdValidateDest(host, resource, &dtype, &dprinter))
{
/*
* Bad URI...
@@ -7317,6 +7317,9 @@ release_job(cupsd_client_t *con, /* I - Client connection */
attr->value_tag = IPP_TAG_KEYWORD;
attr->values[0].string.text = _cupsStrAlloc("no-hold");
+
+ cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, job->printer, job,
+ "Job job-hold-until value changed by user.");
}
/*
@@ -7325,6 +7328,9 @@ release_job(cupsd_client_t *con, /* I - Client connection */
cupsdReleaseJob(job);
+ cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job,
+ "Job released by user.");
+
cupsdLogMessage(CUPSD_LOG_INFO, "Job %d was released by \"%s\".", jobid,
username);
@@ -8004,7 +8010,7 @@ send_document(cupsd_client_t *con, /* I - Client connection */
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", jobid);
ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
- job ? job->state_value : IPP_JOB_CANCELLED);
+ job ? job->state_value : IPP_JOB_CANCELED);
add_job_state_reasons(con, job);
con->response->request.status.status_code = IPP_OK;
@@ -8053,14 +8059,12 @@ send_ipp_status(cupsd_client_t *con, /* I - Client connection */
_cupsLangString(con->language, message), ap);
va_end(ap);
- cupsdLogMessage(status >= IPP_BAD_REQUEST ? CUPSD_LOG_ERROR : CUPSD_LOG_INFO,
- "%s %s: %s",
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s: %s",
ippOpString(con->request->request.op.operation_id),
ippErrorString(status), formatted);
}
else
- cupsdLogMessage(status >= IPP_BAD_REQUEST ? CUPSD_LOG_ERROR : CUPSD_LOG_INFO,
- "%s %s",
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s",
ippOpString(con->request->request.op.operation_id),
ippErrorString(status));
@@ -8181,6 +8185,7 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
resource[HTTP_MAX_URI];
/* Resource portion of URI */
int port; /* Port portion of URI */
+ int event; /* Events? */
cupsdLogMessage(CUPSD_LOG_DEBUG2, "set_job_attrs(%p[%d], %s)", con,
@@ -8282,6 +8287,8 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
cupsdLoadJob(job);
+ event = 0;
+
for (attr = con->request->attrs; attr; attr = attr->next)
{
if (attr->group_tag != IPP_TAG_JOB || !attr->name)
@@ -8345,7 +8352,10 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
return;
}
else if (con->response->request.status.status_code == IPP_OK)
+ {
cupsdSetJobPriority(job, attr->values[0].integer);
+ event |= CUPSD_EVENT_JOB_CONFIG_CHANGED;
+ }
}
else if (!strcmp(attr->name, "job-state"))
{
@@ -8375,7 +8385,9 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
else if (con->response->request.status.status_code == IPP_OK)
{
job->state->values[0].integer = attr->values[0].integer;
- job->state_value = attr->values[0].integer;
+ job->state_value = (ipp_jstate_t)attr->values[0].integer;
+
+ event |= CUPSD_EVENT_JOB_STATE;
}
break;
@@ -8389,7 +8401,7 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
}
break;
- case IPP_JOB_CANCELLED :
+ case IPP_JOB_CANCELED :
case IPP_JOB_ABORTED :
case IPP_JOB_COMPLETED :
if (job->state_value > IPP_JOB_PROCESSING)
@@ -8405,7 +8417,7 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
if (JobHistory)
{
job->state->values[0].integer = attr->values[0].integer;
- job->state_value = attr->values[0].integer;
+ job->state_value = (ipp_jstate_t)attr->values[0].integer;
cupsdSaveJob(job);
}
}
@@ -8450,6 +8462,8 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
cupsdReleaseJob(job);
else
cupsdHoldJob(job);
+
+ event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
}
}
else if (attr->value_tag == IPP_TAG_DELETEATTR)
@@ -8470,6 +8484,8 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
job->attrs->last = job->attrs->prev;
_ippFreeAttr(attr2);
+
+ event |= CUPSD_EVENT_JOB_CONFIG_CHANGED;
}
}
else
@@ -8479,6 +8495,8 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
*/
copy_attribute(job->attrs, attr, 0);
+
+ event |= CUPSD_EVENT_JOB_CONFIG_CHANGED;
}
}
@@ -8489,6 +8507,19 @@ set_job_attrs(cupsd_client_t *con, /* I - Client connection */
cupsdSaveJob(job);
/*
+ * Send events as needed...
+ */
+
+ if (event & CUPSD_EVENT_JOB_STATE)
+ cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job,
+ job->state_value == IPP_JOB_HELD ?
+ "Job held by user." : "Job restarted by user.");
+
+ if (event & CUPSD_EVENT_JOB_CONFIG_CHANGED)
+ cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, job->printer, job,
+ "Job options changed by user.");
+
+ /*
* Start jobs if possible...
*/
@@ -9200,5 +9231,5 @@ validate_user(cupsd_job_t *job, /* I - Job */
/*
- * End of "$Id: ipp.c 5736 2006-07-13 19:59:36Z mike $".
+ * End of "$Id: ipp.c 5907 2006-08-30 02:18:28Z mike $".
*/
diff --git a/scheduler/job.c b/scheduler/job.c
index 967f9ac67..79370fbba 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -1,5 +1,5 @@
/*
- * "$Id: job.c 5719 2006-07-11 21:04:48Z mike $"
+ * "$Id: job.c 5889 2006-08-24 21:44:35Z mike $"
*
* Job management routines for the Common UNIX Printing System (CUPS).
*
@@ -354,7 +354,7 @@ cupsdCheckJobs(void)
*/
cupsdLogMessage(CUPSD_LOG_WARN,
- "Printer/class %s has gone away; cancelling job %d!",
+ "Printer/class %s has gone away; canceling job %d!",
job->dest, job->id);
cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
@@ -690,7 +690,7 @@ cupsdFreeAllJobs(void)
cupsdHoldSignals();
- cupsdStopAllJobs();
+ cupsdStopAllJobs(1);
cupsdSaveAllJobs();
for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
@@ -1494,7 +1494,7 @@ cupsdSetJobPriority(
*/
void
-cupsdStopAllJobs(void)
+cupsdStopAllJobs(int force) /* I - 1 = Force all filters to stop */
{
cupsd_job_t *job; /* Current job */
@@ -1506,7 +1506,7 @@ cupsdStopAllJobs(void)
job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
if (job->state_value == IPP_JOB_PROCESSING)
{
- cupsdStopJob(job, 1);
+ cupsdStopJob(job, force);
job->state->values[0].integer = IPP_JOB_PENDING;
job->state_value = IPP_JOB_PENDING;
}
@@ -1728,7 +1728,7 @@ cupsdUpdateJob(cupsd_job_t *job) /* I - Job to check */
break;
}
- if (ptr == NULL)
+ if (ptr == NULL && !job->status_buffer->bufused)
{
/*
* See if all of the filters and the backend have returned their
@@ -2053,7 +2053,7 @@ load_job_cache(const char *filename) /* I - job.cache filename */
}
else if (!strcasecmp(line, "State"))
{
- job->state_value = atoi(value);
+ job->state_value = (ipp_jstate_t)atoi(value);
if (job->state_value < IPP_JOB_PENDING)
job->state_value = IPP_JOB_PENDING;
@@ -2425,7 +2425,6 @@ start_job(cupsd_job_t *job, /* I - Job ID */
/* PRINTER env variable */
rip_max_cache[255];
/* RIP_MAX_CACHE env variable */
- int remote_job; /* Remote print job? */
static char *options = NULL;/* Full list of options */
static int optlength = 0; /* Length of option buffer */
@@ -2435,7 +2434,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
if (job->num_files == 0)
{
- cupsdLogMessage(CUPSD_LOG_ERROR, "Job ID %d has no files! Cancelling it!",
+ cupsdLogMessage(CUPSD_LOG_ERROR, "Job ID %d has no files! Canceling it!",
job->id);
cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
@@ -2567,17 +2566,10 @@ start_job(cupsd_job_t *job, /* I - Job ID */
FilterLevel += job->cost;
/*
- * Determine if we are printing to a remote printer...
- */
-
- remote_job = printer->raw && job->num_files > 1 &&
- !strncmp(printer->device_uri, "ipp://", 6);
-
- /*
* Add decompression filters, if any...
*/
- if (!remote_job && job->compressions[job->current_file])
+ if (!printer->raw && job->compressions[job->current_file])
{
/*
* Add gziptoany filter to the front of the list...
@@ -2911,7 +2903,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
* For remote jobs, we send all of the files in the argument list.
*/
- if (remote_job)
+ if (printer->remote && job->num_files > 1)
argv = calloc(7 + job->num_files, sizeof(char *));
else
argv = calloc(8, sizeof(char *));
@@ -2925,7 +2917,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
argv[4] = copies;
argv[5] = options;
- if (remote_job)
+ if (printer->remote && job->num_files > 1)
{
for (i = 0; i < job->num_files; i ++)
{
@@ -3018,11 +3010,12 @@ start_job(cupsd_job_t *job, /* I - Job ID */
envp[envc ++] = device_uri;
envp[envc ++] = printer_name;
- if ((filter = (mime_filter_t *)cupsArrayLast(filters)) != NULL)
+ if (!printer->remote &&
+ (filter = (mime_filter_t *)cupsArrayLast(filters)) != NULL)
{
snprintf(final_content_type, sizeof(final_content_type),
"FINAL_CONTENT_TYPE=%s/%s",
- filter->src->super, filter->src->type);
+ filter->dst->super, filter->dst->type);
envp[envc ++] = final_content_type;
}
@@ -3059,7 +3052,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"DEVICE_URI=%s\"",
job->id, i, sani_uri);
- if (remote_job)
+ if (printer->remote)
job->current_file = job->num_files;
else
job->current_file ++;
@@ -3355,7 +3348,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
slot, filterfds[slot][0], filterfds[slot][1]);
cupsdClosePipe(filterfds[slot]);
- if (remote_job)
+ if (printer->remote && job->num_files > 1)
{
for (i = 0; i < job->num_files; i ++)
free(argv[i + 6]);
@@ -3399,7 +3392,7 @@ start_job(cupsd_job_t *job, /* I - Job ID */
cupsArrayDelete(filters);
- if (remote_job)
+ if (printer->remote && job->num_files > 1)
{
for (i = 0; i < job->num_files; i ++)
free(argv[i + 6]);
@@ -3433,5 +3426,5 @@ unload_job(cupsd_job_t *job) /* I - Job */
/*
- * End of "$Id: job.c 5719 2006-07-11 21:04:48Z mike $".
+ * End of "$Id: job.c 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/scheduler/job.h b/scheduler/job.h
index 93bb774b2..48148c969 100644
--- a/scheduler/job.h
+++ b/scheduler/job.h
@@ -1,5 +1,5 @@
/*
- * "$Id: job.h 5393 2006-04-14 18:17:18Z mike $"
+ * "$Id: job.h 5833 2006-08-16 20:05:58Z mike $"
*
* Print job definitions for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -115,11 +115,11 @@ extern void cupsdSaveAllJobs(void);
extern void cupsdSaveJob(cupsd_job_t *job);
extern void cupsdSetJobHoldUntil(cupsd_job_t *job, const char *when);
extern void cupsdSetJobPriority(cupsd_job_t *job, int priority);
-extern void cupsdStopAllJobs(void);
+extern void cupsdStopAllJobs(int force);
extern void cupsdStopJob(cupsd_job_t *job, int force);
extern void cupsdUpdateJob(cupsd_job_t *job);
/*
- * End of "$Id: job.h 5393 2006-04-14 18:17:18Z mike $".
+ * End of "$Id: job.h 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/scheduler/main.c b/scheduler/main.c
index 2806c26bc..101f178de 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -1,5 +1,5 @@
/*
- * "$Id: main.c 5634 2006-06-06 17:48:27Z mike $"
+ * "$Id: main.c 5878 2006-08-24 15:55:42Z mike $"
*
* Scheduler main loop for the Common UNIX Printing System (CUPS).
*
@@ -660,7 +660,7 @@ main(int argc, /* I - Number of command-line args */
* inactivity...
*/
- if (timeout.tv_sec == 86400 && Launchd && LaunchdTimeout &&
+ if (timeout.tv_sec == 86400 && Launchd && LaunchdTimeout && !NumPolled &&
(!Browsing || !(BrowseLocalProtocols & BROWSE_DNSSD) ||
cupsArrayCount(Printers) == 0))
{
@@ -1628,7 +1628,7 @@ launchd_sync_conf(void)
kCFBooleanTrue);
if ((Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)) ||
- cupsArrayCount(ActiveJobs))
+ cupsArrayCount(ActiveJobs) || NumPolled)
CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
kCFBooleanTrue);
else
@@ -1893,7 +1893,7 @@ process_children(void)
#endif /* HAVE_WAITPID */
{
/*
- * Ignore SIGTERM errors - that comes when a job is cancelled...
+ * Ignore SIGTERM errors - that comes when a job is canceled...
*/
cupsdFinishProcess(pid, name, sizeof(name));
@@ -2253,5 +2253,5 @@ usage(int status) /* O - Exit status */
/*
- * End of "$Id: main.c 5634 2006-06-06 17:48:27Z mike $".
+ * End of "$Id: main.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/scheduler/mime.h b/scheduler/mime.h
index 9c5aa6448..2b44bf121 100644
--- a/scheduler/mime.h
+++ b/scheduler/mime.h
@@ -1,5 +1,5 @@
/*
- * "$Id: mime.h 5487 2006-05-03 19:28:29Z mike $"
+ * "$Id: mime.h 5771 2006-07-20 18:06:20Z mike $"
*
* MIME type/conversion database definitions for the Common UNIX Printing System (CUPS).
*
@@ -34,9 +34,9 @@
* C++ magic...
*/
-# ifdef _cplusplus
+# ifdef __cplusplus
extern "C" {
-# endif /* _cplusplus */
+# endif /* __cplusplus */
/*
@@ -147,11 +147,11 @@ extern mime_filter_t *mimeFirstFilter(mime_t *mime);
extern mime_filter_t *mimeNextFilter(mime_t *mime);
extern int mimeNumFilters(mime_t *mime);
-# ifdef _cplusplus
+# ifdef __cplusplus
}
-# endif /* _cplusplus */
+# endif /* __cplusplus */
#endif /* !_CUPS_MIME_H_ */
/*
- * End of "$Id: mime.h 5487 2006-05-03 19:28:29Z mike $".
+ * End of "$Id: mime.h 5771 2006-07-20 18:06:20Z mike $".
*/
diff --git a/scheduler/policy.c b/scheduler/policy.c
index e869c48ee..606978e3e 100644
--- a/scheduler/policy.c
+++ b/scheduler/policy.c
@@ -1,5 +1,5 @@
/*
- * "$Id: policy.c 5247 2006-03-08 13:43:38Z mike $"
+ * "$Id: policy.c 5838 2006-08-17 14:41:42Z mike $"
*
* Policy routines for the Common UNIX Printing System (CUPS).
*
@@ -195,7 +195,7 @@ cupsdCheckPolicy(cupsd_policy_t *p, /* I - Policy */
{
cupsdLogMessage(CUPSD_LOG_CRIT, "cupsdCheckPolicy: p=%p, con=%p!", p, con);
- return (0);
+ return ((http_status_t)0);
}
/*
@@ -205,7 +205,7 @@ cupsdCheckPolicy(cupsd_policy_t *p, /* I - Policy */
if ((po = cupsdFindPolicyOp(p, con->request->request.op.operation_id)) == NULL)
{
cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckPolicy: No matching operation, returning 0!");
- return (0);
+ return ((http_status_t)0);
}
con->best = po;
@@ -330,5 +330,5 @@ cupsdFindPolicyOp(cupsd_policy_t *p, /* I - Policy */
/*
- * End of "$Id: policy.c 5247 2006-03-08 13:43:38Z mike $".
+ * End of "$Id: policy.c 5838 2006-08-17 14:41:42Z mike $".
*/
diff --git a/scheduler/printers.c b/scheduler/printers.c
index f1cb56352..02e0a219a 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -1,5 +1,5 @@
/*
- * "$Id: printers.c 5724 2006-07-12 19:42:35Z mike $"
+ * "$Id: printers.c 5828 2006-08-15 21:21:45Z mike $"
*
* Printer routines for the Common UNIX Printing System (CUPS).
*
@@ -1492,7 +1492,8 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
else
snprintf(resource, sizeof(resource), "/printers/%s", p->name);
- if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL)
+ if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL ||
+ auth->type == AUTH_NONE)
auth = cupsdFindPolicyOp(p->op_policy_ptr, IPP_PRINT_JOB);
if (auth)
@@ -1572,7 +1573,8 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
printer_type = p->type;
- p->raw = 0;
+ p->raw = 0;
+ p->remote = 0;
if (p->type & CUPS_PRINTER_REMOTE)
{
@@ -1590,7 +1592,8 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri", NULL,
p->uri);
- p->raw = 1;
+ p->raw = 1;
+ p->remote = 1;
}
else
{
@@ -2030,7 +2033,8 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
* Print all files directly...
*/
- p->raw = 1;
+ p->raw = 1;
+ p->remote = 1;
}
else
{
@@ -3312,5 +3316,5 @@ write_irix_state(cupsd_printer_t *p) /* I - Printer to update */
/*
- * End of "$Id: printers.c 5724 2006-07-12 19:42:35Z mike $".
+ * End of "$Id: printers.c 5828 2006-08-15 21:21:45Z mike $".
*/
diff --git a/scheduler/printers.h b/scheduler/printers.h
index ef8b34709..acbc73800 100644
--- a/scheduler/printers.h
+++ b/scheduler/printers.h
@@ -1,5 +1,5 @@
/*
- * "$Id: printers.h 5330 2006-03-23 21:07:20Z mike $"
+ * "$Id: printers.h 5828 2006-08-15 21:21:45Z mike $"
*
* Printer definitions for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -66,6 +66,7 @@ typedef struct cupsd_printer_s
char *device_uri; /* Device URI */
char *port_monitor; /* Port monitor */
int raw; /* Raw queue? */
+ int remote; /* Remote queue? */
mime_type_t *filetype; /* Pseudo-filetype for printer */
cups_array_t *filetypes; /* Supported file types */
void *job; /* Current job in queue */
@@ -146,5 +147,5 @@ extern char *cupsdSanitizeURI(const char *uri, char *buffer,
/*
- * End of "$Id: printers.h 5330 2006-03-23 21:07:20Z mike $".
+ * End of "$Id: printers.h 5828 2006-08-15 21:21:45Z mike $".
*/
diff --git a/scheduler/statbuf.c b/scheduler/statbuf.c
index eb257d787..b10f63ebc 100644
--- a/scheduler/statbuf.c
+++ b/scheduler/statbuf.c
@@ -1,5 +1,5 @@
/*
- * "$Id: statbuf.c 5447 2006-04-21 20:07:51Z mike $"
+ * "$Id: statbuf.c 5889 2006-08-24 21:44:35Z mike $"
*
* Status buffer routines for the Common UNIX Printing System (CUPS)
* scheduler.
@@ -193,7 +193,7 @@ cupsdStatBufUpdate(cupsd_statbuf_t *sb, /* I - Status buffer */
lineptr = NULL;
}
- if (lineptr == NULL)
+ if (!lineptr)
{
/*
* End of file...
@@ -330,5 +330,5 @@ cupsdStatBufUpdate(cupsd_statbuf_t *sb, /* I - Status buffer */
/*
- * End of "$Id: statbuf.c 5447 2006-04-21 20:07:51Z mike $".
+ * End of "$Id: statbuf.c 5889 2006-08-24 21:44:35Z mike $".
*/
diff --git a/scheduler/subscriptions.c b/scheduler/subscriptions.c
index f27c48ff4..f3a320594 100644
--- a/scheduler/subscriptions.c
+++ b/scheduler/subscriptions.c
@@ -1,5 +1,5 @@
/*
- * "$Id: subscriptions.c 5716 2006-07-11 17:56:57Z mike $"
+ * "$Id: subscriptions.c 5878 2006-08-24 15:55:42Z mike $"
*
* Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
*
@@ -267,7 +267,7 @@ cupsdAddEvent(
"job-stopped");
break;
- case IPP_JOB_CANCELLED :
+ case IPP_JOB_CANCELED :
ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
IPP_TAG_KEYWORD, "job-state-reasons", NULL,
"job-canceled-by-user");
@@ -1245,13 +1245,12 @@ cupsdStopAllNotifiers(void)
void
cupsdUpdateNotifierStatus(void)
{
- char *ptr, /* Pointer to end of line in buffer */
- message[1024]; /* Pointer to message text */
+ char message[1024]; /* Pointer to message text */
int loglevel; /* Log level for message */
- while ((ptr = cupsdStatBufUpdate(NotifierStatusBuffer, &loglevel,
- message, sizeof(message))) != NULL)
+ while (cupsdStatBufUpdate(NotifierStatusBuffer, &loglevel,
+ message, sizeof(message)))
if (!strchr(NotifierStatusBuffer->buffer, '\n'))
break;
}
@@ -1506,7 +1505,6 @@ cupsd_start_notifier(
{
int pid; /* Notifier process ID */
int fds[2]; /* Pipe file descriptors */
- int envc; /* Number of environment variables */
char *argv[4], /* Command-line arguments */
*envp[MAX_ENV], /* Environment variables */
user_data[128], /* Base-64 encoded user data */
@@ -1546,7 +1544,7 @@ cupsd_start_notifier(
* Setup the environment...
*/
- envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
+ cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
/*
* Create pipes as needed...
@@ -1624,5 +1622,5 @@ cupsd_start_notifier(
/*
- * End of "$Id: subscriptions.c 5716 2006-07-11 17:56:57Z mike $".
+ * End of "$Id: subscriptions.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/scheduler/sysman.c b/scheduler/sysman.c
index f83319853..853ff86c8 100644
--- a/scheduler/sysman.c
+++ b/scheduler/sysman.c
@@ -1,5 +1,5 @@
/*
- * "$Id: sysman.c 5305 2006-03-18 03:05:12Z mike $"
+ * "$Id: sysman.c 5833 2006-08-16 20:05:58Z mike $"
*
* System management definitions for the Common UNIX Printing System (CUPS).
*
@@ -289,7 +289,7 @@ cupsdUpdateSystemMonitor(void)
Sleeping = 1;
- cupsdStopAllJobs();
+ cupsdStopAllJobs(0);
cupsdSaveAllJobs();
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
@@ -350,6 +350,7 @@ cupsdUpdateSystemMonitor(void)
p->browse_time = 0;
cupsdSendBrowseList();
+ cupsdRestartPolling();
}
else
cupsdLogMessage(CUPSD_LOG_DEBUG,
@@ -727,5 +728,5 @@ sysEventTimerNotifier(
/*
- * End of "$Id: sysman.c 5305 2006-03-18 03:05:12Z mike $".
+ * End of "$Id: sysman.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/scheduler/testlpd.c b/scheduler/testlpd.c
new file mode 100644
index 000000000..a49950391
--- /dev/null
+++ b/scheduler/testlpd.c
@@ -0,0 +1,550 @@
+/*
+ * "$Id: testlpd.c 5868 2006-08-23 19:39:39Z mike $"
+ *
+ * cups-lpd test program for the Common UNIX Printing System (CUPS).
+ *
+ * Copyright 2006 by Easy Software Products, all rights reserved.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Easy Software Products and are protected by Federal
+ * copyright law. Distribution and use rights are outlined in the file
+ * "LICENSE.txt" which should have been included with this file. If this
+ * file is missing or damaged please contact Easy Software Products
+ * at:
+ *
+ * Attn: CUPS Licensing Information
+ * Easy Software Products
+ * 44141 Airport View Drive, Suite 204
+ * Hollywood, Maryland 20636 USA
+ *
+ * Voice: (301) 373-9600
+ * EMail: cups-info@cups.org
+ * WWW: http://www.cups.org
+ *
+ * Contents:
+ *
+ * main() - Simulate an LPD client.
+ * do_command() - Send the LPD command and wait for a response.
+ * print_job() - Submit a file for printing.
+ * print_waiting() - Print waiting jobs.
+ * remove_job() - Cancel a print job.
+ * status_long() - Show the long printer status.
+ * status_short() - Show the short printer status.
+ * usage() - Show program usage...
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <cups/cups.h>
+#include <cups/string.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+
+/*
+ * Local functions...
+ */
+
+static int do_command(int outfd, int infd, const char *command);
+static int print_job(int outfd, int infd, char *dest, char **args);
+static int print_waiting(int outfd, int infd, char *dest);
+static int remove_job(int outfd, int infd, char *dest, char **args);
+static int status_long(int outfd, int infd, char *dest, char **args);
+static int status_short(int outfd, int infd, char *dest, char **args);
+static void usage(void);
+
+
+/*
+ * 'main()' - Simulate an LPD client.
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line arguments */
+ char *argv[]) /* I - Command-line arguments */
+{
+ int i; /* Looping var */
+ int status; /* Test status */
+ char *op, /* Operation to test */
+ **opargs, /* Remaining arguments */
+ *dest; /* Destination */
+ int cupslpd_argc; /* Argument count for cups-lpd */
+ char *cupslpd_argv[1000]; /* Arguments for cups-lpd */
+ int cupslpd_stdin[2], /* Standard input for cups-lpd */
+ cupslpd_stdout[2], /* Standard output for cups-lpd */
+ cupslpd_pid; /* Process ID for cups-lpd */
+
+
+ /*
+ * Collect command-line arguments...
+ */
+
+ op = NULL;
+ opargs = NULL;
+ dest = NULL;
+ cupslpd_argc = 1;
+ cupslpd_argv[0] = (char *)"cups-lpd";
+
+ for (i = 1; i < argc; i ++)
+ if (!strncmp(argv[i], "-o", 2))
+ {
+ cupslpd_argv[cupslpd_argc++] = argv[i];
+
+ if (argv[i][2])
+ {
+ i ++;
+
+ if (i >= argc)
+ usage();
+
+ cupslpd_argv[cupslpd_argc++] = argv[i];
+ }
+ }
+ else if (argv[i][0] == '-')
+ usage();
+ else if (!op)
+ op = argv[i];
+ else if (!dest)
+ dest = argv[i];
+ else
+ {
+ opargs = argv + i;
+ break;
+ }
+
+ if (!op ||
+ (!strcmp(op, "print-job") && (!dest || !opargs)) ||
+ (!strcmp(op, "remove-job") && (!dest || !opargs)) ||
+ (strcmp(op, "print-job") && strcmp(op, "print-waiting") &&
+ strcmp(op, "remove-job") && strcmp(op, "status-long") &&
+ strcmp(op, "status-short")))
+ usage();
+
+ /*
+ * Run the cups-lpd program using pipes...
+ */
+
+ cupslpd_argv[cupslpd_argc] = NULL;
+
+ pipe(cupslpd_stdin);
+ pipe(cupslpd_stdout);
+
+ if ((cupslpd_pid = fork()) < 0)
+ {
+ /*
+ * Error!
+ */
+
+ perror("testlpd: Unable to fork");
+ return (1);
+ }
+ else if (cupslpd_pid == 0)
+ {
+ /*
+ * Child goes here...
+ */
+
+ close(0);
+ dup(cupslpd_stdin[0]);
+ close(cupslpd_stdin[0]);
+ close(cupslpd_stdin[1]);
+
+ close(1);
+ dup(cupslpd_stdout[1]);
+ close(cupslpd_stdout[0]);
+ close(cupslpd_stdout[1]);
+
+ execv("./cups-lpd", cupslpd_argv);
+
+ perror("testlpd: Unable to exec ./cups-lpd");
+ exit(errno);
+ }
+ else
+ {
+ close(cupslpd_stdin[0]);
+ close(cupslpd_stdout[1]);
+ }
+
+ /*
+ * Do the operation test...
+ */
+
+ if (!strcmp(op, "print-job"))
+ status = print_job(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs);
+ else if (!strcmp(op, "print-waiting"))
+ status = print_waiting(cupslpd_stdin[1], cupslpd_stdout[0], dest);
+ else if (!strcmp(op, "remove-job"))
+ status = remove_job(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs);
+ else if (!strcmp(op, "status-long"))
+ status = status_long(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs);
+ else if (!strcmp(op, "status-short"))
+ status = status_short(cupslpd_stdin[1], cupslpd_stdout[0], dest, opargs);
+
+ /*
+ * Kill the test program...
+ */
+
+ close(cupslpd_stdin[1]);
+ close(cupslpd_stdout[0]);
+ kill(cupslpd_pid, SIGTERM);
+
+ /*
+ * Return the test status...
+ */
+
+ return (status);
+}
+
+
+/*
+ * 'do_command()' - Send the LPD command and wait for a response.
+ */
+
+static int /* O - Status from cups-lpd */
+do_command(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ const char *command) /* I - Command line to send */
+{
+ int len; /* Length of command line */
+ char status; /* Status byte */
+
+
+ printf("COMMAND: %02X %s", command[0], command + 1);
+
+ len = strlen(command);
+
+ if (write(outfd, command, len) < len)
+ {
+ puts(" Write failed!");
+ return (-1);
+ }
+
+ if (read(infd, &status, 1) < 1)
+ puts("IN: ERROR");
+ else
+ printf("IN: %d\n", status);
+
+ return (status);
+}
+
+
+/*
+ * 'print_job()' - Submit a file for printing.
+ */
+
+static int /* O - Status from cups-lpd */
+print_job(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ char *dest, /* I - Destination */
+ char **args) /* I - Arguments */
+{
+ int fd; /* Print file descriptor */
+ char command[1024], /* Command buffer */
+ control[1024], /* Control file */
+ buffer[8192]; /* Print buffer */
+ int status; /* Status of command */
+ struct stat fileinfo; /* File information */
+ char *jobname; /* Job name */
+ int sequence; /* Sequence number */
+ int bytes; /* Bytes read/written */
+
+
+ /*
+ * Check the print file...
+ */
+
+ if (stat(args[0], &fileinfo))
+ {
+ perror(args[0]);
+ return (-1);
+ }
+
+ if ((fd = open(args[0], O_RDONLY)) < 0)
+ {
+ perror(args[0]);
+ return (-1);
+ }
+
+ /*
+ * Send the "receive print job" command...
+ */
+
+ snprintf(command, sizeof(command), "\002%s\n", dest);
+ if ((status = do_command(outfd, infd, command)) != 0)
+ {
+ close(fd);
+ return (status);
+ }
+
+ /*
+ * Format a control file string that will be used to submit the job...
+ */
+
+ if ((jobname = strrchr(args[0], '/')) != NULL)
+ jobname ++;
+ else
+ jobname = args[0];
+
+ sequence = (int)getpid() % 1000;
+
+ snprintf(control, sizeof(control),
+ "Hlocalhost\n"
+ "P%s\n"
+ "J%s\n"
+ "ldfA%03.3dlocalhost\n"
+ "UdfA%03.3dlocalhost\n"
+ "N%s\n",
+ cupsUser(), jobname, sequence, sequence, jobname);
+
+ /*
+ * Send the control file...
+ */
+
+ bytes = strlen(control);
+
+ snprintf(command, sizeof(command), "\002%d cfA%03.3dlocalhost\n",
+ bytes, sequence);
+
+ if ((status = do_command(outfd, infd, command)) != 0)
+ {
+ close(fd);
+ return (status);
+ }
+
+ bytes ++;
+
+ if (write(outfd, control, bytes) < bytes)
+ {
+ printf("CONTROL: Unable to write %d bytes!\n", bytes);
+ close(fd);
+ return (-1);
+ }
+
+ printf("CONTROL: Wrote %d bytes.\n", bytes);
+
+ if (read(infd, command, 1) < 1)
+ {
+ puts("IN: ERROR");
+ close(fd);
+ return (-1);
+ }
+ else
+ {
+ status = command[0];
+
+ printf("IN: %d\n", status);
+ }
+
+ /*
+ * Send the data file...
+ */
+
+ snprintf(command, sizeof(command), "\003%d dfA%03.3dlocalhost\n",
+ (int)fileinfo.st_size, sequence);
+
+ if ((status = do_command(outfd, infd, command)) != 0)
+ {
+ close(fd);
+ return (status);
+ }
+
+ while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+ {
+ if (write(outfd, buffer, bytes) < bytes)
+ {
+ printf("DATA: Unable to write %d bytes!\n", bytes);
+ close(fd);
+ return (-1);
+ }
+ }
+
+ write(outfd, "", 1);
+
+ close(fd);
+
+ printf("DATA: Wrote %d bytes.\n", (int)fileinfo.st_size);
+
+ if (read(infd, command, 1) < 1)
+ {
+ puts("IN: ERROR");
+ close(fd);
+ return (-1);
+ }
+ else
+ {
+ status = command[0];
+
+ printf("IN: %d\n", status);
+ }
+
+ return (status);
+}
+
+
+/*
+ * 'print_waiting()' - Print waiting jobs.
+ */
+
+static int /* O - Status from cups-lpd */
+print_waiting(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ char *dest) /* I - Destination */
+{
+ char command[1024]; /* Command buffer */
+
+
+ /*
+ * Send the "print waiting jobs" command...
+ */
+
+ snprintf(command, sizeof(command), "\001%s\n", dest);
+
+ return (do_command(outfd, infd, command));
+}
+
+
+/*
+ * 'remove_job()' - Cancel a print job.
+ */
+
+static int /* O - Status from cups-lpd */
+remove_job(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ char *dest, /* I - Destination */
+ char **args) /* I - Arguments */
+{
+ int i; /* Looping var */
+ char command[1024]; /* Command buffer */
+
+ /*
+ * Send the "remove jobs" command...
+ */
+
+ snprintf(command, sizeof(command), "\005%s", dest);
+
+ for (i = 0; args[i]; i ++)
+ {
+ strlcat(command, " ", sizeof(command));
+ strlcat(command, args[i], sizeof(command));
+ }
+
+ strlcat(command, "\n", sizeof(command));
+
+ return (do_command(outfd, infd, command));
+}
+
+
+/*
+ * 'status_long()' - Show the long printer status.
+ */
+
+static int /* O - Status from cups-lpd */
+status_long(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ char *dest, /* I - Destination */
+ char **args) /* I - Arguments */
+{
+ char command[1024], /* Command buffer */
+ buffer[8192]; /* Status buffer */
+ int bytes; /* Bytes read/written */
+
+
+ /*
+ * Send the "send short status" command...
+ */
+
+ if (args)
+ snprintf(command, sizeof(command), "\004%s %s\n", dest, args[0]);
+ else
+ snprintf(command, sizeof(command), "\004%s\n", dest);
+
+ bytes = strlen(command);
+
+ if (write(outfd, command, bytes) < bytes)
+ return (-1);
+
+ /*
+ * Read the status back...
+ */
+
+ while ((bytes = read(infd, buffer, sizeof(buffer))) > 0)
+ {
+ fwrite(buffer, 1, bytes, stdout);
+ fflush(stdout);
+ }
+
+ return (0);
+}
+
+
+/*
+ * 'status_short()' - Show the short printer status.
+ */
+
+static int /* O - Status from cups-lpd */
+status_short(int outfd, /* I - Command file descriptor */
+ int infd, /* I - Response file descriptor */
+ char *dest, /* I - Destination */
+ char **args) /* I - Arguments */
+{
+ char command[1024], /* Command buffer */
+ buffer[8192]; /* Status buffer */
+ int bytes; /* Bytes read/written */
+
+
+ /*
+ * Send the "send short status" command...
+ */
+
+ if (args)
+ snprintf(command, sizeof(command), "\003%s %s\n", dest, args[0]);
+ else
+ snprintf(command, sizeof(command), "\003%s\n", dest);
+
+ bytes = strlen(command);
+
+ if (write(outfd, command, bytes) < bytes)
+ return (-1);
+
+ /*
+ * Read the status back...
+ */
+
+ while ((bytes = read(infd, buffer, sizeof(buffer))) > 0)
+ {
+ fwrite(buffer, 1, bytes, stdout);
+ fflush(stdout);
+ }
+
+ return (0);
+}
+
+
+/*
+ * 'usage()' - Show program usage...
+ */
+
+static void
+usage(void)
+{
+ puts("Usage: testlpd [options] print-job printer user filename [... filename]");
+ puts(" testlpd [options] print-waiting [printer or user]");
+ puts(" testlpd [options] remove-job printer [user [job-id]]");
+ puts(" testlpd [options] status-long [printer or user]");
+ puts(" testlpd [options] status-short [printer or user]");
+ puts("");
+ puts("Options:");
+ puts(" -o name=value");
+
+ exit(0);
+}
+
+
+/*
+ * End of "$Id: testlpd.c 5868 2006-08-23 19:39:39Z mike $".
+ */
diff --git a/systemv/accept.c b/systemv/accept.c
index 14f7201d4..5757a39a8 100644
--- a/systemv/accept.c
+++ b/systemv/accept.c
@@ -1,5 +1,5 @@
/*
- * "$Id: accept.c 5104 2006-02-15 03:21:04Z mike $"
+ * "$Id: accept.c 5833 2006-08-16 20:05:58Z mike $"
*
* "accept", "disable", "enable", and "reject" commands for the Common
* UNIX Printing System (CUPS).
@@ -58,6 +58,8 @@ main(int argc, /* I - Number of command-line arguments */
int cancel; /* Cancel jobs? */
+ _cupsSetLocale();
+
/*
* See what operation we're supposed to do...
*/
@@ -286,5 +288,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * End of "$Id: accept.c 5104 2006-02-15 03:21:04Z mike $".
+ * End of "$Id: accept.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/cancel.c b/systemv/cancel.c
index f6d4aed0a..2d1a18d1c 100644
--- a/systemv/cancel.c
+++ b/systemv/cancel.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cancel.c 5696 2006-06-26 18:34:20Z mike $"
+ * "$Id: cancel.c 5833 2006-08-16 20:05:58Z mike $"
*
* "cancel" command for the Common UNIX Printing System (CUPS).
*
@@ -60,6 +60,8 @@ main(int argc, /* I - Number of command-line arguments */
ipp_op_t op; /* Operation */
+ _cupsSetLocale();
+
/*
* Setup to cancel individual print jobs...
*/
@@ -390,5 +392,5 @@ main(int argc, /* I - Number of command-line arguments */
/*
- * End of "$Id: cancel.c 5696 2006-06-26 18:34:20Z mike $".
+ * End of "$Id: cancel.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/cupsaddsmb.c b/systemv/cupsaddsmb.c
index 0c74fbff0..69d80ae51 100644
--- a/systemv/cupsaddsmb.c
+++ b/systemv/cupsaddsmb.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cupsaddsmb.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: cupsaddsmb.c 5833 2006-08-16 20:05:58Z mike $"
*
* "cupsaddsmb" command for the Common UNIX Printing System (CUPS).
*
@@ -78,6 +78,8 @@ main(int argc, /* I - Number of command-line arguments */
cups_dest_t *dests; /* Printers */
+ _cupsSetLocale();
+
/*
* Parse command-line arguments...
*/
@@ -292,5 +294,5 @@ usage(void)
/*
- * End of "$Id: cupsaddsmb.c 5753 2006-07-18 19:53:24Z mike $".
+ * End of "$Id: cupsaddsmb.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/cupstestdsc.c b/systemv/cupstestdsc.c
index b9d5ac2d3..8ed11f9b2 100644
--- a/systemv/cupstestdsc.c
+++ b/systemv/cupstestdsc.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cupstestdsc.c 5392 2006-04-14 17:50:39Z mike $"
+ * "$Id: cupstestdsc.c 5838 2006-08-17 14:41:42Z mike $"
*
* DSC test program for the Common UNIX Printing System (CUPS).
*
@@ -65,6 +65,8 @@ main(int argc, /* I - Number of command-line args */
int num_files; /* Number of files tested */
+ _cupsSetLocale();
+
/*
* Collect command-line arguments...
*/
@@ -129,7 +131,6 @@ check_file(const char *filename) /* I - File to read from */
saw_end_setup, /* %%EndSetup seen? */
saw_page, /* %%Page seen? */
saw_trailer, /* %%Trailer seen? */
- saw_eof, /* %%EOF seen? */
saw_long_line; /* Saw long lines? */
@@ -162,7 +163,6 @@ check_file(const char *filename) /* I - File to read from */
saw_end_comments = 0;
saw_end_prolog = 0;
saw_end_setup = 0;
- saw_eof = 0;
saw_long_line = 0;
saw_page = 0;
saw_pages = 0;
@@ -452,5 +452,5 @@ usage(void)
/*
- * End of "$Id: cupstestdsc.c 5392 2006-04-14 17:50:39Z mike $".
+ * End of "$Id: cupstestdsc.c 5838 2006-08-17 14:41:42Z mike $".
*/
diff --git a/systemv/cupstestppd.c b/systemv/cupstestppd.c
index 20c3c0a34..35235f337 100644
--- a/systemv/cupstestppd.c
+++ b/systemv/cupstestppd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: cupstestppd.c 5549 2006-05-19 19:39:28Z mike $"
+ * "$Id: cupstestppd.c 5833 2006-08-16 20:05:58Z mike $"
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
@@ -113,6 +113,8 @@ main(int argc, /* I - Number of command-line arguments */
"JCL", "PAGE", "PROLOG" };
+ _cupsSetLocale();
+
/*
* Display PPD files for each file listed on the command-line...
*/
@@ -306,9 +308,9 @@ main(int argc, /* I - Number of command-line arguments */
* Look for default keywords with no matching option...
*/
- for (i = 0; i < ppd->num_attrs; i ++)
+ for (j = 0; j < ppd->num_attrs; j ++)
{
- attr = ppd->attrs[i];
+ attr = ppd->attrs[j];
if (!strcmp(attr->name, "DefaultColorSpace") ||
!strcmp(attr->name, "DefaultFont") ||
@@ -327,11 +329,11 @@ main(int argc, /* I - Number of command-line arguments */
* Check that the default option value matches a choice...
*/
- for (j = 0; j < option->num_choices; j ++)
- if (!strcmp(option->choices[j].choice, attr->value))
+ for (k = 0; k < option->num_choices; k ++)
+ if (!strcmp(option->choices[k].choice, attr->value))
break;
- if (j >= option->num_choices)
+ if (k >= option->num_choices)
{
if (verbose >= 0)
{
@@ -1010,7 +1012,10 @@ main(int argc, /* I - Number of command-line arguments */
char *languages, /* Copy of attribute value */
*langstart, /* Start of current language */
*langptr, /* Pointer into languages */
- keyword[PPD_MAX_NAME]; /* Localization keyword */
+ keyword[PPD_MAX_NAME], /* Localization keyword */
+ ckeyword[PPD_MAX_NAME]; /* Custom option keyword */
+ ppd_coption_t *coption; /* Custom option */
+ ppd_cparam_t *cparam; /* Custom parameter */
languages = strdup(attr->value);
@@ -1104,7 +1109,61 @@ main(int argc, /* I - Number of command-line arguments */
option->keyword);
for (j = 0; j < option->num_choices; j ++)
{
- if (!ppdFindAttr(ppd, keyword, option->choices[j].choice))
+ if (!strcasecmp(option->choices[j].choice, "Custom") &&
+ (coption = ppdFindCustomOption(ppd,
+ option->keyword)) != NULL)
+ {
+ snprintf(ckeyword, sizeof(ckeyword), "%s.Custom%s",
+ langstart, option->keyword);
+
+ if (!ppdFindAttr(ppd, ckeyword, "True"))
+ {
+ if (verbose >= 0)
+ {
+ if (!errors && !verbose)
+ _cupsLangPuts(stdout, _(" FAIL\n"));
+
+ _cupsLangPrintf(stdout,
+ _(" **FAIL** Missing \"%s\" "
+ "translation string for option %s, "
+ "choice %s!\n"),
+ langstart, ckeyword + 1 + strlen(langstart),
+ "True");
+ }
+
+ errors ++;
+ }
+
+ if (strcasecmp(option->keyword, "PageSize"))
+ {
+ for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params);
+ cparam;
+ cparam = (ppd_cparam_t *)cupsArrayNext(coption->params))
+ {
+ snprintf(ckeyword, sizeof(ckeyword), "%s.ParamCustom%s",
+ langstart, option->keyword);
+ if (!ppdFindAttr(ppd, ckeyword, cparam->name))
+ {
+ if (verbose >= 0)
+ {
+ if (!errors && !verbose)
+ _cupsLangPuts(stdout, _(" FAIL\n"));
+
+ _cupsLangPrintf(stdout,
+ _(" **FAIL** Missing \"%s\" "
+ "translation string for option %s, "
+ "choice %s!\n"),
+ langstart,
+ ckeyword + 1 + strlen(langstart),
+ cparam->name);
+ }
+
+ errors ++;
+ }
+ }
+ }
+ }
+ else if (!ppdFindAttr(ppd, keyword, option->choices[j].choice))
{
if (verbose >= 0)
{
@@ -1184,9 +1243,10 @@ main(int argc, /* I - Number of command-line arguments */
if (!errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
- _cupsLangPuts(stdout,
- _(" **FAIL** 1284DeviceId must be 1284DeviceID!\n"
- " REF: Page 72, section 5.5\n"));
+ _cupsLangPrintf(stdout,
+ _(" **FAIL** %s must be 1284DeviceID!\n"
+ " REF: Page 72, section 5.5\n"),
+ attr->name);
}
errors ++;
@@ -1205,9 +1265,9 @@ main(int argc, /* I - Number of command-line arguments */
* Look for default keywords with no corresponding option...
*/
- for (i = 0; i < ppd->num_attrs; i ++)
+ for (j = 0; j < ppd->num_attrs; j ++)
{
- attr = ppd->attrs[i];
+ attr = ppd->attrs[j];
if (!strcmp(attr->name, "DefaultColorSpace") ||
!strcmp(attr->name, "DefaultColorSep") ||
@@ -1730,5 +1790,5 @@ usage(void)
/*
- * End of "$Id: cupstestppd.c 5549 2006-05-19 19:39:28Z mike $".
+ * End of "$Id: cupstestppd.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lp.c b/systemv/lp.c
index ee2ac802b..8a38c67bf 100644
--- a/systemv/lp.c
+++ b/systemv/lp.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lp.c 5235 2006-03-06 13:02:23Z mike $"
+ * "$Id: lp.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lp" command for the Common UNIX Printing System (CUPS).
*
@@ -117,6 +117,8 @@ main(int argc, /* I - Number of command-line arguments */
return (0);
#endif /* __sun */
+ _cupsSetLocale();
+
silent = 0;
printer = NULL;
num_dests = 0;
@@ -838,5 +840,5 @@ sighandler(int s) /* I - Signal number */
/*
- * End of "$Id: lp.c 5235 2006-03-06 13:02:23Z mike $".
+ * End of "$Id: lp.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
index c0467fa76..b8e1c69ca 100644
--- a/systemv/lpadmin.c
+++ b/systemv/lpadmin.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpadmin.c 5545 2006-05-18 21:00:56Z mike $"
+ * "$Id: lpadmin.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lpadmin" command for the Common UNIX Printing System (CUPS).
*
@@ -92,6 +92,8 @@ main(int argc, /* I - Number of command-line arguments */
cups_option_t *options; /* Options */
+ _cupsSetLocale();
+
http = NULL;
printer = NULL;
num_options = 0;
@@ -1984,5 +1986,5 @@ validate_name(const char *name) /* I - Name to check */
/*
- * End of "$Id: lpadmin.c 5545 2006-05-18 21:00:56Z mike $".
+ * End of "$Id: lpadmin.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lpinfo.c b/systemv/lpinfo.c
index df8bef1aa..aad4b252d 100644
--- a/systemv/lpinfo.c
+++ b/systemv/lpinfo.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpinfo.c 4925 2006-01-13 02:52:47Z mike $"
+ * "$Id: lpinfo.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lpinfo" command for the Common UNIX Printing System (CUPS).
*
@@ -62,6 +62,8 @@ main(int argc, /* I - Number of command-line arguments */
int long_status; /* Long listing? */
+ _cupsSetLocale();
+
http = NULL;
long_status = 0;
@@ -434,5 +436,5 @@ show_models(http_t *http, /* I - HTTP connection to server */
/*
- * End of "$Id: lpinfo.c 4925 2006-01-13 02:52:47Z mike $".
+ * End of "$Id: lpinfo.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lpmove.c b/systemv/lpmove.c
index 8f9fdefbf..135343869 100644
--- a/systemv/lpmove.c
+++ b/systemv/lpmove.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpmove.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: lpmove.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lpmove" command for the Common UNIX Printing System (CUPS).
*
@@ -66,6 +66,8 @@ main(int argc, /* I - Number of command-line arguments */
*dest; /* New destination */
+ _cupsSetLocale();
+
dest = NULL;
dests = NULL;
http = NULL;
@@ -233,5 +235,5 @@ move_job(http_t *http, /* I - HTTP connection to server */
/*
- * End of "$Id: lpmove.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: lpmove.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lpoptions.c b/systemv/lpoptions.c
index 30d57aa48..155fcb242 100644
--- a/systemv/lpoptions.c
+++ b/systemv/lpoptions.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpoptions.c 5753 2006-07-18 19:53:24Z mike $"
+ * "$Id: lpoptions.c 5833 2006-08-16 20:05:58Z mike $"
*
* Printer option program for the Common UNIX Printing System (CUPS).
*
@@ -69,6 +69,8 @@ main(int argc, /* I - Number of command-line arguments */
*option; /* Current option */
+ _cupsSetLocale();
+
/*
* Loop through the command-line arguments...
*/
@@ -482,5 +484,5 @@ usage(void)
/*
- * End of "$Id: lpoptions.c 5753 2006-07-18 19:53:24Z mike $".
+ * End of "$Id: lpoptions.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lppasswd.c b/systemv/lppasswd.c
index d9822a07e..f825d1e7f 100644
--- a/systemv/lppasswd.c
+++ b/systemv/lppasswd.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lppasswd.c 4924 2006-01-13 01:55:20Z mike $"
+ * "$Id: lppasswd.c 5833 2006-08-16 20:05:58Z mike $"
*
* MD5 password program for the Common UNIX Printing System (CUPS).
*
@@ -102,6 +102,8 @@ main(int argc, /* I - Number of command-line arguments */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/
+ _cupsSetLocale();
+
/*
* Check to see if stdin, stdout, and stderr are still open...
*/
@@ -509,5 +511,5 @@ usage(FILE *fp) /* I - File to send usage to */
/*
- * End of "$Id: lppasswd.c 4924 2006-01-13 01:55:20Z mike $".
+ * End of "$Id: lppasswd.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/systemv/lpstat.c b/systemv/lpstat.c
index eeb1cb260..4eafb58c4 100644
--- a/systemv/lpstat.c
+++ b/systemv/lpstat.c
@@ -1,5 +1,5 @@
/*
- * "$Id: lpstat.c 5638 2006-06-06 20:08:13Z mike $"
+ * "$Id: lpstat.c 5833 2006-08-16 20:05:58Z mike $"
*
* "lpstat" command for the Common UNIX Printing System (CUPS).
*
@@ -84,41 +84,8 @@ main(int argc, /* I - Number of command-line arguments */
char op; /* Last operation on command-line */
- /*
- * Set the locale so that times, etc. are displayed properly.
- *
- * Unfortunately, while we need the localized time value, we *don't*
- * want to use the localized charset for the time value, so we need
- * to set LC_TIME to the locale name with .UTF-8 on the end (if
- * the locale includes a character set specifier...)
- */
-
- setlocale(LC_ALL, "");
-
-#ifdef LC_TIME
- {
- const char *lc_time; /* Current LC_TIME value */
- char new_lc_time[255], /* New LC_TIME value */
- *charset; /* Pointer to character set */
-
- if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
- lc_time = setlocale(LC_ALL, NULL);
+ _cupsSetLocale();
- if (lc_time)
- {
- strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
- if ((charset = strchr(new_lc_time, '.')) == NULL)
- charset = new_lc_time + strlen(new_lc_time);
-
- strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
- }
- else
- strcpy(new_lc_time, "C");
-
- setlocale(LC_TIME, new_lc_time);
- }
-#endif /* LC_TIME */
-
/*
* Parse command-line options...
*/
@@ -2281,5 +2248,5 @@ show_scheduler(http_t *http) /* I - HTTP connection to server */
/*
- * End of "$Id: lpstat.c 5638 2006-06-06 20:08:13Z mike $".
+ * End of "$Id: lpstat.c 5833 2006-08-16 20:05:58Z mike $".
*/
diff --git a/templates/Makefile b/templates/Makefile
index d2e4952ce..e1b5babc7 100644
--- a/templates/Makefile
+++ b/templates/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile 5609 2006-05-30 20:31:10Z mike $"
+# "$Id: Makefile 5878 2006-08-24 15:55:42Z mike $"
#
# Template makefile for the Common UNIX Printing System (CUPS).
#
@@ -61,6 +61,7 @@ FILES = \
maintenance.tmpl \
modify-class.tmpl \
modify-printer.tmpl \
+ norestart.tmpl \
option-boolean.tmpl \
option-conflict.tmpl \
option-header.tmpl \
@@ -155,5 +156,5 @@ uninstall-languages:
#
-# End of "$Id: Makefile 5609 2006-05-30 20:31:10Z mike $".
+# End of "$Id: Makefile 5878 2006-08-24 15:55:42Z mike $".
#
diff --git a/templates/es/norestart.tmpl b/templates/es/norestart.tmpl
new file mode 100644
index 000000000..b4cb36c4f
--- /dev/null
+++ b/templates/es/norestart.tmpl
@@ -0,0 +1,2 @@
+<p>No se ha reiniciado el servidor debido a que no se han hecho
+cambios en la configuraci&oacute;n...</p>
diff --git a/templates/job-cancel.tmpl b/templates/job-cancel.tmpl
index fbdda31dd..2bc5a13d5 100644
--- a/templates/job-cancel.tmpl
+++ b/templates/job-cancel.tmpl
@@ -1 +1 @@
-<P><A HREF="{job_printer_uri}">Job {job_id}</A> has been cancelled.
+<P><A HREF="{job_printer_uri}">Job {job_id}</A> has been canceled.
diff --git a/templates/jobs.tmpl b/templates/jobs.tmpl
index 08d207849..1827d77a9 100644
--- a/templates/jobs.tmpl
+++ b/templates/jobs.tmpl
@@ -19,7 +19,7 @@
<TD>{job_media_sheets_completed=0?Unknown:{?job_media_sheets_completed}}</TD>
<TD>{job_state=3?pending since<BR>{time_at_creation}:{job_state=4?held since<BR>{time_at_creation}:
{job_state=5?processing since<BR>{time_at_processing}:{job_state=6?stopped:
-{job_state=7?cancelled at<BR>{time_at_completed}:{job_state=8?aborted:completed at<BR>{time_at_completed}}}}}}}&nbsp;</TD>
+{job_state=7?canceled at<BR>{time_at_completed}:{job_state=8?aborted:completed at<BR>{time_at_completed}}}}}}}&nbsp;</TD>
<TD>
{job_preserved>0?
<A HREF="/jobs/?op=restart-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
diff --git a/templates/norestart.tmpl b/templates/norestart.tmpl
new file mode 100644
index 000000000..402e0f997
--- /dev/null
+++ b/templates/norestart.tmpl
@@ -0,0 +1,2 @@
+<p>The server was not restarted because no changes were made to
+the configuration...</p>
diff --git a/test/4.2-cups-printer-ops.test b/test/4.2-cups-printer-ops.test
index 54189002f..1be448e3b 100644
--- a/test/4.2-cups-printer-ops.test
+++ b/test/4.2-cups-printer-ops.test
@@ -1,5 +1,5 @@
#
-# "$Id: 4.2-cups-printer-ops.test 5493 2006-05-05 16:33:57Z mike $"
+# "$Id: 4.2-cups-printer-ops.test 5833 2006-08-16 20:05:58Z mike $"
#
# Verify that the CUPS printer operations work.
#
@@ -105,7 +105,7 @@
ATTR name requesting-user-name $user
GROUP subscription
- ATTR uri notify-recipient testnotify
+ ATTR uri notify-recipient testnotify://
ATTR keyword notify-events printer-added,printer-modified,printer-deleted
# What statuses are OK?
@@ -258,5 +258,5 @@
}
#
-# End of "$Id: 4.2-cups-printer-ops.test 5493 2006-05-05 16:33:57Z mike $"
+# End of "$Id: 4.2-cups-printer-ops.test 5833 2006-08-16 20:05:58Z mike $"
#
diff --git a/test/4.4-subscription-ops.test b/test/4.4-subscription-ops.test
index c3098ef07..4126c11d7 100644
--- a/test/4.4-subscription-ops.test
+++ b/test/4.4-subscription-ops.test
@@ -1,5 +1,5 @@
#
-# "$Id: 4.4-subscription-ops.test 4840 2005-11-14 21:53:30Z mike $"
+# "$Id: 4.4-subscription-ops.test 5833 2006-08-16 20:05:58Z mike $"
#
# Verify that the CUPS subscription operations work.
#
@@ -18,7 +18,7 @@
ATTR uri printer-uri $method://$hostname:$port/printers/Test1
GROUP subscription
- ATTR uri notify-recipient testnotify
+ ATTR uri notify-recipient testnotify://
ATTR keyword notify-events printer-state-changed
ATTR integer notify-lease-duration 5
@@ -71,12 +71,12 @@
ATTR uri printer-uri $method://$hostname:$port/printers/Test1
GROUP subscription
- ATTR uri notify-recipient testnotify
+ ATTR uri notify-recipient testnotify://
ATTR keyword notify-events printer-state-changed
ATTR integer notify-lease-duration 5
GROUP subscription
- ATTR uri notify-recipient testnotify
+ ATTR uri notify-recipient testnotify://
ATTR keyword notify-events printer-config-changed
ATTR integer notify-lease-duration 5
@@ -118,5 +118,5 @@
}
#
-# End of "$Id: 4.4-subscription-ops.test 4840 2005-11-14 21:53:30Z mike $"
+# End of "$Id: 4.4-subscription-ops.test 5833 2006-08-16 20:05:58Z mike $"
#
diff --git a/test/ipptest.c b/test/ipptest.c
index 8a294e9a0..252e1dffd 100644
--- a/test/ipptest.c
+++ b/test/ipptest.c
@@ -1,5 +1,5 @@
/*
- * "$Id: ipptest.c 5741 2006-07-17 18:36:20Z mike $"
+ * "$Id: ipptest.c 5878 2006-08-24 15:55:42Z mike $"
*
* IPP test command for the Common UNIX Printing System (CUPS).
*
@@ -838,7 +838,9 @@ print_attr(ipp_attribute_t *attr) /* I - Attribute to print */
return;
}
- printf(" %s (%s) = ", attr->name, get_tag_string(attr->value_tag));
+ printf(" %s (%s%s) = ", attr->name,
+ attr->num_values > 1 ? "1setOf " : "",
+ get_tag_string(attr->value_tag));
switch (attr->value_tag)
{
@@ -922,5 +924,5 @@ usage(const char *option) /* I - Option string or NULL */
/*
- * End of "$Id: ipptest.c 5741 2006-07-17 18:36:20Z mike $".
+ * End of "$Id: ipptest.c 5878 2006-08-24 15:55:42Z mike $".
*/
diff --git a/tools/testosx b/tools/testosx
index 655853a3b..2c0715e1f 100755
--- a/tools/testosx
+++ b/tools/testosx
@@ -45,12 +45,15 @@ if test -x /bin/launchctl; then
cat >$pkgdir/Resources/postflight <<EOF
#!/bin/sh
-# Remove old startup item, we use launchd now...
+# Remove old startup item and xinetd config file, we use launchd now...
rm -f /System/Library/StartupItems/PrintingServices/PrintingServices
+rm -f /etc/xinetd.d/cups-lpd
# Tell launchd to reload cupsd...
launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
+launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
+launchctl load /System/Library/LaunchDaemons/org.cups.cupsd-lpd.plist
EOF
else
cat >$pkgdir/Resources/postflight <<EOF