From e07d4801f9846b9155d4c63872f51b18d8537d01 Mon Sep 17 00:00:00 2001 From: msweet Date: Wed, 22 Apr 2009 17:28:12 +0000 Subject: [PATCH] Merge changes from CUPS 1.4svn-r8540. git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1432 a1ca3aef-8c08-0410-bb20-df032aa958be --- CHANGES-1.3.txt | 17 +- CHANGES.txt | 19 +- INSTALL.txt | 14 +- Makedefs.in | 13 +- backend/dnssd.c | 14 +- backend/ipp.c | 28 ++- backend/lpd.c | 25 +- backend/snmp-supplies.c | 2 +- backend/testbackend.c | 58 +++-- berkeley/Makefile | 4 +- conf/Makefile | 9 +- config-scripts/cups-common.m4 | 2 +- config-scripts/cups-directories.m4 | 13 +- config-scripts/cups-gssapi.m4 | 3 +- config-scripts/cups-pap.m4 | 4 +- config.h.in | 1 + cups/adminutil.c | 2 +- cups/array.c | 36 +-- cups/attr.c | 6 +- cups/auth.c | 191 +++++++------- cups/backchannel.c | 8 +- cups/conflicts.c | 98 +++++--- cups/debug.c | 67 ++++- cups/debug.h | 20 +- cups/dest.c | 30 +-- cups/dir.c | 23 +- cups/emit.c | 16 +- cups/encode.c | 34 +-- cups/file.c | 133 +++++----- cups/getdevices.c | 37 +-- cups/getputfile.c | 16 +- cups/globals.h | 1 + cups/http-addr.c | 21 +- cups/http-addrlist.c | 8 +- cups/http-support.c | 32 +-- cups/http.c | 191 ++++++++------ cups/ipp-support.c | 46 +--- cups/ipp.c | 270 ++++++++++---------- cups/language.c | 45 ++-- cups/localize.c | 14 +- cups/mark.c | 14 +- cups/options.c | 54 ++-- cups/page.c | 12 +- cups/ppd.c | 64 +++-- cups/request.c | 73 +++--- cups/sidechannel.c | 16 +- cups/snmp.c | 82 +++--- cups/string.c | 22 +- cups/string.h | 2 +- cups/testarray.c | 39 +-- cups/transcode.c | 154 ++++++------ cups/usersys.c | 386 +++++++++++++++-------------- cups/util.c | 51 ++-- doc/de/index.html.in | 2 +- doc/es/index.html.in | 2 +- doc/help/ref-cupsd-conf.html.in | 14 -- doc/index.html.in | 2 +- doc/ja/index.html.in | 2 +- doc/pl/index.html.in | 2 +- doc/ru/index.html.in | 2 +- filter/image-private.h | 4 +- filter/pstops.c | 23 +- install-sh | 279 +++++++++------------ man/cupsd.conf.man.in | 11 +- notifier/Makefile | 3 +- scheduler/Makefile | 35 +-- scheduler/auth.c | 299 ++++++++++++++-------- scheduler/auth.h | 5 +- scheduler/client.c | 369 +++++++++++++++------------ scheduler/client.h | 5 +- scheduler/conf.c | 127 ++++++++-- scheduler/conf.h | 21 +- scheduler/dirsvc.c | 86 ++++++- scheduler/dirsvc.h | 4 +- scheduler/ipp.c | 123 ++------- scheduler/job.c | 149 ++++++----- scheduler/job.h | 1 + scheduler/log.c | 3 +- scheduler/main.c | 22 +- scheduler/network.c | 6 +- scheduler/network.h | 3 +- scheduler/printers.c | 29 ++- scheduler/printers.h | 2 +- scheduler/process.c | 16 +- scheduler/sysman.c | 63 +++-- systemv/Makefile | 37 +-- templates/de/header.tmpl.in | 2 +- templates/de/help-printable.tmpl | 2 +- templates/es/header.tmpl.in | 2 +- templates/es/help-printable.tmpl | 2 +- templates/header.tmpl.in | 2 +- templates/help-printable.tmpl | 2 +- templates/ja/header.tmpl.in | 2 +- templates/ja/help-printable.tmpl | 2 +- templates/pl/header.tmpl.in | 2 +- templates/pl/help-printable.tmpl | 2 +- templates/ru/header.tmpl.in | 2 +- templates/ru/help-printable.tmpl | 4 +- test/4.2-cups-printer-ops.test | 42 ++++ test/5.4-lpstat.sh | 14 +- test/ipp-backend.test | 22 ++ test/run-stp-tests.sh | 27 +- 102 files changed, 2476 insertions(+), 1946 deletions(-) create mode 100644 test/ipp-backend.test diff --git a/CHANGES-1.3.txt b/CHANGES-1.3.txt index dd58bdff4..644ff8b33 100644 --- a/CHANGES-1.3.txt +++ b/CHANGES-1.3.txt @@ -1,12 +1,24 @@ CHANGES-1.3.txt --------------- +CHANGES IN CUPS V1.3.11 + + - "lpstat -h server" showed non-shared printers (STR #3147) + - "make check" did not work on Linux (STR #3161) + + CHANGES IN CUPS V1.3.10 - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056, STR #3057) + - SECURITY: The scheduler now protects against DNS rebinding attacks + (STR #3118) + - SECURITY: Fixed TIFF integer overflow in image filters (STR #3031) - The scheduler did not support the job-hold-until attribute with the Restart-Job operation (STR #3130) + - SECURITY: The PNG image reading code did not validate the + image size properly, leading to a potential buffer overflow + (STR #2974) - The rastertohp driver did not set the 1-sided printing mode when needed (STR #3131) - Now use a wrapper program instead of our fork of the Xpdf code to @@ -81,11 +93,6 @@ CHANGES IN CUPS V1.3.10 - The scheduler now rejects ATTR: messages with empty values. - The scheduler could consume all CPU handling closed connections (STR #2988) - - The scheduler now protects against DNS rebinding attacks on - localhost. - - SECURITY: The PNG image reading code did not validate the - image size properly, leading to a potential buffer overflow - (STR #2974) - Fixed some configure script bugs with rc/xinetd directories (STR #2970) - The Epson sample driver PPDs contained errors (STR #2979) diff --git a/CHANGES.txt b/CHANGES.txt index ff69828d0..93a428e1f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -CHANGES.txt - 2009-04-03 +CHANGES.txt - 2009-04-21 ------------------------ CHANGES IN CUPS V1.4b3 @@ -8,6 +8,17 @@ CHANGES IN CUPS V1.4b3 Russian and partial localizations for Chinese, Danish, Finnish, French, Italian, Korean, Norwegian, Portuguese, and Swedish (STR #3096, STR #3098, STR #3109, STR #3111, STR #3141) + - Make some fairly substantial changes to the Kerberos support code so + that CUPS can work in multi-realm environments and does not require + delegatable credentials. Shared printing still requires delegation, + however "delegation by policy" can be enabled in the KDC to make this + all work. + - "AccessLogLevel actions" did not hide client-error-not-found errors. + - AP_FIRST_InputSlot did not work with number-up. + - cupsBackChannelRead() and cupsBackChannelWrite() could fail due to a + lack of kernel buffers. + - The IPP and LPD backends did not respond to side-channel requests + while copying print data to a temporary file. - cupsWriteRequestData() flushed the output buffer unnecessarily, causing reduced performance in some situations. - If a CGI process died before sending its MIME headers, the request @@ -43,9 +54,9 @@ CHANGES IN CUPS V1.4b3 status operations. - ppdOpen*() incorrectly loaded PPDs with multiple JobPatchFile keywords. - - The network backends no longer report the SNMP "offline" status bit - since some printers report this status when the printer is busy - printing, warming up, etc. + - The network backends no longer report the SNMP "offline" or + maintenance status bits since they are inconsistently implemented and + often unreliable. - The scheduler no longer logs child processes killed via SIGKILL as "crashed". - The printer link shown on the "job moved" template was bad (STR #3085) diff --git a/INSTALL.txt b/INSTALL.txt index c3c9088c9..fbc2b3c39 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -1,4 +1,4 @@ -INSTALL - CUPS v1.4b2 - 2008-12-15 +INSTALL - CUPS v1.4b3 - 2009-04-20 ---------------------------------- This file describes how to compile and install CUPS from source code. For more @@ -179,9 +179,15 @@ GETTING DEBUG LOGGING FROM CUPS When configured with the "--enable-debug-printfs" option, CUPS compiles in additional debug logging support in the scheduler, CUPS API, and CUPS - Imaging API. Set the CUPS_DEBUG_LOG environment variable to a filename to - append logging information at run-time. Use the name "-" to send the - messages to stderr. + Imaging API. The following environment variables are used to enable and + control debug logging: + + CUPS_DEBUG_FILTER Specifies a POSIX regular expression to control + which messages are logged. + CUPS_DEBUG_LEVEL Specifies a number from 0 to 9 to control the + verbosity of the logging. The default level is 1. + CUPS_DEBUG_LOG Specifies a log file to append to; use the name "-" + to send the messages to stderr. REPORTING PROBLEMS diff --git a/Makedefs.in b/Makedefs.in index 1c182ed0b..a816ec274 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -36,18 +36,17 @@ RMDIR = @RMDIR@ SED = @SED@ SHELL = /bin/sh - # # Installation programs... # -INSTALL_BIN = $(LIBTOOL) $(INSTALL) -m 755 @INSTALL_STRIP@ -INSTALL_CONFIG = $(INSTALL) -m @CUPS_CONFIG_FILE_PERM@ -INSTALL_DATA = $(INSTALL) -m 644 +INSTALL_BIN = $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@ +INSTALL_CONFIG = $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@ +INSTALL_DATA = $(INSTALL) -c -m 444 INSTALL_DIR = $(INSTALL) -d -INSTALL_LIB = $(LIBTOOL) $(INSTALL) -m 755 @INSTALL_STRIP@ -INSTALL_MAN = $(INSTALL) -m 644 -INSTALL_SCRIPT = $(INSTALL) -m 755 +INSTALL_LIB = $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@ +INSTALL_MAN = $(INSTALL) -c -m 444 +INSTALL_SCRIPT = $(INSTALL) -c -m 555 # # Default user, group, and system groups for the scheduler... diff --git a/backend/dnssd.c b/backend/dnssd.c index be08ddd7a..5cdf16083 100644 --- a/backend/dnssd.c +++ b/backend/dnssd.c @@ -489,13 +489,10 @@ exec_backend(char **argv) /* I - Command-line arguments */ * Resolve the device URI... */ + job_canceled = -1; + if ((resolved_uri = cupsBackendDeviceURI(argv)) == NULL) - { - if (job_canceled) - exit(CUPS_BACKEND_OK); - else - exit(CUPS_BACKEND_FAILED); - } + exit(CUPS_BACKEND_FAILED); /* * Extract the scheme from the URI... @@ -869,7 +866,10 @@ query_callback( static void sigterm_handler(int sig) /* I - Signal number (unused) */ { - job_canceled = 1; + if (job_canceled) + exit(CUPS_BACKEND_OK); + else + job_canceled = 1; } diff --git a/backend/ipp.c b/backend/ipp.c index fa0694c03..f71d6186c 100644 --- a/backend/ipp.c +++ b/backend/ipp.c @@ -412,12 +412,22 @@ main(int argc, /* I - Number of command-line args */ * Copy stdin to a temporary file... */ - int fd; /* File descriptor */ - char buffer[8192]; /* Buffer for copying */ - int bytes; /* Number of bytes read */ - off_t tbytes; /* Total bytes copied */ + int fd; /* File descriptor */ + http_addrlist_t *addrlist; /* Address list */ + char buffer[8192]; /* Buffer for copying */ + int bytes; /* Number of bytes read */ + off_t tbytes; /* Total bytes copied */ + if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, "1")) == NULL) + { + _cupsLangPrintf(stderr, _("ERROR: Unable to locate printer \'%s\'!\n"), + hostname); + return (CUPS_BACKEND_STOP); + } + + snmp_fd = _cupsSNMPOpen(addrlist->addr.addr.sa_family); + if ((fd = cupsTempFd(tmpfilename, sizeof(tmpfilename))) < 0) { _cupsLangPrintError(_("ERROR: Unable to create temporary file")); @@ -429,6 +439,7 @@ main(int argc, /* I - Number of command-line args */ tbytes = 0; while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) + { if (write(fd, buffer, bytes) < bytes) { _cupsLangPrintError(_("ERROR: Unable to write to temporary file")); @@ -439,6 +450,15 @@ main(int argc, /* I - Number of command-line args */ else tbytes += bytes; + if (snmp_fd >= 0) + backendCheckSideChannel(snmp_fd, &(addrlist->addr)); + } + + if (snmp_fd >= 0) + _cupsSNMPClose(snmp_fd); + + httpAddrFreeList(addrlist); + close(fd); /* diff --git a/backend/lpd.c b/backend/lpd.c index beebc7c37..b15f21581 100644 --- a/backend/lpd.c +++ b/backend/lpd.c @@ -424,10 +424,21 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ * Copy stdin to a temporary file... */ - char buffer[8192]; /* Buffer for copying */ - int bytes; /* Number of bytes read */ + http_addrlist_t *addrlist; /* Address list */ + int snmp_fd; /* SNMP socket */ + char buffer[8192]; /* Buffer for copying */ + int bytes; /* Number of bytes read */ + if ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, "1")) == NULL) + { + _cupsLangPrintf(stderr, _("ERROR: Unable to locate printer \'%s\'!\n"), + hostname); + return (CUPS_BACKEND_STOP); + } + + snmp_fd = _cupsSNMPOpen(addrlist->addr.addr.sa_family); + if ((fd = cupsTempFd(tmpfilename, sizeof(tmpfilename))) < 0) { _cupsLangPrintError(_("ERROR: Unable to create temporary file")); @@ -437,6 +448,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ _cupsLangPuts(stderr, _("INFO: Copying print data...\n")); while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) + { if (write(fd, buffer, bytes) < bytes) { _cupsLangPrintError(_("ERROR: Unable to write to temporary file")); @@ -444,6 +456,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ unlink(tmpfilename); return (CUPS_BACKEND_FAILED); } + + if (snmp_fd >= 0) + backendCheckSideChannel(snmp_fd, &(addrlist->addr)); + } + + if (snmp_fd >= 0) + _cupsSNMPClose(snmp_fd); + + httpAddrFreeList(addrlist); } else if (argc == 6) { diff --git a/backend/snmp-supplies.c b/backend/snmp-supplies.c index 50e363ed0..8a0d09f5a 100644 --- a/backend/snmp-supplies.c +++ b/backend/snmp-supplies.c @@ -135,7 +135,7 @@ static const backend_state_t const printer_states[] = { CUPS_TC_doorOpen, "door-open-report" }, { CUPS_TC_jammed, "media-jam-warning" }, /* { CUPS_TC_offline, "offline-report" }, */ /* unreliable */ - { CUPS_TC_serviceRequested | CUPS_TC_overduePreventMaint, "service-needed-warning" }, + /* { CUPS_TC_serviceRequested | CUPS_TC_overduePreventMaint, "service-needed-warning" }, */ /* unreliable */ { CUPS_TC_inputTrayMissing, "input-tray-missing-warning" }, { CUPS_TC_outputTrayMissing, "output-tray-missing-warning" }, { CUPS_TC_markerSupplyMissing, "marker-supply-missing-warning" }, diff --git a/backend/testbackend.c b/backend/testbackend.c index 74a0f1e5a..2c364f533 100644 --- a/backend/testbackend.c +++ b/backend/testbackend.c @@ -58,7 +58,8 @@ main(int argc, /* I - Number of command-line args */ char *argv[]) /* I - Command-line arguments */ { int first_arg, /* First argument for backend */ - do_query = 0, /* Do PostScript query? */ + do_ps = 0, /* Do PostScript query+test? */ + do_pcl = 0, /* Do PCL query+test? */ do_side_tests = 0, /* Test side-channel ops? */ do_trickle = 0, /* Trickle data to backend */ do_walk = 0, /* Do OID lookup (0) or walking (1) */ @@ -84,8 +85,10 @@ main(int argc, /* I - Number of command-line args */ first_arg ++) if (!strcmp(argv[first_arg], "-d")) show_log = 1; + else if (!strcmp(argv[first_arg], "-pcl")) + do_pcl = 1; else if (!strcmp(argv[first_arg], "-ps")) - do_query = 1; + do_ps = 1; else if (!strcmp(argv[first_arg], "-s")) do_side_tests = 1; else if (!strcmp(argv[first_arg], "-t")) @@ -157,15 +160,15 @@ main(int argc, /* I - Number of command-line args */ * Execute the trickle process as needed... */ - if (do_trickle || do_query) + if (do_trickle || do_pcl || do_ps) { pipe(data_fds); if ((pid = fork()) == 0) { /* - * Trickle/query child comes here... Rearrange file descriptors so that - * FD + * Trickle/query child comes here. Rearrange file descriptors so that + * FD 1, 3, and 4 point to the backend... */ close(0); @@ -203,12 +206,25 @@ main(int argc, /* I - Number of command-line args */ else { /* - * Do a simple PostScript query job to get the default page size. + * Do PS or PCL query + test pages. */ - char buffer[1024]; /* Buffer for response data */ - ssize_t bytes; /* Number of bytes of response data */ - static const char *ps_query = /* PostScript query file */ + char buffer[1024]; /* Buffer for response data */ + ssize_t bytes; /* Number of bytes of response data */ + double timeout; /* Timeout */ + const char *data; /* Data to send */ + static const char *pcl_data = /* PCL data */ + "\033%-12345X@PJL\r\n" + "@PJL JOB NAME = \"Hello, World!\"\r\n" + "@PJL INFO USTATUS\r\n" + "@PJL ENTER LANGUAGE = PCL\r\n" + "\033E" + "Hello, World!\n" + "\014" + "\033%-12345X@PJL\r\n" + "@PJL EOJ NAME=\"Hello, World!\"\r\n" + "\033%-12345X"; + static const char *ps_data = /* PostScript data */ "%!\n" "save\n" "product = flush\n" @@ -240,14 +256,27 @@ main(int argc, /* I - Number of command-line args */ " {exch pop exit} {pop} ifelse\n" "} bind forall\n" "= flush pop pop\n" + "/Courier findfont 12 scalefont setfont\n" + "0 setgray 36 720 moveto (Hello, ) show product show (!) show\n" + "showpage\n" "restore\n" "\004"; - write(1, ps_query, strlen(ps_query)); + if (do_pcl) + data = pcl_data; + else + data = ps_data; + + write(1, data, strlen(data)); write(2, "DEBUG: START\n", 13); - while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 60.0)) > 0) + timeout = 60.0; + while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), + timeout)) > 0) + { write(2, buffer, bytes); + timeout = 5.0; + } write(2, "\nDEBUG: END\n", 12); } @@ -272,7 +301,7 @@ main(int argc, /* I - Number of command-line args */ * Child comes here... */ - if (do_trickle || do_query) + if (do_trickle || do_ps) { close(0); dup(data_fds[0]); @@ -311,7 +340,7 @@ main(int argc, /* I - Number of command-line args */ * Parent comes here, setup back and side channel file descriptors... */ - if (do_trickle || do_query) + if (do_trickle || do_ps) { close(data_fds[0]); close(data_fds[1]); @@ -438,7 +467,8 @@ usage(void) puts(" -d Show log messages from backend."); puts(" -oid OID Lookup the specified SNMP OID."); puts(" (.1.3.6.1.2.1.43.10.2.1.4.1.1 is a good one for printers)"); - puts(" -ps Send PostScript query code to backend."); + puts(" -pcl Send PCL+PJL query and test page to backend."); + puts(" -ps Send PostScript query and test page to backend."); puts(" -s Do side-channel + SNMP tests."); puts(" -t Send spaces slowly to backend ('trickle')."); puts(" -walk OID Walk the specified SNMP OID."); diff --git a/berkeley/Makefile b/berkeley/Makefile index 346bc17fd..d294e6d0c 100644 --- a/berkeley/Makefile +++ b/berkeley/Makefile @@ -3,7 +3,7 @@ # # Berkeley commands makefile for the Common UNIX Printing System (CUPS). # -# Copyright 2007-2008 by Apple Inc. +# Copyright 2007-2009 by Apple Inc. # Copyright 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the @@ -76,10 +76,12 @@ install-data: # install-exec: + echo Installing Berkeley user printing commands in $(BINDIR)... $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_BIN) lpq $(BINDIR) $(INSTALL_BIN) lpr $(BINDIR) $(INSTALL_BIN) lprm $(BINDIR) + echo Installing Berkeley admin printing commands in $(BINDIR)... $(INSTALL_DIR) -m 755 $(SBINDIR) $(INSTALL_BIN) lpc $(SBINDIR) if test "x$(SYMROOT)" != "x"; then \ diff --git a/conf/Makefile b/conf/Makefile index e9ef1f489..e8cdbfc10 100644 --- a/conf/Makefile +++ b/conf/Makefile @@ -72,15 +72,12 @@ install: all install-data install-headers install-libs install-exec install-data: for file in $(KEEP); do \ if test -r $(SERVERROOT)/$$file ; then \ - $(INSTALL_CONFIG) $$file $(SERVERROOT)/$$file.N ; \ - chgrp $(CUPS_GROUP) $(SERVERROOT)/$$file.N || true; \ + $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.N ; \ else \ - $(INSTALL_CONFIG) $$file $(SERVERROOT) ; \ - chgrp $(CUPS_GROUP) $(SERVERROOT)/$$file || true; \ + $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT) ; \ fi ; \ done - $(INSTALL_CONFIG) cupsd.conf $(SERVERROOT)/cupsd.conf.default - -chgrp $(CUPS_GROUP) $(SERVERROOT)/cupsd.conf.default + $(INSTALL_CONFIG) -g $(CUPS_GROUP) cupsd.conf $(SERVERROOT)/cupsd.conf.default $(INSTALL_DIR) -m 755 $(DATADIR)/mime for file in $(REPLACE); do \ if test -r $(DATADIR)/mime/$$file ; then \ diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4 index bd763894e..7ab5f0ebf 100644 --- a/config-scripts/cups-common.m4 +++ b/config-scripts/cups-common.m4 @@ -65,7 +65,7 @@ fi AC_SUBST(CUPS_HTMLVIEW) AC_MSG_CHECKING(for install-sh script) -INSTALL="`pwd`/install-sh -c" +INSTALL="`pwd`/install-sh" AC_SUBST(INSTALL) AC_MSG_RESULT(using $INSTALL) diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4 index 78a4c96d3..6f969aae2 100644 --- a/config-scripts/cups-directories.m4 +++ b/config-scripts/cups-directories.m4 @@ -411,8 +411,17 @@ AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups") AC_SUBST(CUPS_SERVERROOT) # Transient run-time state -CUPS_STATEDIR="$localstatedir/run/cups" -AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$localstatedir/run/cups") +case "$uname" in + Darwin*) + # Darwin (Mac OS X) + CUPS_STATEDIR="$CUPS_SERVERROOT" + ;; + *) + # All others + CUPS_STATEDIR="$localstatedir/run/cups" + ;; +esac +AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR") AC_SUBST(CUPS_STATEDIR) dnl diff --git a/config-scripts/cups-gssapi.m4 b/config-scripts/cups-gssapi.m4 index 0a3458b03..daa8db668 100644 --- a/config-scripts/cups-gssapi.m4 +++ b/config-scripts/cups-gssapi.m4 @@ -19,6 +19,7 @@ dnl AC_ARG_ENABLE(gssapi, [ --disable-gssapi disable GSSAPI support]) LIBGSSAPI="" +AC_SUBST(LIBGSSAPI) if test x$enable_gssapi != xno; then AC_PATH_PROG(KRB5CONFIG, krb5-config) @@ -73,6 +74,7 @@ if test x$enable_gssapi != xno; then AC_CHECK_FUNC(gsskrb5_register_acceptor_identity, AC_DEFINE(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY)) AC_CHECK_FUNC(krb5_cc_new_unique, AC_DEFINE(HAVE_KRB5_CC_NEW_UNIQUE)) + AC_CHECK_FUNC(krb5_ipc_client_set_target_uid, AC_DEFINE(HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID)) AC_MSG_CHECKING(for GSS_C_NT_HOSTBASED_SERVICE) if test $ac_cv_header_gssapi_gssapi_h = yes; then @@ -115,7 +117,6 @@ else CUPS_DEFAULT_GSSSERVICENAME="" fi -AC_SUBST(LIBGSSAPI) AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GSSSERVICENAME, "$CUPS_DEFAULT_GSSSERVICENAME") dnl diff --git a/config-scripts/cups-pap.m4 b/config-scripts/cups-pap.m4 index e3509011a..b532e0370 100644 --- a/config-scripts/cups-pap.m4 +++ b/config-scripts/cups-pap.m4 @@ -1,5 +1,5 @@ dnl -dnl "$Id: cups-pam.m4 5466 2006-04-26 19:52:27Z mike $" +dnl "$Id$" dnl dnl PAP (AppleTalk) stuff for the Common UNIX Printing System (CUPS). dnl @@ -27,5 +27,5 @@ if test x$enable_pap = xyes -a $uname = Darwin; then fi dnl -dnl End of "$Id: cups-pam.m4 5466 2006-04-26 19:52:27Z mike $". +dnl End of "$Id$". dnl diff --git a/config.h.in b/config.h.in index f577eb285..b17968927 100644 --- a/config.h.in +++ b/config.h.in @@ -541,6 +541,7 @@ #undef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE #undef HAVE_KRB5_CC_NEW_UNIQUE +#undef HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID #undef HAVE_KRB5_H #undef HAVE_HEIMDAL diff --git a/cups/adminutil.c b/cups/adminutil.c index 318fb730e..a46d34f69 100644 --- a/cups/adminutil.c +++ b/cups/adminutil.c @@ -2208,7 +2208,7 @@ do_samba_command(const char *command, /* I - Command to run */ if (logfile) _cupsLangPuts(logfile, "\n"); - DEBUG_printf(("status=%d\n", status)); + DEBUG_printf(("9do_samba_command: status=%d", status)); if (WIFEXITED(status)) return (WEXITSTATUS(status)); diff --git a/cups/array.c b/cups/array.c index 4f40d7f4a..957ed913b 100644 --- a/cups/array.c +++ b/cups/array.c @@ -3,7 +3,7 @@ * * Sorted array routines for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -109,7 +109,7 @@ int /* O - 1 on success, 0 on failure */ cupsArrayAdd(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { - DEBUG_printf(("cupsArrayAdd(a=%p, e=%p)\n", a, e)); + DEBUG_printf(("2cupsArrayAdd(a=%p, e=%p)", a, e)); /* * Range check input... @@ -117,7 +117,7 @@ cupsArrayAdd(cups_array_t *a, /* I - Array */ if (!a || !e) { - DEBUG_puts("cupsArrayAdd: returning 0"); + DEBUG_puts("3cupsArrayAdd: returning 0"); return (0); } @@ -505,7 +505,7 @@ int /* O - 0 on failure, 1 on success */ cupsArrayInsert(cups_array_t *a, /* I - Array */ void *e) /* I - Element */ { - DEBUG_printf(("cupsArrayInsert(a=%p, e=%p)\n", a, e)); + DEBUG_printf(("2cupsArrayInsert(a=%p, e=%p)", a, e)); /* * Range check input... @@ -513,7 +513,7 @@ cupsArrayInsert(cups_array_t *a, /* I - Array */ if (!a || !e) { - DEBUG_puts("cupsArrayInsert: returning 0"); + DEBUG_puts("3cupsArrayInsert: returning 0"); return (0); } @@ -846,7 +846,7 @@ cups_array_add(cups_array_t *a, /* I - Array */ diff; /* Comparison with current element */ - DEBUG_printf(("cups_array_add(a=%p, e=%p, insert=%d)\n", a, e, insert)); + DEBUG_printf(("7cups_array_add(a=%p, e=%p, insert=%d)", a, e, insert)); /* * Verify we have room for the new element... @@ -879,11 +879,11 @@ cups_array_add(cups_array_t *a, /* I - Array */ temp = realloc(a->elements, count * sizeof(void *)); } - DEBUG_printf(("cups_array_add: count=%d\n", count)); + DEBUG_printf(("9cups_array_add: count=%d", count)); if (!temp) { - DEBUG_puts("cupsAddAdd: allocation failed, returning 0"); + DEBUG_puts("9cups_array_add: allocation failed, returning 0"); return (0); } @@ -978,11 +978,11 @@ cups_array_add(cups_array_t *a, /* I - Array */ if (a->saved[i] >= current) a->saved[i] ++; - DEBUG_printf(("cups_array_add: insert element at index %d...\n", current)); + DEBUG_printf(("9cups_array_add: insert element at index %d...", current)); } #ifdef DEBUG else - DEBUG_printf(("cups_array_add: append element at %d...\n", current)); + DEBUG_printf(("9cups_array_add: append element at %d...", current)); #endif /* DEBUG */ a->elements[current] = e; @@ -991,11 +991,11 @@ cups_array_add(cups_array_t *a, /* I - Array */ #ifdef DEBUG for (current = 0; current < a->num_elements; current ++) - DEBUG_printf(("cups_array_add: a->elements[%d]=%p\n", current, + DEBUG_printf(("9cups_array_add: a->elements[%d]=%p", current, a->elements[current])); #endif /* DEBUG */ - DEBUG_puts("cups_array_add: returning 1"); + DEBUG_puts("9cups_array_add: returning 1"); return (1); } @@ -1017,7 +1017,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ diff; /* Comparison with current element */ - DEBUG_printf(("cups_array_find(a=%p, e=%p, prev=%d, rdiff=%p)\n", a, e, prev, + DEBUG_printf(("7cups_array_find(a=%p, e=%p, prev=%d, rdiff=%p)", a, e, prev, rdiff)); if (a->compare) @@ -1026,7 +1026,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ * Do a binary search for the element... */ - DEBUG_puts("cups_array_find: binary search"); + DEBUG_puts("9cups_array_find: binary search"); if (prev >= 0 && prev < a->num_elements) { @@ -1042,7 +1042,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ * Exact or edge match, return it! */ - DEBUG_printf(("cups_array_find: Returning %d, diff=%d\n", prev, diff)); + DEBUG_printf(("9cups_array_find: Returning %d, diff=%d", prev, diff)); *rdiff = diff; @@ -1082,7 +1082,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ current = (left + right) / 2; diff = (*(a->compare))(e, a->elements[current], a->data); - DEBUG_printf(("cups_array_find: left=%d, right=%d, current=%d, diff=%d\n", + DEBUG_printf(("9cups_array_find: left=%d, right=%d, current=%d, diff=%d", left, right, current, diff)); if (diff == 0) @@ -1115,7 +1115,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ * Do a linear pointer search... */ - DEBUG_puts("cups_array_find: linear search"); + DEBUG_puts("9cups_array_find: linear search"); diff = 1; @@ -1131,7 +1131,7 @@ cups_array_find(cups_array_t *a, /* I - Array */ * Return the closest element and the difference... */ - DEBUG_printf(("cups_array_find: Returning %d, diff=%d\n", current, diff)); + DEBUG_printf(("8cups_array_find: Returning %d, diff=%d", current, diff)); *rdiff = diff; diff --git a/cups/attr.c b/cups/attr.c index f7b1a76b8..c2c6eb512 100644 --- a/cups/attr.c +++ b/cups/attr.c @@ -4,7 +4,7 @@ * PPD model-specific attribute routines for the Common UNIX Printing System * (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -44,8 +44,8 @@ ppdFindAttr(ppd_file_t *ppd, /* I - PPD file data */ *attr; /* Current attribute */ - DEBUG_printf(("ppdFindAttr(ppd=%p, name=\"%s\", spec=\"%s\")\n", ppd, - name ? name : "(null)", spec ? spec : "(null)")); + DEBUG_printf(("2ppdFindAttr(ppd=%p, name=\"%s\", spec=\"%s\")", ppd, name, + spec)); /* * Range check input... diff --git a/cups/auth.c b/cups/auth.c index 332301c81..da37c0bfc 100644 --- a/cups/auth.c +++ b/cups/auth.c @@ -3,7 +3,7 @@ * * Authentication functions for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * This file contains Kerberos support code, copyright 2006 by @@ -20,8 +20,8 @@ * Contents: * * cupsDoAuthentication() - Authenticate a request. - * DEBUG_gss_printf() - Show debug error messages from GSSAPI... - * cups_get_gss_creds() - Get CUPS service credentials for authentication. + * cups_get_gssname() - Get GSSAPI name for authentication. + * cups_gss_printf() - Show error messages from GSSAPI... * cups_local_auth() - Get the local authorization certificate if * available/applicable... */ @@ -62,13 +62,13 @@ extern const char *cssmErrorString(int error); */ #ifdef HAVE_GSSAPI +static gss_name_t cups_get_gssname(http_t *http, const char *service_name); # ifdef DEBUG -static void DEBUG_gss_printf(OM_uint32 major_status, OM_uint32 minor_status, - const char *message); +static void cups_gss_printf(OM_uint32 major_status, OM_uint32 minor_status, + const char *message); # else -# define DEBUG_gss_printf(major, minor, message) -# endif /* DEBUG */ -static gss_name_t cups_get_gss_creds(http_t *http, const char *service_name); +# define cups_gss_printf(major, minor, message) +# endif /* DEBUG */ #endif /* HAVE_GSSAPI */ static int cups_local_auth(http_t *http); @@ -96,11 +96,11 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS _cups_globals_t *cg; /* Global data */ - DEBUG_printf(("cupsDoAuthentication(http=%p, method=\"%s\", resource=\"%s\")\n", + DEBUG_printf(("cupsDoAuthentication(http=%p, method=\"%s\", resource=\"%s\")", http, method, resource)); - DEBUG_printf(("cupsDoAuthentication: digest_tries=%d, userpass=\"%s\"\n", + DEBUG_printf(("2cupsDoAuthentication: digest_tries=%d, userpass=\"%s\"", http->digest_tries, http->userpass)); - DEBUG_printf(("cupsDoAuthentication: WWW-Authenticate=\"%s\"\n", + DEBUG_printf(("2cupsDoAuthentication: WWW-Authenticate=\"%s\"", httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE))); /* @@ -117,7 +117,7 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS { if ((localauth = cups_local_auth(http)) == 0) { - DEBUG_printf(("cupsDoAuthentication: authstring=\"%s\"\n", + DEBUG_printf(("2cupsDoAuthentication: authstring=\"%s\"", http->authstring)); if (http->status == HTTP_UNAUTHORIZED) @@ -199,7 +199,7 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS if (gss_init_sec_context == NULL) { - DEBUG_puts("cupsDoAuthentication: Weak-linked GSSAPI/Kerberos framework " + DEBUG_puts("1cupsDoAuthentication: Weak-linked GSSAPI/Kerberos framework " "is not present"); return (-1); } @@ -207,7 +207,7 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS if (http->status == HTTP_UNAUTHORIZED && http->digest_tries >= 3) { - DEBUG_printf(("cupsDoAuthentication: too many Negotiate tries (%d)\n", + DEBUG_printf(("1cupsDoAuthentication: too many Negotiate tries (%d)", http->digest_tries)); return (-1); @@ -218,9 +218,10 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS if ((gss_service_name = getenv("CUPS_GSSSERVICENAME")) == NULL) gss_service_name = CUPS_DEFAULT_GSSSERVICENAME; else - DEBUG_puts("cupsDoAuthentication: GSS service name set via environment"); + DEBUG_puts("2cupsDoAuthentication: GSS service name set via " + "environment variable"); - http->gssname = cups_get_gss_creds(http, gss_service_name); + http->gssname = cups_get_gssname(http, gss_service_name); } # ifdef USE_SPNEGO /* We don't implement SPNEGO just yet... */ @@ -277,8 +278,10 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &http->gssctx, http->gssname, http->gssmech, - GSS_C_DELEG_FLAG | GSS_C_MUTUAL_FLAG | - GSS_C_INTEG_FLAG, +#ifdef GSS_C_DELEG_POLICY_FLAG + GSS_C_DELEG_POLICY_FLAG | +#endif /* GSS_C_DELEG_POLICY_FLAG */ + GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, &input_token, &http->gssmech, @@ -289,15 +292,15 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS if (GSS_ERROR(major_status)) { -# ifdef DEBUG - DEBUG_gss_printf(major_status, minor_status, - "Unable to initialize security context"); -# endif /* DEBUG */ + cups_gss_printf(major_status, minor_status, + "cupsDoAuthentication: Unable to initialize security " + "context"); return (-1); } if (major_status == GSS_S_CONTINUE_NEEDED) - DEBUG_gss_printf(major_status, minor_status, "Continuation needed!"); + cups_gss_printf(major_status, minor_status, + "cupsDoAuthentication: Continuation needed!"); if (output_token.length > 0 && output_token.length <= 65536) { @@ -326,8 +329,8 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS } else { - DEBUG_printf(("cupsDoAuthentication: Kerberos credentials too large - " - "%d bytes!\n", (int)output_token.length)); + DEBUG_printf(("1cupsDoAuthentication: Kerberos credentials too large - " + "%d bytes!", (int)output_token.length)); gss_release_buffer(&minor_status, &output_token); @@ -369,59 +372,19 @@ cupsDoAuthentication(http_t *http, /* I - Connection to server or @code CUPS httpSetAuthString(http, "Digest", digest); } - DEBUG_printf(("cupsDoAuthentication: authstring=\"%s\"\n", http->authstring)); + DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\"", http->authstring)); return (0); } #ifdef HAVE_GSSAPI -# ifdef DEBUG /* - * 'DEBUG_gss_printf()' - Show debug error messages from GSSAPI... - */ - -static void -DEBUG_gss_printf(OM_uint32 major_status,/* I - Major status code */ - OM_uint32 minor_status,/* I - Minor status code */ - const char *message) /* I - Prefix for error message */ -{ - OM_uint32 err_major_status, /* Major status code for display */ - err_minor_status; /* Minor status code for display */ - OM_uint32 msg_ctx; /* Message context */ - gss_buffer_desc major_status_string = GSS_C_EMPTY_BUFFER, - /* Major status message */ - minor_status_string = GSS_C_EMPTY_BUFFER; - /* Minor status message */ - - - msg_ctx = 0; - err_major_status = gss_display_status(&err_minor_status, - major_status, - GSS_C_GSS_CODE, - GSS_C_NO_OID, - &msg_ctx, - &major_status_string); - - if (!GSS_ERROR(err_major_status)) - gss_display_status(&err_minor_status, minor_status, GSS_C_MECH_CODE, - GSS_C_NULL_OID, &msg_ctx, &minor_status_string); - - printf("%s: %s, %s\n", message, (char *)major_status_string.value, - (char *)minor_status_string.value); - - gss_release_buffer(&err_minor_status, &major_status_string); - gss_release_buffer(&err_minor_status, &minor_status_string); -} -# endif /* DEBUG */ - - -/* - * 'cups_get_gss_creds()' - Get CUPS service credentials for authentication. + * 'cups_get_gssname()' - Get CUPS service credentials for authentication. */ static gss_name_t /* O - Server name */ -cups_get_gss_creds( +cups_get_gssname( http_t *http, /* I - Connection to server */ const char *service_name) /* I - Service name */ { @@ -434,6 +397,10 @@ cups_get_gss_creds( fqdn[HTTP_MAX_URI]; /* Server name buffer */ + DEBUG_printf(("7cups_get_gssname(http=%p, service_name=\"%s\")", http, + service_name)); + + /* * Get the hostname... */ @@ -449,7 +416,7 @@ cups_get_gss_creds( snprintf(buf, sizeof(buf), "%s@%s", service_name, fqdn); - DEBUG_printf(("cups_get_gss_creds: Looking up %s...\n", buf)); + DEBUG_printf(("9cups_get_gssname: Looking up %s...", buf)); token.value = buf; token.length = strlen(buf); @@ -460,15 +427,53 @@ cups_get_gss_creds( if (GSS_ERROR(major_status)) { -# ifdef DEBUG - DEBUG_gss_printf(major_status, minor_status, "gss_import_name() failed"); -# endif /* DEBUG */ - + cups_gss_printf(major_status, minor_status, + "cups_get_gssname: gss_import_name() failed"); return (NULL); } return (server_name); } + + +# ifdef DEBUG +/* + * 'cups_gss_printf()' - Show debug error messages from GSSAPI... + */ + +static void +cups_gss_printf(OM_uint32 major_status,/* I - Major status code */ + OM_uint32 minor_status,/* I - Minor status code */ + const char *message) /* I - Prefix for error message */ +{ + OM_uint32 err_major_status, /* Major status code for display */ + err_minor_status; /* Minor status code for display */ + OM_uint32 msg_ctx; /* Message context */ + gss_buffer_desc major_status_string = GSS_C_EMPTY_BUFFER, + /* Major status message */ + minor_status_string = GSS_C_EMPTY_BUFFER; + /* Minor status message */ + + + msg_ctx = 0; + err_major_status = gss_display_status(&err_minor_status, + major_status, + GSS_C_GSS_CODE, + GSS_C_NO_OID, + &msg_ctx, + &major_status_string); + + if (!GSS_ERROR(err_major_status)) + gss_display_status(&err_minor_status, minor_status, GSS_C_MECH_CODE, + GSS_C_NULL_OID, &msg_ctx, &minor_status_string); + + DEBUG_printf(("8%s: %s, %s", message, (char *)major_status_string.value, + (char *)minor_status_string.value)); + + gss_release_buffer(&err_minor_status, &major_status_string); + gss_release_buffer(&err_minor_status, &minor_status_string); +} +# endif /* DEBUG */ #endif /* HAVE_GSSAPI */ @@ -491,7 +496,8 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ #else int pid; /* Current process ID */ FILE *fp; /* Certificate file */ - char filename[1024], /* Certificate filename */ + char trc[16], /* Try Root Certificate parameter */ + filename[1024], /* Certificate filename */ certificate[33];/* Certificate string */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ # if defined(HAVE_AUTHORIZATION_H) @@ -505,7 +511,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ # endif /* HAVE_AUTHORIZATION_H */ - DEBUG_printf(("cups_local_auth(http=%p) hostaddr=%s, hostname=\"%s\"\n", + DEBUG_printf(("7cups_local_auth(http=%p) hostaddr=%s, hostname=\"%s\"", http, httpAddrString(http->hostaddr, filename, sizeof(filename)), http->hostname)); /* @@ -515,7 +521,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ if (!httpAddrLocalhost(http->hostaddr) && strcasecmp(http->hostname, "localhost") != 0) { - DEBUG_puts("cups_local_auth: Not a local connection!"); + DEBUG_puts("8cups_local_auth: Not a local connection!"); return (1); } @@ -538,7 +544,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ kAuthorizationFlagDefaults, &http->auth_ref); if (status != errAuthorizationSuccess) { - DEBUG_printf(("cups_local_auth: AuthorizationCreate() returned %d (%s)\n", + DEBUG_printf(("8cups_local_auth: AuthorizationCreate() returned %d (%s)", (int)status, cssmErrorString(status))); return (-1); } @@ -573,14 +579,14 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ httpSetAuthString(http, "AuthRef", buffer); - DEBUG_printf(("cups_local_auth: Returning authstring = \"%s\"\n", + DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); } else if (status == errAuthorizationCanceled) return (-1); - DEBUG_printf(("cups_local_auth: AuthorizationCopyRights() returned %d (%s)\n", + DEBUG_printf(("9cups_local_auth: AuthorizationCopyRights() returned %d (%s)", (int)status, cssmErrorString(status))); /* @@ -598,25 +604,34 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ snprintf(filename, sizeof(filename), "%s/certs/%d", cg->cups_statedir, pid); if ((fp = fopen(filename, "r")) == NULL && pid > 0) { - DEBUG_printf(("cups_local_auth: Unable to open file %s: %s\n", - filename, strerror(errno))); - -#ifdef HAVE_GSSAPI /* - * If local certificate authentication isn't available for this PID, - * check if we need Kerberos authentication... + * No certificate for this PID; see if we can get the root certificate... */ + DEBUG_printf(("9cups_local_auth: Unable to open file %s: %s", + filename, strerror(errno))); + +#ifdef HAVE_GSSAPI if (!strncmp(http->fields[HTTP_FIELD_WWW_AUTHENTICATE], "Negotiate", 9)) { /* - * Yes, don't try the root certificate... + * Kerberos required, don't try the root certificate... */ return (1); } #endif /* HAVE_GSSAPI */ + if (!httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "trc", trc, + sizeof(trc))) + { + /* + * Scheduler doesn't want us to use the root certificate... + */ + + return (1); + } + snprintf(filename, sizeof(filename), "%s/certs/0", cg->cups_statedir); fp = fopen(filename, "r"); } @@ -636,7 +651,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ httpSetAuthString(http, "Local", certificate); - DEBUG_printf(("cups_local_auth: Returning authstring = \"%s\"\n", + DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); @@ -665,7 +680,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */ { httpSetAuthString(http, "PeerCred", username); - DEBUG_printf(("cups_local_auth: Returning authstring = \"%s\"\n", + DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"", http->authstring)); return (0); diff --git a/cups/backchannel.c b/cups/backchannel.c index 23caace80..b264b5c89 100644 --- a/cups/backchannel.c +++ b/cups/backchannel.c @@ -76,7 +76,7 @@ cupsBackChannelRead(char *buffer, /* I - Buffer to read into */ else status = select(4, &input, NULL, NULL, &tval); } - while (status < 0 && errno != EINTR); + while (status < 0 && errno != EINTR && errno != EAGAIN); if (status < 0) return (-1); /* Timeout! */ @@ -138,9 +138,9 @@ cupsBackChannelWrite( else status = select(4, NULL, &output, NULL, &tval); } - while (status < 0 && errno != EINTR); + while (status < 0 && errno != EINTR && errno != EAGAIN); - if (status < 0) + if (status <= 0) return (-1); /* Timeout! */ /* @@ -159,7 +159,7 @@ cupsBackChannelWrite( * Write error - abort on fatal errors... */ - if (errno != EINTR) + if (errno != EINTR && errno != EAGAIN) return (-1); } else diff --git a/cups/conflicts.c b/cups/conflicts.c index 254138a49..d6de5a39b 100644 --- a/cups/conflicts.c +++ b/cups/conflicts.c @@ -47,6 +47,7 @@ enum { _PPD_NORMAL_CONSTRAINTS, + _PPD_OPTION_CONSTRAINTS, _PPD_INSTALLABLE_CONSTRAINTS, _PPD_ALL_CONSTRAINTS }; @@ -255,7 +256,7 @@ cupsResolveConflicts( * Resolver loop! */ - DEBUG_printf(("ppdResolveConflicts: Resolver loop with %s!\n", + DEBUG_printf(("1ppdResolveConflicts: Resolver loop with %s!", consts->resolver)); goto error; } @@ -263,14 +264,14 @@ cupsResolveConflicts( if ((resolver = ppdFindAttr(ppd, "cupsUIResolver", consts->resolver)) == NULL) { - DEBUG_printf(("ppdResolveConflicts: Resolver %s not found!\n", + DEBUG_printf(("1ppdResolveConflicts: Resolver %s not found!", consts->resolver)); goto error; } if (!resolver->value) { - DEBUG_printf(("ppdResolveConflicts: Resolver %s has no value!\n", + DEBUG_printf(("1ppdResolveConflicts: Resolver %s has no value!", consts->resolver)); goto error; } @@ -428,7 +429,7 @@ cupsResolveConflicts( (test = ppd_test_constraints(ppd, constptr->option->keyword, constptr->option->defchoice, num_newopts, newopts, - _PPD_ALL_CONSTRAINTS)) == NULL) + _PPD_OPTION_CONSTRAINTS)) == NULL) { /* * That worked... @@ -459,7 +460,7 @@ cupsResolveConflicts( (test = ppd_test_constraints(ppd, constptr->option->keyword, cptr->choice, num_newopts, newopts, - _PPD_ALL_CONSTRAINTS)) == NULL) + _PPD_OPTION_CONSTRAINTS)) == NULL) { /* * This choice works... @@ -480,7 +481,7 @@ cupsResolveConflicts( if (!changed) { - DEBUG_puts("ppdResolveConflicts: Unable to automatically resolve " + DEBUG_puts("1ppdResolveConflicts: Unable to automatically resolve " "constraint!"); goto error; } @@ -519,10 +520,10 @@ cupsResolveConflicts( cupsArrayRestore(ppd->sorted_attrs); - DEBUG_printf(("cupsResolveConflicts: Returning %d options:", num_newopts)); + DEBUG_printf(("1cupsResolveConflicts: Returning %d options:", num_newopts)); #ifdef DEBUG for (i = 0; i < num_newopts; i ++) - DEBUG_printf(("cupsResolveConflicts: options[%d]: %s=%s", i, + DEBUG_printf(("1cupsResolveConflicts: options[%d]: %s=%s", i, newopts[i].name, newopts[i].value)); #endif /* DEBUG */ @@ -542,7 +543,7 @@ cupsResolveConflicts( cupsArrayRestore(ppd->sorted_attrs); - DEBUG_puts("cupsResolveConflicts: Unable to resolve conflicts!"); + DEBUG_puts("1cupsResolveConflicts: Unable to resolve conflicts!"); return (0); } @@ -628,6 +629,9 @@ ppdInstallableConflict( cups_array_t *active; /* Active conflicts */ + DEBUG_printf(("2ppdInstallableConflict(ppd=%p, option=\"%s\", choice=\"%s\")", + ppd, option, choice)); + /* * Range check input... */ @@ -694,6 +698,8 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ *ptr; /* Pointer into option or choice */ + DEBUG_printf(("7ppd_load_constraints(ppd=%p)", ppd)); + /* * Create an array to hold the constraint data... */ @@ -737,7 +743,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if ((consts = calloc(1, sizeof(_ppd_cups_uiconsts_t))) == NULL) { - DEBUG_puts("ppd_load_constraints: Unable to allocate memory for " + DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "UIConstraints!"); return; } @@ -745,7 +751,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if ((constptr = calloc(2, sizeof(_ppd_cups_uiconst_t))) == NULL) { free(consts); - DEBUG_puts("ppd_load_constraints: Unable to allocate memory for " + DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "UIConstraints!"); return; } @@ -775,7 +781,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if (!constptr[0].option || (!constptr[0].choice && oldconst->choice1[0])) { - DEBUG_printf(("ppd_load_constraints: Unknown option *%s %s!\n", + DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", oldconst->option1, oldconst->choice1)); free(consts->constraints); free(consts); @@ -800,7 +806,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if (!constptr[1].option || (!constptr[1].choice && oldconst->choice2[0])) { - DEBUG_printf(("ppd_load_constraints: Unknown option *%s %s!\n", + DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", oldconst->option2, oldconst->choice2)); free(consts->constraints); free(consts); @@ -826,7 +832,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ { if (!constattr->value) { - DEBUG_puts("ppd_load_constraints: Bad cupsUIConstraints value!"); + DEBUG_puts("8ppd_load_constraints: Bad cupsUIConstraints value!"); continue; } @@ -836,13 +842,13 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if (i == 0) { - DEBUG_puts("ppd_load_constraints: Bad cupsUIConstraints value!"); + DEBUG_puts("8ppd_load_constraints: Bad cupsUIConstraints value!"); continue; } if ((consts = calloc(1, sizeof(_ppd_cups_uiconsts_t))) == NULL) { - DEBUG_puts("ppd_load_constraints: Unable to allocate memory for " + DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "cupsUIConstraints!"); return; } @@ -850,7 +856,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if ((constptr = calloc(i, sizeof(_ppd_cups_uiconst_t))) == NULL) { free(consts); - DEBUG_puts("ppd_load_constraints: Unable to allocate memory for " + DEBUG_puts("8ppd_load_constraints: Unable to allocate memory for " "cupsUIConstraints!"); return; } @@ -901,7 +907,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */ if (!constptr->option || (!constptr->choice && choice[0])) { - DEBUG_printf(("ppd_load_constraints: Unknown option *%s %s!\n", + DEBUG_printf(("8ppd_load_constraints: Unknown option *%s %s!", option, choice)); break; } @@ -940,13 +946,14 @@ ppd_test_constraints( const char *value; /* Current value */ - DEBUG_printf(("ppd_test_constraints(ppd=%p, num_options=%d, options=%p, " - "which=%d)\n", ppd, num_options, options, which)); + DEBUG_printf(("7ppd_test_constraints(ppd=%p, option=\"%s\", choice=\"%s\", " + "num_options=%d, options=%p, which=%d)", ppd, option, choice, + num_options, options, which)); if (!ppd->cups_uiconstraints) ppd_load_constraints(ppd); - DEBUG_printf(("ppd_test_constraints: %d constraints!\n", + DEBUG_printf(("9ppd_test_constraints: %d constraints!", cupsArrayCount(ppd->cups_uiconstraints))); cupsArraySave(ppd->marked); @@ -955,9 +962,9 @@ ppd_test_constraints( consts; consts = (_ppd_cups_uiconsts_t *)cupsArrayNext(ppd->cups_uiconstraints)) { - DEBUG_printf(("ppd_test_constraints: installable=%d, resolver=\"%s\", " + DEBUG_printf(("9ppd_test_constraints: installable=%d, resolver=\"%s\", " "num_constraints=%d option1=\"%s\", choice1=\"%s\", " - "option2=\"%s\", choice2=\"%s\", ...\n", + "option2=\"%s\", choice2=\"%s\", ...", consts->installable, consts->resolver, consts->num_constraints, consts->constraints[0].option->keyword, consts->constraints[0].choice ? @@ -966,16 +973,35 @@ ppd_test_constraints( consts->constraints[1].choice ? consts->constraints[1].choice->choice : "")); - if (which != _PPD_ALL_CONSTRAINTS && which != consts->installable) - continue; + if (consts->installable && which < _PPD_INSTALLABLE_CONSTRAINTS) + continue; /* Skip installable option constraint */ + + if (!consts->installable && which == _PPD_INSTALLABLE_CONSTRAINTS) + continue; /* Skip non-installable option constraint */ + + if (which == _PPD_OPTION_CONSTRAINTS && option) + { + /* + * Skip constraints that do not involve the current option... + */ + + for (i = consts->num_constraints, constptr = consts->constraints; + i > 0; + i --, constptr ++) + if (!strcasecmp(constptr->option->keyword, option)) + break; + + if (!i) + continue; + } - DEBUG_puts("ppd_test_constraints: Testing..."); + DEBUG_puts("9ppd_test_constraints: Testing..."); for (i = consts->num_constraints, constptr = consts->constraints; i > 0; i --, constptr ++) { - DEBUG_printf(("ppd_test_constraints: %s=%s?\n", constptr->option->keyword, + DEBUG_printf(("9ppd_test_constraints: %s=%s?", constptr->option->keyword, constptr->choice ? constptr->choice->choice : "")); if (constptr->choice && @@ -1011,7 +1037,7 @@ ppd_test_constraints( if (!value || strcasecmp(value, constptr->choice->choice)) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1026,7 +1052,7 @@ ppd_test_constraints( if (strcasecmp(value, constptr->choice->choice)) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1038,13 +1064,13 @@ ppd_test_constraints( if (strcasecmp(value, constptr->choice->choice)) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } else if (!constptr->choice->marked) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1054,7 +1080,7 @@ ppd_test_constraints( if (!strcasecmp(choice, "None") || !strcasecmp(choice, "Off") || !strcasecmp(choice, "False")) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1064,7 +1090,7 @@ ppd_test_constraints( if (!strcasecmp(value, "None") || !strcasecmp(value, "Off") || !strcasecmp(value, "False")) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1078,7 +1104,7 @@ ppd_test_constraints( !strcasecmp(marked->choice, "Off") || !strcasecmp(marked->choice, "False"))) { - DEBUG_puts("ppd_test_constraints: NO"); + DEBUG_puts("9ppd_test_constraints: NO"); break; } } @@ -1090,13 +1116,13 @@ ppd_test_constraints( active = cupsArrayNew(NULL, NULL); cupsArrayAdd(active, consts); - DEBUG_puts("ppd_test_constraints: Added..."); + DEBUG_puts("9ppd_test_constraints: Added..."); } } cupsArrayRestore(ppd->marked); - DEBUG_printf(("ppd_test_constraints: Found %d active constraints!\n", + DEBUG_printf(("8ppd_test_constraints: Found %d active constraints!", cupsArrayCount(active))); return (active); diff --git a/cups/debug.c b/cups/debug.c index 80f28f1c2..cd622c961 100644 --- a/cups/debug.c +++ b/cups/debug.c @@ -3,7 +3,7 @@ * * Debugging functions for the Common UNIX Printing System (CUPS). * - * Copyright 2008 by Apple Inc. + * Copyright 2008-2009 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright @@ -29,6 +29,7 @@ #include #include #include +#include /* @@ -44,8 +45,11 @@ int _cups_debug_fd = -1; * Local globals... */ -static int debug_init = 0; /* Did we initialize debugging? */ +static regex_t *debug_filter = NULL; + /* Filter expression for messages */ +static int debug_init = 1; /* Did we initialize debugging? */ # ifdef HAVE_PTHREAD_H +static int debug_level = 0;/* Log level (0 to 9) */ static pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER; /* Mutex to control initialization */ # endif /* HAVE_PTHREAD_H */ @@ -393,8 +397,13 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */ struct timeval curtime; /* Current time */ char buffer[2048]; /* Output buffer */ size_t bytes; /* Number of bytes in buffer */ - const char *cups_debug_log;/* CUPS_DEBUG_LOG environment variable */ - + int level; /* Log level in message */ + const char *cups_debug_filter, + /* CUPS_DEBUG_FILTER environment variable */ + *cups_debug_level, + /* CUPS_DEBUG_LEVEL environment variable */ + *cups_debug_log;/* CUPS_DEBUG_LOG environment variable */ + /* * See if we need to do any logging... @@ -422,6 +431,23 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */ snprintf(buffer, sizeof(buffer), cups_debug_log, getpid()); _cups_debug_fd = open(buffer, O_WRONLY | O_APPEND | O_CREAT, 0644); } + + if ((cups_debug_level = getenv("CUPS_DEBUG_LEVEL")) != NULL) + debug_level = atoi(cups_debug_level); + + if ((cups_debug_filter = getenv("CUPS_DEBUG_FILTER")) != NULL) + { + if ((debug_filter = (regex_t *)calloc(1, sizeof(regex_t))) == NULL) + fputs("Unable to allocate memory for CUPS_DEBUG_FILTER - results not " + "filtered!\n", stderr); + else if (regcomp(debug_filter, cups_debug_filter, REG_EXTENDED)) + { + fputs("Bad regular expression in CUPS_DEBUG_FILTER - results not " + "filtered!\n", stderr); + free(debug_filter); + debug_filter = NULL; + } + } } pthread_mutex_unlock(&debug_mutex); @@ -430,6 +456,30 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */ if (_cups_debug_fd < 0) return; + /* + * Filter as needed... + */ + + if (isdigit(format[0])) + level = *format++ - '0'; + else + level = 0; + + if (level > debug_level) + return; + + if (debug_filter) + { + int result; /* Filter result */ + + pthread_mutex_lock(&debug_mutex); + result = regexec(debug_filter, format, 0, NULL, 0); + pthread_mutex_unlock(&debug_mutex); + + if (result) + return; + } + /* * Format the message... */ @@ -467,7 +517,14 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */ void _cups_debug_puts(const char *s) /* I - String to output */ { - _cups_debug_printf("%s\n", s); + char format[4]; /* C%s */ + + format[0] = *s++; + format[1] = '%'; + format[2] = 's'; + format[3] = '\0'; + + _cups_debug_printf(format, s); } diff --git a/cups/debug.h b/cups/debug.h index 0d81b46cb..e13335bfc 100644 --- a/cups/debug.h +++ b/cups/debug.h @@ -3,7 +3,7 @@ * * Debugging macros for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -36,6 +36,24 @@ extern "C" { * DEBUG_printf(("format string", arg, arg, ...)); * * Note the extra parenthesis around the DEBUG_printf macro... + * + * Newlines are not required on the end of messages, as both add one when + * writing the output. + * + * If the first character is a digit, then it represents the "log level" of the + * message from 0 to 9. The default level is 1. The following defines the + * current levels we use: + * + * 0 = public APIs, other than value accessor functions + * 1 = return values for public APIs + * 2 = public value accessor APIs, progress for public APIs + * 3 = return values for value accessor APIs + * 4 = private APIs, progress for value accessor APIs + * 5 = return values for private APIs + * 6 = progress for private APIs + * 7 = static functions + * 8 = return values for static functions + * 9 = progress for static functions */ # ifdef DEBUG diff --git a/cups/dest.c b/cups/dest.c index 2886a0478..f65e3152d 100644 --- a/cups/dest.c +++ b/cups/dest.c @@ -969,7 +969,7 @@ _cupsUserDefault(char *name, /* I - Name buffer */ if (!appleUseLastPrinter()) { - DEBUG_puts("_cupsUserDefault: Not using last printer as default..."); + DEBUG_puts("1_cupsUserDefault: Not using last printer as default..."); name[0] = '\0'; return (NULL); } @@ -980,14 +980,14 @@ _cupsUserDefault(char *name, /* I - Name buffer */ if ((network = appleCopyNetwork()) == NULL) { - DEBUG_puts("_cupsUserDefault: Unable to get current network..."); + DEBUG_puts("1_cupsUserDefault: Unable to get current network..."); name[0] = '\0'; return (NULL); } # ifdef DEBUG CFStringGetCString(network, name, namesize, kCFStringEncodingUTF8); - DEBUG_printf(("_cupsUserDefault: network=\"%s\"\n", name)); + DEBUG_printf(("2_cupsUserDefault: network=\"%s\"", name)); # endif /* DEBUG */ /* @@ -1000,7 +1000,7 @@ _cupsUserDefault(char *name, /* I - Name buffer */ * Missing or bad location array, so no location-based default... */ - DEBUG_puts("_cupsUserDefault: Missing or bad location history array..."); + DEBUG_puts("1_cupsUserDefault: Missing or bad location history array..."); CFRelease(network); @@ -1008,7 +1008,7 @@ _cupsUserDefault(char *name, /* I - Name buffer */ return (NULL); } - DEBUG_printf(("_cupsUserDefault: Got location, %d entries...\n", + DEBUG_printf(("2_cupsUserDefault: Got location, %d entries...", (int)CFArrayGetCount(locations))); if ((locprinter = appleGetPrinter(locations, network, NULL)) != NULL) @@ -1019,7 +1019,7 @@ _cupsUserDefault(char *name, /* I - Name buffer */ CFRelease(network); CFRelease(locations); - DEBUG_printf(("_cupsUserDefault: Returning \"%s\"...\n", name)); + DEBUG_printf(("1_cupsUserDefault: Returning \"%s\"...", name)); return (*name ? name : NULL); @@ -1191,7 +1191,7 @@ appleSetDefault(const char *name) /* I - Default printer/class name */ if ((network = appleCopyNetwork()) == NULL) { - DEBUG_puts("appleSetDefault: Unable to get current network..."); + DEBUG_puts("1appleSetDefault: Unable to get current network..."); return; } @@ -1568,9 +1568,9 @@ cups_get_dests( int linenum; /* Current line number */ - DEBUG_printf(("cups_get_dests(filename=\"%s\", match_name=\"%s\", " + DEBUG_printf(("7cups_get_dests(filename=\"%s\", match_name=\"%s\", " "match_inst=\"%s\", user_default_set=%d, num_dests=%d, " - "dests=%p)\n", filename, match_name, match_inst, + "dests=%p)", filename, match_name, match_inst, user_default_set, num_dests, dests)); /* @@ -1595,12 +1595,12 @@ cups_get_dests( * See what type of line it is... */ - DEBUG_printf(("cups_get_dests: linenum=%d line=\"%s\" lineptr=\"%s\"\n", + DEBUG_printf(("9cups_get_dests: linenum=%d line=\"%s\" lineptr=\"%s\"", linenum, line, lineptr)); if ((strcasecmp(line, "dest") && strcasecmp(line, "default")) || !lineptr) { - DEBUG_puts("cups_get_dests: Not a dest or default line..."); + DEBUG_puts("9cups_get_dests: Not a dest or default line..."); continue; } @@ -1635,7 +1635,7 @@ cups_get_dests( if (*lineptr) *lineptr++ = '\0'; - DEBUG_printf(("cups_get_dests: name=\"%s\", instance=\"%s\"\n", name, + DEBUG_printf(("9cups_get_dests: name=\"%s\", instance=\"%s\"", name, instance)); /* @@ -1655,7 +1655,7 @@ cups_get_dests( } else if (cupsGetDest(name, NULL, num_dests, *dests) == NULL) { - DEBUG_puts("cups_get_dests: Not found!"); + DEBUG_puts("9cups_get_dests: Not found!"); continue; } else @@ -1672,7 +1672,7 @@ cups_get_dests( * Out of memory! */ - DEBUG_puts("cups_get_dests: Out of memory!"); + DEBUG_puts("9cups_get_dests: Out of memory!"); break; } } @@ -1697,7 +1697,7 @@ cups_get_dests( if (!user_default_set && !strcasecmp(line, "default")) { - DEBUG_puts("cups_get_dests: Setting as default..."); + DEBUG_puts("9cups_get_dests: Setting as default..."); for (i = 0; i < num_dests; i ++) (*dests)[i].is_default = 0; diff --git a/cups/dir.c b/cups/dir.c index 319908f1f..5cb4d060e 100644 --- a/cups/dir.c +++ b/cups/dir.c @@ -5,7 +5,7 @@ * * This set of APIs abstracts enumeration of directory entries. * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2005 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -271,7 +271,7 @@ struct _cups_dir_s /**** Directory data structure ****/ void cupsDirClose(cups_dir_t *dp) /* I - Directory pointer */ { - DEBUG_printf(("cupsDirClose(dp=%p)\n", dp)); + DEBUG_printf(("cupsDirClose(dp=%p)", dp)); /* * Range check input... @@ -301,7 +301,7 @@ cupsDirOpen(const char *directory) /* I - Directory name */ cups_dir_t *dp; /* Directory */ - DEBUG_printf(("cupsDirOpen(directory=\"%s\")\n", directory)); + DEBUG_printf(("cupsDirOpen(directory=\"%s\")", directory)); /* * Range check input... @@ -360,7 +360,7 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ # endif /* HAVE_PTHREAD_H */ - DEBUG_printf(("cupsDirRead(dp=%p)\n", dp)); + DEBUG_printf(("2cupsDirRead(dp=%p)", dp)); /* * Range check input... @@ -382,17 +382,18 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ if (readdir_r(dp->dir, (struct dirent *)buffer, &entry)) { - DEBUG_printf((" readdir_r() failed - %s\n", strerror(errno))); + DEBUG_printf(("3cupsDirRead: readdir_r() failed - %s\n", strerror(errno))); return (NULL); } if (!entry) { - DEBUG_puts(" readdir_r() returned a NULL pointer!"); + DEBUG_puts("3cupsDirRead: readdir_r() returned a NULL pointer!"); return (NULL); } - DEBUG_printf((" readdir_r() returned \"%s\"...\n", entry->d_name)); + DEBUG_printf(("4cupsDirRead: readdir_r() returned \"%s\"...", + entry->d_name)); # else /* @@ -401,11 +402,11 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ if ((entry = readdir(dp->dir)) == NULL) { - DEBUG_puts(" readdir() returned a NULL pointer!"); + DEBUG_puts("3cupsDirRead: readdir() returned a NULL pointer!"); return (NULL); } - DEBUG_printf((" readdir() returned \"%s\"...\n", entry->d_name)); + DEBUG_printf(("4cupsDirRead: readdir() returned \"%s\"...", entry->d_name)); # endif /* HAVE_PTHREAD_H */ @@ -426,7 +427,7 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ if (stat(filename, &(dp->entry.fileinfo))) { - DEBUG_printf((" stat() failed for \"%s\" - %s...\n", filename, + DEBUG_printf(("3cupsDirRead: stat() failed for \"%s\" - %s...", filename, strerror(errno))); continue; } @@ -449,7 +450,7 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */ void cupsDirRewind(cups_dir_t *dp) /* I - Directory pointer */ { - DEBUG_printf(("cupsDirRewind(dp=%p)\n", dp)); + DEBUG_printf(("cupsDirRewind(dp=%p)", dp)); /* * Range check input... diff --git a/cups/emit.c b/cups/emit.c index 3389607f9..922c8b917 100644 --- a/cups/emit.c +++ b/cups/emit.c @@ -109,7 +109,7 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */ float *orders; /* Collected order values */ - DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)\n", + DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)", ppd, section, min_order, choices)); if (!ppd || !choices) @@ -223,7 +223,7 @@ ppdCollect2(ppd_file_t *ppd, /* I - PPD file data */ free(orders); - DEBUG_printf(("ppdCollect2: %d marked choices...\n", count)); + DEBUG_printf(("2ppdCollect2: %d marked choices...", count)); /* * Return the array and number of choices; if 0, free the array since @@ -626,7 +626,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ struct lconv *loc; /* Locale data */ - DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)\n", + DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)", ppd, section, min_order)); /* @@ -697,7 +697,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ !strcasecmp(choices[i]->option->keyword, "PageRegion")) && !strcasecmp(choices[i]->choice, "Custom")) { - DEBUG_puts("ppdEmitString: Custom size set!"); + DEBUG_puts("2ppdEmitString: Custom size set!"); bufsize += 37; /* %%BeginFeature: *CustomPageSize True\n */ bufsize += 50; /* Five 9-digit numbers + newline */ @@ -752,7 +752,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ * Allocate memory... */ - DEBUG_printf(("ppdEmitString: Allocating %d bytes for string...\n", + DEBUG_printf(("2ppdEmitString: Allocating %d bytes for string...", (int)bufsize)); if ((buffer = calloc(1, bufsize)) == NULL) @@ -865,8 +865,8 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ * Send DSC comments with option... */ - DEBUG_printf(("Adding code for %s=%s...\n", choices[i]->option->keyword, - choices[i]->choice)); + DEBUG_printf(("2ppdEmitString: Adding code for %s=%s...", + choices[i]->option->keyword, choices[i]->choice)); if ((!strcasecmp(choices[i]->option->keyword, "PageSize") || !strcasecmp(choices[i]->option->keyword, "PageRegion")) && @@ -1070,7 +1070,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */ "} stopped cleartomark\n", bufend - bufptr + 1); bufptr += strlen(bufptr); - DEBUG_printf(("ppdEmitString: Offset in string is %d...\n", + DEBUG_printf(("2ppdEmitString: Offset in string is %d...", (int)(bufptr - buffer))); } else diff --git a/cups/encode.c b/cups/encode.c index 7ef63c915..3bdcbba05 100644 --- a/cups/encode.c +++ b/cups/encode.c @@ -187,7 +187,7 @@ cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */ int num_options, /* I - Number of options */ cups_option_t *options) /* I - Options */ { - DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)\n", ipp, num_options, options)); + DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)", ipp, num_options, options)); /* * Add the options in the proper groups & order... @@ -232,7 +232,7 @@ cupsEncodeOptions2( DEBUG_printf(("cupsEncodeOptions2(ipp=%p, num_options=%d, options=%p, " - "group_tag=%x)\n", ipp, num_options, options, group_tag)); + "group_tag=%x)", ipp, num_options, options, group_tag)); /* * Range check input... @@ -340,7 +340,7 @@ cupsEncodeOptions2( else count = 1; - DEBUG_printf(("cupsEncodeOptions2: option = \'%s\', count = %d\n", + DEBUG_printf(("2cupsEncodeOptions2: option=\"%s\", count=%d", option->name, count)); /* @@ -353,7 +353,7 @@ cupsEncodeOptions2( * Ran out of memory! */ - DEBUG_puts("cupsEncodeOptions2: Ran out of memory for attributes!"); + DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for attributes!"); return; } @@ -382,7 +382,7 @@ cupsEncodeOptions2( * Ran out of memory! */ - DEBUG_puts("cupsEncodeOptions2: Ran out of memory for value copy!"); + DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for value copy!"); ippDeleteAttribute(ipp, attr); return; } @@ -459,8 +459,8 @@ cupsEncodeOptions2( attr->values[j].integer = strtol(val, &s, 10); - DEBUG_printf(("cupsEncodeOptions2: Added integer option value %d...\n", - attr->values[j].integer)); + DEBUG_printf(("2cupsEncodeOptions2: Added integer option value " + "%d...", attr->values[j].integer)); break; case IPP_TAG_BOOLEAN : @@ -474,7 +474,7 @@ cupsEncodeOptions2( attr->values[j].boolean = 1; - DEBUG_puts("cupsEncodeOptions2: Added boolean true value..."); + DEBUG_puts("2cupsEncodeOptions2: Added boolean true value..."); } else { @@ -484,7 +484,7 @@ cupsEncodeOptions2( attr->values[j].boolean = 0; - DEBUG_puts("cupsEncodeOptions2: Added boolean false value..."); + DEBUG_puts("2cupsEncodeOptions2: Added boolean false value..."); } break; @@ -511,8 +511,8 @@ cupsEncodeOptions2( else attr->values[j].range.upper = attr->values[j].range.lower; - DEBUG_printf(("cupsEncodeOptions2: Added range option value %d-%d...\n", - attr->values[j].range.lower, + DEBUG_printf(("2cupsEncodeOptions2: Added range option value " + "%d-%d...", attr->values[j].range.lower, attr->values[j].range.upper)); break; @@ -533,8 +533,8 @@ cupsEncodeOptions2( else attr->values[j].resolution.units = IPP_RES_PER_INCH; - DEBUG_printf(("cupsEncodeOptions2: Added resolution option value %s...\n", - val)); + DEBUG_printf(("2cupsEncodeOptions2: Added resolution option value " + "%s...", val)); break; case IPP_TAG_STRING : @@ -545,8 +545,8 @@ cupsEncodeOptions2( attr->values[j].unknown.length = (int)strlen(val); attr->values[j].unknown.data = strdup(val); - DEBUG_printf(("cupsEncodeOptions2: Added octet-string value " - "\"%s\"...\n", (char *)attr->values[j].unknown.data)); + DEBUG_printf(("2cupsEncodeOptions2: Added octet-string value " + "\"%s\"...", (char *)attr->values[j].unknown.data)); break; case IPP_TAG_BEGIN_COLLECTION : @@ -578,7 +578,7 @@ cupsEncodeOptions2( * Ran out of memory! */ - DEBUG_puts("cupsEncodeOptions2: Ran out of memory for string!"); + DEBUG_puts("1cupsEncodeOptions2: Ran out of memory for string!"); if (copy) free(copy); @@ -587,7 +587,7 @@ cupsEncodeOptions2( return; } - DEBUG_printf(("cupsEncodeOptions2: Added string value \"%s\"...\n", + DEBUG_printf(("2cupsEncodeOptions2: Added string value \"%s\"...", val)); break; } diff --git a/cups/file.c b/cups/file.c index ed54f22fc..4b9d65e79 100644 --- a/cups/file.c +++ b/cups/file.c @@ -88,7 +88,7 @@ cupsFileClose(cups_file_t *fp) /* I - CUPS file */ int is_stdio; /* Is a stdio file? */ - DEBUG_printf(("cupsFileClose(fp=%p)\n", fp)); + DEBUG_printf(("cupsFileClose(fp=%p)", fp)); /* * Range check... @@ -258,6 +258,10 @@ cupsFileFind(const char *filename, /* I - File to find */ * Range check input... */ + DEBUG_printf(("cupsFileFind(filename=\"%s\", path=\"%s\", executable=%d, " + "buffer=%p, bufsize=%d)", filename, path, executable, buffer, + bufsize)); + if (!filename || !buffer || bufsize < 2) return (NULL); @@ -302,7 +306,7 @@ cupsFileFind(const char *filename, /* I - File to find */ if (!access(buffer, executable ? X_OK : 0)) #endif /* WIN32 */ { - DEBUG_printf(("cupsFileFind: Returning \"%s\"\n", buffer)); + DEBUG_printf(("1cupsFileFind: Returning \"%s\"", buffer)); return (buffer); } @@ -325,12 +329,12 @@ cupsFileFind(const char *filename, /* I - File to find */ if (!access(buffer, 0)) { - DEBUG_printf(("cupsFileFind: Returning \"%s\"\n", buffer)); + DEBUG_printf(("1cupsFileFind: Returning \"%s\"", buffer)); return (buffer); } else { - DEBUG_puts("cupsFileFind: Returning NULL"); + DEBUG_puts("1cupsFileFind: Returning NULL"); return (NULL); } } @@ -348,7 +352,7 @@ cupsFileFlush(cups_file_t *fp) /* I - CUPS file */ ssize_t bytes; /* Bytes to write */ - DEBUG_printf(("cupsFileFlush(fp=%p)\n", fp)); + DEBUG_printf(("cupsFileFlush(fp=%p)", fp)); /* * Range check input... @@ -356,13 +360,13 @@ cupsFileFlush(cups_file_t *fp) /* I - CUPS file */ if (!fp || fp->mode != 'w') { - DEBUG_puts("cupsFileFlush: Attempt to flush a read-only file..."); + DEBUG_puts("1cupsFileFlush: Attempt to flush a read-only file..."); return (-1); } bytes = (ssize_t)(fp->ptr - fp->buf); - DEBUG_printf(("cupsFileFlush: Flushing " CUPS_LLFMT " bytes...\n", + DEBUG_printf(("2cupsFileFlush: Flushing " CUPS_LLFMT " bytes...", CUPS_LLCAST bytes)); if (bytes > 0) @@ -397,11 +401,9 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */ * Range check input... */ - DEBUG_printf(("cupsFileGetChar(fp=%p)\n", fp)); - if (!fp || (fp->mode != 'r' && fp->mode != 's')) { - DEBUG_puts("cupsFileGetChar: Bad arguments!"); + DEBUG_puts("3cupsFileGetChar: Bad arguments!"); return (-1); } @@ -412,7 +414,7 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */ if (fp->ptr >= fp->end) if (cups_fill(fp) < 0) { - DEBUG_puts("cupsFileGetChar: Unable to fill buffer!"); + DEBUG_puts("3cupsFileGetChar: Unable to fill buffer!"); return (-1); } @@ -420,11 +422,11 @@ cupsFileGetChar(cups_file_t *fp) /* I - CUPS file */ * Return the next character in the buffer... */ - DEBUG_printf(("cupsFileGetChar: Returning %d...\n", *(fp->ptr) & 255)); + DEBUG_printf(("3cupsFileGetChar: Returning %d...", *(fp->ptr) & 255)); fp->pos ++; - DEBUG_printf(("cupsFileGetChar: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileGetChar: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (*(fp->ptr)++ & 255); } @@ -450,8 +452,8 @@ cupsFileGetConf(cups_file_t *fp, /* I - CUPS file */ * Range check input... */ - DEBUG_printf(("cupsFileGetConf(fp=%p, buf=%p, buflen=" CUPS_LLFMT - ", value=%p, linenum=%p)\n", fp, buf, CUPS_LLCAST buflen, + DEBUG_printf(("2cupsFileGetConf(fp=%p, buf=%p, buflen=" CUPS_LLFMT + ", value=%p, linenum=%p)", fp, buf, CUPS_LLCAST buflen, value, linenum)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || @@ -594,7 +596,7 @@ cupsFileGetLine(cups_file_t *fp, /* I - File to read from */ * Range check input... */ - DEBUG_printf(("cupsFileGetLine(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")\n", + DEBUG_printf(("2cupsFileGetLine(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST buflen)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || !buf || buflen < 3) @@ -643,7 +645,7 @@ cupsFileGetLine(cups_file_t *fp, /* I - File to read from */ *ptr = '\0'; - DEBUG_printf(("cupsFileGetLine: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileGetLine: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (ptr - buf); } @@ -669,7 +671,7 @@ cupsFileGets(cups_file_t *fp, /* I - CUPS file */ * Range check input... */ - DEBUG_printf(("cupsFileGets(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")\n", fp, buf, + DEBUG_printf(("2cupsFileGets(fp=%p, buf=%p, buflen=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST buflen)); if (!fp || (fp->mode != 'r' && fp->mode != 's') || !buf || buflen < 2) @@ -725,7 +727,7 @@ cupsFileGets(cups_file_t *fp, /* I - CUPS file */ *ptr = '\0'; - DEBUG_printf(("cupsFileGets: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileGets: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (buf); } @@ -806,7 +808,7 @@ cupsFileOpen(const char *filename, /* I - Name of file */ http_addrlist_t *addrlist; /* Host address list */ - DEBUG_printf(("cupsFileOpen(filename=\"%s\", mode=\"%s\")\n", filename, + DEBUG_printf(("cupsFileOpen(filename=\"%s\", mode=\"%s\")", filename, mode)); /* @@ -909,7 +911,7 @@ cupsFileOpenFd(int fd, /* I - File descriptor */ cups_file_t *fp; /* New CUPS file */ - DEBUG_printf(("cupsFileOpenFd(fd=%d, mode=\"%s\")\n", fd, mode)); + DEBUG_printf(("cupsFileOpenFd(fd=%d, mode=\"%s\")", fd, mode)); /* * Range check input... @@ -1055,7 +1057,7 @@ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */ ssize_t bytes; /* Formatted size */ - DEBUG_printf(("cupsFilePrintf(fp=%p, format=\"%s\", ...)\n", fp, format)); + DEBUG_printf(("2cupsFilePrintf(fp=%p, format=\"%s\", ...)", fp, format)); if (!fp || !format || (fp->mode != 'w' && fp->mode != 's')) return (-1); @@ -1106,7 +1108,7 @@ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */ fp->pos += bytes; - DEBUG_printf(("cupsFilePrintf: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFilePrintf: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (bytes); } @@ -1117,7 +1119,7 @@ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */ fp->pos += bytes; - DEBUG_printf(("cupsFilePrintf: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFilePrintf: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (bytes > sizeof(fp->buf)) { @@ -1183,7 +1185,7 @@ cupsFilePutChar(cups_file_t *fp, /* I - CUPS file */ fp->pos ++; - DEBUG_printf(("cupsFilePutChar: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFilePutChar: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } @@ -1285,7 +1287,7 @@ cupsFilePuts(cups_file_t *fp, /* I - CUPS file */ fp->pos += bytes; - DEBUG_printf(("cupsFilePuts: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFilePuts: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (bytes); } @@ -1296,7 +1298,7 @@ cupsFilePuts(cups_file_t *fp, /* I - CUPS file */ fp->pos += bytes; - DEBUG_printf(("cupsFilePuts: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFilePuts: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (bytes > sizeof(fp->buf)) { @@ -1331,7 +1333,7 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */ ssize_t count; /* Bytes read */ - DEBUG_printf(("cupsFileRead(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", fp, buf, + DEBUG_printf(("2cupsFileRead(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST bytes)); /* @@ -1354,8 +1356,8 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */ if (fp->ptr >= fp->end) if (cups_fill(fp) <= 0) { - DEBUG_printf(("cupsFileRead: cups_fill() returned -1, total=" CUPS_LLFMT "\n", - CUPS_LLCAST total)); + DEBUG_printf(("4cupsFileRead: cups_fill() returned -1, total=" + CUPS_LLFMT, CUPS_LLCAST total)); if (total > 0) return ((ssize_t)total); @@ -1371,7 +1373,7 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */ fp->ptr += count; fp->pos += count; - DEBUG_printf(("cupsFileRead: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileRead: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); /* * Update the counts for the last read... @@ -1386,7 +1388,7 @@ cupsFileRead(cups_file_t *fp, /* I - CUPS file */ * Return the total number of bytes read... */ - DEBUG_printf(("cupsFileRead: total=%d\n", (int)total)); + DEBUG_printf(("3cupsFileRead: total=" CUPS_LLFMT, CUPS_LLCAST total)); return ((ssize_t)total); } @@ -1406,8 +1408,8 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */ * Range check input... */ - DEBUG_printf(("cupsFileRewind(fp=%p)\n", fp)); - DEBUG_printf(("cupsFileRewind: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("cupsFileRewind(fp=%p)", fp)); + DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (!fp || fp->mode != 'r') return (-1); @@ -1430,7 +1432,7 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */ fp->eof = 0; } - DEBUG_printf(("cupsFileRewind: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } @@ -1449,7 +1451,7 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */ if (lseek(fp->fd, 0, SEEK_SET)) { - DEBUG_printf(("cupsFileRewind: lseek failed: %s\n", strerror(errno))); + DEBUG_printf(("1cupsFileRewind: lseek failed: %s", strerror(errno))); return (-1); } @@ -1459,7 +1461,7 @@ cupsFileRewind(cups_file_t *fp) /* I - CUPS file */ fp->end = NULL; fp->eof = 0; - DEBUG_printf(("cupsFileRewind: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("2cupsFileRewind: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (0); } @@ -1478,10 +1480,10 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ ssize_t bytes; /* Number bytes in buffer */ - DEBUG_printf(("cupsFileSeek(fp=%p, pos=" CUPS_LLFMT ")\n", fp, + DEBUG_printf(("cupsFileSeek(fp=%p, pos=" CUPS_LLFMT ")", fp, CUPS_LLCAST pos)); - DEBUG_printf(("cupsFileSeek: fp->pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); - DEBUG_printf(("cupsFileSeek: fp->ptr=%p, fp->end=%p\n", fp->ptr, fp->end)); + DEBUG_printf(("2cupsFileSeek: fp->pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); + DEBUG_printf(("2cupsFileSeek: fp->ptr=%p, fp->end=%p", fp->ptr, fp->end)); /* * Range check input... @@ -1501,7 +1503,7 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ { bytes = (ssize_t)(fp->end - fp->buf); - DEBUG_printf(("cupsFileSeek: bytes=" CUPS_LLFMT "\n", CUPS_LLCAST bytes)); + DEBUG_printf(("2cupsFileSeek: bytes=" CUPS_LLFMT, CUPS_LLCAST bytes)); if (pos >= fp->bufpos && pos < (fp->bufpos + bytes)) { @@ -1541,7 +1543,7 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ * Need to seek backwards... */ - DEBUG_puts("cupsFileSeek: SEEK BACKWARDS"); + DEBUG_puts("2cupsFileSeek: SEEK BACKWARDS"); #ifdef HAVE_LIBZ if (fp->compressed) @@ -1572,7 +1574,7 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ fp->ptr = NULL; fp->end = NULL; - DEBUG_printf(("cupsFileSeek: lseek() returned " CUPS_LLFMT "...\n", + DEBUG_printf(("2cupsFileSeek: lseek() returned " CUPS_LLFMT, CUPS_LLCAST fp->pos)); } } @@ -1582,7 +1584,7 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ * Need to seek forwards... */ - DEBUG_puts("cupsFileSeek: SEEK FORWARDS"); + DEBUG_puts("2cupsFileSeek: SEEK FORWARDS"); #ifdef HAVE_LIBZ if (fp->compressed) @@ -1607,12 +1609,12 @@ cupsFileSeek(cups_file_t *fp, /* I - CUPS file */ fp->ptr = NULL; fp->end = NULL; - DEBUG_printf(("cupsFileSeek: lseek() returned " CUPS_LLFMT "...\n", + DEBUG_printf(("2cupsFileSeek: lseek() returned " CUPS_LLFMT, CUPS_LLCAST fp->pos)); } } - DEBUG_printf(("cupsFileSeek: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("2cupsFileSeek: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return (fp->pos); } @@ -1729,8 +1731,9 @@ cupsFileStdout(void) off_t /* O - File position */ cupsFileTell(cups_file_t *fp) /* I - CUPS file */ { - DEBUG_printf(("cupsFileTell(fp=%p)\n", fp)); - DEBUG_printf(("cupsFileTell: pos=" CUPS_LLFMT "\n", CUPS_LLCAST (fp ? fp->pos : -1))); + DEBUG_printf(("2cupsFileTell(fp=%p)", fp)); + DEBUG_printf(("3cupsFileTell: pos=" CUPS_LLFMT, + CUPS_LLCAST (fp ? fp->pos : -1))); return (fp ? fp->pos : 0); } @@ -1749,7 +1752,7 @@ cupsFileUnlock(cups_file_t *fp) /* I - CUPS file */ * Range check... */ - DEBUG_printf(("cupsFileUnlock(fp=%p)\n", fp)); + DEBUG_printf(("cupsFileUnlock(fp=%p)", fp)); if (!fp || fp->mode == 's') return (-1); @@ -1781,7 +1784,7 @@ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */ * Range check input... */ - DEBUG_printf(("cupsFileWrite(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", + DEBUG_printf(("2cupsFileWrite(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST bytes)); if (!fp || !buf || bytes < 0 || (fp->mode != 'w' && fp->mode != 's')) @@ -1801,7 +1804,7 @@ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */ fp->pos += (off_t)bytes; - DEBUG_printf(("cupsFileWrite: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileWrite: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); return ((ssize_t)bytes); } @@ -1812,7 +1815,7 @@ cupsFileWrite(cups_file_t *fp, /* I - CUPS file */ fp->pos += (off_t)bytes; - DEBUG_printf(("cupsFileWrite: pos=" CUPS_LLFMT "\n", CUPS_LLCAST fp->pos)); + DEBUG_printf(("4cupsFileWrite: pos=" CUPS_LLFMT, CUPS_LLCAST fp->pos)); if (bytes > sizeof(fp->buf)) { @@ -1842,7 +1845,7 @@ cups_compress(cups_file_t *fp, /* I - CUPS file */ const char *buf, /* I - Buffer */ size_t bytes) /* I - Number bytes */ { - DEBUG_printf(("cups_compress(fp=%p, buf=%p, bytes=" CUPS_LLFMT "\n", fp, buf, + DEBUG_printf(("7cups_compress(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST bytes)); /* @@ -1864,7 +1867,7 @@ cups_compress(cups_file_t *fp, /* I - CUPS file */ * Flush the current buffer... */ - DEBUG_printf(("cups_compress: avail_in=%d, avail_out=%d\n", + DEBUG_printf(("9cups_compress: avail_in=%d, avail_out=%d", fp->stream.avail_in, fp->stream.avail_out)); if (fp->stream.avail_out < (int)(sizeof(fp->cbuf) / 8)) @@ -1899,16 +1902,16 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */ #endif /* HAVE_LIBZ */ - DEBUG_printf(("cups_fill(fp=%p)\n", fp)); - DEBUG_printf(("cups_fill: fp->ptr=%p, fp->end=%p, fp->buf=%p, " - "fp->bufpos=" CUPS_LLFMT ", fp->eof=%d\n", + DEBUG_printf(("7cups_fill(fp=%p)", fp)); + DEBUG_printf(("9cups_fill: fp->ptr=%p, fp->end=%p, fp->buf=%p, " + "fp->bufpos=" CUPS_LLFMT ", fp->eof=%d", fp->ptr, fp->end, fp->buf, CUPS_LLCAST fp->bufpos, fp->eof)); if (fp->ptr && fp->end) fp->bufpos += fp->end - fp->buf; #ifdef HAVE_LIBZ - DEBUG_printf(("cups_fill: fp->compressed=%d\n", fp->compressed)); + DEBUG_printf(("9cups_fill: fp->compressed=%d", fp->compressed)); while (!fp->ptr || fp->compressed) { @@ -1936,7 +1939,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */ * Can't read from file! */ - DEBUG_printf(("cups_fill: cups_read() returned " CUPS_LLFMT "!\n", + DEBUG_printf(("9cups_fill: cups_read() returned " CUPS_LLFMT, CUPS_LLCAST bytes)); return (-1); @@ -1953,7 +1956,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */ fp->ptr = fp->buf; fp->end = fp->buf + bytes; - DEBUG_printf(("cups_fill: Returning " CUPS_LLFMT "!\n", + DEBUG_printf(("9cups_fill: Returning " CUPS_LLFMT, CUPS_LLCAST bytes)); return (bytes); @@ -2144,7 +2147,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */ * Bad CRC, mark end-of-file... */ - DEBUG_printf(("cups_fill: tcrc=%08x, fp->crc=%08x\n", + DEBUG_printf(("9cups_fill: tcrc=%08x, fp->crc=%08x", (unsigned int)tcrc, (unsigned int)fp->crc)); fp->eof = 1; @@ -2217,7 +2220,7 @@ cups_read(cups_file_t *fp, /* I - CUPS file */ ssize_t total; /* Total bytes read */ - DEBUG_printf(("cups_read(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", fp, buf, + DEBUG_printf(("7cups_read(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST bytes)); /* @@ -2238,7 +2241,7 @@ cups_read(cups_file_t *fp, /* I - CUPS file */ total = read(fp->fd, buf, bytes); #endif /* WIN32 */ - DEBUG_printf(("cups_read: total=" CUPS_LLFMT "\n", CUPS_LLCAST total)); + DEBUG_printf(("9cups_read: total=" CUPS_LLFMT, CUPS_LLCAST total)); if (total >= 0) break; @@ -2274,7 +2277,7 @@ cups_write(cups_file_t *fp, /* I - CUPS file */ ssize_t count; /* Count this time */ - DEBUG_printf(("cups_write(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", fp, buf, + DEBUG_printf(("7cups_write(fp=%p, buf=%p, bytes=" CUPS_LLFMT ")", fp, buf, CUPS_LLCAST bytes)); /* @@ -2296,7 +2299,7 @@ cups_write(cups_file_t *fp, /* I - CUPS file */ count = write(fp->fd, buf, bytes); #endif /* WIN32 */ - DEBUG_printf(("cups_write: count=" CUPS_LLFMT "\n", CUPS_LLCAST count)); + DEBUG_printf(("9cups_write: count=" CUPS_LLFMT, CUPS_LLCAST count)); if (count < 0) { diff --git a/cups/getdevices.c b/cups/getdevices.c index 4f5f8d000..44500d3fc 100644 --- a/cups/getdevices.c +++ b/cups/getdevices.c @@ -3,7 +3,7 @@ * * cupsGetDevices implementation for the Common UNIX Printing System (CUPS). * - * Copyright 2008 by Apple Inc. + * Copyright 2008-2009 by Apple Inc. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright @@ -66,6 +66,11 @@ cupsGetDevices( * Range check input... */ + DEBUG_printf(("cupsGetDevices(http=%p, timeout=%d, include_schemes=\"%s\", " + "exclude_schemes=\"%s\", callback=%p, user_data=%p)", http, + timeout, include_schemes, exclude_schemes, callback, + user_data)); + if (!callback) return (IPP_INTERNAL_ERROR); @@ -107,10 +112,10 @@ cupsGetDevices( do { - DEBUG_puts("cupsGetDevices: Sending request..."); + DEBUG_puts("2cupsGetDevices: Sending request..."); status = cupsSendRequest(http, request, "/", ippLength(request)); - DEBUG_puts("cupsGetDevices: Waiting for response status..."); + DEBUG_puts("2cupsGetDevices: Waiting for response status..."); while (status == HTTP_CONTINUE) status = httpUpdate(http); @@ -124,14 +129,12 @@ cupsGetDevices( * See if we can do authentication... */ - int auth_result; - - DEBUG_puts("cupsGetDevices: Need authorization..."); + DEBUG_puts("2cupsGetDevices: Need authorization..."); - if ((auth_result = cupsDoAuthentication(http, "POST", "/")) == 0) + if (!cupsDoAuthentication(http, "POST", "/")) httpReconnect(http); - else if (auth_result < 0) - http->status = status = HTTP_FORBIDDEN; + else + break; } #ifdef HAVE_SSL @@ -141,7 +144,7 @@ cupsGetDevices( * Force a reconnect with encryption... */ - DEBUG_puts("cupsGetDevices: Need encryption..."); + DEBUG_puts("2cupsGetDevices: Need encryption..."); if (!httpReconnect(http)) httpEncryption(http, HTTP_ENCRYPT_REQUIRED); @@ -151,7 +154,7 @@ cupsGetDevices( } while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED); - DEBUG_printf(("cupsGetDevices: status=%d\n", status)); + DEBUG_printf(("2cupsGetDevices: status=%d", status)); ippDelete(request); @@ -177,14 +180,14 @@ cupsGetDevices( device_uri = NULL; attr = NULL; - DEBUG_puts("cupsGetDevices: Reading response..."); + DEBUG_puts("2cupsGetDevices: Reading response..."); do { if ((state = ippRead(http, response)) == IPP_ERROR) break; - DEBUG_printf(("cupsGetDevices: state=%d, response->last=%p\n", state, + DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state, response->last)); if (!response->attrs) @@ -197,8 +200,8 @@ cupsGetDevices( else attr = attr->next; - DEBUG_printf(("cupsGetDevices: attr->name=\"%s\", attr->value_tag=%d\n", - attr->name ? attr->name : "(null)", attr->value_tag)); + DEBUG_printf(("2cupsGetDevices: attr->name=\"%s\", attr->value_tag=%d", + attr->name, attr->value_tag)); if (!attr->name) { @@ -237,7 +240,7 @@ cupsGetDevices( } while (state != IPP_DATA); - DEBUG_printf(("cupsGetDevices: state=%d, response->last=%p\n", state, + DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state, response->last)); if (device_class && device_id && device_info && device_make_and_model && @@ -258,7 +261,7 @@ cupsGetDevices( { attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT); - DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"\n", + DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"", ippErrorString(response->request.status.status_code), attr ? attr->values[0].string.text : "")); diff --git a/cups/getputfile.c b/cups/getputfile.c index c61da916b..43952dc1f 100644 --- a/cups/getputfile.c +++ b/cups/getputfile.c @@ -3,7 +3,7 @@ * * Get/put file functions for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -66,7 +66,7 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA * Range check input... */ - DEBUG_printf(("cupsGetFd(http=%p, resource=\"%s\", fd=%d)\n", http, + DEBUG_printf(("cupsGetFd(http=%p, resource=\"%s\", fd=%d)", http, resource, fd)); if (!resource || fd < 0) @@ -179,6 +179,8 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA * Return the request status... */ + DEBUG_printf(("1cupsGetFd: Returning %d...", status)); + return (status); } @@ -274,7 +276,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA * Range check input... */ - DEBUG_printf(("cupsPutFd(http=%p, resource=\"%s\", fd=%d)\n", http, + DEBUG_printf(("cupsPutFd(http=%p, resource=\"%s\", fd=%d)", http, resource, fd)); if (!resource || fd < 0) @@ -297,7 +299,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA do { - DEBUG_printf(("cupsPutFd: starting attempt, authstring=\"%s\"...\n", + DEBUG_printf(("2cupsPutFd: starting attempt, authstring=\"%s\"...", http->authstring)); httpClearFields(http); @@ -355,7 +357,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA if (status == HTTP_ERROR && !retries) { - DEBUG_printf(("cupsPutFd: retry on status %d\n", status)); + DEBUG_printf(("2cupsPutFd: retry on status %d", status)); retries ++; @@ -373,7 +375,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA continue; } - DEBUG_printf(("cupsPutFd: status=%d\n", status)); + DEBUG_printf(("2cupsPutFd: status=%d", status)); if (status == HTTP_UNAUTHORIZED) { @@ -432,6 +434,8 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA httpFlush(http); } + DEBUG_printf(("1cupsPutFd: Returning %d...", status)); + return (status); } diff --git a/cups/globals.h b/cups/globals.h index cdf4d1fec..89139367f 100644 --- a/cups/globals.h +++ b/cups/globals.h @@ -142,6 +142,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/ extern http_t *_cupsConnect(void); extern const char *_cupsGetPassword(const char *prompt); extern _cups_globals_t *_cupsGlobals(void); +extern void _cupsSetDefaults(void); extern void _cupsSetError(ipp_status_t status, const char *message, int localize); extern void _cupsSetHTTPError(http_status_t status); diff --git a/cups/http-addr.c b/cups/http-addr.c index 52e828525..31c8bca89 100644 --- a/cups/http-addr.c +++ b/cups/http-addr.c @@ -154,7 +154,7 @@ httpAddrLocalhost( #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET && - ntohl(addr->ipv4.sin_addr.s_addr) == 0x7f000001) + (ntohl(addr->ipv4.sin_addr.s_addr) & 0xff000000) == 0x7f000000) return (1); return (0); @@ -184,8 +184,8 @@ httpAddrLookup( /* Global data */ - DEBUG_printf(("httpAddrLookup(addr=%p, name=%p, namelen=%d)\n", - addr, name, namelen)); + DEBUG_printf(("httpAddrLookup(addr=%p, name=%p, namelen=%d)", addr, name, + namelen)); /* * Range check input... @@ -289,6 +289,8 @@ httpAddrLookup( } #endif /* HAVE_GETNAMEINFO */ + DEBUG_printf(("1httpAddrLookup: returning \"%s\"...", name)); + return (name); } @@ -324,8 +326,7 @@ httpAddrString(const http_addr_t *addr, /* I - Address to convert */ char *s, /* I - String buffer */ int slen) /* I - Length of string */ { - DEBUG_printf(("httpAddrString(addr=%p, s=%p, slen=%d)\n", - addr, s, slen)); + DEBUG_printf(("httpAddrString(addr=%p, s=%p, slen=%d)", addr, s, slen)); /* * Range check input... @@ -452,7 +453,7 @@ httpAddrString(const http_addr_t *addr, /* I - Address to convert */ else strlcpy(s, "UNKNOWN", slen); - DEBUG_printf(("httpAddrString: returning \"%s\"...\n", s)); + DEBUG_printf(("1httpAddrString: returning \"%s\"...", s)); return (s); } @@ -474,7 +475,7 @@ httpGetHostByName(const char *name) /* I - Hostname or IP address */ /* Pointer to library globals */ - DEBUG_printf(("httpGetHostByName(name=\"%s\")\n", name)); + DEBUG_printf(("httpGetHostByName(name=\"%s\")", name)); /* * Avoid lookup delays and configuration problems when connecting @@ -512,7 +513,7 @@ httpGetHostByName(const char *name) /* I - Hostname or IP address */ cg->ip_ptrs[0] = (char *)name; cg->ip_ptrs[1] = NULL; - DEBUG_puts("httpGetHostByName: returning domain socket address..."); + DEBUG_puts("1httpGetHostByName: returning domain socket address..."); return (&cg->hostent); } @@ -548,7 +549,7 @@ httpGetHostByName(const char *name) /* I - Hostname or IP address */ cg->ip_ptrs[0] = (char *)&(cg->ip_addr); cg->ip_ptrs[1] = NULL; - DEBUG_puts("httpGetHostByName: returning IPv4 address..."); + DEBUG_puts("1httpGetHostByName: returning IPv4 address..."); return (&cg->hostent); } @@ -559,7 +560,7 @@ httpGetHostByName(const char *name) /* I - Hostname or IP address */ * the name... */ - DEBUG_puts("httpGetHostByName: returning domain lookup address(es)..."); + DEBUG_puts("1httpGetHostByName: returning domain lookup address(es)..."); return (gethostbyname(name)); } diff --git a/cups/http-addrlist.c b/cups/http-addrlist.c index a5b2e1f58..e8f7c84dc 100644 --- a/cups/http-addrlist.c +++ b/cups/http-addrlist.c @@ -50,7 +50,7 @@ httpAddrConnect( #endif /* DEBUG */ - DEBUG_printf(("httpAddrConnect(addrlist=%p, sock=%p)\n", addrlist, sock)); + DEBUG_printf(("httpAddrConnect(addrlist=%p, sock=%p)", addrlist, sock)); if (!sock) { @@ -68,7 +68,7 @@ httpAddrConnect( * Create the socket... */ - DEBUG_printf(("httpAddrConnect: Trying %s:%d...\n", + DEBUG_printf(("2httpAddrConnect: Trying %s:%d...", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), _httpAddrPort(&(addrlist->addr)))); @@ -134,13 +134,13 @@ httpAddrConnect( if (!connect(*sock, &(addrlist->addr.addr), httpAddrLength(&(addrlist->addr)))) { - DEBUG_printf(("httpAddrConnect: Connected to %s:%d...\n", + DEBUG_printf(("1httpAddrConnect: Connected to %s:%d...", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), _httpAddrPort(&(addrlist->addr)))); break; } - DEBUG_printf(("httpAddrConnect: Unable to connect to %s:%d: %s\n", + DEBUG_printf(("1httpAddrConnect: Unable to connect to %s:%d: %s", httpAddrString(&(addrlist->addr), temp, sizeof(temp)), _httpAddrPort(&(addrlist->addr)), strerror(errno))); diff --git a/cups/http-support.c b/cups/http-support.c index c59ecfb50..baa45c122 100644 --- a/cups/http-support.c +++ b/cups/http-support.c @@ -727,7 +727,7 @@ httpGetDateTime(const char *s) /* I - Date/time string */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }; - DEBUG_printf(("httpGetDateTime(s=\"%s\")\n", s)); + DEBUG_printf(("2httpGetDateTime(s=\"%s\")", s)); /* * Extract the date and time from the formatted string... @@ -736,8 +736,8 @@ httpGetDateTime(const char *s) /* I - Date/time string */ if (sscanf(s, "%*s%d%15s%d%d:%d:%d", &day, mon, &year, &hour, &min, &sec) < 6) return (0); - DEBUG_printf((" day=%d, mon=\"%s\", year=%d, hour=%d, min=%d, sec=%d\n", - day, mon, year, hour, min, sec)); + DEBUG_printf(("4httpGetDateTime: day=%d, mon=\"%s\", year=%d, hour=%d, " + "min=%d, sec=%d", day, mon, year, hour, min, sec)); /* * Convert the month name to a number from 0 to 11. @@ -750,7 +750,7 @@ httpGetDateTime(const char *s) /* I - Date/time string */ if (i >= 12) return (0); - DEBUG_printf((" i=%d\n", i)); + DEBUG_printf(("4httpGetDateTime: i=%d", i)); /* * Now convert the date and time to a UNIX time value in seconds since @@ -763,14 +763,14 @@ httpGetDateTime(const char *s) /* I - Date/time string */ else days = normal_days[i] + day - 1; - DEBUG_printf((" days=%d\n", days)); + DEBUG_printf(("4httpGetDateTime: days=%d", days)); days += (year - 1970) * 365 + /* 365 days per year (normally) */ ((year - 1) / 4 - 492) - /* + leap days */ ((year - 1) / 100 - 19) + /* - 100 year days */ ((year - 1) / 400 - 4); /* + 400 year days */ - DEBUG_printf((" days=%d\n", days)); + DEBUG_printf(("4httpGetDateTime: days=%d\n", days)); return (days * 86400 + hour * 3600 + min * 60 + sec); } @@ -1313,8 +1313,8 @@ _httpResolveURI( #endif /* DEBUG */ - DEBUG_printf(("_httpResolveURI(uri=\"%s\", resolved_uri=%p, " - "resolved_size=" CUPS_LLFMT ")\n", uri, resolved_uri, + DEBUG_printf(("4_httpResolveURI(uri=\"%s\", resolved_uri=%p, " + "resolved_size=" CUPS_LLFMT ")", uri, resolved_uri, CUPS_LLCAST resolved_size)); /* @@ -1336,8 +1336,8 @@ _httpResolveURI( if (logit) _cupsLangPrintf(stderr, _("Bad device URI \"%s\"!\n"), uri); - DEBUG_printf(("_httpResolveURI: httpSeparateURI returned %d!\n", status)); - DEBUG_puts("_httpResolveURI: Returning NULL"); + DEBUG_printf(("6_httpResolveURI: httpSeparateURI returned %d!", status)); + DEBUG_puts("5_httpResolveURI: Returning NULL"); return (NULL); } @@ -1380,7 +1380,7 @@ _httpResolveURI( if (regtype <= hostname) { - DEBUG_puts("_httpResolveURI: Bad hostname, returning NULL"); + DEBUG_puts("5_httpResolveURI: Bad hostname, returning NULL"); return (NULL); } @@ -1398,7 +1398,7 @@ _httpResolveURI( resolved_uri[0] = '\0'; - DEBUG_printf(("_httpResolveURI: Resolving hostname=\"%s\", regtype=\"%s\", " + DEBUG_printf(("6_httpResolveURI: Resolving hostname=\"%s\", regtype=\"%s\", " "domain=\"%s\"\n", hostname, regtype, domain)); if (logit) { @@ -1479,7 +1479,7 @@ _httpResolveURI( _cupsLangPuts(stderr, _("Unable to find printer!\n")); } - DEBUG_printf(("_httpResolveURI: Returning \"%s\"\n", uri)); + DEBUG_printf(("5_httpResolveURI: Returning \"%s\"", uri)); return (uri); } @@ -1627,9 +1627,9 @@ resolve_callback( _http_uribuf_t *uribuf; /* URI buffer */ - DEBUG_printf(("resolve_callback(sdRef=%p, flags=%x, interfaceIndex=%u, " + DEBUG_printf(("7resolve_callback(sdRef=%p, flags=%x, interfaceIndex=%u, " "errorCode=%d, fullName=\"%s\", hostTarget=\"%s\", port=%u, " - "txtLen=%u, txtRecord=%p, context=%p)\n", sdRef, flags, + "txtLen=%u, txtRecord=%p, context=%p)", sdRef, flags, interfaceIndex, errorCode, fullName, hostTarget, port, txtLen, txtRecord, context)); @@ -1673,7 +1673,7 @@ resolve_callback( httpAssembleURI(HTTP_URI_CODING_ALL, uribuf->buffer, uribuf->bufsize, scheme, NULL, hostTarget, ntohs(port), rp); - DEBUG_printf(("resolve_callback: Resolved URI is \"%s\"...\n", + DEBUG_printf(("8resolve_callback: Resolved URI is \"%s\"...", uribuf->buffer)); } #endif /* HAVE_DNSSD */ diff --git a/cups/http.c b/cups/http.c index eef9973b8..e5920fa3f 100644 --- a/cups/http.c +++ b/cups/http.c @@ -304,7 +304,7 @@ httpClose(http_t *http) /* I - Connection to server */ #endif /* HAVE_GSSAPI */ - DEBUG_printf(("httpClose(http=%p)\n", http)); + DEBUG_printf(("httpClose(http=%p)", http)); if (!http) return; @@ -376,7 +376,7 @@ httpConnectEncrypt( http_t *http; /* New HTTP connection */ - DEBUG_printf(("httpConnectEncrypt(host=\"%s\", port=%d, encryption=%d)\n", + DEBUG_printf(("httpConnectEncrypt(host=\"%s\", port=%d, encryption=%d)", host, port, encryption)); /* @@ -420,7 +420,7 @@ _httpCreate( char service[255]; /* Service name */ - DEBUG_printf(("_httpCreate(host=\"%s\", port=%d, encryption=%d)\n", + DEBUG_printf(("4_httpCreate(host=\"%s\", port=%d, encryption=%d)", host, port, encryption)); if (!host) @@ -496,7 +496,7 @@ int /* O - -1 on error, 0 on success */ httpEncryption(http_t *http, /* I - Connection to server */ http_encryption_t e) /* I - New encryption preference */ { - DEBUG_printf(("httpEncryption(http=%p, e=%d)\n", http, e)); + DEBUG_printf(("httpEncryption(http=%p, e=%d)", http, e)); #ifdef HAVE_SSL if (!http) @@ -545,7 +545,7 @@ httpFlush(http_t *http) /* I - Connection to server */ int blocking; /* To block or not to block */ - DEBUG_printf(("httpFlush(http=%p), state=%d\n", http, http->state)); + DEBUG_printf(("httpFlush(http=%p), state=%d", http, http->state)); /* * Temporarily set non-blocking mode so we don't get stuck in httpRead()... @@ -603,7 +603,7 @@ httpFlushWrite(http_t *http) /* I - Connection to server */ int bytes; /* Bytes written */ - DEBUG_printf(("httpFlushWrite(http=%p)\n", http)); + DEBUG_printf(("httpFlushWrite(http=%p)", http)); if (!http || !http->wused) return (0); @@ -757,14 +757,14 @@ httpGetLength(http_t *http) /* I - Connection to server */ off_t /* O - Content length */ httpGetLength2(http_t *http) /* I - Connection to server */ { - DEBUG_printf(("httpGetLength2(http=%p), state=%d\n", http, http->state)); + DEBUG_printf(("2httpGetLength2(http=%p), state=%d", http, http->state)); if (!http) return (-1); if (!strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked")) { - DEBUG_puts("httpGetLength2: chunked request!"); + DEBUG_puts("4httpGetLength2: chunked request!"); http->data_encoding = HTTP_ENCODE_CHUNKED; http->data_remaining = 0; @@ -797,7 +797,7 @@ httpGetLength2(http_t *http) /* I - Connection to server */ http->data_remaining = strtoll(http->fields[HTTP_FIELD_CONTENT_LENGTH], NULL, 10); - DEBUG_printf(("httpGetLength2: content_length=" CUPS_LLFMT "\n", + DEBUG_printf(("4httpGetLength2: content_length=" CUPS_LLFMT, CUPS_LLCAST http->data_remaining)); } @@ -857,8 +857,8 @@ httpGetSubField2(http_t *http, /* I - Connection to server */ *ptr, /* Pointer into string buffer */ *end; /* End of value buffer */ - DEBUG_printf(("httpGetSubField2(http=%p, field=%d, name=\"%s\", value=%p, valuelen=%d)\n", - http, field, name, value, valuelen)); + DEBUG_printf(("2httpGetSubField2(http=%p, field=%d, name=\"%s\", value=%p, " + "valuelen=%d)", http, field, name, value, valuelen)); if (!http || !name || !value || valuelen < 2 || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX) @@ -892,7 +892,7 @@ httpGetSubField2(http_t *http, /* I - Connection to server */ *ptr = '\0'; - DEBUG_printf(("httpGetSubField: name=\"%s\"\n", temp)); + DEBUG_printf(("4httpGetSubField2: name=\"%s\"", temp)); /* * Skip trailing chars up to the '='... @@ -950,18 +950,23 @@ httpGetSubField2(http_t *http, /* I - Connection to server */ fptr ++; } - DEBUG_printf(("httpGetSubField: value=\"%s\"\n", value)); + DEBUG_printf(("4httpGetSubField2: value=\"%s\"", value)); /* * See if this is the one... */ if (!strcmp(name, temp)) + { + DEBUG_printf(("3httpGetSubField2: Returning \"%s\"", value)); return (value); + } } value[0] = '\0'; + DEBUG_puts("3httpGetSubField2: Returning NULL"); + return (NULL); } @@ -983,7 +988,7 @@ httpGets(char *line, /* I - Line to read into */ eol; /* End-of-line? */ - DEBUG_printf(("httpGets(line=%p, length=%d, http=%p)\n", line, length, http)); + DEBUG_printf(("2httpGets(line=%p, length=%d, http=%p)", line, length, http)); if (http == NULL || line == NULL) return (NULL); @@ -1016,7 +1021,7 @@ httpGets(char *line, /* I - Line to read into */ if (!http->blocking && !_httpWait(http, 10000, 1)) { - DEBUG_puts("httpGets: Timed out!"); + DEBUG_puts("3httpGets: Timed out!"); #ifdef WIN32 http->error = WSAETIMEDOUT; #else @@ -1034,7 +1039,7 @@ httpGets(char *line, /* I - Line to read into */ bytes = recv(http->fd, http->buffer + http->used, HTTP_MAX_BUFFER - http->used, 0); - DEBUG_printf(("httpGets: read %d bytes...\n", bytes)); + DEBUG_printf(("4httpGets: read %d bytes...", bytes)); if (bytes < 0) { @@ -1049,11 +1054,11 @@ httpGets(char *line, /* I - Line to read into */ continue; } - DEBUG_printf(("httpGets: recv() error %d!\n", WSAGetLastError())); + DEBUG_printf(("3httpGets: recv() error %d!", WSAGetLastError())); #else - DEBUG_printf(("httpGets: recv() error %d!\n", errno)); + DEBUG_printf(("3httpGets: recv() error %d!", errno)); - if (errno == EINTR) + if (errno == EINTR || errno == EAGAIN) continue; else if (errno != http->error) { @@ -1111,13 +1116,13 @@ httpGets(char *line, /* I - Line to read into */ *lineptr = '\0'; - DEBUG_printf(("httpGets: Returning \"%s\"\n", line)); + DEBUG_printf(("3httpGets: Returning \"%s\"", line)); return (line); } } - DEBUG_puts("httpGets: No new line available!"); + DEBUG_puts("3httpGets: No new line available!"); return (NULL); } @@ -1131,6 +1136,7 @@ int /* O - Status of call (0 = success) */ httpHead(http_t *http, /* I - Connection to server */ const char *uri) /* I - URI for head */ { + DEBUG_printf(("httpHead(http=%p, uri=\"%s\")", http, uri)); return (http_send(http, HTTP_HEAD, uri)); } @@ -1244,13 +1250,13 @@ httpPrintf(http_t *http, /* I - Connection to server */ va_list ap; /* Variable argument pointer */ - DEBUG_printf(("httpPrintf(http=%p, format=\"%s\", ...)\n", http, format)); + DEBUG_printf(("2httpPrintf(http=%p, format=\"%s\", ...)", http, format)); va_start(ap, format); bytes = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); - DEBUG_printf(("httpPrintf: %s", buf)); + DEBUG_printf(("3httpPrintf: %s", buf)); if (http->data_encoding == HTTP_ENCODE_FIELDS) return (httpWrite2(http, buf, bytes)); @@ -1258,7 +1264,7 @@ httpPrintf(http_t *http, /* I - Connection to server */ { if (http->wused) { - DEBUG_puts(" flushing existing data..."); + DEBUG_puts("4httpPrintf: flushing existing data..."); if (httpFlushWrite(http) < 0) return (-1); @@ -1277,6 +1283,7 @@ int /* O - Status of call (0 = success) */ httpPut(http_t *http, /* I - Connection to server */ const char *uri) /* I - URI to put */ { + DEBUG_printf(("httpPut(http=%p, uri=\"%s\")", http, uri)); return (http_send(http, HTTP_PUT, uri)); } @@ -1314,7 +1321,7 @@ httpRead2(http_t *http, /* I - Connection to server */ char len[32]; /* Length string */ - DEBUG_printf(("httpRead2(http=%p, buffer=%p, length=" CUPS_LLFMT ")\n", + DEBUG_printf(("httpRead2(http=%p, buffer=%p, length=" CUPS_LLFMT ")", http, buffer, CUPS_LLCAST length)); if (http == NULL || buffer == NULL) @@ -1328,23 +1335,23 @@ httpRead2(http_t *http, /* I - Connection to server */ if (http->data_encoding == HTTP_ENCODE_CHUNKED && http->data_remaining <= 0) { - DEBUG_puts("httpRead2: Getting chunk length..."); + DEBUG_puts("2httpRead2: Getting chunk length..."); if (httpGets(len, sizeof(len), http) == NULL) { - DEBUG_puts("httpRead2: Could not get length!"); + DEBUG_puts("1httpRead2: Could not get length!"); return (0); } http->data_remaining = strtoll(len, NULL, 16); if (http->data_remaining < 0) { - DEBUG_puts("httpRead2: Negative chunk length!"); + DEBUG_puts("1httpRead2: Negative chunk length!"); return (0); } } - DEBUG_printf(("httpRead2: data_remaining=" CUPS_LLFMT "\n", + DEBUG_printf(("2httpRead2: data_remaining=" CUPS_LLFMT, CUPS_LLCAST http->data_remaining)); if (http->data_remaining <= 0) @@ -1393,12 +1400,12 @@ httpRead2(http_t *http, /* I - Connection to server */ else #endif /* HAVE_SSL */ { - DEBUG_printf(("httpRead2: reading %d bytes from socket into buffer...\n", + DEBUG_printf(("2httpRead2: reading %d bytes from socket into buffer...", (int)bytes)); bytes = recv(http->fd, http->buffer, bytes, 0); - DEBUG_printf(("httpRead2: read %d bytes from socket into buffer...\n", + DEBUG_printf(("2httpRead2: read %d bytes from socket into buffer...", (int)bytes)); } @@ -1410,7 +1417,7 @@ httpRead2(http_t *http, /* I - Connection to server */ http->error = WSAGetLastError(); return (-1); #else - if (errno != EINTR) + if (errno != EINTR && errno != EAGAIN) { http->error = errno; return (-1); @@ -1431,7 +1438,7 @@ httpRead2(http_t *http, /* I - Connection to server */ bytes = (ssize_t)length; - DEBUG_printf(("httpRead2: grabbing %d bytes from input buffer...\n", + DEBUG_printf(("2httpRead2: grabbing %d bytes from input buffer...", (int)bytes)); memcpy(buffer, http->buffer, length); @@ -1454,7 +1461,7 @@ httpRead2(http_t *http, /* I - Connection to server */ if (!http->blocking && !httpWait(http, 10000)) return (0); - DEBUG_printf(("httpRead2: reading " CUPS_LLFMT " bytes from socket...\n", + DEBUG_printf(("2httpRead2: reading " CUPS_LLFMT " bytes from socket...", CUPS_LLCAST length)); #ifdef WIN32 @@ -1465,7 +1472,7 @@ httpRead2(http_t *http, /* I - Connection to server */ break; #endif /* WIN32 */ - DEBUG_printf(("httpRead2: read " CUPS_LLFMT " bytes from socket...\n", + DEBUG_printf(("2httpRead2: read " CUPS_LLFMT " bytes from socket...", CUPS_LLCAST bytes)); } @@ -1552,7 +1559,7 @@ _httpReadCDSA( { bytes = recv(http->fd, data, *dataLength, 0); } - while (bytes == -1 && errno == EINTR); + while (bytes == -1 && (errno == EINTR || errno == EAGAIN)); if (bytes == *dataLength) { @@ -1628,7 +1635,7 @@ httpReconnect(http_t *http) /* I - Connection to server */ #endif /* DEBUG */ - DEBUG_printf(("httpReconnect(http=%p)\n", http)); + DEBUG_printf(("httpReconnect(http=%p)", http)); if (!http) return (-1); @@ -1636,7 +1643,7 @@ httpReconnect(http_t *http) /* I - Connection to server */ #ifdef HAVE_SSL if (http->tls) { - DEBUG_puts("httpReconnect: Shutting down SSL/TLS..."); + DEBUG_puts("2httpReconnect: Shutting down SSL/TLS..."); http_shutdown_ssl(http); } #endif /* HAVE_SSL */ @@ -1647,7 +1654,7 @@ httpReconnect(http_t *http) /* I - Connection to server */ if (http->fd >= 0) { - DEBUG_printf(("httpReconnect: Closing socket %d...\n", http->fd)); + DEBUG_printf(("2httpReconnect: Closing socket %d...", http->fd)); #ifdef WIN32 closesocket(http->fd); @@ -1666,7 +1673,7 @@ httpReconnect(http_t *http) /* I - Connection to server */ #ifdef DEBUG for (current = http->addrlist; current; current = current->next) - DEBUG_printf(("httpReconnect: Address %s:%d\n", + DEBUG_printf(("2httpReconnect: Address %s:%d", httpAddrString(&(current->addr), temp, sizeof(temp)), _httpAddrPort(&(current->addr)))); #endif /* DEBUG */ @@ -1684,13 +1691,13 @@ httpReconnect(http_t *http) /* I - Connection to server */ #endif /* WIN32 */ http->status = HTTP_ERROR; - DEBUG_printf(("httpReconnect: httpAddrConnect failed: %s\n", + DEBUG_printf(("1httpReconnect: httpAddrConnect failed: %s", strerror(http->error))); return (-1); } - DEBUG_printf(("httpReconnect: New socket=%d\n", http->fd)); + DEBUG_printf(("2httpReconnect: New socket=%d", http->fd)); http->hostaddr = &(addr->addr); http->error = 0; @@ -1718,7 +1725,7 @@ httpReconnect(http_t *http) /* I - Connection to server */ return (http_upgrade(http)); #endif /* HAVE_SSL */ - DEBUG_printf(("httpReconnect: Connected to %s:%d...\n", + DEBUG_printf(("1httpReconnect: Connected to %s:%d...", httpAddrString(http->hostaddr, temp, sizeof(temp)), _httpAddrPort(http->hostaddr))); @@ -1844,18 +1851,35 @@ httpSetField(http_t *http, /* I - Connection to server */ strlcpy(http->fields[field], value, HTTP_MAX_VALUE); - /* - * Special case for Authorization: as its contents can be - * longer than HTTP_MAX_VALUE - */ - if (field == HTTP_FIELD_AUTHORIZATION) { + /* + * Special case for Authorization: as its contents can be + * longer than HTTP_MAX_VALUE + */ + if (http->field_authorization) free(http->field_authorization); http->field_authorization = strdup(value); } + else if (field == HTTP_FIELD_HOST) + { + /* + * Special-case for Host: as we don't want a trailing "." on the hostname. + */ + + char *ptr = http->fields[HTTP_FIELD_HOST]; + /* Pointer into Host: field */ + + if (*ptr) + { + ptr += strlen(ptr) - 1; + + if (*ptr == '.') + *ptr = '\0'; + } + } } @@ -1912,7 +1936,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ status; /* Request status */ - DEBUG_printf(("httpUpdate(http=%p), state=%d\n", http, http->state)); + DEBUG_printf(("httpUpdate(http=%p), state=%d", http, http->state)); /* * Flush pending data, if any... @@ -1920,7 +1944,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ if (http->wused) { - DEBUG_puts(" flushing buffer..."); + DEBUG_puts("2httpUpdate: flushing buffer..."); if (httpFlushWrite(http) < 0) return (HTTP_ERROR); @@ -1939,7 +1963,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ while (httpGets(line, sizeof(line), http) != NULL) { - DEBUG_printf(("httpUpdate: Got \"%s\"\n", line)); + DEBUG_printf(("2httpUpdate: Got \"%s\"", line)); if (line[0] == '\0') { @@ -1996,7 +2020,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ return (http->status); } - else if (strncmp(line, "HTTP/", 5) == 0) + else if (!strncmp(line, "HTTP/", 5)) { /* * Got the beginning of a response... @@ -2040,7 +2064,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ } else if ((field = http_field(line)) == HTTP_FIELD_UNKNOWN) { - DEBUG_printf(("httpUpdate: unknown field %s seen!\n", line)); + DEBUG_printf(("1httpUpdate: unknown field %s seen!", line)); continue; } else @@ -2048,6 +2072,7 @@ httpUpdate(http_t *http) /* I - Connection to server */ } else { + DEBUG_printf(("1httpUpdate: Bad response line \"%s\"!", line)); http->status = HTTP_ERROR; return (HTTP_ERROR); } @@ -2058,11 +2083,14 @@ httpUpdate(http_t *http) /* I - Connection to server */ */ if (http->error == EPIPE && http->status > HTTP_CONTINUE) + { + DEBUG_printf(("1httpUpdate: Returning status %d...", http->status)); return (http->status); + } if (http->error) { - DEBUG_printf(("httpUpdate: socket error %d - %s\n", http->error, + DEBUG_printf(("1httpUpdate: socket error %d - %s", http->error, strerror(http->error))); http->status = HTTP_ERROR; return (HTTP_ERROR); @@ -2094,7 +2122,7 @@ _httpWait(http_t *http, /* I - Connection to server */ int nfds; /* Result from select()/poll() */ - DEBUG_printf(("_httpWait(http=%p, msec=%d, usessl=%d)\n", http, msec, usessl)); + DEBUG_printf(("4_httpWait(http=%p, msec=%d, usessl=%d)", http, msec, usessl)); if (http->fd < 0) return (0); @@ -2130,7 +2158,8 @@ _httpWait(http_t *http, /* I - Connection to server */ pfd.fd = http->fd; pfd.events = POLLIN; - while ((nfds = poll(&pfd, 1, msec)) < 0 && errno == EINTR); + while ((nfds = poll(&pfd, 1, msec)) < 0 && + (errno == EINTR || errno == EAGAIN)); #else do @@ -2138,7 +2167,7 @@ _httpWait(http_t *http, /* I - Connection to server */ FD_ZERO(&input_set); FD_SET(http->fd, &input_set); - DEBUG_printf(("_httpWait: msec=%d, http->fd=%d\n", msec, http->fd)); + DEBUG_printf(("6_httpWait: msec=%d, http->fd=%d", msec, http->fd)); if (msec >= 0) { @@ -2150,16 +2179,16 @@ _httpWait(http_t *http, /* I - Connection to server */ else nfds = select(http->fd + 1, &input_set, NULL, NULL, NULL); - DEBUG_printf(("_httpWait: select() returned %d...\n", nfds)); + DEBUG_printf(("6_httpWait: select() returned %d...", nfds)); } # ifdef WIN32 while (nfds < 0 && WSAGetLastError() == WSAEINTR); # else - while (nfds < 0 && errno == EINTR); + while (nfds < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ #endif /* HAVE_POLL */ - DEBUG_printf(("_httpWait: returning with nfds=%d...\n", nfds)); + DEBUG_printf(("5_httpWait: returning with nfds=%d...", nfds)); return (nfds > 0); } @@ -2235,7 +2264,7 @@ httpWrite2(http_t *http, /* I - Connection to server */ ssize_t bytes; /* Bytes written */ - DEBUG_printf(("httpWrite2(http=%p, buffer=%p, length=" CUPS_LLFMT ")\n", http, + DEBUG_printf(("httpWrite2(http=%p, buffer=%p, length=" CUPS_LLFMT ")", http, buffer, CUPS_LLCAST length)); /* @@ -2259,8 +2288,8 @@ httpWrite2(http_t *http, /* I - Connection to server */ { if (http->wused && (length + http->wused) > sizeof(http->wbuffer)) { - DEBUG_printf(("httpWrite2: Flushing buffer (wused=%d, length=" - CUPS_LLFMT ")\n", http->wused, CUPS_LLCAST length)); + DEBUG_printf(("2httpWrite2: Flushing buffer (wused=%d, length=" + CUPS_LLFMT ")", http->wused, CUPS_LLCAST length)); httpFlushWrite(http); } @@ -2272,7 +2301,7 @@ httpWrite2(http_t *http, /* I - Connection to server */ * Write to buffer... */ - DEBUG_printf(("httpWrite2: Copying " CUPS_LLFMT " bytes to wbuffer...\n", + DEBUG_printf(("2httpWrite2: Copying " CUPS_LLFMT " bytes to wbuffer...", CUPS_LLCAST length)); memcpy(http->wbuffer + http->wused, buffer, length); @@ -2285,7 +2314,7 @@ httpWrite2(http_t *http, /* I - Connection to server */ * Otherwise write the data directly... */ - DEBUG_printf(("httpWrite2: Writing " CUPS_LLFMT " bytes to socket...\n", + DEBUG_printf(("2httpWrite2: Writing " CUPS_LLFMT " bytes to socket...", CUPS_LLCAST length)); if (http->data_encoding == HTTP_ENCODE_CHUNKED) @@ -2293,7 +2322,7 @@ httpWrite2(http_t *http, /* I - Connection to server */ else bytes = (ssize_t)http_write(http, buffer, (int)length); - DEBUG_printf(("httpWrite2: Wrote " CUPS_LLFMT " bytes...\n", + DEBUG_printf(("2httpWrite2: Wrote " CUPS_LLFMT " bytes...", CUPS_LLCAST bytes)); } @@ -2315,7 +2344,7 @@ httpWrite2(http_t *http, /* I - Connection to server */ * data, go idle... */ - DEBUG_puts("httpWrite: changing states..."); + DEBUG_puts("2httpWrite: changing states..."); if (http->wused) httpFlushWrite(http); @@ -2370,7 +2399,7 @@ _httpWriteCDSA( { bytes = write(http->fd, data, *dataLength); } - while (bytes == -1 && errno == EINTR); + while (bytes == -1 && (errno == EINTR || errno == EAGAIN)); if (bytes == *dataLength) { @@ -2578,7 +2607,7 @@ http_debug_hex(const char *prefix, /* I - Prefix for line */ if (_cups_debug_fd < 0) return; - DEBUG_printf(("%s: %d bytes:\n", prefix, bytes)); + DEBUG_printf(("6%s: %d bytes:\n", prefix, bytes)); snprintf(line, sizeof(line), "%s: ", prefix); start = line + strlen(line); @@ -2715,7 +2744,7 @@ http_send(http_t *http, /* I - Connection to server */ }; - DEBUG_printf(("http_send(http=%p, request=HTTP_%s, uri=\"%s\")\n", + DEBUG_printf(("7http_send(http=%p, request=HTTP_%s, uri=\"%s\")", http, codes[request], uri)); if (http == NULL || uri == NULL) @@ -2778,7 +2807,7 @@ http_send(http_t *http, /* I - Connection to server */ for (i = 0; i < HTTP_FIELD_MAX; i ++) if (http->fields[i][0] != '\0') { - DEBUG_printf(("http_send: %s: %s\n", http_fields[i], + DEBUG_printf(("9http_send: %s: %s", http_fields[i], httpGetField(http, i))); if (httpPrintf(http, "%s: %s\r\n", http_fields[i], @@ -2856,7 +2885,7 @@ http_setup_ssl(http_t *http) /* I - Connection to server */ # endif /* HAVE_LIBSSL */ - DEBUG_printf(("http_setup_ssl(http=%p)\n", http)); + DEBUG_printf(("7http_setup_ssl(http=%p)", http)); # ifdef HAVE_LIBSSL context = SSL_CTX_new(SSLv23_client_method()); @@ -2875,7 +2904,7 @@ http_setup_ssl(http_t *http) /* I - Connection to server */ unsigned long error; /* Error code */ while ((error = ERR_get_error()) != 0) - printf("http_setup_ssl: %s\n", ERR_error_string(error, NULL)); + DEBUG_printf(("8http_setup_ssl: %s", ERR_error_string(error, NULL))); # endif /* DEBUG */ SSL_CTX_free(context); @@ -3058,7 +3087,7 @@ http_upgrade(http_t *http) /* I - Connection to server */ http_t myhttp; /* Local copy of HTTP data */ - DEBUG_printf(("http_upgrade(%p)\n", http)); + DEBUG_printf(("7http_upgrade(%p)", http)); /* * Copy the HTTP data to a local variable so we can do the OPTIONS @@ -3111,7 +3140,7 @@ http_upgrade(http_t *http) /* I - Connection to server */ * Server does not support HTTP upgrade... */ - DEBUG_puts("Server does not support HTTP upgrade!"); + DEBUG_puts("8http_upgrade: Server does not support HTTP upgrade!"); # ifdef WIN32 closesocket(http->fd); @@ -3162,7 +3191,7 @@ http_write(http_t *http, /* I - Connection to server */ continue; } #else - if (errno == EINTR) + if (errno == EINTR || errno == EAGAIN) continue; else if (errno != http->error && errno != ECONNRESET) { @@ -3171,7 +3200,7 @@ http_write(http_t *http, /* I - Connection to server */ } #endif /* WIN32 */ - DEBUG_puts("http_write: error writing data...\n"); + DEBUG_puts("8http_write: error writing data..."); return (-1); } @@ -3201,7 +3230,7 @@ http_write_chunk(http_t *http, /* I - Connection to server */ char header[255]; /* Chunk header */ int bytes; /* Bytes written */ - DEBUG_printf(("http_write_chunk(http=%p, buffer=%p, length=%d)\n", + DEBUG_printf(("7http_write_chunk(http=%p, buffer=%p, length=%d)", http, buffer, length)); /* @@ -3211,19 +3240,19 @@ http_write_chunk(http_t *http, /* I - Connection to server */ sprintf(header, "%x\r\n", length); if (http_write(http, header, (int)strlen(header)) < 0) { - DEBUG_puts(" http_write of length failed!"); + DEBUG_puts("8http_write_chunk: http_write of length failed!"); return (-1); } if ((bytes = http_write(http, buffer, length)) < 0) { - DEBUG_puts(" http_write of buffer failed!"); + DEBUG_puts("8http_write_chunk: http_write of buffer failed!"); return (-1); } if (http_write(http, "\r\n", 2) < 0) { - DEBUG_puts(" http_write of CR LF failed!"); + DEBUG_puts("8http_write_chunk: http_write of CR LF failed!"); return (-1); } diff --git a/cups/ipp-support.c b/cups/ipp-support.c index 8553a488e..c8c239c0f 100644 --- a/cups/ipp-support.c +++ b/cups/ipp-support.c @@ -4,7 +4,7 @@ * Internet Printing Protocol support functions for the Common UNIX * Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -391,53 +391,15 @@ ippOpValue(const char *name) /* I - Textual name */ int /* O - Port number */ ippPort(void) { - const char *ipp_port; /* IPP_PORT environment variable */ - struct servent *port; /* Port number info */ - int portnum; /* Port number */ _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... - */ + _cupsSetDefaults(); - DEBUG_puts("ippPort: Not initialized..."); - - cupsServer(); - -#ifdef DEBUG - if (cg->ipp_port) - DEBUG_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)); + DEBUG_printf(("1ippPort: Returning %d...", cg->ipp_port)); return (cg->ipp_port); } @@ -450,7 +412,7 @@ ippPort(void) void ippSetPort(int p) /* I - Port number to use */ { - DEBUG_printf(("ippSetPort(p=%d)\n", p)); + DEBUG_printf(("ippSetPort(p=%d)", p)); _cupsGlobals()->ipp_port = p; } diff --git a/cups/ipp.c b/cups/ipp.c index a6c640856..021a56e11 100644 --- a/cups/ipp.c +++ b/cups/ipp.c @@ -99,7 +99,7 @@ ippAddBoolean(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t *attr; /* New attribute */ - DEBUG_printf(("ippAddBoolean(ipp=%p, group=%02x(%s), name=\"%s\", value=%d)\n", + DEBUG_printf(("ippAddBoolean(ipp=%p, group=%02x(%s), name=\"%s\", value=%d)", ipp, group, ippTagString(group), name, value)); if (!ipp || !name) @@ -134,7 +134,7 @@ ippAddBooleans(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddBooleans(ipp=%p, group=%02x(%s), name=\"%s\", " - "num_values=%d, values=%p)\n", ipp, group, ippTagString(group), + "num_values=%d, values=%p)", ipp, group, ippTagString(group), name, num_values, values)); if (!ipp || !name || num_values < 1) @@ -173,7 +173,7 @@ ippAddCollection(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddCollection(ipp=%p, group=%02x(%s), name=\"%s\", " - "value=%p)\n", ipp, group, ippTagString(group), name, value)); + "value=%p)", ipp, group, ippTagString(group), name, value)); if (!ipp || !name) return (NULL); @@ -210,7 +210,7 @@ ippAddCollections( DEBUG_printf(("ippAddCollections(ipp=%p, group=%02x(%s), name=\"%s\", " - "num_values=%d, values=%p)\n", ipp, group, ippTagString(group), + "num_values=%d, values=%p)", ipp, group, ippTagString(group), name, num_values, values)); if (!ipp || !name || num_values < 1) @@ -246,7 +246,7 @@ ippAddDate(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t *attr; /* New attribute */ - DEBUG_printf(("ippAddDate(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)\n", + DEBUG_printf(("ippAddDate(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", ipp, group, ippTagString(group), name, value)); if (!ipp || !name || !value) @@ -279,7 +279,7 @@ ippAddInteger(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddInteger(ipp=%p, group=%02x(%s), type=%02x(%s), " - "name=\"%s\", value=%d)\n", ipp, group, ippTagString(group), + "name=\"%s\", value=%d)", ipp, group, ippTagString(group), type, ippTagString(type), name, value)); if (!ipp || !name) @@ -315,7 +315,7 @@ ippAddIntegers(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddIntegers(ipp=%p, group=%02x(%s), type=%02x(%s), " - "name=\"%s\", num_values=%d, values=%p)\n", ipp, + "name=\"%s\", num_values=%d, values=%p)", ipp, group, ippTagString(group), type, ippTagString(type), name, num_values, values)); @@ -407,7 +407,7 @@ ippAddString(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddString(ipp=%p, group=%02x(%s), type=%02x(%s), " - "name=\"%s\", charset=\"%s\", value=\"%s\")\n", ipp, + "name=\"%s\", charset=\"%s\", value=\"%s\")", ipp, group, ippTagString(group), type, ippTagString(type), name, charset, value)); @@ -476,7 +476,7 @@ ippAddStrings( DEBUG_printf(("ippAddStrings(ipp=%p, group=%02x(%s), type=%02x(%s), " - "name=\"%s\", num_values=%d, charset=\"%s\", values=%p)\n", ipp, + "name=\"%s\", num_values=%d, charset=\"%s\", values=%p)", ipp, group, ippTagString(group), type, ippTagString(type), name, num_values, charset, values)); @@ -538,7 +538,7 @@ ippAddRange(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddRange(ipp=%p, group=%02x(%s), name=\"%s\", lower=%d, " - "upper=%d)\n", ipp, group, ippTagString(group), name, lower, + "upper=%d)", ipp, group, ippTagString(group), name, lower, upper)); if (!ipp || !name) @@ -575,7 +575,7 @@ ippAddRanges(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddRanges(ipp=%p, group=%02x(%s), name=\"%s\", " - "num_values=%d, lower=%p, upper=%p)\n", ipp, group, + "num_values=%d, lower=%p, upper=%p)", ipp, group, ippTagString(group), name, num_values, lower, upper)); if (!ipp || !name || num_values < 1) @@ -617,7 +617,7 @@ ippAddResolution(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddResolution(ipp=%p, group=%02x(%s), name=\"%s\", " - "units=%d, xres=%d, yres=%d)\n", ipp, group, + "units=%d, xres=%d, yres=%d)", ipp, group, ippTagString(group), name, units, xres, yres)); if (!ipp || !name) @@ -656,7 +656,7 @@ ippAddResolutions(ipp_t *ipp, /* I - IPP message */ DEBUG_printf(("ippAddResolutions(ipp=%p, group=%02x(%s), name=\"%s\", " - "num_value=%d, units=%d, xres=%p, yres=%p)\n", ipp, group, + "num_value=%d, units=%d, xres=%p, yres=%p)", ipp, group, ippTagString(group), name, num_values, units, xres, yres)); if (!ipp || !name || num_values < 1) @@ -693,7 +693,7 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP message */ ipp_attribute_t *attr; /* New attribute */ - DEBUG_printf(("ippAddSeparator(ipp=%p)\n", ipp)); + DEBUG_printf(("ippAddSeparator(ipp=%p)", ipp)); if (!ipp) return (NULL); @@ -771,7 +771,7 @@ ippDelete(ipp_t *ipp) /* I - IPP message */ *next; /* Next attribute */ - DEBUG_printf(("ippDelete(ipp=%p)\n", ipp)); + DEBUG_printf(("ippDelete(ipp=%p)", ipp)); if (!ipp) return; @@ -801,7 +801,8 @@ ippDeleteAttribute( *prev; /* Previous attribute */ - DEBUG_printf(("ippDeleteAttribute(ipp=%p, attr=%p)\n", ipp, attr)); + DEBUG_printf(("ippDeleteAttribute(ipp=%p, attr=%p(%s))", ipp, attr, + attr ? attr->name : "(null)")); /* * Find the attribute in the list... @@ -843,7 +844,7 @@ ippFindAttribute(ipp_t *ipp, /* I - IPP message */ const char *name, /* I - Name of attribute */ ipp_tag_t type) /* I - Type of attribute */ { - DEBUG_printf(("ippFindAttribute(ipp=%p, name=\"%s\", type=%02x(%s))\n", ipp, + DEBUG_printf(("2ippFindAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", ipp, name, type, ippTagString(type))); if (!ipp || !name) @@ -876,7 +877,7 @@ ippFindNextAttribute(ipp_t *ipp, /* I - IPP message */ ipp_tag_t value_tag; /* Value tag */ - DEBUG_printf(("ippFindNextAttribute(ipp=%p, name=\"%s\", type=%02x(%s))\n", + DEBUG_printf(("2ippFindNextAttribute(ipp=%p, name=\"%s\", type=%02x(%s))", ipp, name, type, ippTagString(type))); if (!ipp || !name) @@ -895,7 +896,7 @@ ippFindNextAttribute(ipp_t *ipp, /* I - IPP message */ for (; attr != NULL; ipp->prev = attr, attr = attr->next) { - DEBUG_printf(("ippFindAttribute: attr=%p, name=\"%s\"\n", attr, + DEBUG_printf(("4ippFindAttribute: attr=%p, name=\"%s\"", attr, attr->name)); value_tag = (ipp_tag_t)(attr->value_tag & IPP_TAG_MASK); @@ -951,7 +952,7 @@ ippNew(void) temp->request.any.version[1] = 1; } - DEBUG_printf(("ippNew: %p\n", temp)); + DEBUG_printf(("1ippNew: Returning %p", temp)); return (temp); } @@ -974,7 +975,7 @@ ippNewRequest(ipp_op_t op) /* I - Operation code */ cups_lang_t *language; /* Current language localization */ - DEBUG_printf(("ippNewRequest(op=%02x(%s))\n", op, ippOpString(op))); + DEBUG_printf(("ippNewRequest(op=%02x(%s))", op, ippOpString(op))); /* * Create a new IPP message... @@ -1022,13 +1023,13 @@ ipp_state_t /* O - Current state */ ippRead(http_t *http, /* I - HTTP connection */ ipp_t *ipp) /* I - IPP data */ { - DEBUG_printf(("ippRead(http=%p, ipp=%p), data_remaining=" CUPS_LLFMT "\n", + DEBUG_printf(("ippRead(http=%p, ipp=%p), data_remaining=" CUPS_LLFMT, http, ipp, CUPS_LLCAST (http ? http->data_remaining : -1))); if (!http) return (IPP_ERROR); - DEBUG_printf(("ippRead: http->state=%d, http->used=%d\n", http->state, + DEBUG_printf(("2ippRead: http->state=%d, http->used=%d", http->state, http->used)); return (ippReadIO(http, (ipp_iocb_t)ipp_read_http, http->blocking, NULL, @@ -1046,7 +1047,7 @@ ipp_state_t /* O - Current state */ ippReadFile(int fd, /* I - HTTP data */ ipp_t *ipp) /* I - IPP data */ { - DEBUG_printf(("ippReadFile(fd=%d, ipp=%p)\n", fd, ipp)); + DEBUG_printf(("ippReadFile(fd=%d, ipp=%p)", fd, ipp)); return (ippReadIO(&fd, (ipp_iocb_t)ipp_read_file, 1, NULL, ipp)); } @@ -1076,16 +1077,16 @@ ippReadIO(void *src, /* I - Data source */ ipp_value_t *value; /* Current value */ - DEBUG_printf(("ippReadIO(src=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)\n", + DEBUG_printf(("ippReadIO(src=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", src, cb, blocking, parent, ipp)); - DEBUG_printf(("ippReadIO: ipp->state=%d\n", ipp->state)); + DEBUG_printf(("2ippReadIO: ipp->state=%d", ipp->state)); if (!src || !ipp) return (IPP_ERROR); if ((buffer = ipp_buffer_get()) == NULL) { - DEBUG_puts("ippReadIO: Unable to get read buffer!"); + DEBUG_puts("1ippReadIO: Unable to get read buffer!"); return (IPP_ERROR); } @@ -1103,7 +1104,7 @@ ippReadIO(void *src, /* I - Data source */ if ((*cb)(src, buffer, 8) < 8) { - DEBUG_puts("ippReadIO: Unable to read header!"); + DEBUG_puts("1ippReadIO: Unable to read header!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1118,10 +1119,10 @@ ippReadIO(void *src, /* I - Data source */ ipp->request.any.request_id = (((((buffer[4] << 8) | buffer[5]) << 8) | buffer[6]) << 8) | buffer[7]; - DEBUG_printf(("ippReadIO: version=%d.%d\n", buffer[0], buffer[1])); - DEBUG_printf(("ippReadIO: op_status=%04x\n", + DEBUG_printf(("2ippReadIO: version=%d.%d", buffer[0], buffer[1])); + DEBUG_printf(("2ippReadIO: op_status=%04x", ipp->request.any.op_status)); - DEBUG_printf(("ippReadIO: request_id=%d\n", + DEBUG_printf(("2ippReadIO: request_id=%d", ipp->request.any.request_id)); } @@ -1142,12 +1143,12 @@ ippReadIO(void *src, /* I - Data source */ { if ((*cb)(src, buffer, 1) < 1) { - DEBUG_puts("ippReadIO: Callback returned EOF/error"); + DEBUG_puts("1ippReadIO: Callback returned EOF/error"); ipp_buffer_release(buffer); return (IPP_ERROR); } - DEBUG_printf(("ippReadIO: ipp->current=%p, ipp->prev=%p\n", + DEBUG_printf(("1ippReadIO: ipp->current=%p, ipp->prev=%p", ipp->current, ipp->prev)); /* @@ -1162,7 +1163,7 @@ ippReadIO(void *src, /* I - Data source */ * No more attributes left... */ - DEBUG_puts("ippReadIO: IPP_TAG_END!"); + DEBUG_puts("2ippReadIO: IPP_TAG_END!"); ipp->state = IPP_DATA; break; @@ -1180,12 +1181,12 @@ ippReadIO(void *src, /* I - Data source */ ipp->curtag = tag; ipp->current = NULL; - DEBUG_printf(("ippReadIO: group tag=%x(%s), ipp->prev=%p\n", tag, + DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag, ippTagString(tag), ipp->prev)); continue; } - DEBUG_printf(("ippReadIO: value tag=%x(%s)\n", tag, + DEBUG_printf(("2ippReadIO: value tag=%x(%s)", tag, ippTagString(tag))); /* @@ -1194,7 +1195,7 @@ ippReadIO(void *src, /* I - Data source */ if ((*cb)(src, buffer, 2) < 2) { - DEBUG_puts("ippReadIO: unable to read name length!"); + DEBUG_puts("1ippReadIO: unable to read name length!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1203,12 +1204,12 @@ ippReadIO(void *src, /* I - Data source */ if (n >= IPP_BUF_SIZE) { - DEBUG_printf(("ippReadIO: bad name length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad name length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } - DEBUG_printf(("ippReadIO: name length=%d\n", n)); + DEBUG_printf(("2ippReadIO: name length=%d", n)); if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION) @@ -1219,7 +1220,7 @@ ippReadIO(void *src, /* I - Data source */ if (ipp->current == NULL) { - DEBUG_puts("ippReadIO: Attribute without name and no current"); + DEBUG_puts("1ippReadIO: Attribute without name and no current"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1251,7 +1252,7 @@ ippReadIO(void *src, /* I - Data source */ if ((tag < IPP_TAG_TEXTLANG || tag > IPP_TAG_MIMETYPE) && tag != IPP_TAG_NOVALUE) { - DEBUG_printf(("ippReadIO: 1setOf value tag %x(%s) != %x(%s)\n", + DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)", value_tag, ippTagString(value_tag), tag, ippTagString(tag))); ipp_buffer_release(buffer); @@ -1260,7 +1261,7 @@ ippReadIO(void *src, /* I - Data source */ } else if (value_tag != tag) { - DEBUG_printf(("ippReadIO: value tag %x(%s) != %x(%s)\n", + DEBUG_printf(("1ippReadIO: value tag %x(%s) != %x(%s)", value_tag, ippTagString(value_tag), tag, ippTagString(tag))); ipp_buffer_release(buffer); @@ -1278,7 +1279,7 @@ ippReadIO(void *src, /* I - Data source */ ipp_attribute_t *temp; /* Pointer to new buffer */ - DEBUG_printf(("ippReadIO: reallocating for up to %d values...\n", + DEBUG_printf(("2ippReadIO: reallocating for up to %d values...", attr->num_values + IPP_MAX_VALUES)); /* @@ -1289,7 +1290,7 @@ ippReadIO(void *src, /* I - Data source */ (attr->num_values + IPP_MAX_VALUES - 1) * sizeof(ipp_value_t))) == NULL) { - DEBUG_puts("ippReadIO: Unable to resize attribute"); + DEBUG_puts("1ippReadIO: Unable to resize attribute"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1317,7 +1318,7 @@ ippReadIO(void *src, /* I - Data source */ if (n) { - DEBUG_puts("ippReadIO: member name not empty!"); + DEBUG_puts("1ippReadIO: member name not empty!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1327,8 +1328,8 @@ ippReadIO(void *src, /* I - Data source */ attr = ipp->current = _ippAddAttr(ipp, 1); - DEBUG_printf(("ippReadIO: membername, ipp->current=%p, " - "ipp->prev=%p\n", ipp->current, ipp->prev)); + DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, " + "ipp->prev=%p", ipp->current, ipp->prev)); attr->group_tag = ipp->curtag; attr->value_tag = IPP_TAG_ZERO; @@ -1342,7 +1343,7 @@ ippReadIO(void *src, /* I - Data source */ if ((*cb)(src, buffer, n) < n) { - DEBUG_puts("ippReadIO: unable to read name!"); + DEBUG_puts("1ippReadIO: unable to read name!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1354,13 +1355,13 @@ ippReadIO(void *src, /* I - Data source */ if ((attr = ipp->current = _ippAddAttr(ipp, 1)) == NULL) { - DEBUG_puts("ippReadIO: unable to allocate attribute!"); + DEBUG_puts("1ippReadIO: unable to allocate attribute!"); ipp_buffer_release(buffer); return (IPP_ERROR); } - DEBUG_printf(("ippReadIO: name=\"%s\", ipp->current=%p, " - "ipp->prev=%p\n", buffer, ipp->current, ipp->prev)); + DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, " + "ipp->prev=%p", buffer, ipp->current, ipp->prev)); attr->group_tag = ipp->curtag; attr->value_tag = tag; @@ -1377,13 +1378,13 @@ ippReadIO(void *src, /* I - Data source */ if ((*cb)(src, buffer, 2) < 2) { - DEBUG_puts("ippReadIO: unable to read value length!"); + DEBUG_puts("1ippReadIO: unable to read value length!"); ipp_buffer_release(buffer); return (IPP_ERROR); } n = (buffer[0] << 8) | buffer[1]; - DEBUG_printf(("ippReadIO: value length=%d\n", n)); + DEBUG_printf(("2ippReadIO: value length=%d", n)); switch (tag) { @@ -1391,14 +1392,14 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_ENUM : if (n != 4) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, 4) < 4) { - DEBUG_puts("ippReadIO: Unable to read integer value!"); + DEBUG_puts("1ippReadIO: Unable to read integer value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1412,14 +1413,14 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_BOOLEAN : if (n != 1) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, 1) < 1) { - DEBUG_puts("ippReadIO: Unable to read boolean value!"); + DEBUG_puts("1ippReadIO: Unable to read boolean value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1449,35 +1450,34 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_MIMETYPE : if (n >= IPP_BUF_SIZE) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, n) < n) { - DEBUG_puts("ippReadIO: unable to read name!"); + DEBUG_puts("1ippReadIO: unable to read name!"); ipp_buffer_release(buffer); return (IPP_ERROR); } buffer[n] = '\0'; value->string.text = _cupsStrAlloc((char *)buffer); - DEBUG_printf(("ippReadIO: value=\"%s\"\n", - value->string.text)); + DEBUG_printf(("2ippReadIO: value=\"%s\"", value->string.text)); break; case IPP_TAG_DATE : if (n != 11) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, value->date, 11) < 11) { - DEBUG_puts("ippReadIO: Unable to date integer value!"); + DEBUG_puts("1ippReadIO: Unable to read date value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1486,14 +1486,14 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_RESOLUTION : if (n != 9) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, 9) < 9) { - DEBUG_puts("ippReadIO: Unable to read resolution value!"); + DEBUG_puts("1ippReadIO: Unable to read resolution value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1511,14 +1511,14 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_RANGE : if (n != 8) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, 8) < 8) { - DEBUG_puts("ippReadIO: Unable to read range value!"); + DEBUG_puts("1ippReadIO: Unable to read range value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1535,14 +1535,15 @@ ippReadIO(void *src, /* I - Data source */ case IPP_TAG_NAMELANG : if (n >= IPP_BUF_SIZE || n < 4) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, n) < n) { - DEBUG_puts("ippReadIO: Unable to read string w/language value!"); + DEBUG_puts("1ippReadIO: Unable to read string w/language " + "value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1564,7 +1565,7 @@ ippReadIO(void *src, /* I - Data source */ if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= sizeof(string)) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1579,7 +1580,7 @@ ippReadIO(void *src, /* I - Data source */ if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE)) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1597,7 +1598,7 @@ ippReadIO(void *src, /* I - Data source */ if (n > 0) { - DEBUG_puts("ippReadIO: begCollection tag with value length " + DEBUG_puts("1ippReadIO: begCollection tag with value length " "> 0!"); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -1605,7 +1606,7 @@ ippReadIO(void *src, /* I - Data source */ if (ippReadIO(src, cb, 1, ipp, value->collection) == IPP_ERROR) { - DEBUG_puts("ippReadIO: Unable to read collection value!"); + DEBUG_puts("1ippReadIO: Unable to read collection value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1616,12 +1617,12 @@ ippReadIO(void *src, /* I - Data source */ if (n > 0) { - DEBUG_puts("ippReadIO: endCollection tag with value length " + DEBUG_puts("1ippReadIO: endCollection tag with value length " "> 0!"); return (IPP_ERROR); } - DEBUG_puts("ippReadIO: endCollection tag..."); + DEBUG_puts("1ippReadIO: endCollection tag..."); return (ipp->state = IPP_DATA); case IPP_TAG_MEMBERNAME : @@ -1632,14 +1633,14 @@ ippReadIO(void *src, /* I - Data source */ if (n >= IPP_BUF_SIZE) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, buffer, n) < n) { - DEBUG_puts("ippReadIO: Unable to read member name value!"); + DEBUG_puts("1ippReadIO: Unable to read member name value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1655,20 +1656,20 @@ ippReadIO(void *src, /* I - Data source */ attr->num_values --; - DEBUG_printf(("ippReadIO: member name=\"%s\"\n", attr->name)); + DEBUG_printf(("2ippReadIO: member name=\"%s\"", attr->name)); break; default : /* Other unsupported values */ if (n > IPP_MAX_LENGTH) { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); + DEBUG_printf(("1ippReadIO: bad value length %d!", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } if (!value) { - DEBUG_puts("ippReadIO: NULL value!"); + DEBUG_puts("1ippReadIO: NULL value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1678,14 +1679,14 @@ ippReadIO(void *src, /* I - Data source */ { if ((value->unknown.data = malloc(n)) == NULL) { - DEBUG_puts("ippReadIO: Unable to allocate value"); + DEBUG_puts("1ippReadIO: Unable to allocate value"); ipp_buffer_release(buffer); return (IPP_ERROR); } if ((*cb)(src, value->unknown.data, n) < n) { - DEBUG_puts("ippReadIO: Unable to read unsupported value!"); + DEBUG_puts("1ippReadIO: Unable to read unsupported value!"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1713,7 +1714,7 @@ ippReadIO(void *src, /* I - Data source */ break; /* anti-compiler-warning-code */ } - DEBUG_printf(("ippReadIO: returning ipp->state=%d!\n", ipp->state)); + DEBUG_printf(("1ippReadIO: returning ipp->state=%d!", ipp->state)); ipp_buffer_release(buffer); return (ipp->state); @@ -1776,13 +1777,12 @@ ipp_state_t /* O - Current state */ ippWrite(http_t *http, /* I - HTTP connection */ ipp_t *ipp) /* I - IPP data */ { - DEBUG_printf(("ippWrite(http=%p, ipp=%p)\n", http, ipp)); + DEBUG_printf(("ippWrite(http=%p, ipp=%p)", http, ipp)); if (!http) return (IPP_ERROR); - return (ippWriteIO(http, (ipp_iocb_t)httpWrite2, - http->blocking, NULL, ipp)); + return (ippWriteIO(http, (ipp_iocb_t)httpWrite2, http->blocking, NULL, ipp)); } @@ -1796,7 +1796,7 @@ ipp_state_t /* O - Current state */ ippWriteFile(int fd, /* I - HTTP data */ ipp_t *ipp) /* I - IPP data */ { - DEBUG_printf(("ippWriteFile(fd=%d, ipp=%p)\n", fd, ipp)); + DEBUG_printf(("ippWriteFile(fd=%d, ipp=%p)", fd, ipp)); ipp->state = IPP_IDLE; @@ -1825,7 +1825,7 @@ ippWriteIO(void *dst, /* I - Destination */ ipp_value_t *value; /* Current value */ - DEBUG_printf(("ippWriteIO(dst=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)\n", + DEBUG_printf(("ippWriteIO(dst=%p, cb=%p, blocking=%d, parent=%p, ipp=%p)", dst, cb, blocking, parent, ipp)); if (!dst || !ipp) @@ -1833,7 +1833,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((buffer = ipp_buffer_get()) == NULL) { - DEBUG_puts("ippWriteIO: Unable to get write buffer"); + DEBUG_puts("1ippWriteIO: Unable to get write buffer"); return (IPP_ERROR); } @@ -1867,7 +1867,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP header..."); + DEBUG_puts("1ippWriteIO: Could not write IPP header..."); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1882,10 +1882,10 @@ ippWriteIO(void *dst, /* I - Destination */ ipp->current = ipp->attrs; ipp->curtag = IPP_TAG_ZERO; - DEBUG_printf(("ippWriteIO: version=%d.%d\n", buffer[0], buffer[1])); - DEBUG_printf(("ippWriteIO: op_status=%04x\n", + DEBUG_printf(("2ippWriteIO: version=%d.%d", buffer[0], buffer[1])); + DEBUG_printf(("2ippWriteIO: op_status=%04x", ipp->request.any.op_status)); - DEBUG_printf(("ippWriteIO: request_id=%d\n", + DEBUG_printf(("2ippWriteIO: request_id=%d", ipp->request.any.request_id)); /* @@ -1918,7 +1918,7 @@ ippWriteIO(void *dst, /* I - Destination */ if (attr->group_tag == IPP_TAG_ZERO) continue; - DEBUG_printf(("ippWriteIO: wrote group tag=%x(%s)\n", + DEBUG_printf(("2ippWriteIO: wrote group tag=%x(%s)", attr->group_tag, ippTagString(attr->group_tag))); *bufptr++ = attr->group_tag; } @@ -1945,7 +1945,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((n = (int)strlen(attr->name)) > (IPP_BUF_SIZE - 4)) { - DEBUG_printf(("ippWriteIO: Attribute name too long (%d)\n", n)); + DEBUG_printf(("1ippWriteIO: Attribute name too long (%d)", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1954,9 +1954,9 @@ ippWriteIO(void *dst, /* I - Destination */ * Write the value tag, name length, and name string... */ - DEBUG_printf(("ippWriteIO: writing value tag=%x(%s)\n", + DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); - DEBUG_printf(("ippWriteIO: writing name=%d,\"%s\"\n", n, + DEBUG_printf(("2ippWriteIO: writing name=%d,\"%s\"", n, attr->name)); *bufptr++ = attr->value_tag; @@ -1974,7 +1974,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((n = (int)strlen(attr->name)) > (IPP_BUF_SIZE - 7)) { - DEBUG_printf(("ippWriteIO: Attribute name too long (%d)\n", n)); + DEBUG_printf(("1ippWriteIO: Attribute name too long (%d)", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -1984,13 +1984,13 @@ ippWriteIO(void *dst, /* I - Destination */ * and empty name for the collection member attribute... */ - DEBUG_printf(("ippWriteIO: writing value tag=%x(memberName)\n", + DEBUG_printf(("2ippWriteIO: writing value tag=%x(memberName)", IPP_TAG_MEMBERNAME)); - DEBUG_printf(("ippWriteIO: writing name=%d,\"%s\"\n", n, + DEBUG_printf(("2ippWriteIO: writing name=%d,\"%s\"", n, attr->name)); - DEBUG_printf(("ippWriteIO: writing value tag=%x(%s)\n", + DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); - DEBUG_puts("ippWriteIO: writing name=0,\"\"\n"); + DEBUG_puts("2ippWriteIO: writing name=0,\"\""); *bufptr++ = IPP_TAG_MEMBERNAME; *bufptr++ = 0; @@ -2021,7 +2021,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2067,7 +2067,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2119,16 +2119,16 @@ ippWriteIO(void *dst, /* I - Destination */ * values with a zero-length name... */ - DEBUG_printf(("ippWriteIO: writing value tag=%x(%s)\n", + DEBUG_printf(("2ippWriteIO: writing value tag=%x(%s)", attr->value_tag, ippTagString(attr->value_tag))); - DEBUG_printf(("ippWriteIO: writing name=0,\"\"\n")); + DEBUG_printf(("2ippWriteIO: writing name=0,\"\"")); if ((IPP_BUF_SIZE - (bufptr - buffer)) < 3) { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2149,19 +2149,19 @@ ippWriteIO(void *dst, /* I - Destination */ if (n > (IPP_BUF_SIZE - 2)) { - DEBUG_printf(("ippWriteIO: String too long (%d)\n", n)); + DEBUG_printf(("1ippWriteIO: String too long (%d)", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } - DEBUG_printf(("ippWriteIO: writing string=%d,\"%s\"\n", n, + DEBUG_printf(("2ippWriteIO: writing string=%d,\"%s\"", n, value->string.text)); if ((int)(IPP_BUF_SIZE - (bufptr - buffer)) < (n + 2)) { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2200,7 +2200,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2245,7 +2245,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2298,7 +2298,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2357,7 +2357,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2391,8 +2391,8 @@ ippWriteIO(void *dst, /* I - Destination */ if (n > (IPP_BUF_SIZE - 2)) { - DEBUG_printf(("ippWriteIO: text/nameWithLanguage value " - "too long (%d)\n", n)); + DEBUG_printf(("1ippWriteIO: text/nameWithLanguage value " + "too long (%d)", n)); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -2401,7 +2401,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2464,7 +2464,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2494,7 +2494,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2511,7 +2511,7 @@ ippWriteIO(void *dst, /* I - Destination */ if (ippWriteIO(dst, cb, 1, ipp, value->collection) == IPP_ERROR) { - DEBUG_puts("ippWriteIO: Unable to write collection value"); + DEBUG_puts("1ippWriteIO: Unable to write collection value"); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -2534,7 +2534,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2559,7 +2559,7 @@ ippWriteIO(void *dst, /* I - Destination */ if (n > (IPP_BUF_SIZE - 2)) { - DEBUG_printf(("ippWriteIO: Data length too long (%d)\n", + DEBUG_printf(("1ippWriteIO: Data length too long (%d)", n)); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2569,7 +2569,7 @@ ippWriteIO(void *dst, /* I - Destination */ { if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP " + DEBUG_puts("1ippWriteIO: Could not write IPP " "attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); @@ -2598,12 +2598,12 @@ ippWriteIO(void *dst, /* I - Destination */ if ((*cb)(dst, buffer, (int)(bufptr - buffer)) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP attribute..."); + DEBUG_puts("1ippWriteIO: Could not write IPP attribute..."); ipp_buffer_release(buffer); return (IPP_ERROR); } - DEBUG_printf(("ippWriteIO: wrote %d bytes\n", + DEBUG_printf(("2ippWriteIO: wrote %d bytes", (int)(bufptr - buffer))); /* @@ -2638,7 +2638,7 @@ ippWriteIO(void *dst, /* I - Destination */ if ((*cb)(dst, buffer, n) < 0) { - DEBUG_puts("ippWriteIO: Could not write IPP end-tag..."); + DEBUG_puts("1ippWriteIO: Could not write IPP end-tag..."); ipp_buffer_release(buffer); return (IPP_ERROR); } @@ -2671,7 +2671,7 @@ _ippAddAttr(ipp_t *ipp, /* I - IPP message */ ipp_attribute_t *attr; /* New attribute */ - DEBUG_printf(("_ippAddAttr(ipp=%p, num_values=%d)\n", ipp, num_values)); + DEBUG_printf(("4_ippAddAttr(ipp=%p, num_values=%d)", ipp, num_values)); if (!ipp || num_values < 0) return (NULL); @@ -2691,7 +2691,7 @@ _ippAddAttr(ipp_t *ipp, /* I - IPP message */ ipp->last = attr; } - DEBUG_printf(("_ippAddAttr(): %p\n", attr)); + DEBUG_printf(("5_ippAddAttr: Returning %p", attr)); return (attr); } @@ -2708,7 +2708,7 @@ _ippFreeAttr(ipp_attribute_t *attr) /* I - Attribute to free */ ipp_value_t *value; /* Current value */ - DEBUG_printf(("_ippFreeAttr(attr=%p)\n", attr)); + DEBUG_printf(("4_ippFreeAttr(attr=%p)", attr)); switch (attr->value_tag) { @@ -2864,8 +2864,8 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */ if (!attr->name) continue; - DEBUG_printf(("ipp_length: attr->name=\"%s\", attr->num_values=%d, " - "bytes=%d\n", attr->name, attr->num_values, bytes)); + DEBUG_printf(("9ipp_length: attr->name=\"%s\", attr->num_values=%d, " + "bytes=%d", attr->name, attr->num_values, bytes)); bytes += (int)strlen(attr->name); /* Name */ bytes += attr->num_values; /* Value tag for each value */ @@ -2955,7 +2955,7 @@ ipp_length(ipp_t *ipp, /* I - IPP message or collection */ else bytes ++; - DEBUG_printf(("ipp_length: bytes=%d\n", bytes)); + DEBUG_printf(("8ipp_length: Returning %d bytes", bytes)); return (bytes); } @@ -2975,7 +2975,7 @@ ipp_read_http(http_t *http, /* I - Client connection */ char len[32]; /* Length string */ - DEBUG_printf(("ipp_read_http(http=%p, buffer=%p, length=%d)\n", + DEBUG_printf(("7ipp_read_http(http=%p, buffer=%p, length=%d)", http, buffer, (int)length)); /* @@ -2986,7 +2986,7 @@ ipp_read_http(http_t *http, /* I - Client connection */ tbytes < (int)length; tbytes += bytes, buffer += bytes) { - DEBUG_printf(("ipp_read_http: tbytes=%d, http->state=%d\n", tbytes, + DEBUG_printf(("9ipp_read_http: tbytes=%d, http->state=%d", tbytes, http->state)); if (http->state == HTTP_WAITING) @@ -3086,7 +3086,7 @@ ipp_read_http(http_t *http, /* I - Client connection */ if (tbytes == 0 && bytes < 0) tbytes = -1; - DEBUG_printf(("ipp_read_http: returning %d bytes...\n", tbytes)); + DEBUG_printf(("8ipp_read_http: Returning %d bytes", tbytes)); return (tbytes); } diff --git a/cups/language.c b/cups/language.c index 02efaac0f..39ef43569 100644 --- a/cups/language.c +++ b/cups/language.c @@ -3,7 +3,7 @@ * * I18N/language support for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -429,7 +429,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ }; - DEBUG_printf(("cupsLangGet(language=\"%s\")\n", language ? language : "(null)")); + DEBUG_printf(("cupsLangGet(language=\"%s\")", language)); #ifdef __APPLE__ /* @@ -448,7 +448,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ if ((language = getenv("LANG")) == NULL) language = appleLangDefault(); - DEBUG_printf(("cupsLangGet: language=\"%s\"\n", language)); + DEBUG_printf(("2cupsLangGet: language=\"%s\"", language)); } #else @@ -477,8 +477,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ ptr = setlocale(LC_ALL, NULL); # endif /* LC_MESSAGES */ - DEBUG_printf(("cupsLangGet: current locale is \"%s\"\n", - ptr ? ptr : "(null)")); + DEBUG_printf(("2cupsLangGet: current locale is \"%s\"", ptr)); if (!ptr || !strcmp(ptr, "C") || !strcmp(ptr, "POSIX")) { @@ -526,7 +525,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ if (!strncmp(locale, "nb", 2)) locale[1] = 'o'; - DEBUG_printf(("cupsLangGet: new language value is \"%s\"\n", language)); + DEBUG_printf(("2cupsLangGet: new language value is \"%s\"", language)); } } #endif /* __APPLE__ */ @@ -563,8 +562,8 @@ cupsLangGet(const char *language) /* I - Language or locale */ *ptr = '\0'; - DEBUG_printf(("cupsLangGet: charset set to \"%s\" via nl_langinfo(CODESET)...\n", - charset)); + DEBUG_printf(("2cupsLangGet: charset set to \"%s\" via " + "nl_langinfo(CODESET)...", charset)); } #endif /* CODESET */ @@ -643,7 +642,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ } } - DEBUG_printf(("cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"\n", + DEBUG_printf(("2cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"", langname, country, charset)); /* @@ -681,7 +680,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ } } - DEBUG_printf(("cupsLangGet: encoding=%d(%s)\n", encoding, + DEBUG_printf(("2cupsLangGet: encoding=%d(%s)", encoding, encoding == CUPS_AUTO_ENCODING ? "auto" : lang_encodings[encoding])); @@ -712,7 +711,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ pthread_mutex_unlock(&lang_mutex); #endif /* HAVE_PTHREAD_H */ - DEBUG_printf(("cupsLangGet: Using cached copy of \"%s\"...\n", real)); + DEBUG_printf(("1cupsLangGet: Using cached copy of \"%s\"...", real)); return (lang); } @@ -732,7 +731,7 @@ cupsLangGet(const char *language) /* I - Language or locale */ * No generic localization, so use POSIX... */ - DEBUG_printf(("cupsLangGet: access(\"%s\", 0): %s\n", filename, + DEBUG_printf(("2cupsLangGet: access(\"%s\", 0): %s", filename, strerror(errno))); snprintf(filename, sizeof(filename), "%s/C/cups_C.po", cg->localedir); @@ -895,7 +894,7 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ int length; /* Length of combined strings */ - DEBUG_printf(("_cupsMessageLoad(filename=\"%s\")\n", filename)); + DEBUG_printf(("4_cupsMessageLoad(filename=\"%s\")", filename)); /* * Create an array to hold the messages... @@ -903,7 +902,7 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ if ((a = cupsArrayNew((cups_array_func_t)cups_message_compare, NULL)) == NULL) { - DEBUG_puts("_cupsMessageLoad: Unable to allocate array!"); + DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!"); return (NULL); } @@ -913,7 +912,7 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ if ((fp = cupsFileOpen(filename, "r")) == NULL) { - DEBUG_printf(("_cupsMessageLoad: Unable to open file: %s\n", + DEBUG_printf(("5_cupsMessageLoad: Unable to open file: %s", strerror(errno))); return (a); } @@ -1068,7 +1067,7 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */ cupsFileClose(fp); - DEBUG_printf(("_cupsMessageLoad: Returning %d messages...\n", + DEBUG_printf(("5_cupsMessageLoad: Returning %d messages...", cupsArrayCount(a))); return (a); @@ -1165,7 +1164,7 @@ appleLangDefault(void) kCFStringEncodingASCII); CFRelease(localeName); - DEBUG_printf(("appleLangDefault: cg->language=\"%s\"\n", + DEBUG_printf(("9appleLangDefault: cg->language=\"%s\"", cg->language)); /* @@ -1179,7 +1178,7 @@ appleLangDefault(void) { if (!strcmp(cg->language, apple_language_locale[i].language)) { - DEBUG_printf(("appleLangDefault: mapping \"%s\" to \"%s\"...\n", + DEBUG_printf(("9appleLangDefault: mapping \"%s\" to \"%s\"...", cg->language, apple_language_locale[i].locale)); strlcpy(cg->language, apple_language_locale[i].locale, sizeof(cg->language)); @@ -1232,7 +1231,7 @@ cups_cache_lookup(const char *name,/* I - Name of locale */ cups_lang_t *lang; /* Current language */ - DEBUG_printf(("cups_cache_lookup(name=\"%s\", encoding=%d(%s))\n", name, + DEBUG_printf(("7cups_cache_lookup(name=\"%s\", encoding=%d(%s))", name, encoding, encoding == CUPS_AUTO_ENCODING ? "auto" : lang_encodings[encoding])); @@ -1242,8 +1241,8 @@ cups_cache_lookup(const char *name,/* I - Name of locale */ for (lang = lang_cache; lang != NULL; lang = lang->next) { - DEBUG_printf(("cups_cache_lookup: lang=%p, language=\"%s\", encoding=%d(%s)\n", - lang, lang->language, lang->encoding, + DEBUG_printf(("9cups_cache_lookup: lang=%p, language=\"%s\", " + "encoding=%d(%s)", lang, lang->language, lang->encoding, lang_encodings[lang->encoding])); if (!strcmp(lang->language, name) && @@ -1251,13 +1250,13 @@ cups_cache_lookup(const char *name,/* I - Name of locale */ { lang->used ++; - DEBUG_puts("cups_cache_lookup: returning match!"); + DEBUG_puts("8cups_cache_lookup: returning match!"); return (lang); } } - DEBUG_puts("cups_cache_lookup: returning NULL!"); + DEBUG_puts("8cups_cache_lookup: returning NULL!"); return (NULL); } diff --git a/cups/localize.c b/cups/localize.c index 236b8048e..07cfe8a55 100644 --- a/cups/localize.c +++ b/cups/localize.c @@ -3,7 +3,7 @@ * * PPD localization routines for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -84,7 +84,7 @@ ppdLocalize(ppd_file_t *ppd) /* I - PPD file */ * Range check input... */ - DEBUG_printf(("ppdLocalize(ppd=%p)\n", ppd)); + DEBUG_printf(("ppdLocalize(ppd=%p)", ppd)); if (!ppd) return (-1); @@ -602,8 +602,8 @@ _ppdLocalizedAttr(ppd_file_t *ppd, /* I - PPD file */ ppd_attr_t *attr; /* Current attribute */ - DEBUG_printf(("_ppdLocalizedAttr(ppd=%p, keyword=\"%s\", spec=\"%s\", " - "ll_CC=\"%s\")\n", ppd, keyword, spec, ll_CC)); + DEBUG_printf(("4_ppdLocalizedAttr(ppd=%p, keyword=\"%s\", spec=\"%s\", " + "ll_CC=\"%s\")", ppd, keyword, spec, ll_CC)); /* * Look for Keyword.ll_CC, then Keyword.ll... @@ -645,10 +645,10 @@ _ppdLocalizedAttr(ppd_file_t *ppd, /* I - PPD file */ #ifdef DEBUG if (attr) - DEBUG_printf(("_ppdLocalizedAttr: *%s %s/%s: \"%s\"\n", attr->name, + DEBUG_printf(("5_ppdLocalizedAttr: *%s %s/%s: \"%s\"\n", attr->name, attr->spec, attr->text, attr->value ? attr->value : "")); else - DEBUG_puts("_ppdLocalizedAttr: NOT FOUND"); + DEBUG_puts("5_ppdLocalizedAttr: NOT FOUND"); #endif /* DEBUG */ return (attr); @@ -701,7 +701,7 @@ ppd_ll_CC(char *ll_CC, /* O - Country-specific locale name */ strlcpy(ll_CC, "zh_CN", ll_CC_size); } - DEBUG_printf(("ppd_ll_CC: lang->language=\"%s\", ll_CC=\"%s\"...\n", + DEBUG_printf(("8ppd_ll_CC: lang->language=\"%s\", ll_CC=\"%s\"...", lang->language, ll_CC)); } diff --git a/cups/mark.c b/cups/mark.c index 84836390e..b14e1da5e 100644 --- a/cups/mark.c +++ b/cups/mark.c @@ -465,17 +465,17 @@ ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */ *marked; /* Marked choice */ - DEBUG_printf(("ppdFindMarkedChoice(ppd=%p, option=\"%s\")", ppd, option)); + DEBUG_printf(("2ppdFindMarkedChoice(ppd=%p, option=\"%s\")", ppd, option)); if ((key.option = ppdFindOption(ppd, option)) == NULL) { - DEBUG_puts("ppdFindMarkedChoice: Option not found, returning NULL"); + DEBUG_puts("3ppdFindMarkedChoice: Option not found, returning NULL"); return (NULL); } marked = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key); - DEBUG_printf(("ppdFindMarkedChoice: Returning %p(%s)...", marked, + DEBUG_printf(("3ppdFindMarkedChoice: Returning %p(%s)...", marked, marked ? marked->choice : "NULL")); return (marked); @@ -602,7 +602,7 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */ const char *option, /* I - Keyword */ const char *choice) /* I - Option name */ { - DEBUG_printf(("ppdMarkOption(ppd=%p, option=\"%s\", choice=\"%s\")\n", + DEBUG_printf(("ppdMarkOption(ppd=%p, option=\"%s\", choice=\"%s\")", ppd, option, choice)); /* @@ -756,12 +756,12 @@ debug_marked(ppd_file_t *ppd, /* I - PPD file data */ ppd_choice_t *c; /* Current choice */ - DEBUG_printf(("cupsMarkOptions: %s\n", title)); + DEBUG_printf(("2cupsMarkOptions: %s", title)); for (c = (ppd_choice_t *)cupsArrayFirst(ppd->marked); c; c = (ppd_choice_t *)cupsArrayNext(ppd->marked)) - DEBUG_printf(("cupsMarkOptions: %s=%s\n", c->option->keyword, c->choice)); + DEBUG_printf(("2cupsMarkOptions: %s=%s", c->option->keyword, c->choice)); } #endif /* DEBUG */ @@ -832,7 +832,7 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ struct lconv *loc; /* Locale data */ - DEBUG_printf(("ppd_mark_option(ppd=%p, option=\"%s\", choice=\"%s\")\n", + DEBUG_printf(("7ppd_mark_option(ppd=%p, option=\"%s\", choice=\"%s\")", ppd, option, choice)); /* diff --git a/cups/options.c b/cups/options.c index b1476a49a..ecc210e0b 100644 --- a/cups/options.c +++ b/cups/options.c @@ -62,11 +62,11 @@ cupsAddOption(const char *name, /* I - Name of option */ DEBUG_printf(("cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, " - "options=%p)\n", name, value, num_options, options)); + "options=%p)", name, value, num_options, options)); if (!name || !name[0] || !value || !options || num_options < 0) { - DEBUG_printf(("cupsAddOption: Returning %d\n", num_options)); + DEBUG_printf(("1cupsAddOption: Returning %d", num_options)); return (num_options); } @@ -94,7 +94,7 @@ cupsAddOption(const char *name, /* I - Name of option */ * No matching option name... */ - DEBUG_printf(("cupsAddOption: New option inserted at index %d...\n", + DEBUG_printf(("2cupsAddOption: New option inserted at index %d...", insert)); if (num_options == 0) @@ -105,7 +105,7 @@ cupsAddOption(const char *name, /* I - Name of option */ if (temp == NULL) { - DEBUG_puts("cupsAddOption: Unable to expand option array, returning 0"); + DEBUG_puts("1cupsAddOption: Unable to expand option array, returning 0"); return (0); } @@ -113,7 +113,7 @@ cupsAddOption(const char *name, /* I - Name of option */ if (insert < num_options) { - DEBUG_printf(("cupsAddOption: Shifting %d options...\n", + DEBUG_printf(("2cupsAddOption: Shifting %d options...", (int)(num_options - insert))); memmove(temp + insert + 1, temp + insert, (num_options - insert) * sizeof(cups_option_t)); @@ -129,7 +129,7 @@ cupsAddOption(const char *name, /* I - Name of option */ * Match found; free the old value... */ - DEBUG_printf(("cupsAddOption: Option already exists at index %d...\n", + DEBUG_printf(("2cupsAddOption: Option already exists at index %d...", insert)); temp = *options + insert; @@ -138,7 +138,7 @@ cupsAddOption(const char *name, /* I - Name of option */ temp->value = _cupsStrAlloc(value); - DEBUG_printf(("cupsAddOption: Returning %d\n", num_options)); + DEBUG_printf(("1cupsAddOption: Returning %d", num_options)); return (num_options); } @@ -156,7 +156,7 @@ cupsFreeOptions( int i; /* Looping var */ - DEBUG_printf(("cupsFreeOptions(num_options=%d, options=%p)\n", num_options, + DEBUG_printf(("cupsFreeOptions(num_options=%d, options=%p)", num_options, options)); if (num_options <= 0 || !options) @@ -185,12 +185,12 @@ cupsGetOption(const char *name, /* I - Name of option */ match; /* Matching index */ - DEBUG_printf(("cupsGetOption(name=\"%s\", num_options=%d, options=%p)\n", + DEBUG_printf(("2cupsGetOption(name=\"%s\", num_options=%d, options=%p)", name, num_options, options)); if (!name || num_options <= 0 || !options) { - DEBUG_puts("cupsGetOption: Returning NULL"); + DEBUG_puts("3cupsGetOption: Returning NULL"); return (NULL); } @@ -198,11 +198,11 @@ cupsGetOption(const char *name, /* I - Name of option */ if (!diff) { - DEBUG_printf(("cupsGetOption: Returning \"%s\"\n", options[match].value)); + DEBUG_printf(("3cupsGetOption: Returning \"%s\"", options[match].value)); return (options[match].value); } - DEBUG_puts("cupsGetOption: Returning NULL"); + DEBUG_puts("3cupsGetOption: Returning NULL"); return (NULL); } @@ -231,7 +231,7 @@ cupsParseOptions( quote; /* Quote character */ - DEBUG_printf(("cupsParseOptions(arg=\"%s\", num_options=%d, options=%p)\n", + DEBUG_printf(("cupsParseOptions(arg=\"%s\", num_options=%d, options=%p)", arg, num_options, options)); /* @@ -240,13 +240,13 @@ cupsParseOptions( if (!arg) { - DEBUG_printf(("cupsParseOptions: Returning %d\n", num_options)); + DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } if (!options || num_options < 0) { - DEBUG_puts("cupsParseOptions: Returning 0"); + DEBUG_puts("1cupsParseOptions: Returning 0"); return (0); } @@ -256,8 +256,8 @@ cupsParseOptions( if ((copyarg = strdup(arg)) == NULL) { - DEBUG_puts("cupsParseOptions: Unable to copy arg string"); - DEBUG_printf(("cupsParseOptions: Returning %d\n", num_options)); + DEBUG_puts("1cupsParseOptions: Unable to copy arg string"); + DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } @@ -316,7 +316,7 @@ cupsParseOptions( if ((sep = *ptr) == '=') *ptr++ = '\0'; - DEBUG_printf(("cupsParseOptions: name=\"%s\"\n", name)); + DEBUG_printf(("2cupsParseOptions: name=\"%s\"", name)); if (sep != '=') { @@ -407,7 +407,7 @@ cupsParseOptions( if (*ptr != '\0') *ptr++ = '\0'; - DEBUG_printf(("cupsParseOptions: value=\"%s\"\n", value)); + DEBUG_printf(("2cupsParseOptions: value=\"%s\"", value)); /* * Skip trailing whitespace... @@ -430,7 +430,7 @@ cupsParseOptions( free(copyarg); - DEBUG_printf(("cupsParseOptions: Returning %d\n", num_options)); + DEBUG_printf(("1cupsParseOptions: Returning %d", num_options)); return (num_options); } @@ -452,7 +452,7 @@ cupsRemoveOption( cups_option_t *option; /* Current option */ - DEBUG_printf(("cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)\n", + DEBUG_printf(("cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)", name, num_options, options)); /* @@ -461,7 +461,7 @@ cupsRemoveOption( if (!name || num_options < 1 || !options) { - DEBUG_printf(("cupsRemoveOption: Returning %d\n", num_options)); + DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options)); return (num_options); } @@ -479,7 +479,7 @@ cupsRemoveOption( * Remove this option from the array... */ - DEBUG_puts("cupsRemoveOption: Found option, removing it..."); + DEBUG_puts("2cupsRemoveOption: Found option, removing it..."); num_options --; i --; @@ -495,7 +495,7 @@ cupsRemoveOption( * Return the new number of options... */ - DEBUG_printf(("cupsRemoveOption: Returning %d\n", num_options)); + DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options)); return (num_options); } @@ -531,13 +531,13 @@ cups_find_option( cups_option_t key; /* Search key */ - DEBUG_printf(("cups_find_option(name=\"%s\", num_options=%d, options=%p, " - "prev=%d, rdiff=%p)\n", name, num_options, options, prev, + DEBUG_printf(("7cups_find_option(name=\"%s\", num_options=%d, options=%p, " + "prev=%d, rdiff=%p)", name, num_options, options, prev, rdiff)); #ifdef DEBUG for (left = 0; left < num_options; left ++) - DEBUG_printf(("cups_find_option: options[%d].name=\"%s\", .value=\"%s\"\n", + DEBUG_printf(("9cups_find_option: options[%d].name=\"%s\", .value=\"%s\"", left, options[left].name, options[left].value)); #endif /* DEBUG */ diff --git a/cups/page.c b/cups/page.c index b99b54a1e..21ee3ab25 100644 --- a/cups/page.c +++ b/cups/page.c @@ -54,7 +54,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ if (!ppd) { - DEBUG_puts("ppdPageSize: Bad PPD pointer, returning NULL..."); + DEBUG_puts("1ppdPageSize: Bad PPD pointer, returning NULL..."); return (NULL); } @@ -72,7 +72,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ if (!i) { - DEBUG_puts("ppdPageSize: No custom sizes, returning NULL..."); + DEBUG_puts("1ppdPageSize: No custom sizes, returning NULL..."); return (NULL); } @@ -144,7 +144,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ * Return the page size... */ - DEBUG_printf(("ppdPageSize: Returning %p (\"%s\", %gx%g)", size, + DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); @@ -158,7 +158,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) if (!strcasecmp(name, size->name)) { - DEBUG_printf(("ppdPageSize: Returning %p (\"%s\", %gx%g)", size, + DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); @@ -174,14 +174,14 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */ for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++) if (size->marked) { - DEBUG_printf(("ppdPageSize: Returning %p (\"%s\", %gx%g)", size, + DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size, size->name, size->width, size->length)); return (size); } } - DEBUG_puts("ppdPageSize: Size not found, returning NULL"); + DEBUG_puts("1ppdPageSize: Size not found, returning NULL"); return (NULL); } diff --git a/cups/ppd.c b/cups/ppd.c index c42d36d48..4018d803b 100644 --- a/cups/ppd.c +++ b/cups/ppd.c @@ -3,7 +3,7 @@ * * PPD file routines for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -549,6 +549,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ }; + DEBUG_printf(("ppdOpen2(fp=%p)", fp)); + /* * Default to "OK" status... */ @@ -575,7 +577,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ mask = ppd_read(fp, &line, keyword, name, text, &string, 0, cg); - DEBUG_printf(("mask=%x, keyword=\"%s\"...\n", mask, keyword)); + DEBUG_printf(("2ppdOpen2: mask=%x, keyword=\"%s\"...", mask, keyword)); if (mask == 0 || strcmp(keyword, "PPD-Adobe") || @@ -594,7 +596,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ return (NULL); } - DEBUG_printf(("ppdOpen: keyword = %s, string = %p\n", keyword, string)); + DEBUG_printf(("2ppdOpen2: keyword=%s, string=%p", keyword, string)); _cupsStrFree(string); @@ -639,8 +641,8 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ while ((mask = ppd_read(fp, &line, keyword, name, text, &string, 1, cg)) != 0) { - DEBUG_printf(("mask=%x, keyword=\"%s\", name=\"%s\", text=\"%s\", " - "string=%d chars...", mask, keyword, name, text, + DEBUG_printf(("2ppdOpen2: mask=%x, keyword=\"%s\", name=\"%s\", " + "text=\"%s\", string=%d chars...", mask, keyword, name, text, string ? (int)strlen(string) : 0)); if (strncmp(keyword, "Default", 7) && !string && @@ -690,7 +692,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ ui_keyword = 1; - DEBUG_printf(("**** FOUND ADOBE UI KEYWORD %s WITHOUT OPENUI!\n", + DEBUG_printf(("2ppdOpen2: FOUND ADOBE UI KEYWORD %s WITHOUT OPENUI!", keyword)); if (!group) @@ -699,7 +701,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ encoding)) == NULL) goto error; - DEBUG_printf(("Adding to group %s...\n", group->text)); + DEBUG_printf(("2ppdOpen2: Adding to group %s...", group->text)); option = ppd_get_option(group, keyword); group = NULL; } @@ -734,7 +736,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ !strcmp(ppd->attrs[j]->name + 7, keyword) && ppd->attrs[j]->value) { - DEBUG_printf(("Setting Default%s to %s via attribute...\n", + DEBUG_printf(("2ppdOpen2: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); @@ -1032,7 +1034,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ { ppd_option_t *custom_option; /* Custom option */ - DEBUG_puts("Processing Custom option..."); + DEBUG_puts("2ppdOpen2: Processing Custom option..."); /* * Get the option and custom option... @@ -1059,7 +1061,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ if ((choice = ppdFindChoice(custom_option, "Custom")) == NULL) if ((choice = ppd_add_choice(custom_option, "Custom")) == NULL) { - DEBUG_puts("Unable to add Custom choice!"); + DEBUG_puts("1ppdOpen2: Unable to add Custom choice!"); cg->ppd_status = PPD_ALLOC_ERROR; @@ -1099,7 +1101,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ if ((choice = ppdFindChoice(custom_option, "Custom")) == NULL) if ((choice = ppd_add_choice(custom_option, "Custom")) == NULL) { - DEBUG_puts("Unable to add Custom choice!"); + DEBUG_puts("1ppdOpen2: Unable to add Custom choice!"); cg->ppd_status = PPD_ALLOC_ERROR; @@ -1209,7 +1211,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ * Add an option record to the current sub-group, group, or file... */ - DEBUG_printf(("name=\"%s\" (%d)\n", name, (int)strlen(name))); + DEBUG_printf(("2ppdOpen2: name=\"%s\" (%d)", name, (int)strlen(name))); if (name[0] == '*') _cups_strcpy(name, name + 1); /* Eliminate leading asterisk */ @@ -1217,7 +1219,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ for (i = (int)strlen(name) - 1; i > 0 && isspace(name[i] & 255); i --) name[i] = '\0'; /* Eliminate trailing spaces */ - DEBUG_printf(("OpenUI of %s in group %s...\n", name, + DEBUG_printf(("2ppdOpen2: OpenUI of %s in group %s...", name, group ? group->text : "(null)")); if (subgroup != NULL) @@ -1228,7 +1230,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ encoding)) == NULL) goto error; - DEBUG_printf(("Adding to group %s...\n", group->text)); + DEBUG_printf(("2ppdOpen2: Adding to group %s...", group->text)); option = ppd_get_option(group, name); group = NULL; } @@ -1266,7 +1268,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ !strcmp(ppd->attrs[j]->name + 7, name) && ppd->attrs[j]->value) { - DEBUG_printf(("Setting Default%s to %s via attribute...\n", + DEBUG_printf(("2ppdOpen2: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); @@ -1312,7 +1314,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ if ((choice = ppdFindChoice(option, "Custom")) == NULL) if ((choice = ppd_add_choice(option, "Custom")) == NULL) { - DEBUG_puts("Unable to add Custom choice!"); + DEBUG_puts("1ppdOpen2: Unable to add Custom choice!"); cg->ppd_status = PPD_ALLOC_ERROR; @@ -1385,7 +1387,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ !strcmp(ppd->attrs[j]->name + 7, name) && ppd->attrs[j]->value) { - DEBUG_printf(("Setting Default%s to %s via attribute...\n", + DEBUG_printf(("2ppdOpen2: Setting Default%s to %s via attribute...", option->keyword, ppd->attrs[j]->value)); strlcpy(option->defchoice, ppd->attrs[j]->value, sizeof(option->defchoice)); @@ -1415,7 +1417,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ { if ((choice = ppd_add_choice(option, "Custom")) == NULL) { - DEBUG_puts("Unable to add Custom choice!"); + DEBUG_puts("1ppdOpen2: Unable to add Custom choice!"); cg->ppd_status = PPD_ALLOC_ERROR; @@ -1588,11 +1590,11 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ * Set the default as part of the current option... */ - DEBUG_printf(("Setting %s to %s...\n", keyword, string)); + DEBUG_printf(("2ppdOpen2: Setting %s to %s...", keyword, string)); strlcpy(option->defchoice, string, sizeof(option->defchoice)); - DEBUG_printf(("%s is now %s...\n", keyword, option->defchoice)); + DEBUG_printf(("2ppdOpen2: %s is now %s...", keyword, option->defchoice)); } else { @@ -1605,7 +1607,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ if ((toption = ppdFindOption(ppd, keyword + 7)) != NULL) { - DEBUG_printf(("Setting %s to %s...\n", keyword, string)); + DEBUG_printf(("2ppdOpen2: Setting %s to %s...", keyword, string)); strlcpy(toption->defchoice, string, sizeof(toption->defchoice)); } } @@ -1836,7 +1838,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ (PPD_KEYWORD | PPD_OPTION | PPD_STRING) && !strcmp(keyword, option->keyword)) { - DEBUG_printf(("group = %p, subgroup = %p\n", group, subgroup)); + DEBUG_printf(("2ppdOpen2: group=%p, subgroup=%p", group, subgroup)); if (!strcmp(keyword, "PageSize")) { @@ -1897,7 +1899,7 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */ #ifdef DEBUG if (!cupsFileEOF(fp)) - DEBUG_printf(("Premature EOF at %lu...\n", + DEBUG_printf(("1ppdOpen2: Premature EOF at %lu...\n", (unsigned long)cupsFileTell(fp))); #endif /* DEBUG */ @@ -2497,7 +2499,7 @@ ppd_get_group(ppd_file_t *ppd, /* I - PPD file */ ppd_group_t *group; /* Group */ - DEBUG_printf(("ppd_get_group(ppd=%p, name=\"%s\", text=\"%s\", cg=%p)\n", + DEBUG_printf(("7ppd_get_group(ppd=%p, name=\"%s\", text=\"%s\", cg=%p)", ppd, name, text, cg)); for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) @@ -2506,7 +2508,7 @@ ppd_get_group(ppd_file_t *ppd, /* I - PPD file */ if (i == 0) { - DEBUG_printf(("Adding group %s...\n", name)); + DEBUG_printf(("8ppd_get_group: Adding group %s...", name)); if (cg->ppd_conform == PPD_CONFORM_STRICT && strlen(text) >= sizeof(group->text)) { @@ -2555,7 +2557,7 @@ ppd_get_option(ppd_group_t *group, /* I - Group */ ppd_option_t *option; /* Option */ - DEBUG_printf(("ppd_get_option(group=%p(\"%s\"), name=\"%s\")\n", + DEBUG_printf(("7ppd_get_option(group=%p(\"%s\"), name=\"%s\")", group, group->name, name)); for (i = group->num_options, option = group->options; i > 0; i --, option ++) @@ -2890,7 +2892,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ *lineptr = '\0'; - DEBUG_printf(("LINE=\"%s\"\n", line->buffer)); + DEBUG_printf(("9ppd_read: LINE=\"%s\"", line->buffer)); /* * The dynamically created PPDs for older style Mac OS X @@ -2988,8 +2990,6 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ mask |= PPD_KEYWORD; -/* DEBUG_printf(("keyword = \"%s\", lineptr = \"%s\"\n", keyword, lineptr));*/ - if (isspace(*lineptr & 255)) { /* @@ -3027,8 +3027,6 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ mask |= PPD_OPTION; -/* DEBUG_printf(("option = \"%s\", lineptr = \"%s\"\n", option, lineptr));*/ - if (*lineptr == '/') { /* @@ -3062,8 +3060,6 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ mask |= PPD_TEXT; } - -/* DEBUG_printf(("text = \"%s\", lineptr = \"%s\"\n", text, lineptr));*/ } if (isspace(*lineptr & 255) && cg->ppd_conform == PPD_CONFORM_STRICT) @@ -3101,8 +3097,6 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ *string = _cupsStrAlloc(lineptr); -/* DEBUG_printf(("string = \"%s\", lineptr = \"%s\"\n", *string, lineptr));*/ - mask |= PPD_STRING; } } diff --git a/cups/request.c b/cups/request.c index 8179e51cb..68b35c645 100644 --- a/cups/request.c +++ b/cups/request.c @@ -66,10 +66,9 @@ cupsDoFileRequest(http_t *http, /* I - Connection to server or @code CUPS_HT DEBUG_printf(("cupsDoFileRequest(http=%p, request=%p(%s), resource=\"%s\", " - "filename=\"%s\")\n", http, request, + "filename=\"%s\")", http, request, request ? ippOpString(request->request.op.operation_id) : "?", - resource ? resource : "(null)", - filename ? filename : "(null)")); + resource, filename)); if (filename) { @@ -131,9 +130,9 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP DEBUG_printf(("cupsDoIORequest(http=%p, request=%p(%s), resource=\"%s\", " - "infile=%d, outfile=%d)\n", http, request, + "infile=%d, outfile=%d)", http, request, request ? ippOpString(request->request.op.operation_id) : "?", - resource ? resource : "(null)", infile, outfile)); + resource, infile, outfile)); /* * Range check input... @@ -203,7 +202,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP else length = ippLength(request); - DEBUG_printf(("cupsDoIORequest: Request length=%ld, total length=%ld", + DEBUG_printf(("2cupsDoIORequest: Request length=%ld, total length=%ld", (long)ippLength(request), (long)length)); /* @@ -219,7 +218,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP while (response == NULL) { - DEBUG_puts("cupsDoIORequest: setup..."); + DEBUG_puts("2cupsDoIORequest: setup..."); /* * Send the request... @@ -227,11 +226,11 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP status = cupsSendRequest(http, request, resource, length); - DEBUG_printf(("cupsDoIORequest: status=%d\n", status)); + DEBUG_printf(("2cupsDoIORequest: status=%d", status)); if (status == HTTP_CONTINUE && request->state == IPP_DATA && infile >= 0) { - DEBUG_puts("cupsDoIORequest: file write..."); + DEBUG_puts("2cupsDoIORequest: file write..."); /* * Send the file with the request... @@ -318,10 +317,10 @@ cupsDoRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP_ ipp_t *request, /* I - IPP request */ const char *resource) /* I - HTTP resource for POST */ { - DEBUG_printf(("cupsDoRequest(http=%p, request=%p(%s), resource=\"%s\")\n", + DEBUG_printf(("cupsDoRequest(http=%p, request=%p(%s), resource=\"%s\")", http, request, request ? ippOpString(request->request.op.operation_id) : "?", - resource ? resource : "(null)")); + resource)); return (cupsDoIORequest(http, request, resource, -1, -1)); } @@ -346,8 +345,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP ipp_t *response = NULL; /* IPP response */ - DEBUG_printf(("cupsGetReponse(http=%p, resource=\"%s\")\n", http, - resource ? resource : "(null)")); + DEBUG_printf(("cupsGetResponse(http=%p, resource=\"%s\")", http, resource)); /* * Connect to the default server as needed... @@ -369,7 +367,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP * Send a 0-length chunk to finish off the request... */ - DEBUG_puts("cupsGetResponse: Finishing chunked POST..."); + DEBUG_puts("2cupsGetResponse: Finishing chunked POST..."); if (httpWrite2(http, "", 0) < 0) return (NULL); @@ -379,14 +377,14 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP * Wait for a response from the server... */ - DEBUG_printf(("cupsGetResponse: Update loop, http->status=%d...\n", + DEBUG_printf(("2cupsGetResponse: Update loop, http->status=%d...", http->status)); status = http->status; while (status == HTTP_CONTINUE) status = httpUpdate(http); - DEBUG_printf(("cupsGetResponse: status=%d\n", status)); + DEBUG_printf(("2cupsGetResponse: status=%d", status)); if (status == HTTP_OK) { @@ -406,7 +404,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP * Delete the response... */ - DEBUG_puts("cupsGetResponse: IPP read error!"); + DEBUG_puts("1cupsGetResponse: IPP read error!"); ippDelete(response); response = NULL; @@ -432,14 +430,10 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP * See if we can do authentication... */ - int auth_result; + DEBUG_puts("2cupsGetResponse: Need authorization..."); - DEBUG_puts("cupsGetResponse: Need authorization..."); - - if ((auth_result = cupsDoAuthentication(http, "POST", resource)) == 0) + if (!cupsDoAuthentication(http, "POST", resource)) httpReconnect(http); - else if (auth_result < 0) - http->status = status = HTTP_FORBIDDEN; } #ifdef HAVE_SSL @@ -449,7 +443,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP * Force a reconnect with encryption... */ - DEBUG_puts("cupsGetResponse: Need encryption..."); + DEBUG_puts("2cupsGetResponse: Need encryption..."); if (!httpReconnect(http)) httpEncryption(http, HTTP_ENCRYPT_REQUIRED); @@ -464,7 +458,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT); - DEBUG_printf(("cupsGetResponse: status-code=%s, status-message=\"%s\"\n", + DEBUG_printf(("1cupsGetResponse: status-code=%s, status-message=\"%s\"", ippErrorString(response->request.status.status_code), attr ? attr->values[0].string.text : "")); @@ -499,7 +493,7 @@ cupsReadResponseData( */ DEBUG_printf(("cupsReadResponseData(http=%p, buffer=%p, " - "length=" CUPS_LLFMT ")\n", http, buffer, CUPS_LLCAST length)); + "length=" CUPS_LLFMT ")", http, buffer, CUPS_LLCAST length)); if (!http) { @@ -548,9 +542,9 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP DEBUG_printf(("cupsSendRequest(http=%p, request=%p(%s), resource=\"%s\", " - "length=" CUPS_LLFMT ")\n", http, request, + "length=" CUPS_LLFMT ")", http, request, request ? ippOpString(request->request.op.operation_id) : "?", - resource ? resource : "(null)", CUPS_LLCAST length)); + resource, CUPS_LLCAST length)); /* * Range check input... @@ -606,7 +600,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP for (;;) { - DEBUG_puts("cupsSendRequest: Setup..."); + DEBUG_puts("2cupsSendRequest: Setup..."); /* * Setup the HTTP variables needed... @@ -618,13 +612,13 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring); httpSetExpect(http, expect); - DEBUG_printf(("cupsSendRequest: authstring=\"%s\"\n", http->authstring)); + DEBUG_printf(("2cupsSendRequest: authstring=\"%s\"", http->authstring)); /* * Try the request... */ - DEBUG_puts("cupsSendRequest: Sending HTTP POST..."); + DEBUG_puts("2cupsSendRequest: Sending HTTP POST..."); if (httpPost(http, resource)) { @@ -641,7 +635,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP * Send the IPP data... */ - DEBUG_puts("cupsSendRequest: Writing IPP request..."); + DEBUG_puts("2cupsSendRequest: Writing IPP request..."); request->state = IPP_IDLE; status = HTTP_CONTINUE; @@ -664,7 +658,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP if (!got_status && expect == HTTP_CONTINUE) { - DEBUG_puts("cupsSendRequest: Waiting for 100-continue..."); + DEBUG_puts("2cupsSendRequest: Waiting for 100-continue..."); if (httpWait(http, 1000)) status = httpUpdate(http); @@ -672,7 +666,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP else if (httpCheck(http)) status = httpUpdate(http); - DEBUG_printf(("cupsSendRequest: status=%d\n", status)); + DEBUG_printf(("2cupsSendRequest: status=%d", status)); /* * Process the current HTTP status... @@ -761,7 +755,7 @@ cupsWriteRequestData( */ DEBUG_printf(("cupsWriteRequestData(http=%p, buffer=%p, " - "length=" CUPS_LLFMT ")\n", http, buffer, CUPS_LLCAST length)); + "length=" CUPS_LLFMT ")", http, buffer, CUPS_LLCAST length)); if (!http) { @@ -850,9 +844,8 @@ _cupsSetError(ipp_status_t status, /* I - IPP status code */ cg->last_status_message = _cupsStrAlloc(message); } - DEBUG_printf(("_cupsSetError: last_error=%s, last_status_message=\"%s\"\n", - ippErrorString(cg->last_error), - cg->last_status_message ? cg->last_status_message : "")); + DEBUG_printf(("4_cupsSetError: last_error=%s, last_status_message=\"%s\"", + ippErrorString(cg->last_error), cg->last_status_message)); } @@ -894,8 +887,8 @@ _cupsSetHTTPError(http_status_t status) /* I - HTTP status code */ break; default : - DEBUG_printf(("HTTP error %d mapped to IPP_SERVICE_UNAVAILABLE!\n", - status)); + DEBUG_printf(("4_cupsSetHTTPError: HTTP error %d mapped to " + "IPP_SERVICE_UNAVAILABLE!", status)); _cupsSetError(IPP_SERVICE_UNAVAILABLE, httpStatus(status), 0); break; } diff --git a/cups/sidechannel.c b/cups/sidechannel.c index a59f5c305..41db25e67 100644 --- a/cups/sidechannel.c +++ b/cups/sidechannel.c @@ -121,7 +121,7 @@ cupsSideChannelRead( DEBUG_printf(("cupsSideChannelRead(command=%p, status=%p, data=%p, " - "datalen=%p(%d), timeout=%.3f)\n", command, status, data, + "datalen=%p(%d), timeout=%.3f)", command, status, data, datalen, datalen ? *datalen : -1, timeout)); /* @@ -155,7 +155,7 @@ cupsSideChannelRead( { if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, NULL) < 1) { - DEBUG_printf(("cupsSideChannelRead: Select error: %s\n", strerror(errno))); + DEBUG_printf(("1cupsSideChannelRead: Select error: %s", strerror(errno))); return (-1); } } @@ -166,7 +166,7 @@ cupsSideChannelRead( if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, &stimeout) < 1) { - DEBUG_puts("cupsSideChannelRead: Select timeout"); + DEBUG_puts("1cupsSideChannelRead: Select timeout"); return (-1); } } @@ -186,7 +186,7 @@ cupsSideChannelRead( while ((bytes = read(CUPS_SC_FD, buffer, sizeof(buffer))) < 0) if (errno != EINTR && errno != EAGAIN) { - DEBUG_printf(("cupsSideChannelRead: Read error: %s\n", strerror(errno))); + DEBUG_printf(("1cupsSideChannelRead: Read error: %s", strerror(errno))); return (-1); } @@ -197,7 +197,7 @@ cupsSideChannelRead( if (buffer[0] < CUPS_SC_CMD_SOFT_RESET || buffer[0] > CUPS_SC_CMD_SNMP_GET_NEXT) { - DEBUG_printf(("cupsSideChannelRead: Bad command %d!\n", buffer[0])); + DEBUG_printf(("1cupsSideChannelRead: Bad command %d!", buffer[0])); return (-1); } @@ -240,7 +240,7 @@ cupsSideChannelRead( memcpy(data, buffer + 4, templen); } - DEBUG_printf(("cupsSideChannelRead: Returning status=%d\n", *status)); + DEBUG_printf(("1cupsSideChannelRead: Returning status=%d", *status)); return (0); } @@ -284,7 +284,7 @@ cupsSideChannelSNMPGet( DEBUG_printf(("cupsSideChannelSNMPGet(oid=\"%s\", data=%p, datalen=%p(%d), " - "timeout=%.3f)\n", oid, data, datalen, datalen ? *datalen : -1, + "timeout=%.3f)", oid, data, datalen, datalen ? *datalen : -1, timeout)); /* @@ -378,7 +378,7 @@ cupsSideChannelSNMPWalk( DEBUG_printf(("cupsSideChannelSNMPWalk(oid=\"%s\", timeout=%.3f, cb=%p, " - "context=%p)\n", oid, timeout, cb, context)); + "context=%p)", oid, timeout, cb, context)); /* * Range check input... diff --git a/cups/snmp.c b/cups/snmp.c index 847f7c0d8..43722ba7d 100644 --- a/cups/snmp.c +++ b/cups/snmp.c @@ -116,7 +116,7 @@ static void snmp_set_error(cups_snmp_t *packet, void _cupsSNMPClose(int fd) /* I - SNMP socket file descriptor */ { - DEBUG_printf(("_cupsSNMPClose(fd=%d)\n", fd)); + DEBUG_printf(("4_cupsSNMPClose(fd=%d)", fd)); #ifdef WIN32 closesocket(fd); @@ -140,7 +140,7 @@ _cupsSNMPCopyOID(int *dst, /* I - Destination OID */ int i; /* Looping var */ - DEBUG_printf(("_cupsSNMPCopyOID(dst=%p, src=%p, dstsize=%d)\n", dst, src, + DEBUG_printf(("4_cupsSNMPCopyOID(dst=%p, src=%p, dstsize=%d)", dst, src, dstsize)); for (i = 0, dstsize --; src[i] >= 0 && i < dstsize; i ++) @@ -169,7 +169,7 @@ _cupsSNMPDefaultCommunity(void) _cups_globals_t *cg = _cupsGlobals(); /* Global data */ - DEBUG_puts("_cupsSNMPDefaultCommunity()"); + DEBUG_puts("4_cupsSNMPDefaultCommunity()"); if (!cg->snmp_community[0]) { @@ -190,7 +190,7 @@ _cupsSNMPDefaultCommunity(void) } } - DEBUG_printf(("_cupsSNMPDefaultCommunity: Returning \"%s\"\n", + DEBUG_printf(("5_cupsSNMPDefaultCommunity: Returning \"%s\"", cg->snmp_community)); return (cg->snmp_community); @@ -214,11 +214,11 @@ _cupsSNMPIsOID(cups_snmp_t *packet, /* I - Response packet */ * Range check input... */ - DEBUG_printf(("_cupsSNMPIsOID(packet=%p, oid=%p)\n", packet, oid)); + DEBUG_printf(("4_cupsSNMPIsOID(packet=%p, oid=%p)", packet, oid)); if (!packet || !oid) { - DEBUG_puts("_cupsSNMPIsOID: Returning 0"); + DEBUG_puts("5_cupsSNMPIsOID: Returning 0"); return (0); } @@ -232,12 +232,12 @@ _cupsSNMPIsOID(cups_snmp_t *packet, /* I - Response packet */ i ++) if (oid[i] != packet->object_name[i]) { - DEBUG_puts("_cupsSNMPIsOID: Returning 0"); + DEBUG_puts("5_cupsSNMPIsOID: Returning 0"); return (0); } - DEBUG_printf(("_cupsSNMPIsOID: Returning %d\n", + DEBUG_printf(("5_cupsSNMPIsOID: Returning %d", i < CUPS_SNMP_MAX_OID && oid[i] == packet->object_name[i])); return (i < CUPS_SNMP_MAX_OID && oid[i] == packet->object_name[i]); @@ -263,12 +263,12 @@ _cupsSNMPIsOIDPrefixed( * Range check input... */ - DEBUG_printf(("_cupsSNMPIsOIDPrefixed(packet=%p, prefix=%p)\n", packet, + DEBUG_printf(("4_cupsSNMPIsOIDPrefixed(packet=%p, prefix=%p)", packet, prefix)); if (!packet || !prefix) { - DEBUG_puts("_cupsSNMPIsOIDPrefixed: Returning 0"); + DEBUG_puts("5_cupsSNMPIsOIDPrefixed: Returning 0"); return (0); } @@ -282,12 +282,12 @@ _cupsSNMPIsOIDPrefixed( i ++) if (prefix[i] != packet->object_name[i]) { - DEBUG_puts("_cupsSNMPIsOIDPrefixed: Returning 0"); + DEBUG_puts("5_cupsSNMPIsOIDPrefixed: Returning 0"); return (0); } - DEBUG_printf(("_cupsSNMPIsOIDPrefixed: Returning %d\n", + DEBUG_printf(("5_cupsSNMPIsOIDPrefixed: Returning %d", i < CUPS_SNMP_MAX_OID)); return (i < CUPS_SNMP_MAX_OID); @@ -308,7 +308,7 @@ _cupsSNMPOIDToString(const int *src, /* I - OID */ *dstend; /* End of string buffer */ - DEBUG_printf(("_cupsSNMPOIDToString(src=%p, dst=%p, dstsize=" CUPS_LLFMT ")\n", + DEBUG_printf(("4_cupsSNMPOIDToString(src=%p, dst=%p, dstsize=" CUPS_LLFMT ")", src, dst, CUPS_LLCAST dstsize)); /* @@ -349,11 +349,11 @@ _cupsSNMPOpen(int family) /* I - Address family - @code AF_INET@ or @code AF_IN * Create the SNMP socket... */ - DEBUG_printf(("_cupsSNMPOpen(family=%d)\n", family)); + DEBUG_printf(("4_cupsSNMPOpen(family=%d)", family)); if ((fd = socket(family, SOCK_DGRAM, 0)) < 0) { - DEBUG_printf(("_cupsSNMPOpen: Returning -1 (%s)\n", strerror(errno))); + DEBUG_printf(("5_cupsSNMPOpen: Returning -1 (%s)", strerror(errno))); return (-1); } @@ -366,14 +366,14 @@ _cupsSNMPOpen(int family) /* I - Address family - @code AF_INET@ or @code AF_IN if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val))) { - DEBUG_printf(("_cupsSNMPOpen: Returning -1 (%s)\n", strerror(errno))); + DEBUG_printf(("5_cupsSNMPOpen: Returning -1 (%s)", strerror(errno))); close(fd); return (-1); } - DEBUG_printf(("_cupsSNMPOpen: Returning %d\n", fd)); + DEBUG_printf(("5_cupsSNMPOpen: Returning %d", fd)); return (fd); } @@ -402,12 +402,12 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ * Range check input... */ - DEBUG_printf(("_cupsSNMPRead(fd=%d, packet=%p, timeout=%.1f)\n", fd, packet, + DEBUG_printf(("4_cupsSNMPRead(fd=%d, packet=%p, timeout=%.1f)", fd, packet, timeout)); if (fd < 0 || !packet) { - DEBUG_puts("_cupsSNMPRead: Returning NULL"); + DEBUG_puts("5_cupsSNMPRead: Returning NULL"); return (NULL); } @@ -426,7 +426,7 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ pfd.events = POLLIN; while ((ready = poll(&pfd, 1, (int)(timeout * 1000.0))) < 0 && - errno == EINTR); + (errno == EINTR || errno == EAGAIN)); #else fd_set input_set; /* select() input set */ @@ -445,7 +445,7 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ # ifdef WIN32 while (ready < 0 && WSAGetLastError() == WSAEINTR); # else - while (ready < 0 && errno == EINTR); + while (ready < 0 && (errno == EINTR || errno == EAGAIN)); # endif /* WIN32 */ #endif /* HAVE_POLL */ @@ -455,7 +455,7 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ if (ready <= 0) { - DEBUG_puts("_cupsSNMPRead: Returning NULL (timeout)"); + DEBUG_puts("5_cupsSNMPRead: Returning NULL (timeout)"); return (NULL); } @@ -470,7 +470,7 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ if ((bytes = recvfrom(fd, buffer, sizeof(buffer), 0, (void *)&address, &addrlen)) < 0) { - DEBUG_printf(("_cupsSNMPRead: Returning NULL (%s)\n", strerror(errno))); + DEBUG_printf(("5_cupsSNMPRead: Returning NULL (%s)", strerror(errno))); return (NULL); } @@ -489,7 +489,7 @@ _cupsSNMPRead(int fd, /* I - SNMP socket file descriptor */ * Return decoded data packet... */ - DEBUG_puts("_cupsSNMPRead: Returning packet"); + DEBUG_puts("5_cupsSNMPRead: Returning packet"); return (packet); } @@ -505,7 +505,7 @@ _cupsSNMPSetDebug(int level) /* I - 1 to enable debug output, 0 otherwise */ _cups_globals_t *cg = _cupsGlobals(); /* Global data */ - DEBUG_printf(("_cupsSNMPSetDebug(level=%d)\n", level)); + DEBUG_printf(("4_cupsSNMPSetDebug(level=%d)", level)); cg->snmp_debug = level; } @@ -530,7 +530,7 @@ _cupsSNMPStringToOID(const char *src, /* I - OID string */ *dstend; /* End of OID array */ - DEBUG_printf(("_cupsSNMPStringToOID(src=\"%s\", dst=%p, dstsize=%d)\n", + DEBUG_printf(("4_cupsSNMPStringToOID(src=\"%s\", dst=%p, dstsize=%d)", src, dst, dstsize)); /* @@ -610,15 +610,14 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */ * Range check input... */ - DEBUG_printf(("_cupsSNMPWalk(fd=%d, address=%p, version=%d, " - "community=\"%s\", prefix=%p, timeout=%.1f, cb=%p, data=%p)\n", - fd, address, version, community ? community : "(null)", - prefix, timeout, cb, data)); + DEBUG_printf(("4_cupsSNMPWalk(fd=%d, address=%p, version=%d, " + "community=\"%s\", prefix=%p, timeout=%.1f, cb=%p, data=%p)", + fd, address, version, community, prefix, timeout, cb, data)); if (fd < 0 || !address || version != CUPS_SNMP_VERSION_1 || !community || !prefix || !cb) { - DEBUG_puts("_cupsSNMPWalk: Returning -1"); + DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } @@ -637,28 +636,28 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */ CUPS_ASN1_GET_NEXT_REQUEST, request_id, packet.object_name)) { - DEBUG_puts("_cupsSNMPWalk: Returning -1"); + DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } if (!_cupsSNMPRead(fd, &packet, timeout)) { - DEBUG_puts("_cupsSNMPWalk: Returning -1"); + DEBUG_puts("5_cupsSNMPWalk: Returning -1"); return (-1); } if (!_cupsSNMPIsOIDPrefixed(&packet, prefix)) { - DEBUG_printf(("_cupsSNMPWalk: Returning %d\n", count)); + DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count)); return (count); } if (packet.error || packet.error_status) { - DEBUG_printf(("_cupsSNMPWalk: Returning %d\n", count > 0 ? count : -1)); + DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count > 0 ? count : -1)); return (count > 0 ? count : -1); } @@ -698,16 +697,15 @@ _cupsSNMPWrite( * Range check input... */ - DEBUG_printf(("_cupsSNMPWrite(fd=%d, address=%p, version=%d, " - "community=\"%s\", request_type=%d, request_id=%u, oid=%p)\n", - fd, address, version, community ? community : "(null)", - request_type, request_id, oid)); + DEBUG_printf(("4_cupsSNMPWrite(fd=%d, address=%p, version=%d, " + "community=\"%s\", request_type=%d, request_id=%u, oid=%p)", + fd, address, version, community, request_type, request_id, oid)); if (fd < 0 || !address || version != CUPS_SNMP_VERSION_1 || !community || (request_type != CUPS_ASN1_GET_REQUEST && request_type != CUPS_ASN1_GET_NEXT_REQUEST) || request_id < 1 || !oid) { - DEBUG_puts("_cupsSNMPWrite: Returning 0 (bad arguments)"); + DEBUG_puts("5_cupsSNMPWrite: Returning 0 (bad arguments)"); return (0); } @@ -731,7 +729,7 @@ _cupsSNMPWrite( if (oid[i] >= 0) { - DEBUG_puts("_cupsSNMPWrite: Returning 0 (OID too big)"); + DEBUG_puts("5_cupsSNMPWrite: Returning 0 (OID too big)"); errno = E2BIG; return (0); @@ -741,7 +739,7 @@ _cupsSNMPWrite( if (bytes < 0) { - DEBUG_puts("_cupsSNMPWrite: Returning 0 (request too big)"); + DEBUG_puts("5_cupsSNMPWrite: Returning 0 (request too big)"); errno = E2BIG; return (0); diff --git a/cups/string.c b/cups/string.c index 9b185f9cb..2d93eb8f3 100644 --- a/cups/string.c +++ b/cups/string.c @@ -119,8 +119,8 @@ _cupsStrAlloc(const char *s) /* I - String */ item->ref_count ++; #ifdef DEBUG_GUARDS - DEBUG_printf(("_cupsStrAlloc: Using string %p(%s) for \"%s\", guard=%08x, " - "ref_count=%d\n", item, item->str, s, item->guard, + DEBUG_printf(("5_cupsStrAlloc: Using string %p(%s) for \"%s\", guard=%08x, " + "ref_count=%d", item, item->str, s, item->guard, item->ref_count)); if (item->guard != _CUPS_STR_GUARD) @@ -154,8 +154,8 @@ _cupsStrAlloc(const char *s) /* I - String */ #ifdef DEBUG_GUARDS item->guard = _CUPS_STR_GUARD; - DEBUG_printf(("_cupsStrAlloc: Created string %p(%s) for \"%s\", guard=%08x, " - "ref_count=%d\n", item, item->str, s, item->guard, + DEBUG_printf(("5_cupsStrAlloc: Created string %p(%s) for \"%s\", guard=%08x, " + "ref_count=%d", item, item->str, s, item->guard, item->ref_count)); #endif /* DEBUG_GUARDS */ @@ -183,7 +183,7 @@ _cupsStrFlush(void) _cups_sp_item_t *item; /* Current item */ - DEBUG_printf(("_cupsStrFlush: %d strings in array\n", + DEBUG_printf(("4_cupsStrFlush: %d strings in array", cupsArrayCount(stringpool))); #ifdef HAVE_PTHREAD_H @@ -326,8 +326,8 @@ _cupsStrFree(const char *s) /* I - String to free */ #ifdef DEBUG_GUARDS if (key->guard != _CUPS_STR_GUARD) { - DEBUG_printf(("_cupsStrFree: Freeing string %p(%s), guard=%08x, " - "ref_count=%d\n", key, key->str, key->guard, key->ref_count)); + DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, " + "ref_count=%d", key, key->str, key->guard, key->ref_count)); abort(); } #endif /* DEBUG_GUARDS */ @@ -368,7 +368,7 @@ _cupsStrFree(const char *s) /* I - String to free */ */ char * /* O - Pointer to string */ -_cupsStrRetain(char *s) /* I - String to retain */ +_cupsStrRetain(const char *s) /* I - String to retain */ { _cups_sp_item_t *item; /* Pointer to string pool item */ @@ -380,8 +380,8 @@ _cupsStrRetain(char *s) /* I - String to retain */ #ifdef DEBUG_GUARDS if (item->guard != _CUPS_STR_GUARD) { - DEBUG_printf(("_cupsStrRetain: Retaining string %p(%s), guard=%08x, " - "ref_count=%d\n", item, s, item->guard, item->ref_count)); + DEBUG_printf(("5_cupsStrRetain: Retaining string %p(%s), guard=%08x, " + "ref_count=%d", item, s, item->guard, item->ref_count)); abort(); } #endif /* DEBUG_GUARDS */ @@ -397,7 +397,7 @@ _cupsStrRetain(char *s) /* I - String to retain */ #endif /* HAVE_PTHREAD_H */ } - return (s); + return ((char *)s); } diff --git a/cups/string.h b/cups/string.h index 99e3d5855..ac236a2b9 100644 --- a/cups/string.h +++ b/cups/string.h @@ -130,7 +130,7 @@ extern int _cups_vsnprintf(char *, size_t, const char *, va_list); extern char *_cupsStrAlloc(const char *s); extern void _cupsStrFlush(void); extern void _cupsStrFree(const char *s); -extern char *_cupsStrRetain(char *s); +extern char *_cupsStrRetain(const char *s); extern size_t _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes); diff --git a/cups/testarray.c b/cups/testarray.c index 064ec892f..52aedff50 100644 --- a/cups/testarray.c +++ b/cups/testarray.c @@ -3,7 +3,7 @@ * * Array test program for the Common UNIX Printing System (CUPS). * - * Copyright 2007 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -114,14 +114,6 @@ main(int argc, /* I - Number of command-line arguments */ } else { -#ifdef DEBUG - putchar('\n'); - for (text = (char *)cupsArrayFirst(array), i = 0; - text; - text = (char *)cupsArrayNext(array), i ++) - printf(" #1 array[%d]=\"%s\"\n", i, text); -#endif /* DEBUG */ - if (!cupsArrayAdd(array, strdup("Two Fish"))) { puts("FAIL (\"Two Fish\")"); @@ -129,13 +121,6 @@ main(int argc, /* I - Number of command-line arguments */ } else { -#ifdef DEBUG - for (text = (char *)cupsArrayFirst(array), i = 0; - text; - text = (char *)cupsArrayNext(array), i ++) - printf(" #2 array[%d]=\"%s\"\n", i, text); -#endif /* DEBUG */ - if (!cupsArrayAdd(array, strdup("Red Fish"))) { puts("FAIL (\"Red Fish\")"); @@ -143,29 +128,13 @@ main(int argc, /* I - Number of command-line arguments */ } else { -#ifdef DEBUG - for (text = (char *)cupsArrayFirst(array), i = 0; - text; - text = (char *)cupsArrayNext(array), i ++) - printf(" #3 array[%d]=\"%s\"\n", i, text); -#endif /* DEBUG */ - if (!cupsArrayAdd(array, strdup("Blue Fish"))) { puts("FAIL (\"Blue Fish\")"); status ++; } else - { -#ifdef DEBUG - for (text = (char *)cupsArrayFirst(array), i = 0; - text; - text = (char *)cupsArrayNext(array), i ++) - printf(" #4 array[%d]=\"%s\"\n", i, text); -#endif /* DEBUG */ - puts("PASS"); - } } } } @@ -491,8 +460,6 @@ load_words(const char *filename, /* I - File to load */ char word[256]; /* Word from file */ - DEBUG_printf((" Loading \"%s\"...\n", filename)); - if ((fp = fopen(filename, "r")) == NULL) { perror(filename); @@ -502,11 +469,7 @@ load_words(const char *filename, /* I - File to load */ while (fscanf(fp, "%255s", word) == 1) { if (!cupsArrayFind(array, word)) - { - DEBUG_printf((" Adding \"%s\"...\n", word)); - cupsArrayAdd(array, strdup(word)); - } } fclose(fp); diff --git a/cups/transcode.c b/cups/transcode.c index c04f0a71d..afeb2de4a 100644 --- a/cups/transcode.c +++ b/cups/transcode.c @@ -3,7 +3,7 @@ * * Transcoding support for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -210,7 +210,7 @@ _cupsCharmapGet( void *charmap; /* Charset map pointer */ - DEBUG_printf(("_cupsCharmapGet(encoding=%d)\n", encoding)); + DEBUG_printf(("7_cupsCharmapGet(encoding=%d)", encoding)); /* * Check for valid arguments... @@ -218,7 +218,7 @@ _cupsCharmapGet( if (encoding < 0 || encoding >= CUPS_ENCODING_VBCS_END) { - DEBUG_puts(" Bad encoding, returning NULL!"); + DEBUG_puts("8_cupsCharmapGet: Bad encoding, returning NULL!"); return (NULL); } @@ -263,7 +263,7 @@ cupsCharsetToUTF8( * Check for valid arguments... */ - DEBUG_printf(("cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)\n", + DEBUG_printf(("cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)", dest, src, maxout, encoding)); if (dest) @@ -271,7 +271,7 @@ cupsCharsetToUTF8( if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING) { - DEBUG_puts(" Bad arguments, returning -1"); + DEBUG_puts("1cupsCharsetToUTF8: Bad arguments, returning -1"); return (-1); } @@ -473,15 +473,15 @@ cupsUTF8ToUTF32( * Check for valid arguments and clear output... */ - DEBUG_printf(("cupsUTF8ToUTF32(dest=%p, src=\"%s\", maxout=%d)\n", dest, - src ? (const char *)src : "(null)", maxout)); + DEBUG_printf(("2cupsUTF8ToUTF32(dest=%p, src=\"%s\", maxout=%d)", dest, + src, maxout)); if (dest) *dest = 0; if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad arguments)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad arguments)"); return (-1); } @@ -506,7 +506,7 @@ cupsUTF8ToUTF32( *dest++ = ch; - DEBUG_printf(("cupsUTF8ToUTF32: %02x => %08X\n", src[-1], ch)); + DEBUG_printf(("4cupsUTF8ToUTF32: %02x => %08X", src[-1], ch)); continue; } else if ((ch & 0xe0) == 0xc0) @@ -518,7 +518,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -531,14 +531,14 @@ cupsUTF8ToUTF32( if (ch32 < 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; - DEBUG_printf(("cupsUTF8ToUTF32: %02x %02x => %08X\n", + DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x => %08X", src[-2], src[-1], (unsigned)ch32)); } else if ((ch & 0xf0) == 0xe0) @@ -550,7 +550,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -560,7 +560,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -573,14 +573,14 @@ cupsUTF8ToUTF32( if (ch32 < 0x800) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; - DEBUG_printf(("cupsUTF8ToUTF32: %02x %02x %02x => %08X\n", + DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x %02x => %08X", src[-3], src[-2], src[-1], (unsigned)ch32)); } else if ((ch & 0xf8) == 0xf0) @@ -592,7 +592,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -602,7 +602,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -612,7 +612,7 @@ cupsUTF8ToUTF32( next = *src++; if ((next & 0xc0) != 0x80) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -625,14 +625,14 @@ cupsUTF8ToUTF32( if (ch32 < 0x10000) { - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } *dest++ = ch32; - DEBUG_printf(("cupsUTF8ToUTF32: %02x %02x %02x %02x => %08X\n", + DEBUG_printf(("4cupsUTF8ToUTF32: %02x %02x %02x %02x => %08X", src[-4], src[-3], src[-2], src[-1], (unsigned)ch32)); } else @@ -641,7 +641,7 @@ cupsUTF8ToUTF32( * More than 4-octet (invalid UTF-8 sequence)... */ - DEBUG_puts("cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); + DEBUG_puts("3cupsUTF8ToUTF32: Returning -1 (bad UTF-8 sequence)"); return (-1); } @@ -656,7 +656,7 @@ cupsUTF8ToUTF32( *dest = 0; - DEBUG_printf(("cupsUTF8ToUTF32: Returning %d characters\n", maxout - 1 - i)); + DEBUG_printf(("3cupsUTF8ToUTF32: Returning %d characters", maxout - 1 - i)); return (maxout - 1 - i); } @@ -694,7 +694,7 @@ cupsUTF32ToUTF8( * Check for valid arguments and clear output... */ - DEBUG_printf(("cupsUTF32ToUTF8(dest=%p, src=%p, maxout=%d)\n", dest, src, + DEBUG_printf(("2cupsUTF32ToUTF8(dest=%p, src=%p, maxout=%d)", dest, src, maxout)); if (dest) @@ -702,7 +702,7 @@ cupsUTF32ToUTF8( if (!dest || !src || maxout < 1) { - DEBUG_puts("cupsUTF32ToUTF8: Returning -1 (bad args)"); + DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (bad args)"); return (-1); } @@ -714,7 +714,7 @@ cupsUTF32ToUTF8( start = dest; swap = *src == 0xfffe0000; - DEBUG_printf(("cupsUTF32ToUTF8: swap=%d\n", swap)); + DEBUG_printf(("4cupsUTF32ToUTF8: swap=%d", swap)); if (*src == 0xfffe0000 || *src == 0xfeff) src ++; @@ -741,7 +741,7 @@ cupsUTF32ToUTF8( if (ch > 0x10ffff) { - DEBUG_puts("cupsUTF32ToUTF8: Returning -1 (character out of range)"); + DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (character out of range)"); return (-1); } @@ -759,7 +759,7 @@ cupsUTF32ToUTF8( *dest++ = (cups_utf8_t)ch; i --; - DEBUG_printf(("cupsUTF32ToUTF8: %08x => %02x\n", (unsigned)ch, dest[-1])); + DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x", (unsigned)ch, dest[-1])); } else if (ch < 0x800) { @@ -769,7 +769,7 @@ cupsUTF32ToUTF8( if (i < 2) { - DEBUG_puts("cupsUTF32ToUTF8: Returning -1 (too long 2)"); + DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 2)"); return (-1); } @@ -778,7 +778,7 @@ cupsUTF32ToUTF8( *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 2; - DEBUG_printf(("cupsUTF32ToUTF8: %08x => %02x %02x\n", (unsigned)ch, + DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x", (unsigned)ch, dest[-2], dest[-1])); } else if (ch < 0x10000) @@ -789,7 +789,7 @@ cupsUTF32ToUTF8( if (i < 3) { - DEBUG_puts("cupsUTF32ToUTF8: Returning -1 (too long 3)"); + DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 3)"); return (-1); } @@ -799,7 +799,7 @@ cupsUTF32ToUTF8( *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 3; - DEBUG_printf(("cupsUTF32ToUTF8: %08x => %02x %02x %02x\n", (unsigned)ch, + DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x %02x", (unsigned)ch, dest[-3], dest[-2], dest[-1])); } else @@ -809,7 +809,11 @@ cupsUTF32ToUTF8( */ if (i < 4) + { + DEBUG_puts("3cupsUTF32ToUTF8: Returning -1 (too long 4)"); + return (-1); + } *dest++ = (cups_utf8_t)(0xf0 | ((ch >> 18) & 0x07)); *dest++ = (cups_utf8_t)(0x80 | ((ch >> 12) & 0x3f)); @@ -817,14 +821,14 @@ cupsUTF32ToUTF8( *dest++ = (cups_utf8_t)(0x80 | (ch & 0x3f)); i -= 4; - DEBUG_printf(("cupsUTF32ToUTF8: %08x => %02x %02x %02x %02x\n", + DEBUG_printf(("4cupsUTF32ToUTF8: %08x => %02x %02x %02x %02x", (unsigned)ch, dest[-4], dest[-3], dest[-2], dest[-1])); } } *dest = '\0'; - DEBUG_printf(("cupsUTF32ToUTF8: Returning %d\n", (int)(dest - start))); + DEBUG_printf(("3cupsUTF32ToUTF8: Returning %d", (int)(dest - start))); return ((int)(dest - start)); } @@ -1012,8 +1016,8 @@ conv_utf8_to_vbcs( *workptr; /* Pointer into string */ - DEBUG_printf(("conv_utf8_to_vbcs(dest=%p, src=\"%s\", maxout=%d, " - "encoding=%d)\n", dest, src, maxout, encoding)); + DEBUG_printf(("7conv_utf8_to_vbcs(dest=%p, src=\"%s\", maxout=%d, " + "encoding=%d)", dest, src, maxout, encoding)); /* * Find legacy charset map in cache... @@ -1021,7 +1025,7 @@ conv_utf8_to_vbcs( if ((vmap = (_cups_vmap_t *)get_charmap(encoding)) == NULL) { - DEBUG_puts("conv_utf8_to_vbcs: Returning -1 (no charmap)"); + DEBUG_puts("8conv_utf8_to_vbcs: Returning -1 (no charmap)"); return (-1); } @@ -1032,7 +1036,7 @@ conv_utf8_to_vbcs( if (cupsUTF8ToUTF32(work, src, CUPS_MAX_USTRING) < 0) { - DEBUG_puts("conv_utf8_to_vbcs: Returning -1 (Unable to convert to UTF-32)"); + DEBUG_puts("8conv_utf8_to_vbcs: Returning -1 (Unable to convert to UTF-32)"); return (-1); } @@ -1053,7 +1057,7 @@ conv_utf8_to_vbcs( { *dest++ = (cups_sbcs_t)unichar; - DEBUG_printf(("conv_utf8_to_vbcs: %08x => %02X\n", (unsigned)unichar, + DEBUG_printf(("9conv_utf8_to_vbcs: %08x => %02X", (unsigned)unichar, dest[-1])); continue; @@ -1081,7 +1085,7 @@ conv_utf8_to_vbcs( { if (maxout < 5) { - DEBUG_puts("conv_utf8_to_vbcs: Returning -1 (out of space)"); + DEBUG_puts("8conv_utf8_to_vbcs: Returning -1 (out of space)"); return (-1); } @@ -1093,14 +1097,14 @@ conv_utf8_to_vbcs( maxout -= 3; - DEBUG_printf(("conv_utf8_to_vbcs: %08x => %02X %02X %02X %02X\n", + DEBUG_printf(("9conv_utf8_to_vbcs: %08x => %02X %02X %02X %02X", (unsigned)unichar, dest[-4], dest[-3], dest[-2], dest[-1])); } else if (legchar > 0xffff) { if (maxout < 4) { - DEBUG_puts("conv_utf8_to_vbcs: Returning -1 (out of space)"); + DEBUG_puts("8conv_utf8_to_vbcs: Returning -1 (out of space)"); return (-1); } @@ -1111,7 +1115,7 @@ conv_utf8_to_vbcs( maxout -= 2; - DEBUG_printf(("conv_utf8_to_vbcs: %08x => %02X %02X %02X\n", + DEBUG_printf(("9conv_utf8_to_vbcs: %08x => %02X %02X %02X", (unsigned)unichar, dest[-3], dest[-2], dest[-1])); } else if (legchar > 0xff) @@ -1121,14 +1125,14 @@ conv_utf8_to_vbcs( maxout --; - DEBUG_printf(("conv_utf8_to_vbcs: %08x => %02X %02X\n", + DEBUG_printf(("9conv_utf8_to_vbcs: %08x => %02X %02X", (unsigned)unichar, dest[-2], dest[-1])); } else { *dest++ = legchar; - DEBUG_printf(("conv_utf8_to_vbcs: %08x => %02X\n", + DEBUG_printf(("9conv_utf8_to_vbcs: %08x => %02X", (unsigned)unichar, dest[-1])); } } @@ -1137,7 +1141,7 @@ conv_utf8_to_vbcs( vmap->used --; - DEBUG_printf(("conv_utf8_to_vbcs: Returning %d characters\n", + DEBUG_printf(("8conv_utf8_to_vbcs: Returning %d characters", (int)(dest - start))); return ((int)(dest - start)); @@ -1168,12 +1172,12 @@ conv_vbcs_to_utf8( * Find legacy charset map in cache... */ - DEBUG_printf(("conv_vbcs_to_utf8(dest=%p, src=%p, maxout=%d, encoding=%d)\n", + DEBUG_printf(("7conv_vbcs_to_utf8(dest=%p, src=%p, maxout=%d, encoding=%d)", dest, src, maxout, encoding)); if ((vmap = (_cups_vmap_t *)get_charmap(encoding)) == NULL) { - DEBUG_puts("conv_vbcs_to_utf8: Returning -1 (NULL vmap)"); + DEBUG_puts("8conv_vbcs_to_utf8: Returning -1 (NULL vmap)"); return (-1); } @@ -1196,7 +1200,7 @@ conv_vbcs_to_utf8( { *workptr++ = (cups_utf32_t)legchar; - DEBUG_printf(("conv_vbcs_to_utf8: %02X => %08X\n", src[-1], + DEBUG_printf(("9conv_vbcs_to_utf8: %02X => %08X", src[-1], (unsigned)legchar)); continue; } @@ -1209,7 +1213,7 @@ conv_vbcs_to_utf8( { if (!*src) { - DEBUG_puts("conv_vbcs_to_utf8: Returning -1 (short string)"); + DEBUG_puts("8conv_vbcs_to_utf8: Returning -1 (short string)"); return (-1); } @@ -1229,7 +1233,7 @@ conv_vbcs_to_utf8( else *workptr++ = (cups_utf32_t)*crow; - DEBUG_printf(("conv_vbcs_to_utf8: %02X %02X => %08X\n", + DEBUG_printf(("9conv_vbcs_to_utf8: %02X %02X => %08X", src[-2], src[-1], (unsigned)workptr[-1])); continue; } @@ -1242,7 +1246,7 @@ conv_vbcs_to_utf8( { if (!*src || !src[1]) { - DEBUG_puts("conv_vbcs_to_utf8: Returning -1 (short string 2)"); + DEBUG_puts("8conv_vbcs_to_utf8: Returning -1 (short string 2)"); return (-1); } @@ -1254,7 +1258,7 @@ conv_vbcs_to_utf8( { if (!*src || !src[1] || !src[2]) { - DEBUG_puts("conv_vbcs_to_utf8: Returning -1 (short string 3)"); + DEBUG_puts("8conv_vbcs_to_utf8: Returning -1 (short string 3)"); return (-1); } @@ -1265,7 +1269,7 @@ conv_vbcs_to_utf8( } else { - DEBUG_puts("conv_vbcs_to_utf8: Returning -1 (bad character)"); + DEBUG_puts("8conv_vbcs_to_utf8: Returning -1 (bad character)"); return (-1); } @@ -1290,10 +1294,10 @@ conv_vbcs_to_utf8( *workptr++ = wide2uni->unichar; if (vmap->lead3char[(int)leadchar] == leadchar) - DEBUG_printf(("conv_vbcs_to_utf8: %02X %02X %02X => %08X\n", + DEBUG_printf(("9conv_vbcs_to_utf8: %02X %02X %02X => %08X", src[-3], src[-2], src[-1], (unsigned)workptr[-1])); else - DEBUG_printf(("conv_vbcs_to_utf8: %02X %02X %02X %02X => %08X\n", + DEBUG_printf(("9conv_vbcs_to_utf8: %02X %02X %02X %02X => %08X", src[-4], src[-3], src[-2], src[-1], (unsigned)workptr[-1])); } @@ -1301,7 +1305,7 @@ conv_vbcs_to_utf8( vmap->used --; - DEBUG_printf(("conv_vbcs_to_utf8: Converting %d UTF-32 characters to UTF-8\n", + DEBUG_printf(("9conv_vbcs_to_utf8: Converting %d UTF-32 characters to UTF-8", (int)(workptr - work))); /* @@ -1373,7 +1377,7 @@ get_charmap( _cups_globals_t *cg = _cupsGlobals(); /* Global data */ - DEBUG_printf(("get_charmap(encoding=%d)\n", encoding)); + DEBUG_printf(("7get_charmap(encoding=%d)", encoding)); /* * Get the data directory and charset map name... @@ -1382,7 +1386,7 @@ get_charmap( snprintf(filename, sizeof(filename), "%s/charmaps/%s.txt", cg->cups_datadir, _cupsEncodingName(encoding)); - DEBUG_printf(("get_charmap: filename=\"%s\"\n", filename)); + DEBUG_printf(("9get_charmap: filename=\"%s\"", filename)); /* * Read charset map input file into cache... @@ -1452,7 +1456,7 @@ get_sbcs_charmap( * See if we already have this SBCS charset map loaded... */ - DEBUG_printf(("get_sbcs_charmap(encoding=%d, filename=\"%s\")\n", encoding, + DEBUG_printf(("7get_sbcs_charmap(encoding=%d, filename=\"%s\")", encoding, filename)); for (cmap = cmap_cache; cmap; cmap = cmap->next) @@ -1460,7 +1464,7 @@ get_sbcs_charmap( if (cmap->encoding == encoding) { cmap->used ++; - DEBUG_printf(("get_sbcs_charmap: Returning existing cmap=%p\n", cmap)); + DEBUG_printf(("8get_sbcs_charmap: Returning existing cmap=%p", cmap)); return ((void *)cmap); } @@ -1472,7 +1476,7 @@ get_sbcs_charmap( if ((fp = cupsFileOpen(filename, "r")) == NULL) { - DEBUG_printf(("get_sbcs_charmap: Returning NULL (%s)\n", strerror(errno))); + DEBUG_printf(("8get_sbcs_charmap: Returning NULL (%s)", strerror(errno))); return (NULL); } @@ -1484,7 +1488,7 @@ get_sbcs_charmap( if ((cmap = (_cups_cmap_t *)calloc(1, sizeof(_cups_cmap_t))) == NULL) { cupsFileClose(fp); - DEBUG_puts("get_sbcs_charmap: Returning NULL (Unable to allocate memory)"); + DEBUG_puts("8get_sbcs_charmap: Returning NULL (Unable to allocate memory)"); return (NULL); } @@ -1556,7 +1560,7 @@ get_sbcs_charmap( cmap->next = cmap_cache; cmap_cache = cmap; - DEBUG_printf(("get_sbcs_charmap: Returning new cmap=%p\n", cmap)); + DEBUG_printf(("8get_sbcs_charmap: Returning new cmap=%p", cmap)); return (cmap); @@ -1570,7 +1574,7 @@ get_sbcs_charmap( cupsFileClose(fp); - DEBUG_puts("get_sbcs_charmap: Returning NULL (Read/format error)"); + DEBUG_puts("8get_sbcs_charmap: Returning NULL (Read/format error)"); return (NULL); } @@ -1600,7 +1604,7 @@ get_vbcs_charmap( int legacy; /* 32-bit legacy char */ - DEBUG_printf(("get_vbcs_charmap(encoding=%d, filename=\"%s\")\n", + DEBUG_printf(("7get_vbcs_charmap(encoding=%d, filename=\"%s\")\n", encoding, filename)); /* @@ -1612,7 +1616,7 @@ get_vbcs_charmap( if (vmap->encoding == encoding) { vmap->used ++; - DEBUG_printf(("get_vbcs_charmap: Returning existing vmap=%p\n", vmap)); + DEBUG_printf(("8get_vbcs_charmap: Returning existing vmap=%p", vmap)); return ((void *)vmap); } @@ -1624,7 +1628,7 @@ get_vbcs_charmap( if ((fp = cupsFileOpen(filename, "r")) == NULL) { - DEBUG_printf(("get_vbcs_charmap: Returning NULL (%s)\n", strerror(errno))); + DEBUG_printf(("8get_vbcs_charmap: Returning NULL (%s)", strerror(errno))); return (NULL); } @@ -1635,14 +1639,14 @@ get_vbcs_charmap( if ((mapcount = get_charmap_count(fp)) <= 0) { - DEBUG_puts("get_vbcs_charmap: Unable to get charmap count!"); + DEBUG_puts("8get_vbcs_charmap: Unable to get charmap count!"); cupsFileClose(fp); return (NULL); } - DEBUG_printf(("get_vbcs_charmap: mapcount=%d\n", mapcount)); + DEBUG_printf(("8get_vbcs_charmap: mapcount=%d", mapcount)); /* * Allocate memory for DBCS/VBCS charset map... @@ -1650,7 +1654,7 @@ get_vbcs_charmap( if ((vmap = (_cups_vmap_t *)calloc(1, sizeof(_cups_vmap_t))) == NULL) { - DEBUG_puts("get_vbcs_charmap: Unable to allocate memory!"); + DEBUG_puts("8get_vbcs_charmap: Unable to allocate memory!"); cupsFileClose(fp); @@ -1686,8 +1690,8 @@ get_vbcs_charmap( i ++; -/* DEBUG_printf((" i=%d, legchar=0x%08lx, unichar=0x%04x\n", i, - legchar, (unsigned)unichar)); */ + DEBUG_printf(("9get_vbcs_charmap: i=%d, legchar=0x%08lx, unichar=0x%04x", i, + legchar, (unsigned)unichar)); /* * Save lead char of 2/3/4-byte legacy char... @@ -1796,7 +1800,7 @@ get_vbcs_charmap( vmap->next = vmap_cache; vmap_cache = vmap; - DEBUG_printf(("get_vbcs_charmap: Returning new vmap=%p\n", vmap)); + DEBUG_printf(("8get_vbcs_charmap: Returning new vmap=%p", vmap)); return (vmap); @@ -1810,7 +1814,7 @@ get_vbcs_charmap( cupsFileClose(fp); - DEBUG_puts("get_vbcs_charmap: Returning NULL (Read/format error)"); + DEBUG_puts("8get_vbcs_charmap: Returning NULL (Read/format error)"); return (NULL); } diff --git a/cups/usersys.c b/cups/usersys.c index 8e4be9559..1ec589da9 100644 --- a/cups/usersys.c +++ b/cups/usersys.c @@ -1,10 +1,10 @@ /* - * "$Id: usersys.c 7337 2008-02-22 04:44:04Z mike $" + * "$Id: usersys.c 8498 2009-04-13 17:03:15Z mike $" * * User, system, and password routines for the Common UNIX Printing * System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -19,14 +19,16 @@ * * cupsEncryption() - Get the default encryption settings. * cupsGetPassword() - Get a password from the user. - * cupsServer() - Return the hostname of the default server. + * cupsServer() - Return the hostname/address of the default + * server. * cupsSetEncryption() - Set the encryption preference. * cupsSetPasswordCB() - Set the password callback for CUPS. * cupsSetServer() - Set the default server name. * cupsSetUser() - Set the default user name. - * cupsUser() - Return the current users name. + * cupsUser() - Return the current user's name. * _cupsGetPassword() - Get a password from the user. - * cups_open_client_conf() - Open the client.conf file. + * _cupsSetDefaults() - Set the default server, port, and encryption. + * cups_read_client_conf() - Read a client.conf file. */ /* @@ -47,7 +49,10 @@ * Local functions... */ -static cups_file_t *cups_open_client_conf(void); +static void cups_read_client_conf(cups_file_t *fp, + _cups_globals_t *cg, + const char *cups_encryption, + const char *cups_server); /* @@ -62,69 +67,11 @@ static cups_file_t *cups_open_client_conf(void); http_encryption_t /* O - Encryption settings */ cupsEncryption(void) { - cups_file_t *fp; /* client.conf file */ - char *encryption; /* CUPS_ENCRYPTION variable */ - char line[1024], /* Line from file */ - *value; /* Value on line */ - int linenum; /* Line number */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ - /* - * First see if we have already set the encryption stuff... - */ - if (cg->encryption == (http_encryption_t)-1) - { - /* - * Then see if the CUPS_ENCRYPTION environment variable is set... - */ - - if ((encryption = getenv("CUPS_ENCRYPTION")) == NULL) - { - /* - * No, open the client.conf file... - */ - - fp = cups_open_client_conf(); - encryption = "IfRequested"; - - if (fp) - { - /* - * Read the config file and look for an Encryption line... - */ - - linenum = 0; - - while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum) != NULL) - if (!strcasecmp(line, "Encryption") && value) - { - /* - * Got it! - */ - - encryption = value; - break; - } - - cupsFileClose(fp); - } - } - - /* - * Set the encryption preference... - */ - - if (!strcasecmp(encryption, "never")) - cg->encryption = HTTP_ENCRYPT_NEVER; - else if (!strcasecmp(encryption, "always")) - cg->encryption = HTTP_ENCRYPT_ALWAYS; - else if (!strcasecmp(encryption, "required")) - cg->encryption = HTTP_ENCRYPT_REQUIRED; - else - cg->encryption = HTTP_ENCRYPT_IF_REQUESTED; - } + _cupsSetDefaults(); return (cg->encryption); } @@ -144,23 +91,6 @@ cupsGetPassword(const char *prompt) /* I - Prompt string */ } -/* - * 'cupsSetEncryption()' - Set the encryption preference. - */ - -void -cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */ -{ - _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ - - - cg->encryption = e; - - if (cg->http) - httpEncryption(cg->http, e); -} - - /* * 'cupsServer()' - Return the hostname/address of the default server. * @@ -171,101 +101,30 @@ cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */ const char * /* O - Server name */ cupsServer(void) { - cups_file_t *fp; /* client.conf file */ - char *server; /* Pointer to server name */ - char *port; /* Port number */ - char line[1024], /* Line from file */ - *value; /* Value on line */ - int linenum; /* Line number in file */ -#ifdef CUPS_DEFAULT_DOMAINSOCKET - struct stat sockinfo; /* Domain socket information */ -#endif /* CUPS_DEFAULT_DOMAINSOCKET */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ - /* - * First see if we have already set the server name... - */ - if (!cg->server[0]) - { - /* - * Then see if the CUPS_SERVER environment variable is set... - */ + _cupsSetDefaults(); - if ((server = getenv("CUPS_SERVER")) == NULL) - { - /* - * No environment variable, try the client.conf file... - */ - - fp = cups_open_client_conf(); - -#ifdef CUPS_DEFAULT_DOMAINSOCKET - /* - * If we are compiled with domain socket support, only use the - * domain socket if it exists and has the right permissions... - */ - - if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) && - (sockinfo.st_mode & S_IRWXO) == S_IRWXO) - server = CUPS_DEFAULT_DOMAINSOCKET; - else -#endif /* CUPS_DEFAULT_DOMAINSOCKET */ - server = "localhost"; - - if (fp) - { - /* - * Read the config file and look for a ServerName line... - */ - - 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); - } - } - - /* - * Copy the server name over and set the port number, if any... - */ + return (cg->server); +} - DEBUG_printf(("cupsServer: Using server \"%s\"...\n", server)); - strlcpy(cg->server, server, sizeof(cg->server)); +/* + * 'cupsSetEncryption()' - Set the encryption preference. + */ - if (cg->server[0] != '/' && (port = strrchr(cg->server, ':')) != NULL && - !strchr(port, ']') && isdigit(port[1] & 255)) - { - *port++ = '\0'; +void +cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */ +{ + _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ - DEBUG_printf(("cupsServer: Using port %d...\n", atoi(port))); - ippSetPort(atoi(port)); - } - if (cg->server[0] == '/') - strcpy(cg->servername, "localhost"); - else - strlcpy(cg->servername, cg->server, sizeof(cg->servername)); - } + cg->encryption = e; - return (cg->server); + if (cg->http) + httpEncryption(cg->http, e); } @@ -312,7 +171,7 @@ cupsSetServer(const char *server) /* I - Server name */ { *port++ = '\0'; - ippSetPort(atoi(port)); + cg->ipp_port = atoi(port); } if (cg->server[0] == '/') @@ -464,44 +323,209 @@ _cupsGetPassword(const char *prompt) /* I - Prompt string */ /* - * 'cups_open_client_conf()' - Open the client.conf file. + * '_cupsSetDefaults()' - Set the default server, port, and encryption. */ -static cups_file_t * /* O - File or NULL */ -cups_open_client_conf(void) +void +_cupsSetDefaults(void) { cups_file_t *fp; /* File */ - const char *home; /* Home directory of user */ + const char *home, /* Home directory of user */ + *cups_encryption, /* CUPS_ENCRYPTION env var */ + *cups_server; /* CUPS_SERVER env var */ char filename[1024]; /* Filename */ _cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */ - if ((home = getenv("HOME")) != NULL) + DEBUG_puts("_cupsSetDefaults()"); + + /* + * First collect environment variables... + */ + + cups_encryption = getenv("CUPS_ENCRYPTION"); + cups_server = getenv("CUPS_SERVER"); + + /* + * Then, if needed, the .cups/client.conf or .cupsrc file in the home + * directory... + */ + + if ((cg->encryption == (http_encryption_t)-1 || !cg->server[0] || + !cg->ipp_port) && (home = getenv("HOME")) != NULL) { /* * Look for ~/.cups/client.conf or ~/.cupsrc... */ snprintf(filename, sizeof(filename), "%s/.cups/client.conf", home); - if ((fp = cupsFileOpen(filename, "r")) != NULL) + 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); + fp = cupsFileOpen(filename, "r"); } - snprintf(filename, sizeof(filename), "%s/.cupsrc", home); + if (fp) + { + cups_read_client_conf(fp, cg, cups_encryption, cups_server); + cupsFileClose(fp); + } + } + + if (cg->encryption == (http_encryption_t)-1 || !cg->server[0] || + !cg->ipp_port) + { + /* + * Look for CUPS_SERVERROOT/client.conf... + */ + + snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot); if ((fp = cupsFileOpen(filename, "r")) != NULL) { - DEBUG_printf(("cups_open_client_conf: Using \"%s\"...\n", filename)); - return (fp); + cups_read_client_conf(fp, cg, cups_encryption, cups_server); + cupsFileClose(fp); + } + } + + /* + * If we still have things that aren't set, use the compiled in defaults... + */ + + if (cg->encryption == (http_encryption_t)-1) + cg->encryption = HTTP_ENCRYPT_IF_REQUESTED; + + if (!cg->server[0]) + { + if (!cups_server) + { +#ifdef CUPS_DEFAULT_DOMAINSOCKET + /* + * If we are compiled with domain socket support, only use the + * domain socket if it exists and has the right permissions... + */ + + struct stat sockinfo; /* Domain socket information */ + + if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) && + (sockinfo.st_mode & S_IRWXO) == S_IRWXO) + cups_server = CUPS_DEFAULT_DOMAINSOCKET; + else +#endif /* CUPS_DEFAULT_DOMAINSOCKET */ + cups_server = "localhost"; + } + + cupsSetServer(cups_server); + } + + if (!cg->ipp_port) + { + const char *ipp_port; /* IPP_PORT environment variable */ + struct servent *service; /* Port number info */ + + + if ((ipp_port = getenv("IPP_PORT")) != NULL) + { + if ((cg->ipp_port = atoi(ipp_port)) <= 0) + cg->ipp_port = CUPS_DEFAULT_IPP_PORT; } + else if ((service = getservbyname("ipp", NULL)) == NULL || + service->s_port <= 0) + cg->ipp_port = CUPS_DEFAULT_IPP_PORT; + else + cg->ipp_port = ntohs(service->s_port); + } +} + + +/* + * 'cups_read_client_conf()' - Read a client.conf file. + */ + +static void +cups_read_client_conf( + cups_file_t *fp, /* I - File to read */ + _cups_globals_t *cg, /* I - Global data */ + const char *cups_encryption, /* I - CUPS_ENCRYPTION env var */ + const char *cups_server) /* I - CUPS_SERVER env var */ +{ + int linenum; /* Current line number */ + char line[1024], /* Line from file */ + *value, /* Pointer into line */ + encryption[1024], /* Encryption value */ + server_name[1024]; /* ServerName value */ + + + /* + * Read from the file... + */ + + linenum = 0; + while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) + { + if (!cups_encryption && cg->encryption == (http_encryption_t)-1 && + !strcasecmp(line, "Encryption") && value) + { + strlcpy(encryption, value, sizeof(encryption)); + cups_encryption = encryption; + } + else if (!cups_server && (!cg->server[0] || !cg->ipp_port) && + !strcasecmp(line, "ServerName") && value) + { + strlcpy(server_name, value, sizeof(server_name)); + cups_server = server_name; + } + } + + /* + * Set values... + */ + + if (cg->encryption == (http_encryption_t)-1 && cups_encryption) + { + if (!strcasecmp(cups_encryption, "never")) + cg->encryption = HTTP_ENCRYPT_NEVER; + else if (!strcasecmp(cups_encryption, "always")) + cg->encryption = HTTP_ENCRYPT_ALWAYS; + else if (!strcasecmp(cups_encryption, "required")) + cg->encryption = HTTP_ENCRYPT_REQUIRED; + else + cg->encryption = HTTP_ENCRYPT_IF_REQUESTED; } - snprintf(filename, sizeof(filename), "%s/client.conf", cg->cups_serverroot); - return (cupsFileOpen(filename, "r")); + if ((!cg->server[0] || !cg->ipp_port) && cups_server) + { + if (!cg->server[0]) + { + /* + * Copy server name... + */ + + strlcpy(cg->server, cups_server, sizeof(cg->server)); + + if (cg->server[0] != '/' && (value = strrchr(cg->server, ':')) != NULL && + !strchr(value, ']') && isdigit(value[1] & 255)) + *value++ = '\0'; + else + value = NULL; + + if (cg->server[0] == '/') + strcpy(cg->servername, "localhost"); + else + strlcpy(cg->servername, cg->server, sizeof(cg->servername)); + } + else if (cups_server[0] != '/' && + (value = strrchr(cups_server, ':')) != NULL && + !strchr(value, ']') && isdigit(value[1] & 255)) + value ++; + else + value = NULL; + + if (!cg->ipp_port && value) + cg->ipp_port = atoi(value); + } } /* - * End of "$Id: usersys.c 7337 2008-02-22 04:44:04Z mike $". + * End of "$Id: usersys.c 8498 2009-04-13 17:03:15Z mike $". */ diff --git a/cups/util.c b/cups/util.c index ee1cdf372..b3a51af1b 100644 --- a/cups/util.c +++ b/cups/util.c @@ -220,7 +220,7 @@ cupsCreateJob( DEBUG_printf(("cupsCreateJob(http=%p, name=\"%s\", title=\"%s\", " - "num_options=%d, options=%p)\n", + "num_options=%d, options=%p)", http, name, title, num_options, options)); /* @@ -910,7 +910,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL */ DEBUG_printf(("cupsGetPPD3(http=%p, name=\"%s\", modtime=%p(%d), buffer=%p, " - "bufsize=%d)\n", http, name ? name : "(null)", modtime, + "bufsize=%d)", http, name, modtime, modtime ? (int)*modtime : 0, buffer, (int)bufsize)); if (!name) @@ -1048,7 +1048,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL resource, sizeof(resource), 0)) return (HTTP_NOT_FOUND); - DEBUG_printf(("cupsGetPPD3: Printer hostname=\"%s\", port=%d\n", hostname, + DEBUG_printf(("2cupsGetPPD3: Printer hostname=\"%s\", port=%d", hostname, port)); /* @@ -1057,7 +1057,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL httpGetHostname(NULL, localhost, sizeof(localhost)); - DEBUG_printf(("cupsGetPPD3: Local hostname=\"%s\"\n", localhost)); + DEBUG_printf(("2cupsGetPPD3: Local hostname=\"%s\"", localhost)); if (!strcasecmp(localhost, hostname)) strcpy(hostname, "localhost"); @@ -1069,7 +1069,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL httpGetHostname(http, http_hostname, sizeof(http_hostname)); http_port = _httpAddrPort(http->hostaddr); - DEBUG_printf(("cupsGetPPD3: Connection hostname=\"%s\", port=%d\n", + DEBUG_printf(("2cupsGetPPD3: Connection hostname=\"%s\", port=%d", http_hostname, http_port)); /* @@ -1081,7 +1081,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL else if ((http2 = httpConnectEncrypt(hostname, port, cupsEncryption())) == NULL) { - DEBUG_puts("cupsGetPPD3: Unable to connect to server!"); + DEBUG_puts("1cupsGetPPD3: Unable to connect to server!"); return (HTTP_SERVICE_UNAVAILABLE); } @@ -1131,22 +1131,7 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL *modtime = httpGetDateTime(httpGetField(http2, HTTP_FIELD_DATE)); else if (status != HTTP_NOT_MODIFIED) { - switch (status) - { - case HTTP_NOT_FOUND : - _cupsSetError(IPP_NOT_FOUND, httpStatus(status), 0); - break; - - case HTTP_UNAUTHORIZED : - _cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status), 0); - break; - - default : - DEBUG_printf(("cupsGetPPD3: HTTP error %d mapped to " - "IPP_SERVICE_UNAVAILABLE!\n", status)); - _cupsSetError(IPP_SERVICE_UNAVAILABLE, httpStatus(status), 0); - break; - } + _cupsSetHTTPError(status); unlink(cg->ppd_filename); } @@ -1158,6 +1143,8 @@ cupsGetPPD3(http_t *http, /* I - HTTP connection or @code CUPS_HTTP_DEFAUL * Return the PPD file... */ + DEBUG_printf(("1cupsGetPPD3: Returning status %d", status)); + return (status); } @@ -1381,7 +1368,7 @@ cupsPrintFile(const char *name, /* I - Destination name */ cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFile(name=\"%s\", filename=\"%s\", " - "title=\"%s\", num_options=%d, options=%p)\n", + "title=\"%s\", num_options=%d, options=%p)", name, filename, title, num_options, options)); return (cupsPrintFiles2(CUPS_HTTP_DEFAULT, name, 1, &filename, title, @@ -1406,7 +1393,7 @@ cupsPrintFile2( cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFile2(http=%p, name=\"%s\", filename=\"%s\", " - "title=\"%s\", num_options=%d, options=%p)\n", + "title=\"%s\", num_options=%d, options=%p)", http, name, filename, title, num_options, options)); return (cupsPrintFiles2(http, name, 1, &filename, title, num_options, @@ -1429,10 +1416,9 @@ cupsPrintFiles( cups_option_t *options) /* I - Options */ { DEBUG_printf(("cupsPrintFiles(name=\"%s\", num_files=%d, " - "files=%p, title=\"%s\", num_options=%d, options=%p)\n", + "files=%p, title=\"%s\", num_options=%d, options=%p)", name, num_files, files, title, num_options, options)); - /* * Print the file(s)... */ @@ -1470,7 +1456,7 @@ cupsPrintFiles2( DEBUG_printf(("cupsPrintFiles2(http=%p, name=\"%s\", num_files=%d, " - "files=%p, title=\"%s\", num_options=%d, options=%p)\n", + "files=%p, title=\"%s\", num_options=%d, options=%p)", http, name, num_files, files, title, num_options, options)); /* @@ -1711,10 +1697,9 @@ cups_get_printer_uri( }; - DEBUG_printf(("cups_get_printer_uri(http=%p, name=\"%s\", host=%p, " - "hostsize=%d, resource=%p, resourcesize=%d, depth=%d)\n", - http, name ? name : "(null)", host, hostsize, - resource, resourcesize, depth)); + DEBUG_printf(("7cups_get_printer_uri(http=%p, name=\"%s\", host=%p, " + "hostsize=%d, resource=%p, resourcesize=%d, depth=%d)", + http, name, host, hostsize, resource, resourcesize, depth)); /* * Setup the printer URI... @@ -1731,7 +1716,7 @@ cups_get_printer_uri( return (0); } - DEBUG_printf(("cups_get_printer_uri: printer-uri=\"%s\"\n", uri)); + DEBUG_printf(("9cups_get_printer_uri: printer-uri=\"%s\"", uri)); /* * Get the hostname and port number we are connected to... @@ -1812,7 +1797,7 @@ cups_get_printer_uri( else if ((http2 = httpConnectEncrypt(host, *port, cupsEncryption())) == NULL) { - DEBUG_puts("Unable to connect to server!"); + DEBUG_puts("8cups_get_printer_uri: Unable to connect to server!"); continue; } diff --git a/doc/de/index.html.in b/doc/de/index.html.in index dade62df5..4a49f507e 100644 --- a/doc/de/index.html.in +++ b/doc/de/index.html.in @@ -4,7 +4,7 @@ Home - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + diff --git a/doc/es/index.html.in b/doc/es/index.html.in index f142743ad..23251add1 100644 --- a/doc/es/index.html.in +++ b/doc/es/index.html.in @@ -4,7 +4,7 @@ Inicio - CUPS @CUPS_VERSION@@CUPS_REVISION@ - +
diff --git a/doc/help/ref-cupsd-conf.html.in b/doc/help/ref-cupsd-conf.html.in index 28d16de4a..64029b94c 100644 --- a/doc/help/ref-cupsd-conf.html.in +++ b/doc/help/ref-cupsd-conf.html.in @@ -1380,20 +1380,6 @@ system-specific but is usually lp or nobody.

-

CUPS 1.3GSSServiceName

- -

Examples

- -
-GSSServiceName IPP
-GSSServiceName HTTP
-
- -

Description

- -

The GSSServiceName directive specifies the Kerberos service name that is used when passing authorization tickets. The default name is IPP.

- -

CUPS 1.1.10HideImplicitMembers

Examples

diff --git a/doc/index.html.in b/doc/index.html.in index 4f81c01fd..03aa76c20 100644 --- a/doc/index.html.in +++ b/doc/index.html.in @@ -4,7 +4,7 @@ Home - CUPS @CUPS_VERSION@@CUPS_REVISION@ - +
diff --git a/doc/ja/index.html.in b/doc/ja/index.html.in index 21aaa9461..03cea0a4c 100644 --- a/doc/ja/index.html.in +++ b/doc/ja/index.html.in @@ -4,7 +4,7 @@ ホーム - CUPS @CUPS_VERSION@@CUPS_REVISION@ - +
diff --git a/doc/pl/index.html.in b/doc/pl/index.html.in index 933ab8829..9aadf0df0 100644 --- a/doc/pl/index.html.in +++ b/doc/pl/index.html.in @@ -4,7 +4,7 @@ Strona domowa - CUPS @CUPS_VERSION@@CUPS_REVISION@ - +
diff --git a/doc/ru/index.html.in b/doc/ru/index.html.in index ddd29c43c..ce5c1d782 100644 --- a/doc/ru/index.html.in +++ b/doc/ru/index.html.in @@ -4,7 +4,7 @@ Начало — CUPS @CUPS_VERSION@@CUPS_REVISION@ - +
diff --git a/filter/image-private.h b/filter/image-private.h index 9ce1dd254..79d440a80 100644 --- a/filter/image-private.h +++ b/filter/image-private.h @@ -40,8 +40,8 @@ # define CUPS_IMAGE_MAX_WIDTH 0x07ffffff /* 2^27-1 to allow for 15-channel data */ -# define CUPS_IMAGE_MAX_HEIGHT 0x7fffffff - /* 2^31-1 */ +# define CUPS_IMAGE_MAX_HEIGHT 0x3fffffff + /* 2^30-1 */ # define CUPS_TILE_SIZE 256 /* 256x256 pixel tiles */ # define CUPS_TILE_MINIMUM 10 /* Minimum number of tiles */ diff --git a/filter/pstops.c b/filter/pstops.c index e7ca92de3..42732c980 100644 --- a/filter/pstops.c +++ b/filter/pstops.c @@ -3,7 +3,7 @@ * * PostScript filter for the Common UNIX Printing System (CUPS). * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -2003,7 +2003,10 @@ do_setup(pstops_doc_t *doc, /* I - Document information */ */ if (doc->number_up > 1) + { + doc_puts(doc, "userdict/CUPSsetpagedevice/setpagedevice load put\n"); doc_puts(doc, "userdict/setpagedevice{pop}bind put\n"); + } /* * Changes to the transfer function must be made AFTER any @@ -3436,6 +3439,15 @@ write_options( * Then send them out... */ + if (doc->number_up > 1) + { + /* + * Temporarily restore setpagedevice so we can set the options... + */ + + doc_puts(doc, "userdict/setpagedevice/CUPSsetpagedevice load put\n"); + } + if (doc_setup) { doc_puts(doc, doc_setup); @@ -3447,6 +3459,15 @@ write_options( doc_puts(doc, any_setup); free(any_setup); } + + if (doc->number_up > 1) + { + /* + * Disable setpagedevice again... + */ + + doc_puts(doc, "userdict/setpagedevice{pop}bind put\n"); + } } diff --git a/install-sh b/install-sh index 2c4a67c2d..be1adf563 100755 --- a/install-sh +++ b/install-sh @@ -1,9 +1,19 @@ #!/bin/sh # -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). +# "$Id$" # -# Library stripping changes Copyright 2008 by Apple Inc. +# Install a program, script, or datafile. +# +# Copyright 2008-2009 by Apple Inc. +# +# This script is not compatible with BSD (or any other) install program, as it +# allows owner and group changes to fail with a warning and makes sure that the +# destination directory permissions are as specified - BSD install and the +# original X11 install script did not change permissions of existing +# directories. It also does not support the transform options since CUPS does +# not use them... +# +# Original script from X11R5 (mit/util/scripts/install.sh) # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its @@ -19,20 +29,15 @@ # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - # set DOITPROG to echo to test this script - # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" +# Force umask to 022... +umask 022 # put in absolute paths if you don't have them in your path; or use env. vars. - mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" @@ -56,172 +61,136 @@ dst="" dir_arg="" while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; + case $1 in + -c) + instcmd="$cpprog" + shift + continue + ;; + + -d) + dir_arg=true + shift + continue + ;; + + -m) + chmodcmd="$chmodprog $2" + shift + shift + continue + ;; + + -o) + chowncmd="$chownprog $2" + shift + shift + continue + ;; + + -g) + chgrpcmd="$chgrpprog $2" + shift + shift + continue + ;; + + -s) + stripcmd="$stripprog" + shift + continue + ;; - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac + *) + if [ x"$src" = x ]; then + src="$1" + else + dst="$1" + fi + shift + continue + ;; + esac done -if [ x"$src" = x ] -then - echo "install: no input file specified" +if [ x"$src" = x ]; then + echo "install-sh: No input file specified" exit 1 -else - : fi if [ x"$dir_arg" != x ]; then - dst=$src + dst="$src" src="" - if [ -d $dst ]; then + if [ -d "$dst" ]; then instcmd=: - chmodcmd="" else instcmd=$mkdirprog fi else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - : - else - echo "install: $src does not exist" + # Waiting for this to be detected by the "$instcmd $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if [ ! -f "$src" -a ! -d "$src" ]; then + echo "install: $src does not exist" exit 1 fi - if [ x"$dst" = x ] - then - echo "install: no destination specified" + if [ x"$dst" = x ]; then + echo "install: No destination specified" exit 1 - else - : fi -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - : + # If destination is a directory, append the input filename. + if [ -d "$dst" ]; then + dst="$dst/`basename $src`" fi fi ## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` +dstdir="`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`" # Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script +# This part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then -defaultIFS=' + defaultIFS=' ' -IFS="${IFS-${defaultIFS}}" + IFS="${IFS-${defaultIFS}}" -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" + oIFS="${IFS}" + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS="${oIFS}" -pathcomp='' + pathcomp='' -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift + while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" && - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$pathcomp"; else : ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$pathcomp"; else : ; fi - else - : - fi + if [ ! -d "${pathcomp}" ]; then $doit $mkdirprog "${pathcomp}"; fi - pathcomp="${pathcomp}/" -done + pathcomp="${pathcomp}/" + done fi -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && +if [ x"$dir_arg" != x ]; then + # Make a directory... + $doit $instcmd $dst || exit 1 - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi + # Allow chown/chgrp to fail, but log a warning + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst || echo "warning: Unable to change owner of $dst!"; fi + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst || echo "warning: Unable to change group of $dst!"; fi + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst || exit 1; fi else + # Install a file... + dstfile="`basename $dst`" -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - : - fi - -# Check the destination file - for libraries just use the "-x" option to strip + # Check the destination file - for libraries just use the "-x" option + # to strip... case "$dstfile" in *.a | *.dylib | *.sl | *.sl.* | *.so | *.so.*) stripopt="-x" @@ -231,33 +200,23 @@ else ;; esac -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# + # Make a temp file name in the proper directory. + dsttmp="$dstdir/#inst.$$#" -# Move or copy the file name to the temp name + # Move or copy the file name to the temp name + $doit $instcmd $src $dsttmp || exit 1 - $doit $instcmd $src $dsttmp && + # Update permissions and strip as needed, then move to the final name. + # If the chmod, strip, rm, or mv commands fail, remove the installed + # file... + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp" || echo "warning: Unable to change owner of $dst!"; fi + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp" || echo "warning: Unable to change group of $dst!"; fi trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripopt $dsttmp; else :;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - + if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripopt "$dsttmp"; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; fi && + $doit $rmcmd -f "$dstdir/$dstfile" && + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" +fi exit 0 diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in index e2e035183..a2153b9a6 100644 --- a/man/cupsd.conf.man.in +++ b/man/cupsd.conf.man.in @@ -12,7 +12,7 @@ .\" which should have been included with this file. If this file is .\" file is missing or damaged, see the license at "http://www.cups.org/". .\" -.TH cupsd.conf 5 "CUPS" "16 March 2009" "Apple Inc." +.TH cupsd.conf 5 "CUPS" "19 April 2009" "Apple Inc." .SH NAME cupsd.conf \- server configuration file for cups .SH DESCRIPTION @@ -416,10 +416,6 @@ KeepAliveTimeout seconds .br Specifies the amount of time that connections are kept alive. .TP 5 -Krb5Keytab filename -.br -Overrides the Kerberos key tab location. -.TP 5 ... .br Specifies the IPP operations that are being limited inside a policy. @@ -622,6 +618,11 @@ ServerAdmin user@domain.com .br Specifies the email address of the server administrator. .TP 5 +ServerAlias hostname +.br +Specifies an alternate name that the server is known by. The special name "*" +allows any name to be used. +.TP 5 ServerBin directory .br Specifies the directory where backends, CGIs, daemons, and filters may diff --git a/notifier/Makefile b/notifier/Makefile index 2dc2c9682..252e5085a 100644 --- a/notifier/Makefile +++ b/notifier/Makefile @@ -62,8 +62,7 @@ install: all install-data install-headers install-libs install-exec # install-data: - $(INSTALL_DIR) -m 775 $(CACHEDIR)/rss - -chgrp $(CUPS_GROUP) $(CACHEDIR)/rss + $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)/rss # diff --git a/scheduler/Makefile b/scheduler/Makefile index 596547f5e..9479c7af5 100644 --- a/scheduler/Makefile +++ b/scheduler/Makefile @@ -138,38 +138,29 @@ install-data: echo Creating $(SERVERBIN)/driver... $(INSTALL_DIR) -m 755 $(SERVERBIN)/driver echo Creating $(SERVERROOT)... - $(INSTALL_DIR) -m 755 $(SERVERROOT) - -chgrp $(CUPS_GROUP) $(SERVERROOT) + $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT) echo Creating $(SERVERROOT)/interfaces... - $(INSTALL_DIR) -m 755 $(SERVERROOT)/interfaces - -chgrp $(CUPS_GROUP) $(SERVERROOT)/interfaces + $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/interfaces echo Creating $(SERVERROOT)/ppd... - $(INSTALL_DIR) -m 755 $(SERVERROOT)/ppd - -chgrp $(CUPS_GROUP) $(SERVERROOT)/ppd - -if test "x`uname`" != xDarwin; then \ + $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/ppd + if test "x`uname`" != xDarwin; then \ echo Creating $(SERVERROOT)/ssl...; \ - $(INSTALL_DIR) -m 700 $(SERVERROOT)/ssl; \ - chgrp $(CUPS_GROUP) $(SERVERROOT)/ssl || true; \ + $(INSTALL_DIR) -m 700 -g $(CUPS_GROUP) $(SERVERROOT)/ssl; \ + fi + if test "$(STATEDIR)" != "$(SERVERROOT)"; then \ echo Creating $(STATEDIR)...; \ $(INSTALL_DIR) -m 755 $(STATEDIR); \ - echo Creating $(STATEDIR)/certs...; \ - $(INSTALL_DIR) -m 511 $(STATEDIR)/certs; \ - chgrp $(CUPS_PRIMARY_SYSTEM_GROUP) $(STATEDIR)/certs || true; \ fi + echo Creating $(STATEDIR)/certs... + $(INSTALL_DIR) -m 511 -g $(CUPS_PRIMARY_SYSTEM_GROUP) $(STATEDIR)/certs echo Creating $(LOGDIR)... $(INSTALL_DIR) -m 755 $(LOGDIR) echo Creating $(REQUESTS)... - $(INSTALL_DIR) -m 710 $(REQUESTS) - -chgrp $(CUPS_GROUP) $(REQUESTS) + $(INSTALL_DIR) -m 710 -g $(CUPS_GROUP) $(REQUESTS) echo Creating $(REQUESTS)/tmp... - $(INSTALL_DIR) -m 1770 $(REQUESTS)/tmp - -chgrp $(CUPS_GROUP) $(REQUESTS)/tmp + $(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp echo Creating $(CACHEDIR)... - $(INSTALL_DIR) -m 775 $(CACHEDIR) - -chgrp $(CUPS_GROUP) $(CACHEDIR) -# echo Creating $(CACHEDIR)/ppd... -# $(INSTALL_DIR) -m 755 $(CACHEDIR)/ppd -# -chgrp $(CUPS_GROUP) $(CACHEDIR)/ppd + $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR) # @@ -179,7 +170,7 @@ install-data: install-exec: echo Installing programs in $(SBINDIR)... $(INSTALL_DIR) -m 755 $(SBINDIR) - $(INSTALL_BIN) cupsd $(SBINDIR) + $(INSTALL_BIN) -m 500 cupsd $(SBINDIR) $(INSTALL_BIN) cupsfilter $(SBINDIR) -if test "x`uname`" = xDarwin; then \ $(INSTALL_DIR) $(BUILDROOT)/System/Library/Printers/Libraries; \ diff --git a/scheduler/auth.c b/scheduler/auth.c index abf55e3e2..7316c8feb 100644 --- a/scheduler/auth.c +++ b/scheduler/auth.c @@ -28,6 +28,7 @@ * access a location. * cupsdCheckAuth() - Check authorization masks. * cupsdCheckGroup() - Check for a user's group membership. + * cupsdCopyKrb5Creds() - Get a copy of the Kerberos credentials. * cupsdCopyLocation() - Make a copy of a location... * cupsdDeleteAllLocations() - Free all memory used for location * authorization. @@ -47,7 +48,6 @@ * compare_locations() - Compare two locations. * cups_crypt() - Encrypt the password using the DES or MD5 * algorithms, as needed. - * get_gss_creds() - Obtain GSS credentials. * get_md5_password() - Get an MD5 password. * pam_func() - PAM conversation function. * to64() - Base64-encode an integer value... @@ -97,6 +97,11 @@ typedef struct xucred cupsd_ucred_t; typedef struct ucred cupsd_ucred_t; # define CUPSD_UCRED_UID(c) (c).uid #endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID +/* Not in public headers... */ +extern void krb5_ipc_client_set_target_uid(uid_t); +extern void krb5_ipc_client_clear_target(void); +#endif /* HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID */ /* @@ -113,10 +118,6 @@ static int compare_locations(cupsd_location_t *a, #if !HAVE_LIBPAM && !defined(HAVE_USERSEC_H) static char *cups_crypt(const char *pw, const char *salt); #endif /* !HAVE_LIBPAM && !HAVE_USERSEC_H */ -#ifdef HAVE_GSSAPI -static gss_cred_id_t get_gss_creds(const char *service_name, - const char *con_server_name); -#endif /* HAVE_GSSAPI */ static char *get_md5_password(const char *username, const char *group, char passwd[33]); #if HAVE_LIBPAM @@ -960,7 +961,6 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ else if (!strncmp(authorization, "Negotiate", 9)) { int len; /* Length of authorization string */ - gss_cred_id_t server_creds; /* Server credentials */ gss_ctx_id_t context; /* Authorization context */ OM_uint32 major_status, /* Major status code */ minor_status; /* Minor status code */ @@ -969,7 +969,6 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ output_token = GSS_C_EMPTY_BUFFER; /* Output token for username */ gss_name_t client_name; /* Client name */ - unsigned int ret_flags; /* Credential flags */ # ifdef __APPLE__ @@ -1004,13 +1003,6 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ return; } - /* - * Get the server credentials... - */ - - if ((server_creds = get_gss_creds(GSSServiceName, con->servername)) == NULL) - return; - /* * Decode the authorization string to get the input token... */ @@ -1029,15 +1021,15 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ client_name = GSS_C_NO_NAME; major_status = gss_accept_sec_context(&minor_status, &context, - server_creds, + GSS_C_NO_CREDENTIAL, &input_token, GSS_C_NO_CHANNEL_BINDINGS, &client_name, NULL, &con->gss_output_token, - &ret_flags, + &con->gss_flags, NULL, - &con->gss_delegated_cred); + &con->gss_creds); if (GSS_ERROR(major_status)) { @@ -1047,28 +1039,20 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ if (context != GSS_C_NO_CONTEXT) gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); - - gss_release_cred(&minor_status, &server_creds); return; } - /* - * Release our credentials... - */ - - gss_release_cred(&minor_status, &server_creds); - /* * Get the username associated with the client's credentials... */ - if (!con->gss_delegated_cred) + if (!con->gss_creds) cupsdLogMessage(CUPSD_LOG_DEBUG, - "cupsdAuthorize: No delegated credentials!"); + "cupsdAuthorize: No credentials!"); if (major_status == GSS_S_CONTINUE_NEEDED) cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, - "cupsdAuthorize: Credentials not complete"); + "cupsdAuthorize: Credentials not complete"); else if (major_status == GSS_S_COMPLETE) { major_status = gss_display_name(&minor_status, client_name, @@ -1078,27 +1062,27 @@ cupsdAuthorize(cupsd_client_t *con) /* I - Client connection */ { cupsdLogGSSMessage(CUPSD_LOG_DEBUG, major_status, minor_status, "cupsdAuthorize: Error getting username"); + gss_release_cred(&minor_status, &con->gss_creds); gss_release_name(&minor_status, &client_name); gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); return; } - gss_release_name(&minor_status, &client_name); strlcpy(username, output_token.value, sizeof(username)); cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAuthorize: Authorized as %s using Negotiate", username); + gss_release_name(&minor_status, &client_name); gss_release_buffer(&minor_status, &output_token); - gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); - - con->gss_have_creds = 1; con->type = CUPSD_AUTH_NEGOTIATE; } else - gss_release_name(&minor_status, &client_name); + gss_release_cred(&minor_status, &con->gss_creds); + + gss_delete_sec_context(&minor_status, &context, GSS_C_NO_BUFFER); } #endif /* HAVE_GSSAPI */ else @@ -1205,6 +1189,7 @@ cupsdCheckAuth( unsigned netip6[4]; /* IPv6 network address */ #endif /* AF_INET6 */ + while (num_masks > 0) { switch (masks->type) @@ -1225,6 +1210,15 @@ cupsdCheckAuth( if (!strcmp(masks->mask.name.name, "*")) { +#ifdef __APPLE__ + /* + * Allow Back-to-My-Mac addresses... + */ + + if ((ip[0] & 0xff000000) == 0xfd000000) + return (1); +#endif /* __APPLE__ */ + /* * Check against all local interfaces... */ @@ -1474,6 +1468,170 @@ cupsdCheckGroup( } +#ifdef HAVE_GSSAPI +/* + * 'cupsdCopyKrb5Creds()' - Get a copy of the Kerberos credentials. + */ + +krb5_ccache /* O - Credentials or NULL */ +cupsdCopyKrb5Creds(cupsd_client_t *con) /* I - Client connection */ +{ +# if !defined(HAVE_KRB5_CC_NEW_UNIQUE) && !defined(HAVE_HEIMDAL) + cupsdLogMessage(CUPSD_LOG_INFO, + "Sorry, your version of Kerberos does not support delegated " + "credentials!"); + return (NULL); + +# else + krb5_ccache ccache = NULL; /* Credentials */ + krb5_error_code error; /* Kerberos error code */ + OM_uint32 major_status, /* Major status code */ + minor_status; /* Minor status code */ + krb5_principal principal; /* Kerberos principal */ + + +# ifdef __APPLE__ + /* + * If the weak-linked GSSAPI/Kerberos library is not present, don't try + * to use it... + */ + + if (krb5_init_context == NULL) + return (NULL); +# endif /* __APPLE__ */ + + if (!KerberosInitialized) + { + /* + * Setup a Kerberos context for the scheduler to use... + */ + + KerberosInitialized = 1; + + if (krb5_init_context(&KerberosContext)) + { + KerberosContext = NULL; + + cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize Kerberos context"); + return (NULL); + } + } + + /* + * We MUST create a file-based cache because memory-based caches are + * only valid for the current process/address space. + * + * Due to various bugs/features in different versions of Kerberos, we + * need either the krb5_cc_new_unique() function or Heimdal's version + * of krb5_cc_gen_new() to create a new FILE: credential cache that + * can be passed to the backend. These functions create a temporary + * file (typically in /tmp) containing the cached credentials, which + * are removed when we have successfully printed a job. + */ + +# ifdef HAVE_KRB5_CC_NEW_UNIQUE + if ((error = krb5_cc_new_unique(KerberosContext, "FILE", NULL, &ccache)) != 0) +# else /* HAVE_HEIMDAL */ + if ((error = krb5_cc_gen_new(KerberosContext, &krb5_fcc_ops, &ccache)) != 0) +# endif /* HAVE_KRB5_CC_NEW_UNIQUE */ + { + cupsdLogMessage(CUPSD_LOG_ERROR, + "Unable to create new credentials cache (%d/%s)", + error, strerror(errno)); + return (NULL); + } + + if ((error = krb5_parse_name(KerberosContext, con->username, &principal)) != 0) + { + cupsdLogMessage(CUPSD_LOG_ERROR, + "Unable to parse kerberos username (%d/%s)", error, + strerror(errno)); + krb5_cc_destroy(KerberosContext, ccache); + return (NULL); + } + + if ((error = krb5_cc_initialize(KerberosContext, ccache, principal))) + { + cupsdLogMessage(CUPSD_LOG_ERROR, + "Unable to initialize credentials cache (%d/%s)", error, + strerror(errno)); + krb5_cc_destroy(KerberosContext, ccache); + krb5_free_principal(KerberosContext, principal); + return (NULL); + } + + krb5_free_principal(KerberosContext, principal); + + /* + * Copy the user's credentials to the new cache file... + */ + +# ifdef HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID + if (con->http.hostaddr->addr.sa_family == AF_LOCAL && + !(con->gss_flags & GSS_C_DELEG_FLAG)) + { + /* + * Pull the credentials directly from the user... + */ + + cupsd_ucred_t peercred; /* Peer credentials */ + socklen_t peersize; /* Size of peer credentials */ + krb5_ccache peerccache; /* Peer Kerberos credentials */ + + peersize = sizeof(peercred); + + if (getsockopt(con->http.fd, SOL_SOCKET, SO_PEERCRED, &peercred, &peersize)) + { + cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get peer credentials - %s", + strerror(errno)); + krb5_cc_destroy(KerberosContext, ccache); + return (NULL); + } + + krb5_ipc_client_set_target_uid(CUPSD_UCRED_UID(peercred)); + + if ((error = krb5_cc_default(KerberosContext, &peerccache)) != 0) + { + cupsdLogMessage(CUPSD_LOG_ERROR, + "Unable to get credentials cache for UID %d (%d/%s)", + (int)CUPSD_UCRED_UID(peercred), error, strerror(errno)); + krb5_cc_destroy(KerberosContext, ccache); + return (NULL); + } + + error = krb5_cc_copy_creds(KerberosContext, peerccache, ccache); + krb5_cc_close(KerberosContext, peerccache); + krb5_ipc_client_clear_target(); + + if (error) + { + cupsdLogMessage(CUPSD_LOG_ERROR, + "Unable to copy credentials cache for UID %d (%d/%s)", + (int)CUPSD_UCRED_UID(peercred), error, strerror(errno)); + krb5_cc_destroy(KerberosContext, ccache); + return (NULL); + } + } + else +# endif /* HAVE_KRB5_IPC_CLIENT_SET_TARGET_UID */ + { + major_status = gss_krb5_copy_ccache(&minor_status, con->gss_creds, ccache); + + if (GSS_ERROR(major_status)) + { + cupsdLogGSSMessage(CUPSD_LOG_ERROR, major_status, minor_status, + "Unable to copy client credentials cache"); + krb5_cc_destroy(KerberosContext, ccache); + return (NULL); + } + } + + return (ccache); +# endif /* !HAVE_KRB5_CC_NEW_UNIQUE && !HAVE_HEIMDAL */ +} +#endif /* HAVE_GSSAPI */ + + /* * 'cupsdCopyLocation()' - Make a copy of a location... */ @@ -2508,81 +2666,6 @@ cups_crypt(const char *pw, /* I - Password string */ #endif /* !HAVE_LIBPAM && !HAVE_USERSEC_H */ -#ifdef HAVE_GSSAPI -/* - * 'get_gss_creds()' - Obtain GSS credentials. - */ - -static gss_cred_id_t /* O - Server credentials */ -get_gss_creds( - const char *service_name, /* I - Service name */ - const char *con_server_name) /* I - Hostname of server */ -{ - OM_uint32 major_status, /* Major status code */ - minor_status; /* Minor status code */ - gss_name_t server_name; /* Server name */ - gss_cred_id_t server_creds; /* Server credentials */ - gss_buffer_desc token = GSS_C_EMPTY_BUFFER; - /* Service name token */ - char buf[1024]; /* Service name buffer */ - - - snprintf(buf, sizeof(buf), "%s@%s", service_name, con_server_name); - - token.value = buf; - token.length = strlen(buf); - server_name = GSS_C_NO_NAME; - major_status = gss_import_name(&minor_status, &token, - GSS_C_NT_HOSTBASED_SERVICE, - &server_name); - - memset(&token, 0, sizeof(token)); - - if (GSS_ERROR(major_status)) - { - cupsdLogGSSMessage(CUPSD_LOG_WARN, major_status, minor_status, - "gss_import_name() failed"); - return (NULL); - } - - major_status = gss_display_name(&minor_status, server_name, &token, NULL); - - if (GSS_ERROR(major_status)) - { - cupsdLogGSSMessage(CUPSD_LOG_WARN, major_status, minor_status, - "gss_display_name() failed"); - return (NULL); - } - - cupsdLogMessage(CUPSD_LOG_DEBUG, - "get_gss_creds: Attempting to acquire credentials for %s...", - (char *)token.value); - - server_creds = GSS_C_NO_CREDENTIAL; - major_status = gss_acquire_cred(&minor_status, server_name, GSS_C_INDEFINITE, - GSS_C_NO_OID_SET, GSS_C_ACCEPT, - &server_creds, NULL, NULL); - if (GSS_ERROR(major_status)) - { - cupsdLogGSSMessage(CUPSD_LOG_WARN, major_status, minor_status, - "gss_acquire_cred() failed"); - gss_release_name(&minor_status, &server_name); - gss_release_buffer(&minor_status, &token); - return (NULL); - } - - cupsdLogMessage(CUPSD_LOG_DEBUG, - "get_gss_creds: Credentials acquired successfully for %s.", - (char *)token.value); - - gss_release_name(&minor_status, &server_name); - gss_release_buffer(&minor_status, &token); - - return (server_creds); -} -#endif /* HAVE_GSSAPI */ - - /* * 'get_md5_password()' - Get an MD5 password. */ diff --git a/scheduler/auth.h b/scheduler/auth.h index b5bb65362..189ca2997 100644 --- a/scheduler/auth.h +++ b/scheduler/auth.h @@ -4,7 +4,7 @@ * Authorization definitions for the Common UNIX Printing System (CUPS) * scheduler. * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -142,6 +142,9 @@ extern int cupsdCheckAuth(unsigned ip[4], char *name, int namelen, extern int cupsdCheckGroup(const char *username, struct passwd *user, const char *groupname); +#ifdef HAVE_GSSAPI +extern krb5_ccache cupsdCopyKrb5Creds(cupsd_client_t *con); +#endif /* HAVE_GSSAPI */ extern cupsd_location_t *cupsdCopyLocation(cupsd_location_t **loc); extern void cupsdDeleteAllLocations(void); extern void cupsdDeleteLocation(cupsd_location_t *loc); diff --git a/scheduler/client.c b/scheduler/client.c index c3ed3ca08..b5a59ae88 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -41,6 +41,7 @@ * (i.e. ".."). * make_certificate() - Make a self-signed SSL/TLS certificate. * pipe_command() - Pipe the output of a command to the remote client. + * valid_host() - Is the Host: field valid? * write_file() - Send a file via HTTP. * write_pipe() - Flag that data is available on the CGI pipe. */ @@ -110,6 +111,7 @@ static int make_certificate(cupsd_client_t *con); #endif /* HAVE_SSL */ static int pipe_command(cupsd_client_t *con, int infile, int *outfile, char *command, char *options, int root); +static int valid_host(cupsd_client_t *con); static int write_file(cupsd_client_t *con, http_status_t code, char *filename, char *type, struct stat *filestats); @@ -418,10 +420,10 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */ #ifdef AF_INET6 if (temp.addr.sa_family == AF_INET6) { - if (HostNameLookups) - httpAddrLookup(&temp, con->servername, sizeof(con->servername)); - else if (httpAddrLocalhost(&temp)) + if (httpAddrLocalhost(&temp)) strlcpy(con->servername, "localhost", sizeof(con->servername)); + else if (HostNameLookups || RemoteAccessEnabled) + httpAddrLookup(&temp, con->servername, sizeof(con->servername)); else httpAddrString(&temp, con->servername, sizeof(con->servername)); @@ -431,10 +433,10 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */ #endif /* AF_INET6 */ if (temp.addr.sa_family == AF_INET) { - if (HostNameLookups) - httpAddrLookup(&temp, con->servername, sizeof(con->servername)); - else if (httpAddrLocalhost(&temp)) + if (httpAddrLocalhost(&temp)) strlcpy(con->servername, "localhost", sizeof(con->servername)); + else if (HostNameLookups || RemoteAccessEnabled) + httpAddrLookup(&temp, con->servername, sizeof(con->servername)); else httpAddrString(&temp, con->servername, sizeof(con->servername)); @@ -890,7 +892,10 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */ } #ifdef HAVE_GSSAPI - con->gss_have_creds = 0; + { + OM_uint32 minor_status; + gss_release_cred(&minor_status, &con->gss_creds); + } #endif /* HAVE_GSSAPI */ /* @@ -1131,13 +1136,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */ return; } } - else if (httpAddrLocalhost(con->http.hostaddr) && - strcasecmp(con->http.fields[HTTP_FIELD_HOST], "localhost") && - strncasecmp(con->http.fields[HTTP_FIELD_HOST], "localhost:", 10) && - strcmp(con->http.fields[HTTP_FIELD_HOST], "127.0.0.1") && - strncmp(con->http.fields[HTTP_FIELD_HOST], "127.0.0.1:", 10) && - strcmp(con->http.fields[HTTP_FIELD_HOST], "[::1]") && - strncmp(con->http.fields[HTTP_FIELD_HOST], "[::1]:", 6)) + else if (!valid_host(con)) { /* * Access to localhost must use "localhost" or the corresponding IPv4 @@ -2468,19 +2467,28 @@ cupsdSendHeader( strlcpy(auth_str, "Negotiate", sizeof(auth_str)); #endif /* HAVE_GSSAPI */ -#ifdef HAVE_AUTHORIZATION_H - if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE) + if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && + !strcasecmp(con->http.hostname, "localhost")) { - int i; /* Looping var */ + /* + * Add a "trc" (try root certification) parameter for local non-Kerberos + * requests when the request requires system group membership - then the + * client knows the root certificate can/should be used. + * + * Also, for Mac OS X we also look for @AUTHKEY and add an "authkey" + * parameter as needed... + */ + + int i; /* Looping var */ char *auth_key; /* Auth key buffer */ size_t auth_size; /* Size of remaining buffer */ - auth_key = auth_str + strlen(auth_str); auth_size = sizeof(auth_str) - (auth_key - auth_str); for (i = 0; i < con->best->num_names; i ++) { +#ifdef HAVE_AUTHORIZATION_H if (!strncasecmp(con->best->names[i], "@AUTHKEY(", 9)) { snprintf(auth_key, auth_size, ", authkey=\"%s\"", @@ -2488,15 +2496,23 @@ cupsdSendHeader( /* end parenthesis is stripped in conf.c */ break; } - else if (!strcasecmp(con->best->names[i], "@SYSTEM") && - SystemGroupAuthKey) + else +#endif /* HAVE_AUTHORIZATION_H */ + if (!strcasecmp(con->best->names[i], "@SYSTEM")) { - snprintf(auth_key, auth_size, ", authkey=\"%s\"", SystemGroupAuthKey); +#ifdef HAVE_AUTHORIZATION_H + if (SystemGroupAuthKey) + snprintf(auth_key, auth_size, + ", authkey=\"%s\", trc=\"y\"", + SystemGroupAuthKey); + else +#else + strlcpy(auth_key, ", trc=\"y\"", auth_size)); +#endif /* HAVE_AUTHORIZATION_H */ break; } } } -#endif /* HAVE_AUTHORIZATION_H */ if (auth_str[0]) { @@ -3294,6 +3310,14 @@ get_cdsa_certificate(cupsd_client_t *con) /* I - Client connection */ ssl_options.ServerName = con->servername; ssl_options.ServerNameLen = strlen(con->servername); + cupsdLogMessage(CUPSD_LOG_DEBUG, + "get_cdsa_certificate: Looking for certs for \"%s\"...", + con->servername); + + cupsdLogMessage(CUPSD_LOG_DEBUG, + "get_cdsa_certificate: Looking for certs for \"%s\"...", + con->servername); + options.Data = (uint8 *)&ssl_options; options.Length = sizeof(ssl_options); @@ -3985,7 +4009,7 @@ make_certificate(cupsd_client_t *con) /* I - Client connection */ envp[envc++] = home; envp[envc] = NULL; - if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL, + if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL, 0, NULL, &pid)) { unlink(seedfile); @@ -4385,12 +4409,7 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */ server_name[1024], /* SERVER_NAME environment variable */ server_port[1024]; /* SERVER_PORT environment variable */ ipp_attribute_t *attr; /* attributes-natural-language attribute */ -#ifdef HAVE_GSSAPI - krb5_ccache ccache = NULL; /* Kerberos credentials */ -# if defined(HAVE_KRB5_CC_NEW_UNIQUE) || defined(HAVE_HEIMDAL) - char krb5ccname[1024]; /* KRB5CCNAME environment variable */ -# endif /* HAVE_KRB5_CC_NEW_UNIQUE || HAVE_HEIMDAL */ -#endif /* HAVE_GSSAPI */ + void *ccache = NULL; /* Kerberos credentials */ /* @@ -4618,133 +4637,8 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */ */ #ifdef HAVE_GSSAPI - if (con->gss_have_creds) - { -# if !defined(HAVE_KRB5_CC_NEW_UNIQUE) && !defined(HAVE_HEIMDAL) - cupsdLogMessage(CUPSD_LOG_INFO, - "[CGI] Sorry, your version of Kerberos does not support " - "delegated credentials!"); - -# else - krb5_error_code error; /* Kerberos error code */ - OM_uint32 major_status, /* Major status code */ - minor_status; /* Minor status code */ - krb5_principal principal; /* Kerberos principal */ - - -# ifdef __APPLE__ - /* - * If the weak-linked GSSAPI/Kerberos library is not present, don't try - * to use it... - */ - - if (krb5_init_context != NULL) - { -# endif /* __APPLE__ */ - - if (!KerberosInitialized) - { - /* - * Setup a Kerberos context for the scheduler to use... - */ - - KerberosInitialized = 1; - - if (krb5_init_context(&KerberosContext)) - { - KerberosContext = NULL; - - cupsdLogMessage(CUPSD_LOG_ERROR, - "[CGI] Unable to initialize Kerberos context"); - } - } - - /* - * We MUST create a file-based cache because memory-based caches are - * only valid for the current process/address space. - * - * Due to various bugs/features in different versions of Kerberos, we - * need either the krb5_cc_new_unique() function or Heimdal's version - * of krb5_cc_gen_new() to create a new FILE: credential cache that - * can be passed to the backend. These functions create a temporary - * file (typically in /tmp) containing the cached credentials, which - * are removed when we have successfully printed a job. - */ - - if (KerberosContext) - { -# ifdef HAVE_KRB5_CC_NEW_UNIQUE - if ((error = krb5_cc_new_unique(KerberosContext, "FILE", NULL, - &ccache)) != 0) -# else /* HAVE_HEIMDAL */ - if ((error = krb5_cc_gen_new(KerberosContext, &krb5_fcc_ops, - &ccache)) != 0) -# endif /* HAVE_KRB5_CC_NEW_UNIQUE */ - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "[CGI] Unable to create new credentials cache (%d/%s)", - error, strerror(errno)); - ccache = NULL; - } - else if ((error = krb5_parse_name(KerberosContext, con->username, - &principal)) != 0) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "[CGI] Unable to parse kerberos username (%d/%s)", - error, strerror(errno)); - krb5_cc_destroy(KerberosContext, ccache); - ccache = NULL; - } - else if ((error = krb5_cc_initialize(KerberosContext, ccache, - principal))) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "[CGI] Unable to initialize credentials cache (%d/%s)", - error, strerror(errno)); - krb5_cc_destroy(KerberosContext, ccache); - krb5_free_principal(KerberosContext, principal); - ccache = NULL; - } - else - { - krb5_free_principal(KerberosContext, principal); - - /* - * Copy the user's credentials to the new cache file... - */ - - major_status = gss_krb5_copy_ccache(&minor_status, - con->gss_delegated_cred, ccache); - - if (GSS_ERROR(major_status)) - { - cupsdLogGSSMessage(CUPSD_LOG_ERROR, major_status, minor_status, - "[CGI] Unable to import client credentials " - "cache"); - krb5_cc_destroy(KerberosContext, ccache); - ccache = NULL; - } - else - { - /* - * Add the KRB5CCNAME environment variable to the job so that the - * backend can use the credentials when printing. - */ - - snprintf(krb5ccname, sizeof(krb5ccname), "KRB5CCNAME=FILE:%s", - krb5_cc_get_name(KerberosContext, ccache)); - envp[envc++] = krb5ccname; - - if (!RunUser) - chown(krb5_cc_get_name(KerberosContext, ccache), User, Group); - } - } - } -# ifdef __APPLE__ - } -# endif /* __APPLE__ */ -# endif /* HAVE_KRB5_CC_NEW_UNIQUE || HAVE_HEIMDAL */ - } + if (con->gss_creds) + ccache = cupsdCopyKrb5Creds(con); #endif /* HAVE_GSSAPI */ } @@ -4861,11 +4755,7 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */ */ if (con->username[0]) -#ifdef HAVE_GSSAPI cupsdAddCert(pid, con->username, ccache); -#else - cupsdAddCert(pid, con->username, NULL); -#endif /* HAVE_GSSAPI */ cupsdLogMessage(CUPSD_LOG_DEBUG, "[CGI] Started %s (PID %d)", command, pid); @@ -4877,6 +4767,165 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */ } +/* + * 'valid_host()' - Is the Host: field valid? + */ + +static int /* O - 1 if valid, 0 if not */ +valid_host(cupsd_client_t *con) /* I - Client connection */ +{ + cupsd_alias_t *a; /* Current alias */ + cupsd_netif_t *netif; /* Current network interface */ + const char *host, /* Host field */ + *end; /* End character */ + + + host = con->http.fields[HTTP_FIELD_HOST]; + + if (httpAddrLocalhost(con->http.hostaddr)) + { + /* + * Only allow "localhost" or the equivalent IPv4 or IPv6 numerical + * addresses when accessing CUPS via the loopback interface... + */ + + return (!strcasecmp(host, "localhost") || + !strncasecmp(host, "localhost:", 10) || + !strcasecmp(host, "localhost.") || + !strncasecmp(host, "localhost.:", 11) || +#ifdef __linux + !strcasecmp(host, "localhost.localdomain") || + !strncasecmp(host, "localhost.localdomain:", 22) || +#endif /* __linux */ + !strcmp(host, "127.0.0.1") || + !strncmp(host, "127.0.0.1:", 10) || + !strcmp(host, "[::1]") || + !strncmp(host, "[::1]:", 6)); + } + +#ifdef HAVE_DNSSD + /* + * Check if the hostname is something.local (Bonjour); if so, allow it. + */ + + if ((end = strrchr(host, '.')) != NULL && + (!strcasecmp(end, ".local") || !strncasecmp(end, ".local:", 7) || + !strcasecmp(end, ".local.") || !strncasecmp(end, ".local.:", 8))) + return (1); +#endif /* HAVE_DNSSD */ + + /* + * Check if the hostname is an IP address... + */ + + if (isdigit(*host & 255) || *host == '[') + { + /* + * Possible IPv4/IPv6 address... + */ + + char temp[1024], /* Temporary string */ + *ptr; /* Pointer into temporary string */ + http_addrlist_t *addrlist; /* List of addresses */ + + + strlcpy(temp, host, sizeof(temp)); + if ((ptr = strrchr(temp, ':')) != NULL && !strchr(ptr, ']')) + *ptr = '\0'; /* Strip :port from host value */ + + if ((addrlist = httpAddrGetList(temp, AF_UNSPEC, NULL)) != NULL) + { + /* + * Good IPv4/IPv6 address... + */ + + httpAddrFreeList(addrlist); + return (1); + } + } + + /* + * Check for (alias) name matches... + */ + + for (a = (cupsd_alias_t *)cupsArrayFirst(ServerAlias); + a; + a = (cupsd_alias_t *)cupsArrayNext(ServerAlias)) + { + /* + * "ServerAlias *" allows all host values through... + */ + + if (!strcmp(a->name, "*")) + return (1); + + if (!strncasecmp(host, a->name, a->namelen)) + { + /* + * Prefix matches; check the character at the end - it must be ":", ".", + * ".:", or nul... + */ + + end = host + a->namelen; + + if (!*end || *end == ':' || (*end == '.' && (!end[1] || end[1] == ':'))) + return (1); + } + } + +#ifdef HAVE_DNSSD + for (a = (cupsd_alias_t *)cupsArrayFirst(DNSSDAlias); + a; + a = (cupsd_alias_t *)cupsArrayNext(DNSSDAlias)) + { + /* + * "ServerAlias *" allows all host values through... + */ + + if (!strcmp(a->name, "*")) + return (1); + + if (!strncasecmp(host, a->name, a->namelen)) + { + /* + * Prefix matches; check the character at the end - it must be ":", ".", + * ".:", or nul... + */ + + end = host + a->namelen; + + if (!*end || *end == ':' || (*end == '.' && (!end[1] || end[1] == ':'))) + return (1); + } + } +#endif /* HAVE_DNSSD */ + + /* + * Check for interface hostname matches... + */ + + for (netif = (cupsd_netif_t *)cupsArrayFirst(NetIFList); + netif; + netif = (cupsd_netif_t *)cupsArrayNext(NetIFList)) + { + if (!strncasecmp(host, netif->hostname, netif->hostlen)) + { + /* + * Prefix matches; check the character at the end - it must be ":", ".", + * ".:", or nul... + */ + + end = host + netif->hostlen; + + if (!*end || *end == ':' || (*end == '.' && (!end[1] || end[1] == ':'))) + return (1); + } + } + + return (0); +} + + /* * 'write_file()' - Send a file via HTTP. */ diff --git a/scheduler/client.h b/scheduler/client.h index 0ad9b1d19..f807e9c10 100644 --- a/scheduler/client.h +++ b/scheduler/client.h @@ -54,11 +54,10 @@ struct cupsd_client_s char servername[256];/* Server name for connection */ int serverport; /* Server port for connection */ #ifdef HAVE_GSSAPI - int gss_have_creds; /* Have authenticated credentials */ + gss_cred_id_t gss_creds; /* Credentials from client header */ + unsigned gss_flags; /* Credential flags */ gss_buffer_desc gss_output_token; /* Output token for Negotiate header */ - gss_cred_id_t gss_delegated_cred; - /* Credentials from client header */ #endif /* HAVE_GSSAPI */ #ifdef HAVE_AUTHORIZATION_H AuthorizationRef authref; /* Authorization ref */ diff --git a/scheduler/conf.c b/scheduler/conf.c index 617291a7c..a020fa610 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -14,13 +14,15 @@ * * Contents: * + * cupsdAddAlias() - Add a host alias. * cupsdCheckPermissions() - Fix the mode and ownership of a file or * directory. + * cupsdFreeAliases() - Free all of the alias entries. * cupsdReadConfiguration() - Read the cupsd.conf file. * get_address() - Get an address + port number from a line. * get_addr_and_mask() - Get an IP address and netmask. - * parse_aaa() - Parse authentication, authorization, and - * access control lines. + * parse_aaa() - Parse authentication, authorization, and access + * control lines. * parse_fatal_errors() - Parse FatalErrors values in a string. * parse_groups() - Parse system group names in a string. * parse_protocols() - Parse browse protocols in a string. @@ -116,9 +118,6 @@ static const cupsd_var_t variables[] = { "FilterLimit", &FilterLimit, CUPSD_VARTYPE_INTEGER }, { "FilterNice", &FilterNice, CUPSD_VARTYPE_INTEGER }, { "FontPath", &FontPath, CUPSD_VARTYPE_STRING }, -#ifdef HAVE_GSSAPI - { "GSSServiceName", &GSSServiceName, CUPSD_VARTYPE_STRING }, -#endif /* HAVE_GSSAPI */ { "HideImplicitMembers", &HideImplicitMembers, CUPSD_VARTYPE_BOOLEAN }, { "ImplicitClasses", &ImplicitClasses, CUPSD_VARTYPE_BOOLEAN }, { "ImplicitAnyClasses", &ImplicitAnyClasses, CUPSD_VARTYPE_BOOLEAN }, @@ -198,6 +197,7 @@ static const unsigned zeros[4] = /* * Local functions... */ + static http_addrlist_t *get_address(const char *value, int defport); static int get_addr_and_mask(const char *value, unsigned *ip, unsigned *mask); @@ -211,6 +211,30 @@ static int read_location(cups_file_t *fp, char *name, int linenum); static int read_policy(cups_file_t *fp, char *name, int linenum); +/* + * 'cupsdAddAlias()' - Add a host alias. + */ + +void +cupsdAddAlias(cups_array_t *aliases, /* I - Array of aliases */ + const char *name) /* I - Name to add */ +{ + cupsd_alias_t *a; /* New alias */ + size_t namelen; /* Length of name */ + + + namelen = strlen(name); + + if ((a = (cupsd_alias_t *)malloc(sizeof(cupsd_alias_t) + namelen)) == NULL) + return; + + a->namelen = namelen; + strcpy(a->name, name); /* OK since a->name is allocated */ + + cupsArrayAdd(aliases, a); +} + + /* * 'cupsdCheckPermissions()' - Fix the mode and ownership of a file or directory. */ @@ -362,6 +386,25 @@ cupsdCheckPermissions( } +/* + * 'cupsdFreeAliases()' - Free all of the alias entries. + */ + +void +cupsdFreeAliases(cups_array_t *aliases) /* I - Array of aliases */ +{ + cupsd_alias_t *a; /* Current alias */ + + + for (a = (cupsd_alias_t *)cupsArrayFirst(aliases); + a; + a = (cupsd_alias_t *)cupsArrayNext(aliases)) + free(a); + + cupsArrayDelete(aliases); +} + + /* * 'cupsdReadConfiguration()' - Read the cupsd.conf file. */ @@ -434,6 +477,9 @@ cupsdReadConfiguration(void) * String options... */ + cupsdFreeAliases(ServerAlias); + ServerAlias = NULL; + cupsdClearString(&ServerName); cupsdClearString(&ServerAdmin); cupsdSetString(&ServerBin, CUPS_SERVERBIN); @@ -453,9 +499,6 @@ cupsdReadConfiguration(void) cupsdSetString(&RemoteRoot, "remroot"); cupsdSetString(&ServerHeader, "CUPS/1.4"); cupsdSetString(&StateDir, CUPS_STATEDIR); -#ifdef HAVE_GSSAPI - cupsdSetString(&GSSServiceName, CUPS_DEFAULT_GSSSERVICENAME); -#endif /* HAVE_GSSAPI */ if (!strcmp(CUPS_DEFAULT_PRINTCAP, "/etc/printers.conf")) PrintcapFormat = PRINTCAP_SOLARIS; @@ -673,9 +716,7 @@ cupsdReadConfiguration(void) if (!ServerName) { - if (HostNameLookups || RemoteAccessEnabled) - httpGetHostname(NULL, temp, sizeof(temp)); - else if (gethostname(temp, sizeof(temp))) + if (gethostname(temp, sizeof(temp))) { cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get hostname: %s", strerror(errno)); @@ -683,6 +724,50 @@ cupsdReadConfiguration(void) } cupsdSetString(&ServerName, temp); + + if (!ServerAlias) + ServerAlias = cupsArrayNew(NULL, NULL); + + cupsdAddAlias(ServerAlias, temp); + cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp); + + if (HostNameLookups || RemoteAccessEnabled) + { + struct hostent *host; /* Host entry to get FQDN */ + + if ((host = gethostbyname(temp)) != NULL) + { + if (strcasecmp(temp, host->h_name)) + { + cupsdSetString(&ServerName, host->h_name); + cupsdAddAlias(ServerAlias, host->h_name); + cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", + host->h_name); + } + + if (host->h_aliases) + { + for (i = 0; host->h_aliases[i]; i ++) + if (strcasecmp(temp, host->h_aliases[i])) + { + cupsdAddAlias(ServerAlias, host->h_aliases[i]); + cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", + host->h_aliases[i]); + } + } + } + } + + /* + * Make sure we have the base hostname added as an alias, too! + */ + + if ((slash = strchr(temp, '.')) != NULL) + { + *slash = '\0'; + cupsdAddAlias(ServerAlias, temp); + cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp); + } } for (slash = ServerName; isdigit(*slash & 255) || *slash == '.'; slash ++); @@ -3035,19 +3120,6 @@ read_configuration(cups_file_t *fp) /* I - File to read from */ } } #endif /* HAVE_SSL */ -#ifdef HAVE_GSSAPI - else if (!strcasecmp(line, "Krb5Keytab") && value) - { - cupsdSetStringf(&Krb5Keytab, "KRB5_KTNAME=%s", value); - putenv(Krb5Keytab); - -# ifdef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY - gsskrb5_register_acceptor_identity(value); -# else - cupsdSetEnv("KRB5_KTNAME", value); -# endif /* HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY */ - } -#endif /* HAVE_GSSAPI */ else if (!strcasecmp(line, "User") && value) { /* @@ -3272,6 +3344,13 @@ read_configuration(cups_file_t *fp) /* I - File to read from */ break; } } + else if (!strcasecmp(line, "ServerAlias") && value) + { + if (!ServerAlias) + ServerAlias = cupsArrayNew(NULL, NULL); + + cupsdAddAlias(ServerAlias, value); + } else if (!strcasecmp(line, "SetEnv") && value) { /* diff --git a/scheduler/conf.h b/scheduler/conf.h index 8139c8b48..d91bca359 100644 --- a/scheduler/conf.h +++ b/scheduler/conf.h @@ -81,6 +81,17 @@ typedef enum #define CUPSD_SSL_NOEMPTY 1 /* Do not insert empty fragments */ +/* + * ServerAlias data... + */ + +typedef struct +{ + size_t namelen; /* Length of alias name */ + char name[1]; /* Alias name */ +} cupsd_alias_t; + + /* * Globals... */ @@ -101,6 +112,8 @@ VAR char *ConfigurationFile VALUE(NULL), /* Directory for request files */ *DocumentRoot VALUE(NULL); /* Root directory for documents */ +VAR cups_array_t *ServerAlias VALUE(NULL); + /* Alias names for server */ VAR int RemoteAccessEnabled VALUE(0), /* Are we listening on non-local addresses? */ ServerNameIsIP VALUE(0); @@ -147,12 +160,6 @@ VAR char *AccessLog VALUE(NULL), /* Remote root user */ *Classification VALUE(NULL); /* Classification of system */ -#ifdef HAVE_GSSAPI -VAR char *GSSServiceName VALUE(NULL); - /* GSS service name */ -VAR char *Krb5Keytab VALUE(NULL); - /* Kerberos Keytab */ -#endif /* HAVE_GSSAPI */ VAR uid_t User VALUE(1); /* User ID for server */ VAR gid_t Group VALUE(0); @@ -265,10 +272,12 @@ VAR char *SystemGroupAuthKey VALUE(NULL); * Prototypes... */ +extern void cupsdAddAlias(cups_array_t *aliases, const char *name); extern int cupsdCheckPermissions(const char *filename, const char *suffix, int mode, int user, int group, int is_dir, int create_dir); +extern void cupsdFreeAliases(cups_array_t *aliases); extern char *cupsdGetDateTime(struct timeval *t, cupsd_time_t format); #ifdef HAVE_GSSAPI extern int cupsdLogGSSMessage(int level, int major_status, diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c index c73e99a14..c9bad58ec 100644 --- a/scheduler/dirsvc.c +++ b/scheduler/dirsvc.c @@ -38,6 +38,7 @@ * cupsdUpdateLDAPBrowse() - Scan for new printers via LDAP... * cupsdUpdateSLPBrowse() - Get browsing information via SLP. * dequote() - Remote quotes from a string. + * dnssdAddAlias() - Add a DNS-SD alias name. * dnssdBuildTxtRecord() - Build a TXT record from printer info. * dnssdComparePrinters() - Compare the registered names of two printers. * dnssdDeregisterPrinter() - Stop sending broadcast information for a @@ -155,6 +156,10 @@ static void update_smb(int onoff); #ifdef HAVE_DNSSD +# ifdef HAVE_COREFOUNDATION +static void dnssdAddAlias(const void *key, const void *value, + void *context); +# endif /* HAVE_COREFOUNDATION */ static char *dnssdBuildTxtRecord(int *txt_len, cupsd_printer_t *p, int for_lpd); static int dnssdComparePrinters(cupsd_printer_t *a, cupsd_printer_t *b); @@ -1896,6 +1901,7 @@ cupsdUpdateDNSSDName(void) char webif[1024]; /* Web interface share name */ #ifdef HAVE_COREFOUNDATION_H SCDynamicStoreRef sc; /* Context for dynamic store */ + CFDictionaryRef btmm; /* Back-to-My-Mac domains */ CFStringRef nameRef; /* Computer name CFString */ char nameBuffer[1024]; /* C-string buffer */ CFStringEncoding nameEncoding; /* Computer name encoding */ @@ -1907,6 +1913,7 @@ cupsdUpdateDNSSDName(void) * enabled... */ + if (!DNSSDPort) return; @@ -1919,17 +1926,59 @@ cupsdUpdateDNSSDName(void) if (sc) { + /* + * Get the computer name from the dynamic store... + */ + + cupsdClearString(&DNSSDName); + if ((nameRef = SCDynamicStoreCopyComputerName(sc, &nameEncoding)) != NULL) { if (CFStringGetCString(nameRef, nameBuffer, sizeof(nameBuffer), kCFStringEncodingUTF8)) + { + cupsdLogMessage(CUPSD_LOG_DEBUG, + "Dynamic store computer name is \"%s\".", nameBuffer); cupsdSetString(&DNSSDName, nameBuffer); + } CFRelease(nameRef); } - else + + if (!DNSSDName) + { + /* + * Use the ServerName instead... + */ + + cupsdLogMessage(CUPSD_LOG_DEBUG, + "Using ServerName \"%s\" as computer name.", ServerName); cupsdSetString(&DNSSDName, ServerName); + } + + /* + * Get any Back-to-My-Mac domains and add them as aliases... + */ + + cupsdFreeAliases(DNSSDAlias); + DNSSDAlias = NULL; + + btmm = SCDynamicStoreCopyValue(sc, CFSTR("Setup:/Network/BackToMyMac")); + if (btmm && CFGetTypeID(btmm) == CFDictionaryGetTypeID()) + { + cupsdLogMessage(CUPSD_LOG_DEBUG, "%d Back to My Mac aliases to add.", + (int)CFDictionaryGetCount(btmm)); + CFDictionaryApplyFunction(btmm, dnssdAddAlias, NULL); + } + else if (btmm) + cupsdLogMessage(CUPSD_LOG_ERROR, + "Bad Back to My Mac data in dynamic store!"); + else + cupsdLogMessage(CUPSD_LOG_DEBUG, "No Back to My Mac aliases to add."); + + if (btmm) + CFRelease(btmm); CFRelease(sc); } @@ -2206,6 +2255,41 @@ dequote(char *d, /* I - Destination string */ #ifdef HAVE_DNSSD +# ifdef HAVE_COREFOUNDATION +/* + * 'dnssdAddAlias()' - Add a DNS-SD alias name. + */ + +static void +dnssdAddAlias(const void *key, /* I - Key */ + const void *value, /* I - Value (domain) */ + void *context) /* I - Unused */ +{ + char valueStr[1024], /* Domain string */ + hostname[1024]; /* Complete hostname */ + + + (void)context; + + if (CFGetTypeID((CFStringRef)value) == CFStringGetTypeID() && + CFStringGetCString((CFStringRef)value, valueStr, sizeof(valueStr), + kCFStringEncodingUTF8)) + { + snprintf(hostname, sizeof(hostname), "%s.%s", DNSSDName, valueStr); + if (!DNSSDAlias) + DNSSDAlias = cupsArrayNew(NULL, NULL); + + cupsdAddAlias(DNSSDAlias, hostname); + cupsdLogMessage(CUPSD_LOG_DEBUG, "Added Back to My Mac ServerAlias %s", + hostname); + } + else + cupsdLogMessage(CUPSD_LOG_ERROR, + "Bad Back to My Mac domain in dynamic store!"); +} +# endif /* HAVE_COREFOUNDATION */ + + /* * 'dnssdBuildTxtRecord()' - Build a TXT record from printer info. */ diff --git a/scheduler/dirsvc.h b/scheduler/dirsvc.h index 8dfc2d585..1fae4d3cc 100644 --- a/scheduler/dirsvc.h +++ b/scheduler/dirsvc.h @@ -4,7 +4,7 @@ * Directory services definitions for the Common UNIX Printing System * (CUPS) scheduler. * - * Copyright 2007-2008 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -135,6 +135,8 @@ VAR cupsd_statbuf_t *PollStatusBuffer VALUE(NULL); #ifdef HAVE_DNSSD VAR char *DNSSDName VALUE(NULL); /* Computer/server name */ +VAR cups_array_t *DNSSDAlias VALUE(NULL); + /* List of dynamic ServerAlias's */ VAR int DNSSDPort VALUE(0); /* Port number to register */ VAR cups_array_t *DNSSDPrinters VALUE(NULL); diff --git a/scheduler/ipp.c b/scheduler/ipp.c index d2ece64c4..536430140 100644 --- a/scheduler/ipp.c +++ b/scheduler/ipp.c @@ -7615,6 +7615,7 @@ get_printers(cupsd_client_t *con, /* I - Client connection */ const char *username; /* Current user */ char *first_printer_name; /* first-printer-name attribute */ cups_array_t *ra; /* Requested attributes array */ + int local; /* Local connection? */ cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_printers(%p[%d], %x)", con, @@ -7672,6 +7673,8 @@ get_printers(cupsd_client_t *con, /* I - Client connection */ else printer_mask = 0; + local = httpAddrLocalhost(&(con->clientaddr)); + if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL) location = attr->values[0].string.text; @@ -7704,6 +7707,9 @@ get_printers(cupsd_client_t *con, /* I - Client connection */ count < limit && printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers)) { + if (!local && !printer->shared) + continue; + if ((!type || (printer->type & CUPS_PRINTER_CLASS) == type) && (printer->type & printer_mask) == printer_type && (!location || @@ -9582,7 +9588,7 @@ save_auth_info( cupsFileClose(fp); #if defined(HAVE_GSSAPI) && defined(HAVE_KRB5_H) - if (con->gss_have_creds) + if (con->gss_creds) save_krb5_creds(con, job); else if (job->ccname) cupsdClearString(&(job->ccname)); @@ -9599,121 +9605,26 @@ static void save_krb5_creds(cupsd_client_t *con, /* I - Client connection */ cupsd_job_t *job) /* I - Job */ { -# if !defined(HAVE_KRB5_CC_NEW_UNIQUE) && !defined(HAVE_HEIMDAL) - cupsdLogMessage(CUPSD_LOG_INFO, - "Sorry, your version of Kerberos does not support delegated " - "credentials!"); - return; - -# else - krb5_error_code error; /* Kerberos error code */ - OM_uint32 major_status, /* Major status code */ - minor_status; /* Minor status code */ - krb5_principal principal; /* Kerberos principal */ - - -# ifdef __APPLE__ /* - * If the weak-linked GSSAPI/Kerberos library is not present, don't try - * to use it... + * Get the credentials... */ - if (krb5_init_context == NULL) - return; -# endif /* __APPLE__ */ - - if (!KerberosInitialized) - { - /* - * Setup a Kerberos context for the scheduler to use... - */ - - KerberosInitialized = 1; - - if (krb5_init_context(&KerberosContext)) - { - KerberosContext = NULL; - - cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize Kerberos context"); - return; - } - } - - /* - * We MUST create a file-based cache because memory-based caches are - * only valid for the current process/address space. - * - * Due to various bugs/features in different versions of Kerberos, we - * need either the krb5_cc_new_unique() function or Heimdal's version - * of krb5_cc_gen_new() to create a new FILE: credential cache that - * can be passed to the backend. These functions create a temporary - * file (typically in /tmp) containing the cached credentials, which - * are removed when we have successfully printed a job. - */ - -# ifdef HAVE_KRB5_CC_NEW_UNIQUE - if ((error = krb5_cc_new_unique(KerberosContext, "FILE", NULL, - &(job->ccache))) != 0) -# else /* HAVE_HEIMDAL */ - if ((error = krb5_cc_gen_new(KerberosContext, &krb5_fcc_ops, - &(job->ccache))) != 0) -# endif /* HAVE_KRB5_CC_NEW_UNIQUE */ - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unable to create new credentials cache (%d/%s)", - error, strerror(errno)); - job->ccache = NULL; - return; - } - - if ((error = krb5_parse_name(KerberosContext, con->username, &principal)) != 0) - { - cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to parse kerberos username (%d/%s)", - error, strerror(errno)); - krb5_cc_destroy(KerberosContext, job->ccache); - job->ccache = NULL; - return; - } - - if ((error = krb5_cc_initialize(KerberosContext, job->ccache, principal))) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unable to initialize credentials cache (%d/%s)", error, - strerror(errno)); - krb5_cc_destroy(KerberosContext, job->ccache); - krb5_free_principal(KerberosContext, principal); - job->ccache = NULL; - return; - } - - krb5_free_principal(KerberosContext, principal); - - /* - * Copy the user's credentials to the new cache file... - */ - - major_status = gss_krb5_copy_ccache(&minor_status, con->gss_delegated_cred, - job->ccache); - - if (GSS_ERROR(major_status)) - { - cupsdLogGSSMessage(CUPSD_LOG_ERROR, major_status, minor_status, - "Unable to import client credentials cache"); - krb5_cc_destroy(KerberosContext, job->ccache); - job->ccache = NULL; - return; - } + job->ccache = cupsdCopyKrb5Creds(con); /* * Add the KRB5CCNAME environment variable to the job so that the * backend can use the credentials when printing. */ - cupsdSetStringf(&(job->ccname), "KRB5CCNAME=FILE:%s", - krb5_cc_get_name(KerberosContext, job->ccache)); + if (job->ccache) + { + cupsdSetStringf(&(job->ccname), "KRB5CCNAME=FILE:%s", + krb5_cc_get_name(KerberosContext, job->ccache)); - cupsdLogJob(job, CUPSD_LOG_DEBUG2, "save_krb5_creds: %s", job->ccname); -# endif /* HAVE_KRB5_CC_NEW_UNIQUE || HAVE_HEIMDAL */ + cupsdLogJob(job, CUPSD_LOG_DEBUG2, "save_krb5_creds: %s", job->ccname); + } + else + cupsdClearString(&(job->ccname)); } #endif /* HAVE_GSSAPI && HAVE_KRB5_H */ diff --git a/scheduler/job.c b/scheduler/job.c index d1be75f69..c0aa5b0d6 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -331,6 +331,14 @@ cupsdCheckJobs(void) "Job submission timed out."); } + /* + * Continue jobs that are waiting on the FilterLimit... + */ + + if (job->pending_cost > 0 && + ((FilterLevel + job->pending_cost) < FilterLimit || FilterLevel == 0)) + cupsdContinueJob(job); + /* * Start pending jobs if the destination is available... */ @@ -441,7 +449,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ { int i; /* Looping var */ int slot; /* Pipe slot */ - cups_array_t *filters, /* Filters for job */ + cups_array_t *filters = NULL,/* Filters for job */ *prefilters; /* Filters with prefilters */ mime_filter_t *filter, /* Current filter */ *prefilter, /* Prefilter */ @@ -450,13 +458,16 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ ipp_attribute_t *attr; /* Current attribute */ const char *ptr, /* Pointer into value */ *abort_message; /* Abort message */ + ipp_jstate_t abort_state = IPP_JOB_ABORTED; + /* New job state on abort */ struct stat backinfo; /* Backend file information */ int backroot; /* Run backend as root? */ int pid; /* Process ID of new filter process */ int banner_page; /* 1 if banner page, 0 otherwise */ - int filterfds[2][2];/* Pipes used between filters */ + int filterfds[2][2] = { { -1, -1 }, { -1, -1 } }; + /* Pipes used between filters */ int envc; /* Number of environment variables */ - char **argv, /* Filter command-line arguments */ + char **argv = NULL, /* Filter command-line arguments */ filename[1024], /* Job filename */ command[1024], /* Full path to command */ jobid[255], /* Job ID string */ @@ -503,7 +514,11 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ FilterLevel -= job->cost; - filters = NULL; + job->cost = 0; + job->pending_cost = 0; + + memset(job->filters, 0, sizeof(job->filters)); + if (job->printer->raw) { @@ -513,8 +528,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Sending job to queue tagged as raw..."); - - filters = NULL; } else { @@ -531,13 +544,8 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ "Unable to convert file %d to printable format!", job->current_file); - job->current_file ++; - - if (job->current_file == job->num_files) - cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT, - "Aborting job because it cannot be printed."); - - return; + abort_message = "Aborting job because it cannot be printed."; + goto abort_job; } /* @@ -611,6 +619,9 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ "cupsdContinueJob: file=%d, cost=%d, level=%d, limit=%d", job->current_file, job->cost, FilterLevel, FilterLimit); + + job->pending_cost = job->cost; + job->cost = 0; return; } @@ -638,12 +649,10 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ cupsArrayDelete(filters); - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, - "Stopping job because the scheduler ran out of " - "memory."); + abort_state = IPP_JOB_STOPPED; + abort_message = "Stopping job because the scheduler ran out of memory."; - FilterLevel -= job->cost; - return; + goto abort_job; } } @@ -672,14 +681,10 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ cupsdLogJob(job, CUPSD_LOG_DEBUG, "Unable to add port monitor - %s", strerror(errno)); - cupsArrayDelete(filters); - - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, - "Stopping job because the scheduler ran out of " - "memory."); + abort_state = IPP_JOB_STOPPED; + abort_message = "Stopping job because the scheduler ran out of memory."; - FilterLevel -= job->cost; - return; + goto abort_job; } } @@ -693,13 +698,8 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ "Too many filters (%d > %d), unable to print!", cupsArrayCount(filters), MAX_FILTERS); - cupsArrayDelete(filters); - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, - "Stopping job because it needs too many filters to " - "print."); - - FilterLevel -= job->cost; - return; + abort_message = "Aborting job because it needs too many filters to print."; + goto abort_job; } /* @@ -739,12 +739,10 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ if ((options = get_options(job, banner_page, copies, sizeof(copies), title, sizeof(title))) == NULL) { - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, - "Stopping job because the scheduler ran out of memory."); - cupsArrayDelete(filters); + abort_state = IPP_JOB_STOPPED; + abort_message = "Stopping job because the scheduler ran out of memory."; - FilterLevel -= job->cost; - return; + goto abort_job; } /* @@ -774,12 +772,11 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ { cupsdLogMessage(CUPSD_LOG_DEBUG, "Unable to allocate argument array - %s", strerror(errno)); - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, - "Stopping job because the scheduler ran out of memory."); - cupsArrayDelete(filters); - FilterLevel -= job->cost; - return; + abort_state = IPP_JOB_STOPPED; + abort_message = "Stopping job because the scheduler ran out of memory."; + + goto abort_job; } sprintf(jobid, "%d", job->id); @@ -966,13 +963,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ * Now create processes for all of the filters... */ - filterfds[0][0] = -1; - filterfds[0][1] = -1; - filterfds[1][0] = -1; - filterfds[1][1] = -1; - - memset(job->filters, 0, sizeof(job->filters)); - for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters); filter; i ++, filter = (mime_filter_t *)cupsArrayNext(filters)) @@ -1165,8 +1155,10 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ * the missing and insecure warnings... */ - cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning," - "cups-insecure-filter-warning"); + if (cupsdSetPrinterReasons(job->printer, "-cups-missing-filter-warning," + "cups-insecure-filter-warning")) + cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL, + "Printer drivers now functional."); return; @@ -1178,25 +1170,50 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */ abort_job: + FilterLevel -= job->cost; + job->cost = 0; + for (slot = 0; slot < 2; slot ++) cupsdClosePipe(filterfds[slot]); + cupsArrayDelete(filters); + + if (argv) + { + if (job->printer->remote && job->num_files > 1) + { + for (i = 0; i < job->num_files; i ++) + free(argv[i + 6]); + } + + free(argv); + } + + cupsdClosePipe(job->print_pipes); + cupsdClosePipe(job->back_pipes); + cupsdClosePipe(job->side_pipes); + + cupsdRemoveSelect(job->status_pipes[0]); cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; - cupsArrayDelete(filters); + /* + * Update the printer and job state. + */ - if (job->printer->remote && job->num_files > 1) - { - for (i = 0; i < job->num_files; i ++) - free(argv[i + 6]); - } + cupsdSetJobState(job, abort_state, CUPSD_JOB_DEFAULT, "%s", abort_message); + cupsdSetPrinterState(job->printer, IPP_PRINTER_IDLE, 0); + update_job_attrs(job, 0); - free(argv); + cupsArrayRemove(PrintingJobs, job); - cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, "%s", - abort_message); + /* + * Clear the printer <-> job association... + */ + + job->printer->job = NULL; + job->printer = NULL; } @@ -2359,6 +2376,13 @@ cupsdSetJobState( break; } + /* + * Finalize the job immediately if we forced things... + */ + + if (action == CUPSD_JOB_FORCE) + finalize_job(job); + /* * Update the server "busy" state... */ @@ -2494,13 +2518,12 @@ finalize_job(cupsd_job_t *job) /* I - Job */ * Close pipes and status buffer... */ - cupsdRemoveSelect(job->status_buffer->fd); - cupsdClosePipe(job->print_pipes); cupsdClosePipe(job->back_pipes); cupsdClosePipe(job->side_pipes); - cupsdClosePipe(job->status_pipes); + cupsdRemoveSelect(job->status_pipes[0]); + cupsdClosePipe(job->status_pipes); cupsdStatBufDelete(job->status_buffer); job->status_buffer = NULL; diff --git a/scheduler/job.h b/scheduler/job.h index 498cddb09..92a4b26ac 100644 --- a/scheduler/job.h +++ b/scheduler/job.h @@ -63,6 +63,7 @@ typedef struct cupsd_job_s int status_level; /* Highest log level in a status * message */ int cost; /* Filtering cost */ + int pending_cost; /* Waiting for FilterLimit */ int filters[MAX_FILTERS + 1]; /* Filter process IDs, 0 terminated */ int backend; /* Backend process ID */ diff --git a/scheduler/log.c b/scheduler/log.c index f3bfd08bd..a6ac179aa 100644 --- a/scheduler/log.c +++ b/scheduler/log.c @@ -525,7 +525,8 @@ cupsdLogRequest(cupsd_client_t *con, /* I - Request to log */ return (1); if (con->request && con->response && - con->response->request.status.status_code < IPP_REDIRECTION_OTHER_SITE) + (con->response->request.status.status_code < IPP_REDIRECTION_OTHER_SITE || + con->response->request.status.status_code == IPP_NOT_FOUND)) { /* * Check successful requests... diff --git a/scheduler/main.c b/scheduler/main.c index 9d6b8f8d6..f90e74545 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -1718,16 +1718,21 @@ process_children(void) else job->status = -status; /* Backend failed */ - if ((!(job->printer->type & CUPS_PRINTER_FAX) || job->filters[i]) && - job->status_level > CUPSD_LOG_ERROR) + if (job->status_level > CUPSD_LOG_ERROR) { job->status_level = CUPSD_LOG_ERROR; - snprintf(job->printer->state_message, - sizeof(job->printer->state_message), "%s failed", name); - cupsdAddPrinterHistory(job->printer); + if (job->printer) + { + snprintf(job->printer->state_message, + sizeof(job->printer->state_message), "%s failed", name); + cupsdAddPrinterHistory(job->printer); + } + + if (!job->attrs) + cupsdLoadJob(job); - if (!job->printer_message) + if (!job->printer_message && job->attrs) { if ((job->printer_message = ippFindAttribute(job->attrs, "job-printer-state-message", @@ -1738,8 +1743,9 @@ process_children(void) NULL, ""); } - cupsdSetString(&(job->printer_message->values[0].string.text), - job->printer->state_message); + if (job->printer_message) + cupsdSetString(&(job->printer_message->values[0].string.text), + job->printer->state_message); } } diff --git a/scheduler/network.c b/scheduler/network.c index e35c2f0fc..22634d343 100644 --- a/scheduler/network.c +++ b/scheduler/network.c @@ -101,6 +101,7 @@ cupsdNetIFUpdate(void) struct ifaddrs *addrs, /* Interface address list */ *addr; /* Current interface address */ char hostname[1024]; /* Hostname for address */ + size_t hostlen; /* Length of hostname */ /* @@ -176,8 +177,8 @@ cupsdNetIFUpdate(void) * Create a new address element... */ - if ((temp = calloc(1, sizeof(cupsd_netif_t) + - strlen(hostname))) == NULL) + hostlen = strlen(hostname); + if ((temp = calloc(1, sizeof(cupsd_netif_t) + hostlen)) == NULL) break; /* @@ -185,6 +186,7 @@ cupsdNetIFUpdate(void) */ strlcpy(temp->name, addr->ifa_name, sizeof(temp->name)); + temp->hostlen = hostlen; strcpy(temp->hostname, hostname); /* Safe because hostname is allocated */ if (addr->ifa_addr->sa_family == AF_INET) diff --git a/scheduler/network.h b/scheduler/network.h index dd38e2114..bbb081ade 100644 --- a/scheduler/network.h +++ b/scheduler/network.h @@ -4,7 +4,7 @@ * Network interface definitions for the Common UNIX Printing System * (CUPS) scheduler. * - * Copyright 2007 by Apple Inc. + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the @@ -25,6 +25,7 @@ typedef struct cupsd_netif_s /**** Network interface data ****/ http_addr_t address, /* Network address */ mask, /* Network mask */ broadcast; /* Broadcast address */ + size_t hostlen; /* Length of hostname */ char name[32], /* Network interface name */ hostname[1]; /* Hostname associated with interface */ } cupsd_netif_t; diff --git a/scheduler/printers.c b/scheduler/printers.c index b8cef369f..6b5a70533 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c @@ -692,7 +692,12 @@ cupsdDeletePrinter( * Stop printing on this printer... */ - cupsdStopPrinter(p, update); + cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, update); + + if (p->job) + cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE, + update ? "Job stopped due to printer being deleted." : + "Job stopped."); /* * If this printer is the next for browsing, point to the next one... @@ -2663,12 +2668,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */ * 'cupsdSetPrinterReasons()' - Set/update the reasons strings. */ -void +int /* O - 1 if something changed, 0 otherwise */ cupsdSetPrinterReasons( cupsd_printer_t *p, /* I - Printer */ const char *s) /* I - Reasons strings */ { - int i; /* Looping var */ + int i, /* Looping var */ + changed = 0; /* Did something change? */ const char *sptr; /* Pointer into reasons */ char reason[255], /* Reason string */ *rptr; /* Pointer into reason */ @@ -2697,6 +2703,7 @@ cupsdSetPrinterReasons( _cupsStrFree(p->reasons[i]); p->num_reasons = 0; + changed = 1; cupsdMarkDirty(CUPSD_DIRTY_PRINTERS); @@ -2705,7 +2712,7 @@ cupsdSetPrinterReasons( } if (!strcmp(s, "none")) - return; + return (changed); /* * Loop through all of the reasons... @@ -2743,6 +2750,7 @@ cupsdSetPrinterReasons( */ p->num_reasons --; + changed = 1; _cupsStrFree(p->reasons[i]); if (i < p->num_reasons) @@ -2778,11 +2786,12 @@ cupsdSetPrinterReasons( cupsdLogMessage(CUPSD_LOG_ALERT, "Too many printer-state-reasons values for %s (%d)", p->name, i + 1); - return; + return (changed); } p->reasons[i] = _cupsStrAlloc(reason); p->num_reasons ++; + changed = 1; if (!strcmp(reason, "paused") && p->state != IPP_PRINTER_STOPPED) cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, 1); @@ -2795,6 +2804,8 @@ cupsdSetPrinterReasons( } } } + + return (changed); } @@ -3578,6 +3589,8 @@ add_printer_filter( if (stat(filename, &fileinfo)) { + memset(&fileinfo, 0, sizeof(fileinfo)); + snprintf(p->state_message, sizeof(p->state_message), "Filter \"%s\" for printer \"%s\" not available: %s", filename, p->name, strerror(errno)); @@ -3585,8 +3598,6 @@ add_printer_filter( cupsdLogMessage(CUPSD_LOG_ERROR, "%s", p->state_message); } - else - memset(&fileinfo, 0, sizeof(fileinfo)); /* * When running as root, do additional security checks... @@ -4170,8 +4181,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ val->string.text = _cupsStrAlloc(output_bin->choices[i].choice); } - attr = ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, - "output-bin-default", NULL, output_bin->defchoice); + ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, + "output-bin-default", NULL, output_bin->defchoice); } /* diff --git a/scheduler/printers.h b/scheduler/printers.h index c7b26ee8c..127f9aa41 100644 --- a/scheduler/printers.h +++ b/scheduler/printers.h @@ -160,7 +160,7 @@ extern void cupsdSetDeviceURI(cupsd_printer_t *p, const char *uri); extern void cupsdSetPrinterAttr(cupsd_printer_t *p, const char *name, char *value); extern void cupsdSetPrinterAttrs(cupsd_printer_t *p); -extern void cupsdSetPrinterReasons(cupsd_printer_t *p, +extern int cupsdSetPrinterReasons(cupsd_printer_t *p, const char *s); extern void cupsdSetPrinterState(cupsd_printer_t *p, ipp_pstate_t s, int update); diff --git a/scheduler/process.c b/scheduler/process.c index 1b587ca31..53767053f 100644 --- a/scheduler/process.c +++ b/scheduler/process.c @@ -287,11 +287,16 @@ cupsdStartProcess( strerror(errno)); if (job && job->printer) - cupsdSetPrinterReasons(job->printer, "+cups-missing-filter-warning"); + { + if (cupsdSetPrinterReasons(job->printer, "+cups-missing-filter-warning")) + cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL, + "Printer driver %s is missing.", command); + } return (0); } - else if (commandinfo.st_mode & (S_ISUID | S_IWOTH)) + else if ((commandinfo.st_mode & (S_ISUID | S_IWOTH)) || + (!RunUser && commandinfo.st_uid)) { *pid = 0; @@ -306,7 +311,12 @@ cupsdStartProcess( command, commandinfo.st_mode); if (job && job->printer) - cupsdSetPrinterReasons(job->printer, "+cups-insecure-filter-warning"); + { + if (cupsdSetPrinterReasons(job->printer, "+cups-insecure-filter-warning")) + cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL, + "Printer driver %s has insecure file permissions (0%o).", + command, commandinfo.st_mode); + } errno = EPERM; diff --git a/scheduler/sysman.c b/scheduler/sysman.c index be21df3d0..74f1a0342 100644 --- a/scheduler/sysman.c +++ b/scheduler/sysman.c @@ -216,6 +216,7 @@ static CFRunLoopRef SysEventRunloop = NULL; /* The runloop. Access must be protected! */ static CFStringRef ComputerNameKey = NULL, /* Computer name key */ + BTMMKey = NULL, /* Back to My Mac key */ NetworkGlobalKeyIPv4 = NULL, /* Network global IPv4 key */ NetworkGlobalKeyIPv6 = NULL, @@ -355,7 +356,7 @@ sysEventThreadEntry(void) SCDynamicStoreRef store = NULL;/* System Config dynamic store */ CFRunLoopSourceRef powerRLS = NULL,/* Power runloop source */ storeRLS = NULL;/* System Config runloop source */ - CFStringRef key[5], /* System Config keys */ + CFStringRef key[6], /* System Config keys */ pattern[2]; /* System Config patterns */ CFArrayRef keys = NULL, /* System Config key array*/ patterns = NULL;/* System Config pattern array */ @@ -391,43 +392,47 @@ sysEventThreadEntry(void) bzero(&storeContext, sizeof(storeContext)); storeContext.info = &threadData; - store = SCDynamicStoreCreate(NULL, CFSTR("cupsd"), + store = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("cupsd"), sysEventConfigurationNotifier, &storeContext); if (!ComputerNameKey) - ComputerNameKey = SCDynamicStoreKeyCreateComputerName(NULL); + ComputerNameKey = SCDynamicStoreKeyCreateComputerName(kCFAllocatorDefault); + + if (!BTMMKey) + BTMMKey = SCDynamicStoreKeyCreate(kCFAllocatorDefault, + CFSTR("Setup:/Network/BackToMyMac")); if (!NetworkGlobalKeyIPv4) NetworkGlobalKeyIPv4 = - SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, + SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv4); if (!NetworkGlobalKeyIPv6) NetworkGlobalKeyIPv6 = - SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, + SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv6); if (!NetworkGlobalKeyDNS) NetworkGlobalKeyDNS = - SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, + SCDynamicStoreKeyCreateNetworkGlobalEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetDNS); if (!HostNamesKey) - HostNamesKey = SCDynamicStoreKeyCreateHostNames(NULL); + HostNamesKey = SCDynamicStoreKeyCreateHostNames(kCFAllocatorDefault); if (!NetworkInterfaceKeyIPv4) NetworkInterfaceKeyIPv4 = - SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL, + SCDynamicStoreKeyCreateNetworkInterfaceEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCCompAnyRegex, kSCEntNetIPv4); if (!NetworkInterfaceKeyIPv6) NetworkInterfaceKeyIPv6 = - SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL, + SCDynamicStoreKeyCreateNetworkInterfaceEntity(kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCCompAnyRegex, kSCEntNetIPv6); @@ -437,27 +442,28 @@ sysEventThreadEntry(void) NetworkInterfaceKeyIPv4 && NetworkInterfaceKeyIPv6) { key[0] = ComputerNameKey; - key[1] = NetworkGlobalKeyIPv4; - key[2] = NetworkGlobalKeyIPv6; - key[3] = NetworkGlobalKeyDNS; - key[4] = HostNamesKey; + key[1] = BTMMKey; + key[2] = NetworkGlobalKeyIPv4; + key[3] = NetworkGlobalKeyIPv6; + key[4] = NetworkGlobalKeyDNS; + key[5] = HostNamesKey; pattern[0] = NetworkInterfaceKeyIPv4; pattern[1] = NetworkInterfaceKeyIPv6; - keys = CFArrayCreate(NULL, (const void **)key, - sizeof(key) / sizeof(key[0]), - &kCFTypeArrayCallBacks); + keys = CFArrayCreate(kCFAllocatorDefault, (const void **)key, + sizeof(key) / sizeof(key[0]), + &kCFTypeArrayCallBacks); - patterns = CFArrayCreate(NULL, (const void **)pattern, + patterns = CFArrayCreate(kCFAllocatorDefault, (const void **)pattern, sizeof(pattern) / sizeof(pattern[0]), &kCFTypeArrayCallBacks); if (keys && patterns && SCDynamicStoreSetNotificationKeys(store, keys, patterns)) { - if ((storeRLS = SCDynamicStoreCreateRunLoopSource(NULL, store, 0)) - != NULL) + if ((storeRLS = SCDynamicStoreCreateRunLoopSource(kCFAllocatorDefault, + store, 0)) != NULL) { CFRunLoopAddSource(CFRunLoopGetCurrent(), storeRLS, kCFRunLoopDefaultMode); @@ -491,7 +497,7 @@ sysEventThreadEntry(void) timerContext.info = &threadData; threadData.timerRef = - CFRunLoopTimerCreate(NULL, + CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + (86400L * 365L * 10L), 86400L * 365L * 10L, 0, 0, sysEventTimerNotifier, &timerContext); @@ -595,9 +601,9 @@ sysEventPowerNotifier( case kIOMessageSystemWillNotPowerOff: case kIOMessageSystemWillNotSleep: -#ifdef kIOMessageSystemWillPowerOn +# ifdef kIOMessageSystemWillPowerOn case kIOMessageSystemWillPowerOn: -#endif /* kIOMessageSystemWillPowerOn */ +# endif /* kIOMessageSystemWillPowerOn */ default: sendit = 0; break; @@ -634,7 +640,7 @@ sysEventPowerNotifier( /* - * 'sysEventConfigurationNotifier()' - Computer name changed notification + * 'sysEventConfigurationNotifier()' - Network configuration change notification * callback. */ @@ -653,7 +659,8 @@ sysEventConfigurationNotifier( CFRange range = CFRangeMake(0, CFArrayGetCount(changedKeys)); - if (CFArrayContainsValue(changedKeys, range, ComputerNameKey)) + if (CFArrayContainsValue(changedKeys, range, ComputerNameKey) || + CFArrayContainsValue(changedKeys, range, BTMMKey)) threadData->sysevent.event |= SYSEVENT_NAMECHANGED; else { @@ -845,7 +852,8 @@ sysUpdate(void) { if (!Sleeping) { - cupsdLogMessage(CUPSD_LOG_DEBUG, "Computer name changed"); + cupsdLogMessage(CUPSD_LOG_DEBUG, + "Computer name or BTMM domains changed"); /* * De-register the individual printers... @@ -857,7 +865,7 @@ sysUpdate(void) cupsdDeregisterPrinter(p, 1); /* - * Update the computer name... + * Update the computer name and BTMM domain list... */ cupsdUpdateDNSSDName(); @@ -876,7 +884,8 @@ sysUpdate(void) } else cupsdLogMessage(CUPSD_LOG_DEBUG, - "Computer name changed; ignored while sleeping"); + "Computer name or BTMM domains changed; ignored while " + "sleeping"); } } } diff --git a/systemv/Makefile b/systemv/Makefile index 58cc4ffa0..67cb557e1 100644 --- a/systemv/Makefile +++ b/systemv/Makefile @@ -3,7 +3,7 @@ # # System V commands makefile for the Common UNIX Printing System (CUPS). # -# Copyright 2007-2008 by Apple Inc. +# Copyright 2007-2009 by Apple Inc. # Copyright 1997-2006 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the @@ -49,7 +49,7 @@ unittests: clean: $(RM) $(OBJS) $(TARGETS) - $(RM) accept cupsdisable cupsenable cupsreject reject + $(RM) accept cupsdisable cupsenable cupsreject disable enable reject # @@ -79,27 +79,33 @@ install-data: # install-exec: + echo Installing System V admin printing commands in $(SBINDIR) $(INSTALL_DIR) -m 755 $(SBINDIR) - $(INSTALL_BIN) accept $(SBINDIR) - $(RM) $(SBINDIR)/reject - $(LN) accept $(SBINDIR)/reject + $(INSTALL_BIN) cupsaccept $(SBINDIR) $(INSTALL_BIN) cupsaddsmb $(SBINDIR) $(INSTALL_BIN) cupsctl $(SBINDIR) $(INSTALL_BIN) lpadmin $(SBINDIR) $(INSTALL_BIN) lpinfo $(SBINDIR) $(INSTALL_BIN) lpmove $(SBINDIR) + $(RM) $(SBINDIR)/accept + $(LN) cupsaccept $(SBINDIR)/accept + $(RM) $(SBINDIR)/cupsdisable + $(LN) cupsaccept $(SBINDIR)/cupsdisable + $(RM) $(SBINDIR)/cupsenable + $(LN) cupsaccept $(SBINDIR)/cupsenable + $(RM) $(SBINDIR)/cupsreject + $(LN) cupsaccept $(SBINDIR)/cupsreject + $(RM) $(SBINDIR)/reject + $(LN) cupsaccept $(SBINDIR)/reject + echo Installing System V user printing commands in $(BINDIR) $(INSTALL_DIR) -m 755 $(BINDIR) $(INSTALL_BIN) cancel $(BINDIR) $(INSTALL_BIN) cupstestdsc $(BINDIR) $(INSTALL_BIN) cupstestppd $(BINDIR) - $(RM) $(SBINDIR)/cupsaccept - $(LN) accept $(SBINDIR)/cupsaccept - $(RM) $(SBINDIR)/cupsdisable - $(LN) accept $(SBINDIR)/cupsdisable - $(RM) $(SBINDIR)/cupsenable - $(LN) accept $(SBINDIR)/cupsenable - $(RM) $(SBINDIR)/cupsreject - $(LN) accept $(SBINDIR)/cupsreject + $(RM) $(BINDIR)/disable + $(LN) cupsaccept $(BINDIR)/disable + $(RM) $(BINDIR)/enable + $(LN) cupsaccept $(BINDIR)/enable $(INSTALL_BIN) lp $(BINDIR) $(INSTALL_BIN) lpoptions $(BINDIR) $(INSTALL_BIN) lpstat $(BINDIR) @@ -134,12 +140,15 @@ uninstall: $(RM) $(BINDIR)/cancel $(RM) $(BINDIR)/cupstestdsc $(RM) $(BINDIR)/cupstestppd + $(RM) $(BINDIR)/disable + $(RM) $(BINDIR)/enable $(RM) $(BINDIR)/lp $(RM) $(BINDIR)/lpoptions $(RM) $(BINDIR)/lppasswd $(RM) $(BINDIR)/lpstat -$(RMDIR) $(BINDIR) $(RM) $(SBINDIR)/accept + $(RM) $(SBINDIR)/cupsaccept $(RM) $(SBINDIR)/cupsaddsmb $(RM) $(SBINDIR)/cupsaccept $(RM) $(SBINDIR)/cupsdisable @@ -168,7 +177,7 @@ cancel: cancel.o ../cups/$(LIBCUPS) cupsaccept: cupsaccept.o ../cups/$(LIBCUPS) echo Linking $@... $(CC) $(LDFLAGS) -o cupsaccept cupsaccept.o $(LIBS) - for file in accept cupsenable cupsdisable cupsreject reject; do \ + for file in accept cupsenable cupsdisable cupsreject disable enable reject; do \ $(RM) $$file; \ $(LN) cupsaccept $$file; \ done diff --git a/templates/de/header.tmpl.in b/templates/de/header.tmpl.in index fffe7aaa8..238f28dca 100644 --- a/templates/de/header.tmpl.in +++ b/templates/de/header.tmpl.in @@ -4,7 +4,7 @@ {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/de/help-printable.tmpl b/templates/de/help-printable.tmpl index a326d9762..08fff9ecd 100644 --- a/templates/de/help-printable.tmpl +++ b/templates/de/help-printable.tmpl @@ -4,7 +4,7 @@ {HELPTITLE} - + diff --git a/templates/es/header.tmpl.in b/templates/es/header.tmpl.in index 65013ebbb..b6c63b431 100644 --- a/templates/es/header.tmpl.in +++ b/templates/es/header.tmpl.in @@ -4,7 +4,7 @@ {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/es/help-printable.tmpl b/templates/es/help-printable.tmpl index a326d9762..08fff9ecd 100644 --- a/templates/es/help-printable.tmpl +++ b/templates/es/help-printable.tmpl @@ -4,7 +4,7 @@ {HELPTITLE} - + diff --git a/templates/header.tmpl.in b/templates/header.tmpl.in index f4214caed..a383725c5 100644 --- a/templates/header.tmpl.in +++ b/templates/header.tmpl.in @@ -4,7 +4,7 @@ {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/help-printable.tmpl b/templates/help-printable.tmpl index a326d9762..08fff9ecd 100644 --- a/templates/help-printable.tmpl +++ b/templates/help-printable.tmpl @@ -4,7 +4,7 @@ {HELPTITLE} - + diff --git a/templates/ja/header.tmpl.in b/templates/ja/header.tmpl.in index cf6cb468b..ec64a744d 100644 --- a/templates/ja/header.tmpl.in +++ b/templates/ja/header.tmpl.in @@ -4,7 +4,7 @@ {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/ja/help-printable.tmpl b/templates/ja/help-printable.tmpl index a326d9762..08fff9ecd 100644 --- a/templates/ja/help-printable.tmpl +++ b/templates/ja/help-printable.tmpl @@ -4,7 +4,7 @@ {HELPTITLE} - + diff --git a/templates/pl/header.tmpl.in b/templates/pl/header.tmpl.in index 1ee544fbf..ca1774b89 100644 --- a/templates/pl/header.tmpl.in +++ b/templates/pl/header.tmpl.in @@ -4,7 +4,7 @@ {title} - CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/pl/help-printable.tmpl b/templates/pl/help-printable.tmpl index a326d9762..08fff9ecd 100644 --- a/templates/pl/help-printable.tmpl +++ b/templates/pl/help-printable.tmpl @@ -4,7 +4,7 @@ {HELPTITLE} - + diff --git a/templates/ru/header.tmpl.in b/templates/ru/header.tmpl.in index 9859144aa..4fbdbe033 100644 --- a/templates/ru/header.tmpl.in +++ b/templates/ru/header.tmpl.in @@ -4,7 +4,7 @@ {title} — CUPS @CUPS_VERSION@@CUPS_REVISION@ - + {refresh_page?:} diff --git a/templates/ru/help-printable.tmpl b/templates/ru/help-printable.tmpl index 305112a33..08fff9ecd 100644 --- a/templates/ru/help-printable.tmpl +++ b/templates/ru/help-printable.tmpl @@ -1,10 +1,10 @@ - +{HELPTITLE} - + diff --git a/test/4.2-cups-printer-ops.test b/test/4.2-cups-printer-ops.test index 26035bcfb..67c515dfe 100644 --- a/test/4.2-cups-printer-ops.test +++ b/test/4.2-cups-printer-ops.test @@ -235,6 +235,26 @@ EXPECT attributes-charset EXPECT attributes-natural-language } +{ + # The name of the test... + NAME "Get Default Printer with no default set" + + # The operation to use + OPERATION cups-get-default + RESOURCE / + + # The attributes to send + GROUP operation + ATTR charset attributes-charset utf-8 + ATTR language attributes-natural-language en + + # What statuses are OK? + STATUS client-error-not-found + + # What attributes do we expect? + EXPECT attributes-charset + EXPECT attributes-natural-language +} { # The name of the test... NAME "Set Default Printer to Test1" @@ -256,6 +276,28 @@ EXPECT attributes-charset EXPECT attributes-natural-language } +{ + # The name of the test... + NAME "Get Default Printer" + + # The operation to use + OPERATION cups-get-default + RESOURCE / + + # The attributes to send + GROUP operation + ATTR charset attributes-charset utf-8 + ATTR language attributes-natural-language en + + # What statuses are OK? + STATUS successful-ok + + # What attributes do we expect? + EXPECT attributes-charset + EXPECT attributes-natural-language + EXPECT printer-name + EXPECT printer-uri-supported +} { # The name of the test... NAME "Get IPP/2.x Attributes for Printer Test1" diff --git a/test/5.4-lpstat.sh b/test/5.4-lpstat.sh index 29b651ee7..4b34d11dd 100644 --- a/test/5.4-lpstat.sh +++ b/test/5.4-lpstat.sh @@ -4,7 +4,7 @@ # # Test the lpstat command. # -# Copyright 2007 by Apple Inc. +# Copyright 2007-2009 by Apple Inc. # Copyright 1997-2005 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the @@ -26,6 +26,18 @@ else fi echo "" +echo "LPSTAT Test" +echo "" +echo " lpstat -H" +server="`../systemv/lpstat -H 2>&1`" +if test $? != 0 -o "x$server" != xlocalhost:8631; then + echo " FAILED ($server)" + exit 1 +else + echo " PASSED ($server)" +fi +echo "" + # # End of "$Id: 5.4-lpstat.sh 6649 2007-07-11 21:46:42Z mike $". # diff --git a/test/ipp-backend.test b/test/ipp-backend.test new file mode 100644 index 000000000..c2642d375 --- /dev/null +++ b/test/ipp-backend.test @@ -0,0 +1,22 @@ +# Get printer attributes using get-printer-attributes +{ + # The name of the test... + NAME "Get printer attributes using get-printer-attributes" + + # The resource to use for the POST + # RESOURCE /admin + + # The operation to use + OPERATION get-printer-attributes + + # Attributes, starting in the operation group... + GROUP operation + ATTR charset attributes-charset utf-8 + ATTR language attributes-natural-language en + ATTR uri printer-uri $uri + ATTR keyword requested-attributes com.apple.print.recoverable-message,copies-supported,document-format-supported,marker-colors,marker-levels,marker-message,marker-names,marker-types,printer-is-accepting-jobs,printer-state,printer-state-message,printer-state-reasons + + # What statuses are OK? + STATUS successful-ok + STATUS successful-ok-ignored-or-substituted-attributes +} diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh index 64e1b792f..9e27ba1fd 100755 --- a/test/run-stp-tests.sh +++ b/test/run-stp-tests.sh @@ -339,6 +339,7 @@ MaxLogSize 0 AccessLog /tmp/cups-$user/log/access_log ErrorLog /tmp/cups-$user/log/error_log PageLog /tmp/cups-$user/log/page_log +AccessLogLevel actions LogLevel debug2 LogTimeFormat usecs PreserveJobHistory Yes @@ -636,10 +637,30 @@ else echo "

PASS: Printer 'Test2' correctly produced $count page(s).

" >>$strfile fi -# Requested processed +# Requests logged count=`wc -l /tmp/cups-$user/log/access_log | awk '{print $1}'` -echo "PASS: $count requests processed." -echo "

PASS: $count requests processed.

" >>$strfile +expected=`expr 39 + 18 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` +if test $count != $expected; then + echo "FAIL: $count requests logged, expected $expected." + echo "

FAIL: $count requests logged, expected $expected.

" >>$strfile + fail=`expr $fail + 1` +else + echo "PASS: $count requests logged." + echo "

PASS: $count requests logged.

" >>$strfile +fi + +# Did CUPS-Get-Default get logged? +if grep -q CUPS-Get-Default /tmp/cups-$user/log/access_log; then + echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'" + echo "

FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'

" >>$strfile + echo "
" >>$strfile
+	grep CUPS-Get-Default /tmp/cups-$user/log/access_log | sed -e '1,$s/&/&/g' -e '1,$s/>$strfile
+	echo "
" >>$strfile + fail=`expr $fail + 1` +else + echo "PASS: CUPS-Get-Default not logged." + echo "

PASS: CUPS-Get-Default not logged.

" >>$strfile +fi # Emergency log messages count=`grep '^X ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'` -- 2.39.2