From b9ae4bd6636b1b0a20a11c6ba69fe1ef1645f7c2 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Feb 20 2008 10:00:28 +0000 Subject: - 1.3.6. --- diff --git a/.cvsignore b/.cvsignore index 7f256fa..031f5f9 100644 --- a/.cvsignore +++ b/.cvsignore @@ -30,3 +30,4 @@ cups-1.3.2-source.tar.bz2 cups-1.3.3-source.tar.bz2 cups-1.3.4-source.tar.bz2 cups-1.3.5-source.tar.bz2 +cups-1.3.6-source.tar.bz2 diff --git a/cups-1.3.x.patch b/cups-1.3.x.patch deleted file mode 100644 index f69b2ab..0000000 --- a/cups-1.3.x.patch +++ /dev/null @@ -1,8293 +0,0 @@ -diff -up cups-1.3.5/cgi-bin/template.c.1.3.x cups-1.3.5/cgi-bin/template.c ---- cups-1.3.5/cgi-bin/template.c.1.3.x 2007-08-15 20:33:36.000000000 +0100 -+++ cups-1.3.5/cgi-bin/template.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * CGI template function. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -54,6 +54,13 @@ cgiCopyTemplateFile(FILE *out, /* - tmpl ? tmpl : "(null)"); - - /* -+ * Range check input... -+ */ -+ -+ if (!tmpl || !out) -+ return; -+ -+ /* - * Open the template file... - */ - -diff -up cups-1.3.5/cgi-bin/admin.c.1.3.x cups-1.3.5/cgi-bin/admin.c ---- cups-1.3.5/cgi-bin/admin.c.1.3.x 2007-11-30 07:00:59.000000000 +0000 -+++ cups-1.3.5/cgi-bin/admin.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Administration CGI for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -1333,12 +1333,12 @@ do_config_server(http_t *http) /* I - H - *remote_printers, - /* REMOTE_PRINTERS value */ - *share_printers,/* SHARE_PRINTERS value */ -+ *user_cancel_any; -+ /* USER_CANCEL_ANY value */ - #ifdef HAVE_GSSAPI -- *default_auth_type, -+ char default_auth_type[255]; - /* DefaultAuthType value */ - #endif /* HAVE_GSSAPI */ -- *user_cancel_any; -- /* USER_CANCEL_ANY value */ - - - /* -@@ -1373,13 +1373,16 @@ do_config_server(http_t *http) /* I - H - */ - - if (cgiGetVariable("KERBEROS")) -- default_auth_type = "Negotiate"; -+ strlcpy(default_auth_type, "Negotiate", sizeof(default_auth_type)); - else - { -- default_auth_type = cupsGetOption("DefaultAuthType", num_settings, -- settings); -- if (!strcasecmp(default_auth_type, "Negotiate")) -- default_auth_type = "Basic"; -+ const char *val = cupsGetOption("DefaultAuthType", num_settings, -+ settings); -+ -+ if (val && !strcasecmp(val, "Negotiate")) -+ strlcpy(default_auth_type, "Basic", sizeof(default_auth_type)); -+ else -+ strlcpy(default_auth_type, val, sizeof(default_auth_type)); - } - - fprintf(stderr, "DEBUG: DefaultAuthType %s\n", default_auth_type); -@@ -1647,14 +1650,15 @@ do_config_server(http_t *http) /* I - H - * Allocate memory and load the file into a string buffer... - */ - -- buffer = calloc(1, info.st_size + 1); -+ if ((buffer = calloc(1, info.st_size + 1)) != NULL) -+ { -+ cupsFileRead(cupsd, buffer, info.st_size); -+ cgiSetVariable("CUPSDCONF", buffer); -+ free(buffer); -+ } - -- cupsFileRead(cupsd, buffer, info.st_size); - cupsFileClose(cupsd); - -- cgiSetVariable("CUPSDCONF", buffer); -- free(buffer); -- - /* - * Then get the default cupsd.conf file and put that into a string as - * well... -@@ -1665,37 +1669,39 @@ do_config_server(http_t *http) /* I - H - if (!stat(filename, &info) && info.st_size < (1024 * 1024) && - (cupsd = cupsFileOpen(filename, "r")) != NULL) - { -- buffer = calloc(1, 2 * info.st_size + 1); -- bufend = buffer + 2 * info.st_size - 1; -- -- for (bufptr = buffer; -- bufptr < bufend && (ch = cupsFileGetChar(cupsd)) != EOF;) -+ if ((buffer = calloc(1, 2 * info.st_size + 1)) != NULL) - { -- if (ch == '\\' || ch == '\"') -- { -- *bufptr++ = '\\'; -- *bufptr++ = ch; -- } -- else if (ch == '\n') -- { -- *bufptr++ = '\\'; -- *bufptr++ = 'n'; -- } -- else if (ch == '\t') -+ bufend = buffer + 2 * info.st_size - 1; -+ -+ for (bufptr = buffer; -+ bufptr < bufend && (ch = cupsFileGetChar(cupsd)) != EOF;) - { -- *bufptr++ = '\\'; -- *bufptr++ = 't'; -+ if (ch == '\\' || ch == '\"') -+ { -+ *bufptr++ = '\\'; -+ *bufptr++ = ch; -+ } -+ else if (ch == '\n') -+ { -+ *bufptr++ = '\\'; -+ *bufptr++ = 'n'; -+ } -+ else if (ch == '\t') -+ { -+ *bufptr++ = '\\'; -+ *bufptr++ = 't'; -+ } -+ else if (ch >= ' ') -+ *bufptr++ = ch; - } -- else if (ch >= ' ') -- *bufptr++ = ch; -- } - -- *bufptr = '\0'; -+ *bufptr = '\0'; - -- cupsFileClose(cupsd); -+ cgiSetVariable("CUPSDCONF_DEFAULT", buffer); -+ free(buffer); -+ } - -- cgiSetVariable("CUPSDCONF_DEFAULT", buffer); -- free(buffer); -+ cupsFileClose(cupsd); - } - - /* -@@ -3084,7 +3090,7 @@ do_set_options(http_t *http, /* I - HTT - * Binary protocol support... - */ - -- if (ppd->protocols && strstr(ppd->protocols, "BCP")) -+ if (ppd && ppd->protocols && strstr(ppd->protocols, "BCP")) - { - protocol = ppdFindAttr(ppd, "cupsProtocol", NULL); - -diff -up cups-1.3.5/cgi-bin/search.c.1.3.x cups-1.3.5/cgi-bin/search.c ---- cups-1.3.5/cgi-bin/search.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cgi-bin/search.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Search routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -53,7 +53,8 @@ cgiCompileSearch(const char *query) /* I - * Allocate a regular expression storage structure... - */ - -- re = (regex_t *)calloc(1, sizeof(regex_t)); -+ if ((re = (regex_t *)calloc(1, sizeof(regex_t))) == NULL) -+ return (NULL); - - /* - * Allocate a buffer to hold the regular expression string, starting -@@ -65,7 +66,11 @@ cgiCompileSearch(const char *query) /* I - if (slen < 1024) - slen = 1024; - -- s = (char *)malloc(slen); -+ if ((s = (char *)malloc(slen)) == NULL) -+ { -+ free(re); -+ return (NULL); -+ } - - /* - * Copy the query string to the regular expression, handling basic -@@ -227,7 +232,13 @@ cgiCompileSearch(const char *query) /* I - char *lword2; /* New "last word" */ - - -- lword2 = strdup(sword); -+ if ((lword2 = strdup(sword)) == NULL) -+ { -+ free(lword); -+ free(s); -+ free(re); -+ return (NULL); -+ } - - strcpy(sptr, ".*|.*"); - sptr += 5; -diff -up cups-1.3.5/cgi-bin/ipp-var.c.1.3.x cups-1.3.5/cgi-bin/ipp-var.c ---- cups-1.3.5/cgi-bin/ipp-var.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cgi-bin/ipp-var.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * CGI <-> IPP variable routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -158,6 +158,8 @@ cgiGetAttributes(ipp_t *request, /* - for (i = 0; i < num_attrs; i ++) - free(attrs[i]); - } -+ -+ fclose(in); - } - - -@@ -523,8 +525,7 @@ cgiPrintTestPage(http_t *http, /* I - * See who is logged in... - */ - -- if ((user = getenv("REMOTE_USER")) == NULL) -- user = "guest"; -+ user = getenv("REMOTE_USER"); - - /* - * Locate the test page file... -@@ -562,8 +563,9 @@ cgiPrintTestPage(http_t *http, /* I - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", - NULL, uri); - -- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, -- "requesting-user-name", NULL, user); -+ if (user) -+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, -+ "requesting-user-name", NULL, user); - - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", - NULL, "Test Page"); -@@ -593,6 +595,11 @@ cgiPrintTestPage(http_t *http, /* I - snprintf(refresh, sizeof(refresh), "2;URL=%s", uri); - cgiSetVariable("refresh_page", refresh); - } -+ else if (cupsLastError() == IPP_NOT_AUTHORIZED) -+ { -+ puts("Status: 401\n"); -+ exit(0); -+ } - - cgiStartHTML(cgiText(_("Print Test Page"))); - -diff -up cups-1.3.5/cgi-bin/jobs.c.1.3.x cups-1.3.5/cgi-bin/jobs.c ---- cups-1.3.5/cgi-bin/jobs.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cgi-bin/jobs.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Job status CGI for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -185,6 +185,11 @@ do_job_op(http_t *http, /* I - HTT - cgiFormEncode(url + 6, getenv("HTTP_REFERER"), sizeof(url) - 6); - cgiSetVariable("refresh_page", url); - } -+ else if (cupsLastError() == IPP_NOT_AUTHORIZED) -+ { -+ puts("Status: 401\n"); -+ exit(0); -+ } - - cgiStartHTML(cgiText(_("Jobs"))); - -diff -up cups-1.3.5/cgi-bin/var.c.1.3.x cups-1.3.5/cgi-bin/var.c ---- cups-1.3.5/cgi-bin/var.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cgi-bin/var.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * CGI form variable and array functions. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -322,9 +322,15 @@ cgiSetArray(const char *name, /* I - Na - { - if (element >= var->avalues) - { -+ const char **temp; /* Temporary pointer */ -+ -+ temp = (const char **)realloc((void *)(var->values), -+ sizeof(char *) * (element + 16)); -+ if (!temp) -+ return; -+ - var->avalues = element + 16; -- var->values = (const char **)realloc((void *)(var->values), -- sizeof(char *) * var->avalues); -+ var->values = temp; - } - - if (element >= var->nvalues) -@@ -362,9 +368,15 @@ cgiSetSize(const char *name, /* I - Nam - - if (size >= var->avalues) - { -+ const char **temp; /* Temporary pointer */ -+ -+ temp = (const char **)realloc((void *)(var->values), -+ sizeof(char *) * (size + 16)); -+ if (!temp) -+ return; -+ - var->avalues = size + 16; -- var->values = (const char **)realloc((void *)(var->values), -- sizeof(char *) * var->avalues); -+ var->values = temp; - } - - if (size > var->nvalues) -@@ -426,7 +438,7 @@ cgi_add_variable(const char *name, /* I - int element, /* I - Array element number */ - const char *value) /* I - Variable value */ - { -- _cgi_var_t *var; /* New variable */ -+ _cgi_var_t *var; /* New variable */ - - - if (name == NULL || value == NULL || element < 0 || element > 100000) -@@ -438,19 +450,29 @@ cgi_add_variable(const char *name, /* I - - if (form_count >= form_alloc) - { -+ _cgi_var_t *temp_vars; /* Temporary form pointer */ -+ -+ - if (form_alloc == 0) -- form_vars = malloc(sizeof(_cgi_var_t) * 16); -+ temp_vars = malloc(sizeof(_cgi_var_t) * 16); - else -- form_vars = realloc(form_vars, (form_alloc + 16) * sizeof(_cgi_var_t)); -+ temp_vars = realloc(form_vars, (form_alloc + 16) * sizeof(_cgi_var_t)); -+ -+ if (!temp_vars) -+ return; - -+ form_vars = temp_vars; - form_alloc += 16; - } - -- var = form_vars + form_count; -+ var = form_vars + form_count; -+ -+ if ((var->values = calloc(element + 1, sizeof(char *))) == NULL) -+ return; -+ - var->name = strdup(name); - var->nvalues = element + 1; - var->avalues = element + 1; -- var->values = calloc(element + 1, sizeof(char *)); - var->values[element] = strdup(value); - - form_count ++; -@@ -784,11 +806,15 @@ cgi_initialize_post(void) - - for (tbytes = 0; tbytes < length; tbytes += nbytes) - if ((nbytes = read(0, data + tbytes, length - tbytes)) < 0) -+ { - if (errno != EAGAIN) - { - free(data); - return (0); - } -+ else -+ nbytes = 0; -+ } - - data[length] = '\0'; - -diff -up cups-1.3.5/cgi-bin/printers.c.1.3.x cups-1.3.5/cgi-bin/printers.c ---- cups-1.3.5/cgi-bin/printers.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cgi-bin/printers.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Printer status CGI for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -280,6 +280,11 @@ print_command(http_t *http, /* I - - snprintf(refresh, sizeof(refresh), "2;URL=%s", uri); - cgiSetVariable("refresh_page", refresh); - } -+ else if (cupsLastError() == IPP_NOT_AUTHORIZED) -+ { -+ puts("Status: 401\n"); -+ exit(0); -+ } - - cgiStartHTML(cgiText(_("Printer Maintenance"))); - -diff -up cups-1.3.5/locale/checkpo.c.1.3.x cups-1.3.5/locale/checkpo.c ---- cups-1.3.5/locale/checkpo.c.1.3.x 2007-09-06 15:34:31.000000000 +0100 -+++ cups-1.3.5/locale/checkpo.c 2008-02-14 13:03:30.000000000 +0000 -@@ -50,8 +50,7 @@ main(int argc, /* I - Number of comm - *strfmts; /* Format strings in msgstr */ - char *idfmt, /* Current msgid format string */ - *strfmt; /* Current msgstr format string */ -- int fmtidx, /* Format index */ -- fmtcount; /* Format count */ -+ int fmtidx; /* Format index */ - int status, /* Exit status */ - pass, /* Pass/fail status */ - untranslated; /* Untranslated messages */ -@@ -135,8 +134,6 @@ main(int argc, /* I - Number of comm - - if (!idfmt || strcmp(strfmt, idfmt)) - break; -- -- fmtcount ++; - } - - if (cupsArrayCount(strfmts) != cupsArrayCount(idfmts) || strfmt) -diff -up cups-1.3.5/backend/usb-unix.c.1.3.x cups-1.3.5/backend/usb-unix.c ---- cups-1.3.5/backend/usb-unix.c.1.3.x 2007-11-30 07:00:59.000000000 +0000 -+++ cups-1.3.5/backend/usb-unix.c 2008-02-14 13:03:30.000000000 +0000 -@@ -516,7 +516,7 @@ open_device(const char *uri, /* I - Dev - } - #else - { -- if (use_bc) -+ if (*use_bc) - fd = open(uri + 4, O_RDWR | O_EXCL); - else - fd = -1; -diff -up cups-1.3.5/backend/snmp.c.1.3.x cups-1.3.5/backend/snmp.c ---- cups-1.3.5/backend/snmp.c.1.3.x 2007-12-17 22:12:45.000000000 +0000 -+++ cups-1.3.5/backend/snmp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -1090,7 +1090,7 @@ asn1_get_string( - * String is larger than the buffer... - */ - -- memcpy(string, buffer, strsize - 1); -+ memcpy(string, *buffer, strsize - 1); - string[strsize - 1] = '\0'; - } - -diff -up cups-1.3.5/backend/pap.c.1.3.x cups-1.3.5/backend/pap.c ---- cups-1.3.5/backend/pap.c.1.3.x 2007-10-10 22:25:29.000000000 +0100 -+++ cups-1.3.5/backend/pap.c 2008-02-14 13:03:30.000000000 +0000 -@@ -1,7 +1,7 @@ - /* - * "$Id: pap.c 7013 2007-10-10 21:25:29Z mike $" - * --* � Copyright 2004 Apple Computer, Inc. All rights reserved. -+* � Copyright 2004-2008 Apple Computer, Inc. All rights reserved. - * - * IMPORTANT: This Apple software is supplied to you by Apple Computer, - * Inc. ("Apple") in consideration of your agreement to the following -@@ -70,6 +70,16 @@ - * signalHandler() - handle SIGINT to close the session before quiting. - */ - -+/* -+ * This backend uses deprecated APIs for AppleTalk; we know this, so -+ * silence any warnings about it... -+ */ -+ -+#ifdef MAC_OS_X_VERSION_MIN_REQUIRED -+# undef MAC_OS_X_VERSION_MIN_REQUIRED -+#endif /* MAX_OS_X_VERSION_MIN_REQUIRED */ -+#define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_0 -+ - #include - - #include -@@ -85,17 +95,17 @@ - #include - #include - -+#include -+#include -+#include -+#include -+ - #include - #include - #include - #include - #include - --#include --#include --#include --#include -- - #include - - #ifdef HAVE_APPLETALK_AT_PROTO_H -diff -up cups-1.3.5/backend/runloop.c.1.3.x cups-1.3.5/backend/runloop.c ---- cups-1.3.5/backend/runloop.c.1.3.x 2007-08-22 19:34:34.000000000 +0100 -+++ cups-1.3.5/backend/runloop.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Common run loop APIs for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 2006-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -216,7 +216,7 @@ backendRunLoop( - FD_SET(CUPS_SC_FD, &input); - - FD_ZERO(&output); -- if (print_bytes || !use_bc) -+ if (print_bytes || (!use_bc && !side_cb)) - FD_SET(device_fd, &output); - - if (use_bc || side_cb) -diff -up cups-1.3.5/backend/ipp.c.1.3.x cups-1.3.5/backend/ipp.c ---- cups-1.3.5/backend/ipp.c.1.3.x 2007-11-09 19:54:09.000000000 +0000 -+++ cups-1.3.5/backend/ipp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * IPP backend for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -521,8 +521,8 @@ main(int argc, /* I - Number of comm - _("INFO: Unable to contact printer, queuing on next " - "printer in class...\n")); - -- if (argc == 6 || strcmp(filename, argv[6])) -- unlink(filename); -+ if (tmpfilename[0]) -+ unlink(tmpfilename); - - /* - * Sleep 5 seconds to keep the job from requeuing too rapidly... -@@ -579,8 +579,8 @@ main(int argc, /* I - Number of comm - - if (job_cancelled) - { -- if (argc == 6 || strcmp(filename, argv[6])) -- unlink(filename); -+ if (tmpfilename[0]) -+ unlink(tmpfilename); - - return (CUPS_BACKEND_FAILED); - } -@@ -765,8 +765,8 @@ main(int argc, /* I - Number of comm - ippDelete(supported); - httpClose(http); - -- if (argc == 6 || strcmp(filename, argv[6])) -- unlink(filename); -+ if (tmpfilename[0]) -+ unlink(tmpfilename); - - /* - * Sleep 5 seconds to keep the job from requeuing too rapidly... -@@ -865,12 +865,13 @@ main(int argc, /* I - Number of comm - num_options = cupsParseOptions(argv[5], 0, &options); - - #ifdef __APPLE__ -- if (!strcasecmp(content_type, "application/pictwps") && num_files == 1) -+ if (!strcasecmp(final_content_type, "application/pictwps") && -+ num_files == 1) - { - if (format_sup != NULL) - { - for (i = 0; i < format_sup->num_values; i ++) -- if (!strcasecmp(content_type, format_sup->values[i].string.text)) -+ if (!strcasecmp(final_content_type, format_sup->values[i].string.text)) - break; - } - -@@ -881,10 +882,18 @@ main(int argc, /* I - Number of comm - * so convert the document to PostScript... - */ - -- if (run_pictwps_filter(argv, filename)) -+ if (run_pictwps_filter(argv, files[0])) -+ { -+ if (pstmpname[0]) -+ unlink(pstmpname); -+ -+ if (tmpfilename[0]) -+ unlink(tmpfilename); -+ - return (CUPS_BACKEND_FAILED); -+ } - -- filename = pstmpname; -+ files[0] = pstmpname; - - /* - * Change the MIME type to application/postscript and change the -@@ -1680,7 +1689,6 @@ run_pictwps_filter(char **argv, /* - - _cupsLangPrintf(stderr, _("ERROR: Unable to fork pictwpstops: %s\n"), - strerror(errno)); -- unlink(filename); - if (ppdfile) - unlink(ppdfile); - return (-1); -@@ -1695,7 +1703,6 @@ run_pictwps_filter(char **argv, /* - _cupsLangPrintf(stderr, _("ERROR: Unable to wait for pictwpstops: %s\n"), - strerror(errno)); - close(fd); -- unlink(filename); - if (ppdfile) - unlink(ppdfile); - return (-1); -@@ -1715,7 +1722,6 @@ run_pictwps_filter(char **argv, /* - _cupsLangPrintf(stderr, _("ERROR: pictwpstops exited on signal %d!\n"), - status); - -- unlink(filename); - return (status); - } - -diff -up cups-1.3.5/cups/adminutil.c.1.3.x cups-1.3.5/cups/adminutil.c ---- cups-1.3.5/cups/adminutil.c.1.3.x 2007-11-30 07:00:59.000000000 +0000 -+++ cups-1.3.5/cups/adminutil.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Administration utility API definitions for the Common UNIX Printing - * System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 2001-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -1057,7 +1057,7 @@ _cupsAdminGetServerSettings( - in_admin_location = 0; - in_location = 0; - } -- else if (!strcasecmp(line, "Allow") && in_admin_location && -+ else if (!strcasecmp(line, "Allow") && - strcasecmp(value, "localhost") && strcasecmp(value, "127.0.0.1") - #ifdef AF_LOCAL - && *value != '/' -@@ -1067,9 +1067,9 @@ _cupsAdminGetServerSettings( - #endif /* AF_INET6 */ - ) - { -- remote_admin = 1; -- -- if (!strcasecmp(value, "all")) -+ if (in_admin_location) -+ remote_admin = 1; -+ else if (!strcasecmp(value, "all")) - remote_any = 1; - } - else if (line[0] != '<' && !in_location && !in_policy) -@@ -1578,8 +1578,6 @@ _cupsAdminSetServerSettings( - if (remote_admin) - cupsFilePrintf(temp, " Allow %s\n", - remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - } - else if (in_conf_location && remote_admin >= 0) - { -@@ -1597,8 +1595,6 @@ _cupsAdminSetServerSettings( - if (remote_admin) - cupsFilePrintf(temp, " Allow %s\n", - remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - } - else if (in_root_location && (remote_admin >= 0 || share_printers >= 0)) - { -@@ -1619,8 +1615,6 @@ _cupsAdminSetServerSettings( - if (remote_admin > 0 || share_printers > 0) - cupsFilePrintf(temp, " Allow %s\n", - remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - } - - in_admin_location = 0; -@@ -1841,8 +1835,6 @@ _cupsAdminSetServerSettings( - - if (remote_admin > 0 || share_printers > 0) - cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - - cupsFilePuts(temp, "\n"); - } -@@ -1859,8 +1851,6 @@ _cupsAdminSetServerSettings( - - if (remote_admin) - cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - - cupsFilePuts(temp, "\n"); - } -@@ -1880,8 +1870,6 @@ _cupsAdminSetServerSettings( - - if (remote_admin) - cupsFilePrintf(temp, " Allow %s\n", remote_any > 0 ? "all" : "@LOCAL"); -- else -- cupsFilePuts(temp, " Allow localhost\n"); - - cupsFilePuts(temp, "\n"); - } -diff -up cups-1.3.5/cups/transcode.c.1.3.x cups-1.3.5/cups/transcode.c ---- cups-1.3.5/cups/transcode.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/transcode.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Transcoding support for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -132,8 +132,6 @@ _cupsCharmapFlush(void) - vnext = vmap->next; - - free_vbcs_charmap(vmap); -- -- free(vmap); - } - - vmap_cache = NULL; -@@ -330,13 +328,8 @@ cupsCharsetToUTF8( - - if (encoding < CUPS_ENCODING_SBCS_END) - bytes = conv_sbcs_to_utf8(dest, (cups_sbcs_t *)src, maxout, encoding); -- else if (encoding < CUPS_ENCODING_VBCS_END) -- bytes = conv_vbcs_to_utf8(dest, (cups_sbcs_t *)src, maxout, encoding); - else -- { -- DEBUG_puts(" Bad encoding, returning -1"); -- bytes = -1; -- } -+ bytes = conv_vbcs_to_utf8(dest, (cups_sbcs_t *)src, maxout, encoding); - - #ifdef HAVE_PTHREAD_H - pthread_mutex_unlock(&map_mutex); -@@ -437,10 +430,8 @@ cupsUTF8ToCharset( - - if (encoding < CUPS_ENCODING_SBCS_END) - bytes = conv_utf8_to_sbcs((cups_sbcs_t *)dest, src, maxout, encoding); -- else if (encoding < CUPS_ENCODING_VBCS_END) -- bytes = conv_utf8_to_vbcs((cups_sbcs_t *)dest, src, maxout, encoding); - else -- bytes = -1; -+ bytes = conv_utf8_to_vbcs((cups_sbcs_t *)dest, src, maxout, encoding); - - #ifdef HAVE_PTHREAD_H - pthread_mutex_unlock(&map_mutex); -@@ -1468,6 +1459,8 @@ get_vbcs_charmap( - { - DEBUG_puts(" Unable to get charmap count!"); - -+ cupsFileClose(fp); -+ - return (NULL); - } - -@@ -1479,9 +1472,10 @@ get_vbcs_charmap( - - if ((vmap = (_cups_vmap_t *)calloc(1, sizeof(_cups_vmap_t))) == NULL) - { -- cupsFileClose(fp); - DEBUG_puts(" Unable to allocate memory!"); - -+ cupsFileClose(fp); -+ - return (NULL); - } - -diff -up cups-1.3.5/cups/testcups.c.1.3.x cups-1.3.5/cups/testcups.c ---- cups-1.3.5/cups/testcups.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/testcups.c 2008-02-14 13:03:30.000000000 +0000 -@@ -106,6 +106,7 @@ main(int argc, /* I - Number of comm - { - status = 1; - puts("FAIL"); -+ return (1); - } - else - puts("PASS"); -diff -up cups-1.3.5/cups/http.c.1.3.x cups-1.3.5/cups/http.c ---- cups-1.3.5/cups/http.c.1.3.x 2007-07-25 21:39:33.000000000 +0100 -+++ cups-1.3.5/cups/http.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * HTTP routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * This file contains Kerberos support code, copyright 2006 by -@@ -402,9 +402,11 @@ httpConnectEncrypt( - * Allocate memory for the structure... - */ - -- http = calloc(sizeof(http_t), 1); -- if (http == NULL) -+ if ((http = calloc(sizeof(http_t), 1)) == NULL) -+ { -+ httpAddrFreeList(addrlist); - return (NULL); -+ } - - http->version = HTTP_1_1; - http->blocking = 1; -@@ -1735,9 +1737,15 @@ httpSetAuthString(http_t *http, /* I - */ - - int len = (int)strlen(scheme) + (data ? (int)strlen(data) + 1 : 0) + 1; -+ char *temp; - - if (len > (int)sizeof(http->_authstring)) -- http->authstring = malloc(len); -+ { -+ if ((temp = malloc(len)) == NULL) -+ len = sizeof(http->_authstring); -+ else -+ http->authstring = temp; -+ } - - if (data) - snprintf(http->authstring, len, "%s %s", scheme, data); -diff -up cups-1.3.5/cups/libcups.exp.1.3.x cups-1.3.5/cups/libcups.exp ---- cups-1.3.5/cups/libcups.exp.1.3.x 2007-07-25 18:19:09.000000000 +0100 -+++ cups-1.3.5/cups/libcups.exp 2008-02-14 13:03:30.000000000 +0000 -@@ -1,6 +1,7 @@ - __cups_strcpy - __cupsAdminGetServerSettings - __cupsAdminSetServerSettings -+__cupsAppleLanguage - __cupsCharmapFlush - __cupsCharmapFree - __cupsCharmapGet -diff -up cups-1.3.5/cups/request.c.1.3.x cups-1.3.5/cups/request.c ---- cups-1.3.5/cups/request.c.1.3.x 2007-07-24 01:13:05.000000000 +0100 -+++ cups-1.3.5/cups/request.c 2008-02-14 13:03:30.000000000 +0000 -@@ -17,6 +17,7 @@ - * Contents: - * - * cupsDoFileRequest() - Do an IPP request with a file. -+ * cupsDoIORequest() - Do an IPP request with file descriptors. - * cupsDoRequest() - Do an IPP request. - * _cupsSetError() - Set the last IPP status code and status-message. - * _cupsSetHTTPError() - Set the last error using the HTTP status. -diff -up cups-1.3.5/cups/auth.c.1.3.x cups-1.3.5/cups/auth.c ---- cups-1.3.5/cups/auth.c.1.3.x 2007-10-31 18:35:56.000000000 +0000 -+++ cups-1.3.5/cups/auth.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Authentication functions for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * This file contains Kerberos support code, copyright 2006 by -@@ -91,8 +91,7 @@ cupsDoAuthentication(http_t *http, / - const char *password; /* Password string */ - char prompt[1024], /* Prompt for user */ - realm[HTTP_MAX_VALUE], /* realm="xyz" string */ -- nonce[HTTP_MAX_VALUE], /* nonce="xyz" string */ -- encode[4096]; /* Encoded username:password */ -+ nonce[HTTP_MAX_VALUE]; /* nonce="xyz" string */ - int localauth; /* Local authentication result */ - _cups_globals_t *cg; /* Global data */ - -@@ -301,14 +300,40 @@ cupsDoAuthentication(http_t *http, / - if (major_status == GSS_S_CONTINUE_NEEDED) - DEBUG_gss_printf(major_status, minor_status, "Continuation needed!"); - -- if (output_token.length) -+ if (output_token.length > 0 && output_token.length <= 65536) - { -- httpEncode64_2(encode, sizeof(encode), output_token.value, -+ /* -+ * Allocate the authorization string since Windows KDCs can have -+ * arbitrarily large credentials... -+ */ -+ -+ int authsize = 10 + /* "Negotiate " */ -+ output_token.length * 4 / 3 + 1 + /* Base64 */ -+ 1; /* nul */ -+ -+ httpSetAuthString(http, NULL, NULL); -+ -+ if ((http->authstring = malloc(authsize)) == NULL) -+ { -+ http->authstring = http->_authstring; -+ authsize = sizeof(http->_authstring); -+ } -+ -+ strcpy(http->authstring, "Negotiate "); -+ httpEncode64_2(http->authstring + 10, authsize - 10, output_token.value, - output_token.length); -- httpSetAuthString(http, "Negotiate", encode); - - major_status = gss_release_buffer(&minor_status, &output_token); - } -+ else -+ { -+ DEBUG_printf(("cupsDoAuthentication: Kerberos credentials too large - " -+ "%d bytes!\n", output_token.length)); -+ -+ major_status = gss_release_buffer(&minor_status, &output_token); -+ -+ return (-1); -+ } - #endif /* HAVE_GSSAPI */ - } - else if (strncmp(http->fields[HTTP_FIELD_WWW_AUTHENTICATE], "Digest", 6)) -@@ -317,6 +342,9 @@ cupsDoAuthentication(http_t *http, / - * Basic authentication... - */ - -+ char encode[256]; /* Base64 buffer */ -+ -+ - httpEncode64_2(encode, sizeof(encode), http->userpass, - (int)strlen(http->userpass)); - httpSetAuthString(http, "Basic", encode); -@@ -327,7 +355,8 @@ cupsDoAuthentication(http_t *http, / - * Digest authentication... - */ - -- char digest[1024]; /* Digest auth data */ -+ char encode[33], /* MD5 buffer */ -+ digest[1024]; /* Digest auth data */ - - - httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "realm", realm); -diff -up cups-1.3.5/cups/options.c.1.3.x cups-1.3.5/cups/options.c ---- cups-1.3.5/cups/options.c.1.3.x 2007-07-20 22:28:10.000000000 +0100 -+++ cups-1.3.5/cups/options.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Option routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -470,18 +470,28 @@ cupsParseOptions( - char *copyarg, /* Copy of input string */ - *ptr, /* Pointer into string */ - *name, /* Pointer to name */ -- *value; /* Pointer to value */ -+ *value, /* Pointer to value */ -+ quote; /* Quote character */ - - -- if (arg == NULL || options == NULL || num_options < 0) -+ /* -+ * Range check input... -+ */ -+ -+ if (!arg) -+ return (num_options); -+ -+ if (!options || num_options < 0) - return (0); - - /* - * Make a copy of the argument string and then divide it up... - */ - -- copyarg = strdup(arg); -- ptr = copyarg; -+ if ((copyarg = strdup(arg)) == NULL) -+ return (num_options); -+ -+ ptr = copyarg; - - /* - * Skip leading spaces... -@@ -501,7 +511,7 @@ cupsParseOptions( - */ - - name = ptr; -- while (!isspace(*ptr & 255) && *ptr != '=' && *ptr != '\0') -+ while (!isspace(*ptr & 255) && *ptr != '=' && *ptr) - ptr ++; - - /* -@@ -521,10 +531,10 @@ cupsParseOptions( - if (*ptr != '=') - { - /* -- * Start of another option... -+ * Boolean option... - */ - -- if (strncasecmp(name, "no", 2) == 0) -+ if (!strncasecmp(name, "no", 2)) - num_options = cupsAddOption(name + 2, "false", num_options, - options); - else -@@ -539,38 +549,18 @@ cupsParseOptions( - - *ptr++ = '\0'; - -- if (*ptr == '\'') -+ if (*ptr == '\'' || *ptr == '\"') - { - /* - * Quoted string constant... - */ - -- ptr ++; -- value = ptr; -- -- while (*ptr != '\'' && *ptr != '\0') -- { -- if (*ptr == '\\') -- _cups_strcpy(ptr, ptr + 1); -- -- ptr ++; -- } -- -- if (*ptr != '\0') -- *ptr++ = '\0'; -- } -- else if (*ptr == '\"') -- { -- /* -- * Double-quoted string constant... -- */ -- -- ptr ++; -+ quote = *ptr++; - value = ptr; - -- while (*ptr != '\"' && *ptr != '\0') -+ while (*ptr != quote && *ptr) - { -- if (*ptr == '\\') -+ if (*ptr == '\\' && ptr[1]) - _cups_strcpy(ptr, ptr + 1); - - ptr ++; -@@ -603,7 +593,7 @@ cupsParseOptions( - break; - } - } -- else if (*ptr == '\\') -+ else if (*ptr == '\\' && ptr[1]) - _cups_strcpy(ptr, ptr + 1); - - if (*ptr != '\0') -@@ -617,9 +607,9 @@ cupsParseOptions( - - value = ptr; - -- while (!isspace(*ptr & 255) && *ptr != '\0') -+ while (!isspace(*ptr & 255) && *ptr) - { -- if (*ptr == '\\') -+ if (*ptr == '\\' && ptr[1]) - _cups_strcpy(ptr, ptr + 1); - - ptr ++; -diff -up cups-1.3.5/cups/i18n.h.1.3.x cups-1.3.5/cups/i18n.h ---- cups-1.3.5/cups/i18n.h.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/i18n.h 2008-02-14 13:03:30.000000000 +0000 -@@ -82,6 +82,10 @@ typedef struct _cups_vmap_s /**** VBCS - * Prototypes... - */ - -+#ifdef __APPLE__ -+extern const char *_cupsAppleLanguage(const char *locale, char *language, -+ size_t langsize); -+#endif /* __APPLE__ */ - extern void _cupsCharmapFlush(void); - extern void _cupsCharmapFree(const cups_encoding_t encoding); - extern void *_cupsCharmapGet(const cups_encoding_t encoding); -diff -up cups-1.3.5/cups/util.c.1.3.x cups-1.3.5/cups/util.c ---- cups-1.3.5/cups/util.c.1.3.x 2007-10-10 23:00:43.000000000 +0100 -+++ cups-1.3.5/cups/util.c 2008-02-14 13:03:30.000000000 +0000 -@@ -846,9 +846,6 @@ cupsGetPPD2(http_t *http, /* I - HT - - close(fd); - -- if (http2 != http) -- httpClose(http2); -- - /* - * See if we actually got the file or an error... - */ -@@ -877,6 +874,9 @@ cupsGetPPD2(http_t *http, /* I - HT - return (NULL); - } - -+ if (http2 != http) -+ httpClose(http2); -+ - /* - * Return the PPD file... - */ -diff -up cups-1.3.5/cups/language.c.1.3.x cups-1.3.5/cups/language.c ---- cups-1.3.5/cups/language.c.1.3.x 2007-10-31 18:51:08.000000000 +0000 -+++ cups-1.3.5/cups/language.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * I18N/language support for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -16,6 +16,8 @@ - * - * Contents: - * -+ * _cupsAppleLanguage() - Get the Apple language identifier associated -+ * with a locale ID. - * _cupsEncodingName() - Return the character encoding name string - * for the given encoding enumeration. - * cupsLangDefault() - Return the default language. -@@ -65,26 +67,6 @@ static pthread_mutex_t lang_mutex = PTHR - #endif /* HAVE_PTHREAD_H */ - static cups_lang_t *lang_cache = NULL; - /* Language string cache */ -- -- --/* -- * Local functions... -- */ -- --#ifdef __APPLE__ --static const char *appleLangDefault(void); --#endif /* __APPLE__ */ --static cups_lang_t *cups_cache_lookup(const char *name, -- cups_encoding_t encoding); --static int cups_message_compare(_cups_message_t *m1, -- _cups_message_t *m2); --static void cups_unquote(char *d, const char *s); -- -- --/* -- * Local globals... -- */ -- - static const char * const lang_encodings[] = - { /* Encoding strings */ - "us-ascii", "iso-8859-1", -@@ -155,6 +137,123 @@ static const char * const lang_encodings - "euc-kr", "euc-tw" - }; - -+#ifdef __APPLE__ -+typedef struct -+{ -+ const char * const language; /* Language ID */ -+ const char * const locale; /* Locale ID */ -+} _apple_language_locale_t; -+ -+static const _apple_language_locale_t apple_language_locale[] = -+{ /* Locale to language ID LUT */ -+ { "en" , "en_US" }, -+ { "nb" , "no" }, -+ { "zh-Hans" , "zh_CN" }, -+ { "zh-Hant" , "zh_TW" } -+}; -+#endif /* __APPLE__ */ -+ -+ -+/* -+ * Local functions... -+ */ -+ -+#ifdef __APPLE__ -+static const char *appleLangDefault(void); -+#endif /* __APPLE__ */ -+static cups_lang_t *cups_cache_lookup(const char *name, -+ cups_encoding_t encoding); -+static int cups_message_compare(_cups_message_t *m1, -+ _cups_message_t *m2); -+static void cups_unquote(char *d, const char *s); -+ -+ -+#ifdef __APPLE__ -+/* -+ * _cupsAppleLanguage() - Get the Apple language identifier associated -+ * with a locale ID. -+ */ -+ -+const char * /* O - Language ID */ -+_cupsAppleLanguage(const char *locale, /* I - Locale ID */ -+ char *language,/* I - Language ID buffer */ -+ size_t langsize) /* I - Size of language ID buffer */ -+{ -+ int i; /* Looping var */ -+ CFStringRef localeid, /* CF locale identifier */ -+ langid; /* CF language identifier */ -+ -+ -+ /* -+ * Copy the locale name and convert, as needed, to the Apple-specific -+ * locale identifier... -+ */ -+ -+ switch (strlen(locale)) -+ { -+ default : -+ /* -+ * Invalid locale... -+ */ -+ -+ strlcpy(language, "en", langsize); -+ break; -+ -+ case 2 : -+ strlcpy(language, locale, langsize); -+ break; -+ -+ case 5 : -+ strlcpy(language, locale, langsize); -+ -+ if (language[2] == '-') -+ { -+ /* -+ * Convert ll-cc to ll_CC... -+ */ -+ -+ language[2] = '_'; -+ language[3] = toupper(language[3] & 255); -+ language[4] = toupper(language[4] & 255); -+ } -+ break; -+ } -+ -+ for (i = 0; -+ i < (int)(sizeof(apple_language_locale) / -+ sizeof(apple_language_locale[0])); -+ i ++) -+ if (!strcmp(locale, apple_language_locale[i].locale)) -+ { -+ strlcpy(language, apple_language_locale[i].language, sizeof(language)); -+ break; -+ } -+ -+ /* -+ * Attempt to map the locale ID to a language ID... -+ */ -+ -+ if ((localeid = CFStringCreateWithCString(kCFAllocatorDefault, language, -+ kCFStringEncodingASCII)) != NULL) -+ { -+ if ((langid = CFLocaleCreateCanonicalLanguageIdentifierFromString( -+ kCFAllocatorDefault, localeid)) != NULL) -+ { -+ CFStringGetCString(langid, language, langsize, kCFStringEncodingASCII); -+ CFRelease(langid); -+ } -+ -+ CFRelease(localeid); -+ } -+ -+ /* -+ * Return what we got... -+ */ -+ -+ return (language); -+} -+#endif /* __APPLE__ */ -+ - - /* - * '_cupsEncodingName()' - Return the character encoding name string -@@ -876,7 +975,12 @@ _cupsMessageLoad(const char *filename) / - return (a); - } - -- m->id = strdup(ptr); -+ if ((m->id = strdup(ptr)) == NULL) -+ { -+ free(m); -+ cupsFileClose(fp); -+ return (a); -+ } - } - else if (s[0] == '\"' && m) - { -@@ -924,7 +1028,11 @@ _cupsMessageLoad(const char *filename) / - * Set the string... - */ - -- m->str = strdup(ptr); -+ if ((m->str = strdup(ptr)) == NULL) -+ { -+ cupsFileClose(fp); -+ return (a); -+ } - } - } - -@@ -974,30 +1082,6 @@ _cupsMessageLookup(cups_array_t *a, /* I - - #ifdef __APPLE__ - /* -- * Code & data to translate OSX's language names to their ISO 639-1 locale. -- * -- * The first version uses the new CoreFoundation API added in 10.3 (Panther), -- * the second is for 10.2 (Jaguar). -- */ -- --# ifdef HAVE_CF_LOCALE_ID -- --typedef struct --{ -- const char * const name; /* Language name */ -- const char * const locale; /* Locale name */ --} _apple_name_locale_t; -- --static const _apple_name_locale_t apple_name_locale[] = --{ -- { "en" , "en_US" }, -- { "nb" , "no" }, -- { "zh-Hans" , "zh_CN" }, -- { "zh-Hant" , "zh_TW" } --}; -- -- --/* - * 'appleLangDefault()' - Get the default locale string. - */ - -@@ -1067,14 +1151,15 @@ appleLangDefault(void) - */ - - for (i = 0; -- i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]); -- i++) -+ i < (int)(sizeof(apple_language_locale) / -+ sizeof(apple_language_locale[0])); -+ i ++) - { -- if (!strcmp(cg->language, apple_name_locale[i].name)) -+ if (!strcmp(cg->language, apple_language_locale[i].language)) - { - DEBUG_printf(("appleLangDefault: mapping \"%s\" to \"%s\"...\n", -- cg->language, apple_name_locale[i].locale)); -- strlcpy(cg->language, apple_name_locale[i].locale, -+ cg->language, apple_language_locale[i].locale)); -+ strlcpy(cg->language, apple_language_locale[i].locale, - sizeof(cg->language)); - break; - } -@@ -1110,166 +1195,6 @@ appleLangDefault(void) - - return (cg->language); - } --# else --/* -- * Code & data to translate OSX 10.2's language names to their ISO 639-1 -- * locale. -- */ -- --typedef struct --{ -- const char * const name; /* Language name */ -- const char * const locale; /* Locale name */ --} _apple_name_locale_t; -- --static const _apple_name_locale_t apple_name_locale[] = --{ -- { "English" , "en_US.UTF-8" }, { "French" , "fr.UTF-8" }, -- { "German" , "de.UTF-8" }, { "Italian" , "it.UTF-8" }, -- { "Dutch" , "nl.UTF-8" }, { "Swedish" , "sv.UTF-8" }, -- { "Spanish" , "es.UTF-8" }, { "Danish" , "da.UTF-8" }, -- { "Portuguese" , "pt.UTF-8" }, { "Norwegian" , "no.UTF-8" }, -- { "Hebrew" , "he.UTF-8" }, { "Japanese" , "ja.UTF-8" }, -- { "Arabic" , "ar.UTF-8" }, { "Finnish" , "fi.UTF-8" }, -- { "Greek" , "el.UTF-8" }, { "Icelandic" , "is.UTF-8" }, -- { "Maltese" , "mt.UTF-8" }, { "Turkish" , "tr.UTF-8" }, -- { "Croatian" , "hr.UTF-8" }, { "Chinese" , "zh.UTF-8" }, -- { "Urdu" , "ur.UTF-8" }, { "Hindi" , "hi.UTF-8" }, -- { "Thai" , "th.UTF-8" }, { "Korean" , "ko.UTF-8" }, -- { "Lithuanian" , "lt.UTF-8" }, { "Polish" , "pl.UTF-8" }, -- { "Hungarian" , "hu.UTF-8" }, { "Estonian" , "et.UTF-8" }, -- { "Latvian" , "lv.UTF-8" }, { "Sami" , "se.UTF-8" }, -- { "Faroese" , "fo.UTF-8" }, { "Farsi" , "fa.UTF-8" }, -- { "Russian" , "ru.UTF-8" }, { "Chinese" , "zh.UTF-8" }, -- { "Dutch" , "nl.UTF-8" }, { "Irish" , "ga.UTF-8" }, -- { "Albanian" , "sq.UTF-8" }, { "Romanian" , "ro.UTF-8" }, -- { "Czech" , "cs.UTF-8" }, { "Slovak" , "sk.UTF-8" }, -- { "Slovenian" , "sl.UTF-8" }, { "Yiddish" , "yi.UTF-8" }, -- { "Serbian" , "sr.UTF-8" }, { "Macedonian" , "mk.UTF-8" }, -- { "Bulgarian" , "bg.UTF-8" }, { "Ukrainian" , "uk.UTF-8" }, -- { "Byelorussian", "be.UTF-8" }, { "Uzbek" , "uz.UTF-8" }, -- { "Kazakh" , "kk.UTF-8" }, { "Azerbaijani", "az.UTF-8" }, -- { "Azerbaijani" , "az.UTF-8" }, { "Armenian" , "hy.UTF-8" }, -- { "Georgian" , "ka.UTF-8" }, { "Moldavian" , "mo.UTF-8" }, -- { "Kirghiz" , "ky.UTF-8" }, { "Tajiki" , "tg.UTF-8" }, -- { "Turkmen" , "tk.UTF-8" }, { "Mongolian" , "mn.UTF-8" }, -- { "Mongolian" , "mn.UTF-8" }, { "Pashto" , "ps.UTF-8" }, -- { "Kurdish" , "ku.UTF-8" }, { "Kashmiri" , "ks.UTF-8" }, -- { "Sindhi" , "sd.UTF-8" }, { "Tibetan" , "bo.UTF-8" }, -- { "Nepali" , "ne.UTF-8" }, { "Sanskrit" , "sa.UTF-8" }, -- { "Marathi" , "mr.UTF-8" }, { "Bengali" , "bn.UTF-8" }, -- { "Assamese" , "as.UTF-8" }, { "Gujarati" , "gu.UTF-8" }, -- { "Punjabi" , "pa.UTF-8" }, { "Oriya" , "or.UTF-8" }, -- { "Malayalam" , "ml.UTF-8" }, { "Kannada" , "kn.UTF-8" }, -- { "Tamil" , "ta.UTF-8" }, { "Telugu" , "te.UTF-8" }, -- { "Sinhalese" , "si.UTF-8" }, { "Burmese" , "my.UTF-8" }, -- { "Khmer" , "km.UTF-8" }, { "Lao" , "lo.UTF-8" }, -- { "Vietnamese" , "vi.UTF-8" }, { "Indonesian" , "id.UTF-8" }, -- { "Tagalog" , "tl.UTF-8" }, { "Malay" , "ms.UTF-8" }, -- { "Malay" , "ms.UTF-8" }, { "Amharic" , "am.UTF-8" }, -- { "Tigrinya" , "ti.UTF-8" }, { "Oromo" , "om.UTF-8" }, -- { "Somali" , "so.UTF-8" }, { "Swahili" , "sw.UTF-8" }, -- { "Kinyarwanda" , "rw.UTF-8" }, { "Rundi" , "rn.UTF-8" }, -- { "Nyanja" , "" }, { "Malagasy" , "mg.UTF-8" }, -- { "Esperanto" , "eo.UTF-8" }, { "Welsh" , "cy.UTF-8" }, -- { "Basque" , "eu.UTF-8" }, { "Catalan" , "ca.UTF-8" }, -- { "Latin" , "la.UTF-8" }, { "Quechua" , "qu.UTF-8" }, -- { "Guarani" , "gn.UTF-8" }, { "Aymara" , "ay.UTF-8" }, -- { "Tatar" , "tt.UTF-8" }, { "Uighur" , "ug.UTF-8" }, -- { "Dzongkha" , "dz.UTF-8" }, { "Javanese" , "jv.UTF-8" }, -- { "Sundanese" , "su.UTF-8" }, { "Galician" , "gl.UTF-8" }, -- { "Afrikaans" , "af.UTF-8" }, { "Breton" , "br.UTF-8" }, -- { "Inuktitut" , "iu.UTF-8" }, { "Scottish" , "gd.UTF-8" }, -- { "Manx" , "gv.UTF-8" }, { "Irish" , "ga.UTF-8" }, -- { "Tongan" , "to.UTF-8" }, { "Greek" , "el.UTF-8" }, -- { "Greenlandic" , "kl.UTF-8" }, { "Azerbaijani", "az.UTF-8" } --}; -- -- --/* -- * 'appleLangDefault()' - Get the default locale string. -- */ -- --static const char * /* O - Locale string */ --appleLangDefault(void) --{ -- int i; /* Looping var */ -- CFPropertyListRef localizationList; -- /* List of localization data */ -- CFStringRef localizationName; -- /* Current name */ -- char buff[256]; /* Temporary buffer */ -- _cups_globals_t *cg = _cupsGlobals(); -- /* Pointer to library globals */ -- char *lang; /* LANG environment variable */ -- -- -- /* -- * Only do the lookup and translation the first time. -- */ -- -- if (!cg->language[0]) -- { -- if ((lang = getenv("LANG"))) -- strlcpy(cg->language, lang, sizeof(cg->language)); -- else -- { -- localizationList = -- CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), -- kCFPreferencesCurrentApplication); -- -- if (localizationList != NULL) -- { -- if (CFGetTypeID(localizationList) == CFArrayGetTypeID() && -- CFArrayGetCount(localizationList) > 0) -- { -- localizationName = CFArrayGetValueAtIndex(localizationList, 0); -- -- if (localizationName != NULL && -- CFGetTypeID(localizationName) == CFStringGetTypeID()) -- { -- CFIndex length = CFStringGetLength(localizationName); -- -- if (length <= sizeof(buff) && -- CFStringGetCString(localizationName, buff, sizeof(buff), -- kCFStringEncodingASCII)) -- { -- buff[sizeof(buff) - 1] = '\0'; -- -- for (i = 0; -- i < sizeof(apple_name_locale) / sizeof(apple_name_locale[0]); -- i++) -- { -- if (!strcasecmp(buff, apple_name_locale[i].name)) -- { -- strlcpy(cg->language, apple_name_locale[i].locale, -- sizeof(cg->language)); -- break; -- } -- } -- } -- } -- } -- -- CFRelease(localizationList); -- } -- } -- -- /* -- * If we didn't find the language, default to en_US... -- */ -- -- if (!cg->language[0]) -- strlcpy(cg->language, apple_name_locale[0].locale, sizeof(cg->language)); -- } -- -- /* -- * Return the cached locale... -- */ -- -- return (cg->language); --} --# endif /* HAVE_CF_LOCALE_ID */ - #endif /* __APPLE__ */ - - -diff -up cups-1.3.5/cups/emit.c.1.3.x cups-1.3.5/cups/emit.c ---- cups-1.3.5/cups/emit.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/emit.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * PPD code emission routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -106,15 +106,24 @@ ppdCollect2(ppd_file_t *ppd, /* I - - DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)\n", - ppd, section, min_order, choices)); - -- if (ppd == NULL) -+ if (!ppd || !choices) -+ { -+ if (choices) -+ *choices = NULL; -+ - return (0); -+ } - - /* - * Allocate memory for up to 1000 selected choices... - */ - -- count = 0; -- collect = calloc(sizeof(ppd_choice_t *), 1000); -+ count = 0; -+ if ((collect = calloc(sizeof(ppd_choice_t *), 1000)) == NULL) -+ { -+ *choices = NULL; -+ return (0); -+ } - - /* - * Loop through all options and add choices as needed... -diff -up cups-1.3.5/cups/ipp-private.h.1.3.x cups-1.3.5/cups/ipp-private.h ---- cups-1.3.5/cups/ipp-private.h.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/ipp-private.h 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Private IPP definitions for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -40,6 +40,7 @@ extern "C" { - - typedef struct /**** Attribute mapping data ****/ - { -+ int multivalue; /* Option has multiple values? */ - const char *name; /* Option/attribute name */ - ipp_tag_t value_tag; /* Value tag for this attribute */ - ipp_tag_t group_tag; /* Group tag for this attribute */ -diff -up cups-1.3.5/cups/http-addrlist.c.1.3.x cups-1.3.5/cups/http-addrlist.c ---- cups-1.3.5/cups/http-addrlist.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/cups/http-addrlist.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * HTTP address list routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -202,9 +202,11 @@ httpAddrGetList(const char *hostname, /* - * Domain socket address... - */ - -- first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t)); -- first->addr.un.sun_family = AF_LOCAL; -- strlcpy(first->addr.un.sun_path, hostname, sizeof(first->addr.un.sun_path)); -+ if ((first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t))) != NULL) -+ { -+ first->addr.un.sun_family = AF_LOCAL; -+ strlcpy(first->addr.un.sun_path, hostname, sizeof(first->addr.un.sun_path)); -+ } - } - else - #endif /* AF_LOCAL */ -diff -up cups-1.3.5/cups/http-private.h.1.3.x cups-1.3.5/cups/http-private.h ---- cups-1.3.5/cups/http-private.h.1.3.x 2007-09-10 17:46:20.000000000 +0100 -+++ cups-1.3.5/cups/http-private.h 2008-02-14 13:03:30.000000000 +0000 -@@ -26,12 +26,6 @@ - # include - - # ifdef __sun --/* -- * Define FD_SETSIZE to CUPS_MAX_FDS on Solaris to get the correct version of -- * select() for large numbers of file descriptors. -- */ -- --# define FD_SETSIZE CUPS_MAX_FDS - # include - # endif /* __sun */ - -diff -up cups-1.3.5/cups/ppd.c.1.3.x cups-1.3.5/cups/ppd.c ---- cups-1.3.5/cups/ppd.c.1.3.x 2007-11-30 19:29:50.000000000 +0000 -+++ cups-1.3.5/cups/ppd.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * PPD file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -814,6 +814,13 @@ ppdOpen2(cups_file_t *fp) /* I - File t - profile = realloc(ppd->profiles, sizeof(ppd_profile_t) * - (ppd->num_profiles + 1)); - -+ if (!profile) -+ { -+ cg->ppd_status = PPD_ALLOC_ERROR; -+ -+ goto error; -+ } -+ - ppd->profiles = profile; - profile += ppd->num_profiles; - ppd->num_profiles ++; -@@ -1102,7 +1109,12 @@ ppdOpen2(cups_file_t *fp) /* I - File t - } - - ppd->num_emulations = count; -- ppd->emulations = calloc(count, sizeof(ppd_emul_t)); -+ if ((ppd->emulations = calloc(count, sizeof(ppd_emul_t))) == NULL) -+ { -+ cg->ppd_status = PPD_ALLOC_ERROR; -+ -+ goto error; -+ } - - for (i = 0, sptr = string; i < count; i ++) - { -@@ -1866,7 +1878,12 @@ ppdOpen2(cups_file_t *fp) /* I - File t - * Add the option choice... - */ - -- choice = ppd_add_choice(option, name); -+ if ((choice = ppd_add_choice(option, name)) == NULL) -+ { -+ cg->ppd_status = PPD_ALLOC_ERROR; -+ -+ goto error; -+ } - - if (text[0]) - cupsCharsetToUTF8((cups_utf8_t *)choice->text, text, -diff -up cups-1.3.5/cups/cups.h.1.3.x cups-1.3.5/cups/cups.h ---- cups-1.3.5/cups/cups.h.1.3.x 2007-11-01 23:29:14.000000000 +0000 -+++ cups-1.3.5/cups/cups.h 2008-02-14 13:03:30.000000000 +0000 -@@ -59,10 +59,10 @@ extern "C" { - * Constants... - */ - --# define CUPS_VERSION 1.0305 -+# define CUPS_VERSION 1.0306 - # define CUPS_VERSION_MAJOR 1 - # define CUPS_VERSION_MINOR 3 --# define CUPS_VERSION_PATCH 5 -+# define CUPS_VERSION_PATCH 6 - # define CUPS_DATE_ANY -1 - - -diff -up cups-1.3.5/cups/ipp.c.1.3.x cups-1.3.5/cups/ipp.c ---- cups-1.3.5/cups/ipp.c.1.3.x 2007-10-31 18:35:56.000000000 +0000 -+++ cups-1.3.5/cups/ipp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Internet Printing Protocol support functions for the Common UNIX - * Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -361,7 +361,12 @@ ippAddOctetString(ipp_t *ipp, /* I - - if (data) - { -- attr->values[0].unknown.data = malloc(datalen); -+ if ((attr->values[0].unknown.data = malloc(datalen)) == NULL) -+ { -+ ippDeleteAttribute(ipp, attr); -+ return (NULL); -+ } -+ - memcpy(attr->values[0].unknown.data, data, datalen); - } - -@@ -1182,17 +1187,15 @@ ippReadIO(void *src, /* I - Data - - attr->value_tag = tag; - } -- else if (value_tag == IPP_TAG_STRING || -- (value_tag >= IPP_TAG_TEXTLANG && -- value_tag <= IPP_TAG_MIMETYPE)) -+ else if (value_tag >= IPP_TAG_TEXTLANG && -+ value_tag <= IPP_TAG_MIMETYPE) - { - /* - * String values can sometimes come across in different - * forms; accept sets of differing values... - */ - -- if (tag != IPP_TAG_STRING && -- (tag < IPP_TAG_TEXTLANG || tag > IPP_TAG_MIMETYPE)) -+ if (tag < IPP_TAG_TEXTLANG || tag > IPP_TAG_MIMETYPE) - return (IPP_ERROR); - } - else if (value_tag != tag) -@@ -1277,7 +1280,11 @@ ippReadIO(void *src, /* I - Data - if (ipp->current) - ipp->prev = ipp->current; - -- attr = ipp->current = _ippAddAttr(ipp, 1); -+ if ((attr = ipp->current = _ippAddAttr(ipp, 1)) == NULL) -+ { -+ DEBUG_puts("ippReadIO: unable to allocate attribute!"); -+ return (IPP_ERROR); -+ } - - DEBUG_printf(("ippReadIO: name=\'%s\', ipp->current=%p, ipp->prev=%p\n", - buffer, ipp->current, ipp->prev)); -@@ -1325,6 +1332,7 @@ ippReadIO(void *src, /* I - Data - - value->integer = n; - break; -+ - case IPP_TAG_BOOLEAN : - if (n != 1) - { -@@ -1340,10 +1348,10 @@ ippReadIO(void *src, /* I - Data - - value->boolean = buffer[0]; - break; -+ - case IPP_TAG_TEXT : - case IPP_TAG_NAME : - case IPP_TAG_KEYWORD : -- case IPP_TAG_STRING : - case IPP_TAG_URI : - case IPP_TAG_URISCHEME : - case IPP_TAG_CHARSET : -@@ -1366,6 +1374,7 @@ ippReadIO(void *src, /* I - Data - DEBUG_printf(("ippReadIO: value = \'%s\'\n", - value->string.text)); - break; -+ - case IPP_TAG_DATE : - if (n != 11) - { -@@ -1379,6 +1388,7 @@ ippReadIO(void *src, /* I - Data - return (IPP_ERROR); - } - break; -+ - case IPP_TAG_RESOLUTION : - if (n != 9) - { -@@ -1401,6 +1411,7 @@ ippReadIO(void *src, /* I - Data - value->resolution.units = - (ipp_res_t)buffer[8]; - break; -+ - case IPP_TAG_RANGE : - if (n != 8) - { -@@ -1421,6 +1432,7 @@ ippReadIO(void *src, /* I - Data - (((((buffer[4] << 8) | buffer[5]) << 8) | buffer[6]) << 8) | - buffer[7]; - break; -+ - case IPP_TAG_TEXTLANG : - case IPP_TAG_NAMELANG : - if (n >= sizeof(buffer) || n < 4) -@@ -1538,7 +1550,7 @@ ippReadIO(void *src, /* I - Data - break; - - default : /* Other unsupported values */ -- if (n > sizeof(buffer)) -+ if (n > IPP_MAX_LENGTH) - { - DEBUG_printf(("ippReadIO: bad value length %d!\n", n)); - return (IPP_ERROR); -@@ -1547,7 +1559,12 @@ ippReadIO(void *src, /* I - Data - value->unknown.length = n; - if (n > 0) - { -- value->unknown.data = malloc(n); -+ if ((value->unknown.data = malloc(n)) == NULL) -+ { -+ DEBUG_puts("ippReadIO: Unable to allocate value"); -+ return (IPP_ERROR); -+ } -+ - if ((*cb)(src, value->unknown.data, n) < n) - { - DEBUG_puts("ippReadIO: Unable to read unsupported value!"); -@@ -1941,7 +1958,6 @@ ippWriteIO(void *dst, /* I - Dest - case IPP_TAG_TEXT : - case IPP_TAG_NAME : - case IPP_TAG_KEYWORD : -- case IPP_TAG_STRING : - case IPP_TAG_URI : - case IPP_TAG_URISCHEME : - case IPP_TAG_CHARSET : -@@ -2507,7 +2523,6 @@ _ippFreeAttr(ipp_attribute_t *attr) /* I - case IPP_TAG_TEXT : - case IPP_TAG_NAME : - case IPP_TAG_KEYWORD : -- case IPP_TAG_STRING : - case IPP_TAG_URI : - case IPP_TAG_URISCHEME : - case IPP_TAG_CHARSET : -@@ -2546,6 +2561,13 @@ _ippFreeAttr(ipp_attribute_t *attr) /* I - ippDelete(value->collection); - break; - -+ case IPP_TAG_STRING : -+ for (i = 0, value = attr->values; -+ i < attr->num_values; -+ i ++, value ++) -+ free(value->unknown.data); -+ break; -+ - default : - if (!((int)attr->value_tag & IPP_TAG_COPY)) - { -@@ -2634,7 +2656,6 @@ ipp_length(ipp_t *ipp, /* I - IPP mess - case IPP_TAG_TEXT : - case IPP_TAG_NAME : - case IPP_TAG_KEYWORD : -- case IPP_TAG_STRING : - case IPP_TAG_URI : - case IPP_TAG_URISCHEME : - case IPP_TAG_CHARSET : -diff -up cups-1.3.5/cups/encode.c.1.3.x cups-1.3.5/cups/encode.c ---- cups-1.3.5/cups/encode.c.1.3.x 2007-11-02 19:15:27.000000000 +0000 -+++ cups-1.3.5/cups/encode.c 2008-02-14 13:03:30.000000000 +0000 -@@ -43,98 +43,98 @@ - - static const _ipp_option_t ipp_options[] = - { -- { "auth-info", IPP_TAG_TEXT, IPP_TAG_JOB }, -- { "auth-info-required", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -- { "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "blackplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "brightness", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "brightness-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "columns", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "columns-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "copies", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION }, -- { "document-format-default", IPP_TAG_MIMETYPE, IPP_TAG_PRINTER }, -- { "finishings", IPP_TAG_ENUM, IPP_TAG_JOB }, -- { "finishings-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -- { "fitplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "fitplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "gamma", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "gamma-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "hue", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "hue-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "job-k-limit", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "job-page-limit", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "job-priority", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "job-quota-period", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "job-uuid", IPP_TAG_URI, IPP_TAG_JOB }, -- { "landscape", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "media", IPP_TAG_KEYWORD, IPP_TAG_JOB }, -- { "mirror", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "mirror-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "natural-scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "natural-scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "notify-charset", IPP_TAG_CHARSET, IPP_TAG_SUBSCRIPTION }, -- { "notify-events", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, -- { "notify-events-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -- { "notify-lease-duration", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, -- { "notify-lease-duration-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "notify-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_SUBSCRIPTION }, -- { "notify-pull-method", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, -- { "notify-recipient-uri", IPP_TAG_URI, IPP_TAG_SUBSCRIPTION }, -- { "notify-time-interval", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, -- { "notify-user-data", IPP_TAG_STRING, IPP_TAG_SUBSCRIPTION }, -- { "number-up", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "number-up-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "orientation-requested", IPP_TAG_ENUM, IPP_TAG_JOB }, -- { "orientation-requested-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -- { "page-bottom", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "page-bottom-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "page-left", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "page-left-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "page-ranges", IPP_TAG_RANGE, IPP_TAG_JOB }, -- { "page-ranges-default", IPP_TAG_RANGE, IPP_TAG_PRINTER }, -- { "page-right", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "page-right-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "page-top", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "page-top-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "penwidth", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "penwidth-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "port-monitor", IPP_TAG_NAME, IPP_TAG_PRINTER }, -- { "ppi", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "prettyprint-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "print-quality", IPP_TAG_ENUM, IPP_TAG_JOB }, -- { "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -- { "printer-error-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, -- { "printer-info", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -- { "printer-is-accepting-jobs",IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "printer-is-shared", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -- { "printer-location", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -- { "printer-make-and-model", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -- { "printer-more-info", IPP_TAG_URI, IPP_TAG_PRINTER }, -- { "printer-op-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, -- { "printer-resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB }, -- { "printer-state", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -- { "printer-state-change-time",IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "printer-state-reasons", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -- { "printer-type", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -- { "printer-uri", IPP_TAG_URI, IPP_TAG_OPERATION }, -- { "queued-job-count", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "raw", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION }, -- { "requesting-user-name-allowed", IPP_TAG_NAME, IPP_TAG_PRINTER }, -- { "requesting-user-name-denied", IPP_TAG_NAME, IPP_TAG_PRINTER }, -- { "resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB }, -- { "resolution-default", IPP_TAG_RESOLUTION, IPP_TAG_PRINTER }, -- { "saturation", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "saturation-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, -- { "scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -- { "sides", IPP_TAG_KEYWORD, IPP_TAG_JOB }, -- { "sides-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -- { "wrap", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -- { "wrap-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER } -+ { 1, "auth-info", IPP_TAG_TEXT, IPP_TAG_JOB }, -+ { 1, "auth-info-required", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -+ { 0, "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 0, "blackplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "brightness", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "brightness-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "columns", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "columns-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "copies", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION }, -+ { 0, "document-format-default", IPP_TAG_MIMETYPE, IPP_TAG_PRINTER }, -+ { 1, "finishings", IPP_TAG_ENUM, IPP_TAG_JOB }, -+ { 1, "finishings-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -+ { 0, "fitplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 0, "fitplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "gamma", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "gamma-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "hue", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "hue-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "job-k-limit", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "job-page-limit", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "job-priority", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "job-quota-period", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "job-uuid", IPP_TAG_URI, IPP_TAG_JOB }, -+ { 0, "landscape", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 1, "media", IPP_TAG_KEYWORD, IPP_TAG_JOB }, -+ { 0, "mirror", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 0, "mirror-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "natural-scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "natural-scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "notify-charset", IPP_TAG_CHARSET, IPP_TAG_SUBSCRIPTION }, -+ { 1, "notify-events", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, -+ { 1, "notify-events-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -+ { 0, "notify-lease-duration", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, -+ { 0, "notify-lease-duration-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "notify-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_SUBSCRIPTION }, -+ { 0, "notify-pull-method", IPP_TAG_KEYWORD, IPP_TAG_SUBSCRIPTION }, -+ { 0, "notify-recipient-uri", IPP_TAG_URI, IPP_TAG_SUBSCRIPTION }, -+ { 0, "notify-time-interval", IPP_TAG_INTEGER, IPP_TAG_SUBSCRIPTION }, -+ { 0, "notify-user-data", IPP_TAG_STRING, IPP_TAG_SUBSCRIPTION }, -+ { 0, "number-up", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "number-up-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "orientation-requested", IPP_TAG_ENUM, IPP_TAG_JOB }, -+ { 0, "orientation-requested-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -+ { 0, "page-bottom", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "page-bottom-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "page-left", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "page-left-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 1, "page-ranges", IPP_TAG_RANGE, IPP_TAG_JOB }, -+ { 1, "page-ranges-default", IPP_TAG_RANGE, IPP_TAG_PRINTER }, -+ { 0, "page-right", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "page-right-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "page-top", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "page-top-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "penwidth", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "penwidth-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "port-monitor", IPP_TAG_NAME, IPP_TAG_PRINTER }, -+ { 0, "ppi", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 0, "prettyprint-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "print-quality", IPP_TAG_ENUM, IPP_TAG_JOB }, -+ { 0, "print-quality-default", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -+ { 0, "printer-error-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, -+ { 0, "printer-info", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -+ { 0, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "printer-is-shared", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }, -+ { 0, "printer-location", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -+ { 0, "printer-make-and-model", IPP_TAG_TEXT, IPP_TAG_PRINTER }, -+ { 0, "printer-more-info", IPP_TAG_URI, IPP_TAG_PRINTER }, -+ { 0, "printer-op-policy", IPP_TAG_NAME, IPP_TAG_PRINTER }, -+ { 0, "printer-resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB }, -+ { 0, "printer-state", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -+ { 0, "printer-state-change-time", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 1, "printer-state-reasons", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -+ { 0, "printer-type", IPP_TAG_ENUM, IPP_TAG_PRINTER }, -+ { 0, "printer-uri", IPP_TAG_URI, IPP_TAG_OPERATION }, -+ { 0, "queued-job-count", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "raw", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION }, -+ { 1, "requesting-user-name-allowed", IPP_TAG_NAME, IPP_TAG_PRINTER }, -+ { 1, "requesting-user-name-denied", IPP_TAG_NAME, IPP_TAG_PRINTER }, -+ { 0, "resolution", IPP_TAG_RESOLUTION, IPP_TAG_JOB }, -+ { 0, "resolution-default", IPP_TAG_RESOLUTION, IPP_TAG_PRINTER }, -+ { 0, "saturation", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "saturation-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "scaling", IPP_TAG_INTEGER, IPP_TAG_JOB }, -+ { 0, "scaling-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER }, -+ { 0, "sides", IPP_TAG_KEYWORD, IPP_TAG_JOB }, -+ { 0, "sides-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER }, -+ { 0, "wrap", IPP_TAG_BOOLEAN, IPP_TAG_JOB }, -+ { 0, "wrap-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER } - }; - - -@@ -192,7 +192,8 @@ cupsEncodeOptions2( - char *s, /* Pointer into option value */ - *val, /* Pointer to option value */ - *copy, /* Copy of option value */ -- *sep; /* Option separator */ -+ *sep, /* Option separator */ -+ quote; /* Quote character */ - ipp_attribute_t *attr; /* IPP attribute */ - ipp_tag_t value_tag; /* IPP value tag */ - cups_option_t *option; /* Current option */ -@@ -284,41 +285,28 @@ cupsEncodeOptions2( - * Count the number of values... - */ - -- for (count = 1, sep = option->value; *sep; sep ++) -+ if (match && match->multivalue) - { -- if (*sep == '\'') -+ for (count = 1, sep = option->value, quote = 0; *sep; sep ++) - { -- /* -- * Skip quoted option value... -- */ -- -- sep ++; -- -- while (*sep && *sep != '\'') -- sep ++; -- -- if (!*sep) -- sep --; -- } -- else if (*sep == '\"') -- { -- /* -- * Skip quoted option value... -- */ -- -- sep ++; -- -- while (*sep && *sep != '\"') -+ if (*sep == quote) -+ quote = 0; -+ else if (!quote && (*sep == '\'' || *sep == '\"')) -+ { -+ /* -+ * Skip quoted option value... -+ */ -+ -+ quote = *sep++; -+ } -+ else if (*sep == ',' && !quote) -+ count ++; -+ else if (*sep == '\\' && sep[1]) - sep ++; -- -- if (!*sep) -- sep --; - } -- else if (*sep == ',') -- count ++; -- else if (*sep == '\\' && sep[1]) -- sep ++; - } -+ else -+ count = 1; - - DEBUG_printf(("cupsEncodeOptions2: option = \'%s\', count = %d\n", - option->name, count)); -@@ -390,16 +378,47 @@ cupsEncodeOptions2( - * Scan the value string for values... - */ - -- for (j = 0; j < count; val = sep, j ++) -+ for (j = 0, sep = val; j < count; val = sep, j ++) - { - /* - * Find the end of this value and mark it if needed... - */ - -- if ((sep = strchr(val, ',')) != NULL) -- *sep++ = '\0'; -- else -- sep = val + strlen(val); -+ if (count > 1) -+ { -+ for (quote = 0; *sep; sep ++) -+ { -+ if (*sep == quote) -+ { -+ /* -+ * Finish quoted value... -+ */ -+ -+ quote = 0; -+ } -+ else if (!quote && (*sep == '\'' || *sep == '\"')) -+ { -+ /* -+ * Handle quoted option value... -+ */ -+ -+ quote = *sep; -+ } -+ else if (*sep == ',' && count > 1) -+ break; -+ else if (*sep == '\\' && sep[1]) -+ { -+ /* -+ * Skip quoted character... -+ */ -+ -+ sep ++; -+ } -+ } -+ -+ if (*sep == ',') -+ *sep++ = '\0'; -+ } - - /* - * Copy the option value(s) over as needed by the type... -@@ -413,7 +432,7 @@ cupsEncodeOptions2( - * Integer/enumeration value... - */ - -- attr->values[j].integer = strtol(val, &s, 0); -+ attr->values[j].integer = strtol(val, &s, 10); - - DEBUG_printf(("cupsEncodeOptions2: Added integer option value %d...\n", - attr->values[j].integer)); -@@ -455,12 +474,12 @@ cupsEncodeOptions2( - s = val; - } - else -- attr->values[j].range.lower = strtol(val, &s, 0); -+ attr->values[j].range.lower = strtol(val, &s, 10); - - if (*s == '-') - { - if (s[1]) -- attr->values[j].range.upper = strtol(s + 1, NULL, 0); -+ attr->values[j].range.upper = strtol(s + 1, NULL, 10); - else - attr->values[j].range.upper = 2147483647; - } -@@ -477,10 +496,10 @@ cupsEncodeOptions2( - * Resolution... - */ - -- attr->values[j].resolution.xres = strtol(val, &s, 0); -+ attr->values[j].resolution.xres = strtol(val, &s, 10); - - if (*s == 'x') -- attr->values[j].resolution.yres = strtol(s + 1, &s, 0); -+ attr->values[j].resolution.yres = strtol(s + 1, &s, 10); - else - attr->values[j].resolution.yres = attr->values[j].resolution.xres; - -@@ -499,7 +518,7 @@ cupsEncodeOptions2( - */ - - attr->values[j].unknown.length = (int)strlen(val); -- attr->values[j].unknown.data = _cupsStrAlloc(val); -+ attr->values[j].unknown.data = strdup(val); - - DEBUG_printf(("cupsEncodeOptions2: Added octet-string value \"%s\"...\n", - attr->values[j].unknown.data)); -diff -up cups-1.3.5/notifier/Makefile.1.3.x cups-1.3.5/notifier/Makefile ---- cups-1.3.5/notifier/Makefile.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/notifier/Makefile 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - # - # Notifier makefile for the Common UNIX Printing System (CUPS). - # --# Copyright 2007 by Apple Inc. -+# Copyright 2007-2008 by Apple Inc. - # Copyright 1997-2007 by Easy Software Products, all rights reserved. - # - # These coded instructions, statements, and computer programs are the -@@ -44,7 +44,7 @@ install: all - for file in $(TARGETS); do \ - $(INSTALL_BIN) $$file $(SERVERBIN)/notifier; \ - done -- $(INSTALL_DIR) -m 755 $(CACHEDIR)/rss -+ $(INSTALL_DIR) -m 775 $(CACHEDIR)/rss - -chgrp $(CUPS_GROUP) $(CACHEDIR)/rss - if test "x$(SYMROOT)" != "x"; then \ - $(INSTALL_DIR) $(SYMROOT); \ -diff -up cups-1.3.5/pdftops/pdftops.cxx.1.3.x cups-1.3.5/pdftops/pdftops.cxx ---- cups-1.3.5/pdftops/pdftops.cxx.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/pdftops/pdftops.cxx 2008-02-14 13:03:30.000000000 +0000 -@@ -308,8 +308,7 @@ main(int argc, // I - Number of comm - // write PostScript file - psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(), - doc->getCatalog(), 1, doc->getNumPages(), -- psModePS, 0, 0, 0, 0, gFalse, -- cupsGetOption("page-ranges", num_options, options)); -+ psModePS, 0, 0, 0, 0, gFalse, NULL); - if (psOut->isOk()) - doc->displayPages(psOut, 1, doc->getNumPages(), 72.0, 72.0, 0, - gTrue, gFalse, gFalse); -diff -up cups-1.3.5/scheduler/testspeed.c.1.3.x cups-1.3.5/scheduler/testspeed.c ---- cups-1.3.5/scheduler/testspeed.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/testspeed.c 2008-02-14 13:03:30.000000000 +0000 -@@ -166,7 +166,7 @@ main(int argc, /* I - Number of comm - * Exit with no errors... - */ - -- return (status); -+ return (0); - } - - -diff -up cups-1.3.5/scheduler/banners.c.1.3.x cups-1.3.5/scheduler/banners.c ---- cups-1.3.5/scheduler/banners.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/banners.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Banner routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -147,8 +147,8 @@ add_banner(const char *name, /* I - Nam - if ((filetype = mimeFileType(MimeDatabase, filename, NULL, NULL)) == NULL) - { - cupsdLogMessage(CUPSD_LOG_WARN, -- "add_banner: Banner \"%s\" (\"%s\") is of an unknown file type - skipping!", -- name, filename); -+ "add_banner: Banner \"%s\" (\"%s\") is of an unknown file " -+ "type - skipping!", name, filename); - return; - } - -@@ -156,13 +156,27 @@ add_banner(const char *name, /* I - Nam - * Allocate memory... - */ - -- temp = calloc(1, sizeof(cupsd_banner_t)); -+ if ((temp = calloc(1, sizeof(cupsd_banner_t))) == NULL) -+ { -+ cupsdLogMessage(CUPSD_LOG_WARN, -+ "add_banner: Unable to allocate memory for banner \"%s\" - " -+ "skipping!", name); -+ return; -+ } - - /* - * Copy the new banner data over... - */ - -- temp->name = strdup(name); -+ if ((temp->name = strdup(name)) == NULL) -+ { -+ cupsdLogMessage(CUPSD_LOG_WARN, -+ "add_banner: Unable to allocate memory for banner \"%s\" - " -+ "skipping!", name); -+ free(temp); -+ return; -+ } -+ - temp->filetype = filetype; - - cupsArrayAdd(Banners, temp); -diff -up cups-1.3.5/scheduler/printers.h.1.3.x cups-1.3.5/scheduler/printers.h ---- cups-1.3.5/scheduler/printers.h.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/printers.h 2008-02-14 13:03:30.000000000 +0000 -@@ -86,6 +86,7 @@ typedef struct cupsd_printer_s - const char *auth_info_required[4]; /* Required authentication fields */ - char *alert, /* PSX printer-alert value */ - *alert_description; /* PSX printer-alert-description value */ -+ time_t marker_time; /* Last time marker attributes were updated */ - - #ifdef __APPLE__ - char *recoverable; /* com.apple.print.recoverable-message */ -@@ -150,6 +151,8 @@ extern void cupsdSaveAllPrinters(void); - extern int cupsdSetAuthInfoRequired(cupsd_printer_t *p, - const char *values, - ipp_attribute_t *attr); -+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, - const char *s); -diff -up cups-1.3.5/scheduler/cupsfilter.c.1.3.x cups-1.3.5/scheduler/cupsfilter.c ---- cups-1.3.5/scheduler/cupsfilter.c.1.3.x 2007-08-20 21:16:00.000000000 +0100 -+++ cups-1.3.5/scheduler/cupsfilter.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * CUPS filtering program for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -131,6 +131,7 @@ main(int argc, /* I - Number of comm - - mime = NULL; - srctype = NULL; -+ compression = 0; - dsttype = "application/pdf"; - infile = NULL; - outfile = NULL; -@@ -456,7 +457,8 @@ escape_options( - for (i = num_options, option = options, bytes = 1; i > 0; i --, option ++) - bytes += 2 * (strlen(option->name) + strlen(option->value)) + 2; - -- s = malloc(bytes); -+ if ((s = malloc(bytes)) == NULL) -+ return (NULL); - - /* - * Copy the options to the string... -@@ -806,6 +808,8 @@ exec_filters(cups_array_t *filters, /* - } - } - -+ cupsArrayDelete(pids); -+ - return (retval); - } - -diff -up cups-1.3.5/scheduler/main.c.1.3.x cups-1.3.5/scheduler/main.c ---- cups-1.3.5/scheduler/main.c.1.3.x 2007-11-09 19:54:09.000000000 +0000 -+++ cups-1.3.5/scheduler/main.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Scheduler main loop for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -133,10 +133,7 @@ main(int argc, /* I - Number of comm - browse_time, /* Next browse send time */ - senddoc_time, /* Send-Document time */ - expire_time, /* Subscription expire time */ -- mallinfo_time; /* Malloc information time */ -- size_t string_count, /* String count */ -- alloc_bytes, /* Allocated string bytes */ -- total_bytes; /* Total string bytes */ -+ report_time; /* Malloc/client/job report time */ - long timeout; /* Timeout for cupsdDoSelect() */ - struct rlimit limit; /* Runtime limit */ - #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) -@@ -149,6 +146,8 @@ main(int argc, /* I - Number of comm - #ifdef __APPLE__ - int run_as_child = 0; - /* Needed for Mac OS X fork/exec */ -+#else -+ time_t netif_time = 0; /* Time since last network update */ - #endif /* __APPLE__ */ - #if HAVE_LAUNCHD - int launchd_idle_exit; -@@ -226,11 +225,22 @@ main(int argc, /* I - Number of comm - * are passed a NULL pointer. - */ - -- current = malloc(1024); -- getcwd(current, 1024); -+ if ((current = malloc(1024)) == NULL) -+ { -+ _cupsLangPuts(stderr, -+ _("cupsd: Unable to get current directory!\n")); -+ return (1); -+ } -+ -+ if (!getcwd(current, 1024)) -+ { -+ _cupsLangPuts(stderr, -+ _("cupsd: Unable to get current directory!\n")); -+ free(current); -+ return (1); -+ } - - cupsdSetStringf(&ConfigurationFile, "%s/%s", current, argv[i]); -- - free(current); - } - break; -@@ -632,11 +642,11 @@ main(int argc, /* I - Number of comm - * Loop forever... - */ - -- mallinfo_time = 0; - browse_time = time(NULL); -- senddoc_time = time(NULL); - expire_time = time(NULL); - fds = 1; -+ report_time = 0; -+ senddoc_time = time(NULL); - - while (!stop_scheduler) - { -@@ -827,6 +837,18 @@ main(int argc, /* I - Number of comm - - current_time = time(NULL); - -+#ifndef __APPLE__ -+ /* -+ * Update the network interfaces once a minute... -+ */ -+ -+ if ((current_time - netif_time) >= 60) -+ { -+ netif_time = current_time; -+ NetIFUpdate = 1; -+ } -+#endif /* !__APPLE__ */ -+ - #if HAVE_LAUNCHD - /* - * If no other work was scheduled and we're being controlled by launchd -@@ -903,7 +925,7 @@ main(int argc, /* I - Number of comm - */ - - cupsdDeleteCert(0); -- cupsdAddCert(0, "root"); -+ cupsdAddCert(0, "root", NULL); - } - - /* -@@ -951,30 +973,49 @@ main(int argc, /* I - Number of comm - } - - /* -- * Log memory usage every minute... -+ * Log statistics at most once a minute when in debug mode... - */ - -- if ((current_time - mallinfo_time) >= 60 && LogLevel >= CUPSD_LOG_DEBUG2) -+ if ((current_time - report_time) >= 60 && LogLevel >= CUPSD_LOG_DEBUG) - { -+ size_t string_count, /* String count */ -+ alloc_bytes, /* Allocated string bytes */ -+ total_bytes; /* Total string bytes */ - #ifdef HAVE_MALLINFO -- struct mallinfo mem; /* Malloc information */ -+ struct mallinfo mem; /* Malloc information */ - - - mem = mallinfo(); -- cupsdLogMessage(CUPSD_LOG_DEBUG2, -- "mallinfo: arena = %d, used = %d, free = %d\n", -- mem.arena, mem.usmblks + mem.uordblks, -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-arena=%lu", mem.arena); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-used=%lu", -+ mem.usmblks + mem.uordblks); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: malloc-free=%lu", - mem.fsmblks + mem.fordblks); - #endif /* HAVE_MALLINFO */ - -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: clients=%d", -+ cupsArrayCount(Clients)); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: jobs=%d", -+ cupsArrayCount(Jobs)); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: jobs-active=%d", -+ cupsArrayCount(ActiveJobs)); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: printers=%d", -+ cupsArrayCount(Printers)); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Report: printers-implicit=%d", -+ cupsArrayCount(ImplicitPrinters)); -+ - string_count = _cupsStrStatistics(&alloc_bytes, &total_bytes); -- cupsdLogMessage(CUPSD_LOG_DEBUG2, -- "stringpool: " CUPS_LLFMT " strings, " -- CUPS_LLFMT " allocated, " CUPS_LLFMT " total bytes", -- CUPS_LLCAST string_count, CUPS_LLCAST alloc_bytes, -+ cupsdLogMessage(CUPSD_LOG_DEBUG, -+ "Report: stringpool-string-count=" CUPS_LLFMT, -+ CUPS_LLCAST string_count); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, -+ "Report: stringpool-alloc-bytes=" CUPS_LLFMT, -+ CUPS_LLCAST alloc_bytes); -+ cupsdLogMessage(CUPSD_LOG_DEBUG, -+ "Report: stringpool-total-bytes=" CUPS_LLFMT, - CUPS_LLCAST total_bytes); - -- mallinfo_time = current_time; -+ report_time = current_time; - } - - /* -@@ -1015,7 +1056,7 @@ main(int argc, /* I - Number of comm - * Reset the accumulated events... - */ - -- LastEvent = CUPSD_EVENT_NONE; -+ LastEvent = CUPSD_EVENT_NONE; - } - } - -@@ -1622,8 +1663,11 @@ process_children(void) - else - job->status = -status; /* Backend failed */ - -- if (job->printer && !(job->printer->type & CUPS_PRINTER_FAX)) -+ if (job->printer && !(job->printer->type & CUPS_PRINTER_FAX) && -+ 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); -diff -up cups-1.3.5/scheduler/conf.c.1.3.x cups-1.3.5/scheduler/conf.c ---- cups-1.3.5/scheduler/conf.c.1.3.x 2007-11-09 19:54:09.000000000 +0000 -+++ cups-1.3.5/scheduler/conf.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Configuration routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -384,7 +384,7 @@ cupsdReadConfiguration(void) - if (NumRelays > 0) - { - for (i = 0; i < NumRelays; i ++) -- if (Relays[i].from.type == AUTH_NAME) -+ if (Relays[i].from.type == CUPSD_AUTH_NAME) - free(Relays[i].from.mask.name.name); - - free(Relays); -@@ -508,7 +508,7 @@ cupsdReadConfiguration(void) - */ - - ConfigFilePerm = CUPS_DEFAULT_CONFIG_FILE_PERM; -- DefaultAuthType = AUTH_BASIC; -+ DefaultAuthType = CUPSD_AUTH_BASIC; - #ifdef HAVE_SSL - DefaultEncryption = HTTP_ENCRYPT_REQUIRED; - #endif /* HAVE_SSL */ -@@ -962,8 +962,8 @@ cupsdReadConfiguration(void) - cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); - - po = cupsdAddPolicyOp(p, NULL, IPP_SEND_DOCUMENT); -- po->order_type = AUTH_ALLOW; -- po->level = AUTH_USER; -+ po->order_type = CUPSD_AUTH_ALLOW; -+ po->level = CUPSD_AUTH_USER; - - cupsdAddName(po, "@OWNER"); - cupsdAddName(po, "@SYSTEM"); -@@ -1003,9 +1003,9 @@ cupsdReadConfiguration(void) - cupsdLogMessage(CUPSD_LOG_INFO, "AuthType Default"); - - po = cupsdAddPolicyOp(p, NULL, IPP_PAUSE_PRINTER); -- po->order_type = AUTH_ALLOW; -- po->type = AUTH_DEFAULT; -- po->level = AUTH_USER; -+ po->order_type = CUPSD_AUTH_ALLOW; -+ po->type = CUPSD_AUTH_DEFAULT; -+ po->level = CUPSD_AUTH_USER; - - cupsdAddName(po, "@SYSTEM"); - cupsdLogMessage(CUPSD_LOG_INFO, "Require user @SYSTEM"); -@@ -1038,7 +1038,7 @@ cupsdReadConfiguration(void) - cupsdLogMessage(CUPSD_LOG_INFO, "Order Deny,Allow"); - - po = cupsdAddPolicyOp(p, NULL, IPP_ANY_OPERATION); -- po->order_type = AUTH_ALLOW; -+ po->order_type = CUPSD_AUTH_ALLOW; - - cupsdLogMessage(CUPSD_LOG_INFO, ""); - cupsdLogMessage(CUPSD_LOG_INFO, ""); -@@ -1119,19 +1119,27 @@ cupsdReadConfiguration(void) - if (!mimeType(MimeDatabase, "application", "octet-stream")) - NumMimeTypes ++; - -- MimeTypes = calloc(NumMimeTypes, sizeof(const char *)); -- -- for (i = 0, type = mimeFirstType(MimeDatabase); -- type; -- i ++, type = mimeNextType(MimeDatabase)) -+ if ((MimeTypes = calloc(NumMimeTypes, sizeof(const char *))) == NULL) - { -- snprintf(mimetype, sizeof(mimetype), "%s/%s", type->super, type->type); -- -- MimeTypes[i] = _cupsStrAlloc(mimetype); -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate memory for %d MIME types!", -+ NumMimeTypes); -+ NumMimeTypes = 0; - } -+ else -+ { -+ for (i = 0, type = mimeFirstType(MimeDatabase); -+ type; -+ i ++, type = mimeNextType(MimeDatabase)) -+ { -+ snprintf(mimetype, sizeof(mimetype), "%s/%s", type->super, type->type); -+ -+ MimeTypes[i] = _cupsStrAlloc(mimetype); -+ } - -- if (i < NumMimeTypes) -- MimeTypes[i] = _cupsStrAlloc("application/octet-stream"); -+ if (i < NumMimeTypes) -+ MimeTypes[i] = _cupsStrAlloc("application/octet-stream"); -+ } - - if (LogLevel == CUPSD_LOG_DEBUG2) - { -@@ -1568,9 +1576,9 @@ parse_aaa(cupsd_location_t *loc, /* I - - */ - - if (!strncasecmp(value, "deny", 4)) -- loc->order_type = AUTH_ALLOW; -+ loc->order_type = CUPSD_AUTH_ALLOW; - else if (!strncasecmp(value, "allow", 5)) -- loc->order_type = AUTH_DENY; -+ loc->order_type = CUPSD_AUTH_DENY; - else - { - cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown Order value %s on line %d.", -@@ -1681,44 +1689,44 @@ parse_aaa(cupsd_location_t *loc, /* I - - - if (!strcasecmp(value, "none")) - { -- loc->type = AUTH_NONE; -- loc->level = AUTH_ANON; -+ loc->type = CUPSD_AUTH_NONE; -+ loc->level = CUPSD_AUTH_ANON; - } - else if (!strcasecmp(value, "basic")) - { -- loc->type = AUTH_BASIC; -+ loc->type = CUPSD_AUTH_BASIC; - -- if (loc->level == AUTH_ANON) -- loc->level = AUTH_USER; -+ if (loc->level == CUPSD_AUTH_ANON) -+ loc->level = CUPSD_AUTH_USER; - } - else if (!strcasecmp(value, "digest")) - { -- loc->type = AUTH_DIGEST; -+ loc->type = CUPSD_AUTH_DIGEST; - -- if (loc->level == AUTH_ANON) -- loc->level = AUTH_USER; -+ if (loc->level == CUPSD_AUTH_ANON) -+ loc->level = CUPSD_AUTH_USER; - } - else if (!strcasecmp(value, "basicdigest")) - { -- loc->type = AUTH_BASICDIGEST; -+ loc->type = CUPSD_AUTH_BASICDIGEST; - -- if (loc->level == AUTH_ANON) -- loc->level = AUTH_USER; -+ if (loc->level == CUPSD_AUTH_ANON) -+ loc->level = CUPSD_AUTH_USER; - } - else if (!strcasecmp(value, "default")) - { -- loc->type = AUTH_DEFAULT; -+ loc->type = CUPSD_AUTH_DEFAULT; - -- if (loc->level == AUTH_ANON) -- loc->level = AUTH_USER; -+ if (loc->level == CUPSD_AUTH_ANON) -+ loc->level = CUPSD_AUTH_USER; - } - #ifdef HAVE_GSSAPI - else if (!strcasecmp(value, "negotiate")) - { -- loc->type = AUTH_NEGOTIATE; -+ loc->type = CUPSD_AUTH_NEGOTIATE; - -- if (loc->level == AUTH_ANON) -- loc->level = AUTH_USER; -+ if (loc->level == CUPSD_AUTH_ANON) -+ loc->level = CUPSD_AUTH_USER; - } - #endif /* HAVE_GSSAPI */ - else -@@ -1737,8 +1745,8 @@ parse_aaa(cupsd_location_t *loc, /* I - - - if (!strcasecmp(value, "anonymous")) - { -- loc->type = AUTH_NONE; -- loc->level = AUTH_ANON; -+ loc->type = CUPSD_AUTH_NONE; -+ loc->level = CUPSD_AUTH_ANON; - - cupsdLogMessage(CUPSD_LOG_WARN, - "\"AuthClass %s\" is deprecated; consider removing " -@@ -1747,7 +1755,7 @@ parse_aaa(cupsd_location_t *loc, /* I - - } - else if (!strcasecmp(value, "user")) - { -- loc->level = AUTH_USER; -+ loc->level = CUPSD_AUTH_USER; - - cupsdLogMessage(CUPSD_LOG_WARN, - "\"AuthClass %s\" is deprecated; consider using " -@@ -1756,7 +1764,7 @@ parse_aaa(cupsd_location_t *loc, /* I - - } - else if (!strcasecmp(value, "group")) - { -- loc->level = AUTH_GROUP; -+ loc->level = CUPSD_AUTH_GROUP; - - cupsdLogMessage(CUPSD_LOG_WARN, - "\"AuthClass %s\" is deprecated; consider using " -@@ -1765,7 +1773,7 @@ parse_aaa(cupsd_location_t *loc, /* I - - } - else if (!strcasecmp(value, "system")) - { -- loc->level = AUTH_GROUP; -+ loc->level = CUPSD_AUTH_GROUP; - - cupsdAddName(loc, "@SYSTEM"); - -@@ -1810,9 +1818,9 @@ parse_aaa(cupsd_location_t *loc, /* I - - - if (!strcasecmp(value, "valid-user") || - !strcasecmp(value, "user")) -- loc->level = AUTH_USER; -+ loc->level = CUPSD_AUTH_USER; - else if (!strcasecmp(value, "group")) -- loc->level = AUTH_GROUP; -+ loc->level = CUPSD_AUTH_GROUP; - else - { - cupsdLogMessage(CUPSD_LOG_WARN, "Unknown Require type %s on line %d.", -@@ -1873,9 +1881,9 @@ parse_aaa(cupsd_location_t *loc, /* I - - else if (!strcasecmp(line, "Satisfy")) - { - if (!strcasecmp(value, "all")) -- loc->satisfy = AUTH_SATISFY_ALL; -+ loc->satisfy = CUPSD_AUTH_SATISFY_ALL; - else if (!strcasecmp(value, "any")) -- loc->satisfy = AUTH_SATISFY_ANY; -+ loc->satisfy = CUPSD_AUTH_SATISFY_ANY; - else - { - cupsdLogMessage(CUPSD_LOG_WARN, "Unknown Satisfy value %s on line %d.", -@@ -2353,9 +2361,9 @@ read_configuration(cups_file_t *fp) /* I - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unable to initialize browse access control list!"); - else if (!strncasecmp(value, "deny", 4)) -- location->order_type = AUTH_ALLOW; -+ location->order_type = CUPSD_AUTH_ALLOW; - else if (!strncasecmp(value, "allow", 5)) -- location->order_type = AUTH_DENY; -+ location->order_type = CUPSD_AUTH_DENY; - else - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unknown BrowseOrder value %s on line %d.", -@@ -2559,8 +2567,16 @@ read_configuration(cups_file_t *fp) /* I - if ((ptr = strchr(temp, ' ')) != NULL) - *ptr = '\0'; - -- relay->from.type = AUTH_NAME; -- relay->from.mask.name.name = strdup(temp); -+ relay->from.type = CUPSD_AUTH_NAME; -+ -+ if ((relay->from.mask.name.name = strdup(temp)) == NULL) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate BrowseRelay name at line %d - %s.", -+ linenum, strerror(errno)); -+ continue; -+ } -+ - relay->from.mask.name.length = strlen(temp); - } - else -@@ -2576,7 +2592,7 @@ read_configuration(cups_file_t *fp) /* I - break; - } - -- relay->from.type = AUTH_IP; -+ relay->from.type = CUPSD_AUTH_IP; - memcpy(relay->from.mask.ip.address, ip, - sizeof(relay->from.mask.ip.address)); - memcpy(relay->from.mask.ip.netmask, mask, -@@ -2626,7 +2642,7 @@ read_configuration(cups_file_t *fp) /* I - - httpAddrString(&(relay->to), temp, sizeof(temp)); - -- if (relay->from.type == AUTH_IP) -+ if (relay->from.type == CUPSD_AUTH_IP) - snprintf(temp2, sizeof(temp2), "%u.%u.%u.%u/%u.%u.%u.%u", - relay->from.mask.ip.address[0] >> 24, - (relay->from.mask.ip.address[0] >> 16) & 255, -@@ -2652,7 +2668,7 @@ read_configuration(cups_file_t *fp) /* I - } - else - { -- if (relay->from.type == AUTH_NAME) -+ if (relay->from.type == CUPSD_AUTH_NAME) - free(relay->from.mask.name.name); - - cupsdLogMessage(CUPSD_LOG_ERROR, "Bad relay address %s at line %d.", -@@ -2728,16 +2744,16 @@ read_configuration(cups_file_t *fp) /* I - */ - - if (!strcasecmp(value, "none")) -- DefaultAuthType = AUTH_NONE; -+ DefaultAuthType = CUPSD_AUTH_NONE; - else if (!strcasecmp(value, "basic")) -- DefaultAuthType = AUTH_BASIC; -+ DefaultAuthType = CUPSD_AUTH_BASIC; - else if (!strcasecmp(value, "digest")) -- DefaultAuthType = AUTH_DIGEST; -+ DefaultAuthType = CUPSD_AUTH_DIGEST; - else if (!strcasecmp(value, "basicdigest")) -- DefaultAuthType = AUTH_BASICDIGEST; -+ DefaultAuthType = CUPSD_AUTH_BASICDIGEST; - #ifdef HAVE_GSSAPI - else if (!strcasecmp(value, "negotiate")) -- DefaultAuthType = AUTH_NEGOTIATE; -+ DefaultAuthType = CUPSD_AUTH_NEGOTIATE; - #endif /* HAVE_GSSAPI */ - else - { -@@ -3125,7 +3141,7 @@ read_location(cups_file_t *fp, /* I - C - if ((parent = cupsdAddLocation(location)) == NULL) - return (0); - -- parent->limit = AUTH_LIMIT_ALL; -+ parent->limit = CUPSD_AUTH_LIMIT_ALL; - loc = parent; - - while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) -@@ -3157,19 +3173,19 @@ read_location(cups_file_t *fp, /* I - C - *valptr++ = '\0'; - - if (!strcmp(value, "ALL")) -- loc->limit = AUTH_LIMIT_ALL; -+ loc->limit = CUPSD_AUTH_LIMIT_ALL; - else if (!strcmp(value, "GET")) -- loc->limit |= AUTH_LIMIT_GET; -+ loc->limit |= CUPSD_AUTH_LIMIT_GET; - else if (!strcmp(value, "HEAD")) -- loc->limit |= AUTH_LIMIT_HEAD; -+ loc->limit |= CUPSD_AUTH_LIMIT_HEAD; - else if (!strcmp(value, "OPTIONS")) -- loc->limit |= AUTH_LIMIT_OPTIONS; -+ loc->limit |= CUPSD_AUTH_LIMIT_OPTIONS; - else if (!strcmp(value, "POST")) -- loc->limit |= AUTH_LIMIT_POST; -+ loc->limit |= CUPSD_AUTH_LIMIT_POST; - else if (!strcmp(value, "PUT")) -- loc->limit |= AUTH_LIMIT_PUT; -+ loc->limit |= CUPSD_AUTH_LIMIT_PUT; - else if (!strcmp(value, "TRACE")) -- loc->limit |= AUTH_LIMIT_TRACE; -+ loc->limit |= CUPSD_AUTH_LIMIT_TRACE; - else - cupsdLogMessage(CUPSD_LOG_WARN, "Unknown request type %s on line %d!", - value, linenum); -@@ -3178,11 +3194,12 @@ read_location(cups_file_t *fp, /* I - C - } - - if (!strcasecmp(line, "limit = AUTH_LIMIT_ALL ^ loc->limit; -+ loc->limit = CUPSD_AUTH_LIMIT_ALL ^ loc->limit; - - parent->limit &= ~loc->limit; - } -- else if (!strcasecmp(line, "")) -+ else if (!strcasecmp(line, "") || -+ !strcasecmp(line, "")) - loc = parent; - else if (!parse_aaa(loc, line, value, linenum)) - { -diff -up cups-1.3.5/scheduler/auth.c.1.3.x cups-1.3.5/scheduler/auth.c ---- cups-1.3.5/scheduler/auth.c.1.3.x 2007-10-22 21:27:22.000000000 +0100 -+++ cups-1.3.5/scheduler/auth.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Authorization routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * This file contains Kerberos support code, copyright 2006 by -@@ -176,8 +176,13 @@ cupsdAddLocation(const char *location) / - * Initialize the record and copy the name over... - */ - -- temp->location = strdup(location); -- temp->length = strlen(temp->location); -+ if ((temp->location = strdup(location)) == NULL) -+ { -+ free(temp); -+ return (NULL); -+ } -+ -+ temp->length = strlen(temp->location); - - cupsArrayAdd(Locations, temp); - -@@ -257,7 +262,7 @@ cupsdAllowHost(cupsd_location_t *loc, /* - * Allow *interface*... - */ - -- temp->type = AUTH_INTERFACE; -+ temp->type = CUPSD_AUTH_INTERFACE; - temp->mask.name.name = strdup("*"); - temp->mask.name.length = 1; - } -@@ -277,7 +282,7 @@ cupsdAllowHost(cupsd_location_t *loc, /* - *ifptr = '\0'; - } - -- temp->type = AUTH_INTERFACE; -+ temp->type = CUPSD_AUTH_INTERFACE; - temp->mask.name.name = strdup(ifname); - temp->mask.name.length = ifptr - ifname; - } -@@ -287,7 +292,7 @@ cupsdAllowHost(cupsd_location_t *loc, /* - * Allow name... - */ - -- temp->type = AUTH_NAME; -+ temp->type = CUPSD_AUTH_NAME; - temp->mask.name.name = strdup(name); - temp->mask.name.length = strlen(name); - } -@@ -316,7 +321,7 @@ cupsdAllowIP(cupsd_location_t *loc, /* I - if ((temp = add_allow(loc)) == NULL) - return; - -- temp->type = AUTH_IP; -+ temp->type = CUPSD_AUTH_IP; - memcpy(temp->mask.ip.address, address, sizeof(temp->mask.ip.address)); - memcpy(temp->mask.ip.netmask, netmask, sizeof(temp->mask.ip.netmask)); - } -@@ -363,15 +368,15 @@ cupsdAuthorize(cupsd_client_t *con) /* I - */ - - con->best = cupsdFindBest(con->uri, con->http.state); -- con->type = AUTH_NONE; -+ con->type = CUPSD_AUTH_NONE; - - cupsdLogMessage(CUPSD_LOG_DEBUG2, - "cupsdAuthorize: con->uri=\"%s\", con->best=%p(%s)", - con->uri, con->best, con->best ? con->best->location : ""); - -- if (con->best && con->best->type != AUTH_NONE) -+ if (con->best && con->best->type != CUPSD_AUTH_NONE) - { -- if (con->best->type == AUTH_DEFAULT) -+ if (con->best->type == CUPSD_AUTH_DEFAULT) - type = DefaultAuthType; - else - type = con->best->type; -@@ -463,7 +468,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - - AuthorizationFreeItemSet(authinfo); - -- con->type = AUTH_BASIC; -+ con->type = CUPSD_AUTH_BASIC; - } - #endif /* HAVE_AUTHORIZATION_H */ - #if defined(SO_PEERCRED) && defined(AF_LOCAL) -@@ -520,7 +525,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - "cupsdAuthorize: Authorized as %s using PeerCred", - username); - -- con->type = AUTH_BASIC; -+ con->type = CUPSD_AUTH_BASIC; - } - #endif /* SO_PEERCRED && AF_LOCAL */ - else if (!strncmp(authorization, "Local", 5) && -@@ -550,7 +555,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - return; - } - -- con->type = AUTH_BASIC; -+ con->type = CUPSD_AUTH_BASIC; - } - else if (!strncmp(authorization, "Basic", 5)) - { -@@ -612,7 +617,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - switch (type) - { - default : -- case AUTH_BASIC : -+ case CUPSD_AUTH_BASIC : - { - #if HAVE_LIBPAM - /* -@@ -811,7 +816,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - username); - break; - -- case AUTH_BASICDIGEST : -+ case CUPSD_AUTH_BASICDIGEST : - /* - * Do Basic authentication with the Digest password file... - */ -@@ -915,7 +920,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - "cupsdAuthorize: Authorized as %s using Digest", - username); - -- con->type = AUTH_DIGEST; -+ con->type = CUPSD_AUTH_DIGEST; - } - #ifdef HAVE_GSSAPI - else if (!strncmp(authorization, "Negotiate", 9)) -@@ -1056,7 +1061,7 @@ cupsdAuthorize(cupsd_client_t *con) /* I - - con->gss_have_creds = 1; - -- con->type = AUTH_NEGOTIATE; -+ con->type = CUPSD_AUTH_NEGOTIATE; - } - else - gss_release_name(&minor_status, &client_name); -@@ -1109,7 +1114,7 @@ cupsdCheckAuth( - { - switch (masks->type) - { -- case AUTH_INTERFACE : -+ case CUPSD_AUTH_INTERFACE : - /* - * Check for a match with a network interface... - */ -@@ -1217,7 +1222,7 @@ cupsdCheckAuth( - } - break; - -- case AUTH_NAME : -+ case CUPSD_AUTH_NAME : - /* - * Check for exact name match... - */ -@@ -1236,7 +1241,7 @@ cupsdCheckAuth( - return (1); - break; - -- case AUTH_IP : -+ case CUPSD_AUTH_IP : - /* - * Check for IP/network address match... - */ -@@ -1427,7 +1432,7 @@ cupsdCopyLocation( - for (i = 0; i < temp->num_allow; i ++) - switch (temp->allow[i].type = (*loc)->allow[i].type) - { -- case AUTH_NAME : -+ case CUPSD_AUTH_NAME : - temp->allow[i].mask.name.length = (*loc)->allow[i].mask.name.length; - temp->allow[i].mask.name.name = strdup((*loc)->allow[i].mask.name.name); - -@@ -1440,7 +1445,7 @@ cupsdCopyLocation( - return (NULL); - } - break; -- case AUTH_IP : -+ case CUPSD_AUTH_IP : - memcpy(&(temp->allow[i].mask.ip), &((*loc)->allow[i].mask.ip), - sizeof(cupsd_ipmask_t)); - break; -@@ -1465,7 +1470,7 @@ cupsdCopyLocation( - for (i = 0; i < temp->num_deny; i ++) - switch (temp->deny[i].type = (*loc)->deny[i].type) - { -- case AUTH_NAME : -+ case CUPSD_AUTH_NAME : - temp->deny[i].mask.name.length = (*loc)->deny[i].mask.name.length; - temp->deny[i].mask.name.name = strdup((*loc)->deny[i].mask.name.name); - -@@ -1478,7 +1483,7 @@ cupsdCopyLocation( - return (NULL); - } - break; -- case AUTH_IP : -+ case CUPSD_AUTH_IP : - memcpy(&(temp->deny[i].mask.ip), &((*loc)->deny[i].mask.ip), - sizeof(cupsd_ipmask_t)); - break; -@@ -1538,14 +1543,14 @@ cupsdDeleteLocation( - free(loc->names); - - for (i = loc->num_allow, mask = loc->allow; i > 0; i --, mask ++) -- if (mask->type == AUTH_NAME || mask->type == AUTH_INTERFACE) -+ if (mask->type == CUPSD_AUTH_NAME || mask->type == CUPSD_AUTH_INTERFACE) - free(mask->mask.name.name); - - if (loc->num_allow > 0) - free(loc->allow); - - for (i = loc->num_deny, mask = loc->deny; i > 0; i --, mask ++) -- if (mask->type == AUTH_NAME || mask->type == AUTH_INTERFACE) -+ if (mask->type == CUPSD_AUTH_NAME || mask->type == CUPSD_AUTH_INTERFACE) - free(mask->mask.name.name); - - if (loc->num_deny > 0) -@@ -1582,7 +1587,7 @@ cupsdDenyHost(cupsd_location_t *loc, /* - * Deny *interface*... - */ - -- temp->type = AUTH_INTERFACE; -+ temp->type = CUPSD_AUTH_INTERFACE; - temp->mask.name.name = strdup("*"); - temp->mask.name.length = 1; - } -@@ -1602,7 +1607,7 @@ cupsdDenyHost(cupsd_location_t *loc, /* - *ifptr = '\0'; - } - -- temp->type = AUTH_INTERFACE; -+ temp->type = CUPSD_AUTH_INTERFACE; - temp->mask.name.name = strdup(ifname); - temp->mask.name.length = ifptr - ifname; - } -@@ -1612,7 +1617,7 @@ cupsdDenyHost(cupsd_location_t *loc, /* - * Deny name... - */ - -- temp->type = AUTH_NAME; -+ temp->type = CUPSD_AUTH_NAME; - temp->mask.name.name = strdup(name); - temp->mask.name.length = strlen(name); - } -@@ -1641,7 +1646,7 @@ cupsdDenyIP(cupsd_location_t *loc, /* I - if ((temp = add_deny(loc)) == NULL) - return; - -- temp->type = AUTH_IP; -+ temp->type = CUPSD_AUTH_IP; - memcpy(temp->mask.ip.address, address, sizeof(temp->mask.ip.address)); - memcpy(temp->mask.ip.netmask, netmask, sizeof(temp->mask.ip.netmask)); - } -@@ -1662,22 +1667,22 @@ cupsdFindBest(const char *path, /* I - - *best; /* Best match for location so far */ - int bestlen; /* Length of best match */ - int limit; /* Limit field */ -- static const int limits[] = /* Map http_status_t to AUTH_LIMIT_xyz */ -+ static const int limits[] = /* Map http_status_t to CUPSD_AUTH_LIMIT_xyz */ - { -- AUTH_LIMIT_ALL, -- AUTH_LIMIT_OPTIONS, -- AUTH_LIMIT_GET, -- AUTH_LIMIT_GET, -- AUTH_LIMIT_HEAD, -- AUTH_LIMIT_POST, -- AUTH_LIMIT_POST, -- AUTH_LIMIT_POST, -- AUTH_LIMIT_PUT, -- AUTH_LIMIT_PUT, -- AUTH_LIMIT_DELETE, -- AUTH_LIMIT_TRACE, -- AUTH_LIMIT_ALL, -- AUTH_LIMIT_ALL -+ CUPSD_AUTH_LIMIT_ALL, -+ CUPSD_AUTH_LIMIT_OPTIONS, -+ CUPSD_AUTH_LIMIT_GET, -+ CUPSD_AUTH_LIMIT_GET, -+ CUPSD_AUTH_LIMIT_HEAD, -+ CUPSD_AUTH_LIMIT_POST, -+ CUPSD_AUTH_LIMIT_POST, -+ CUPSD_AUTH_LIMIT_POST, -+ CUPSD_AUTH_LIMIT_PUT, -+ CUPSD_AUTH_LIMIT_PUT, -+ CUPSD_AUTH_LIMIT_DELETE, -+ CUPSD_AUTH_LIMIT_TRACE, -+ CUPSD_AUTH_LIMIT_ALL, -+ CUPSD_AUTH_LIMIT_ALL - }; - - -@@ -1837,16 +1842,16 @@ cupsdIsAuthorized(cupsd_client_t *con, / - - best = con->best; - -- if ((type = best->type) == AUTH_DEFAULT) -+ if ((type = best->type) == CUPSD_AUTH_DEFAULT) - type = DefaultAuthType; - - cupsdLogMessage(CUPSD_LOG_DEBUG2, -- "cupsdIsAuthorized: level=AUTH_%s, type=%s, " -- "satisfy=AUTH_SATISFY_%s, num_names=%d", -+ "cupsdIsAuthorized: level=CUPSD_AUTH_%s, type=%s, " -+ "satisfy=CUPSD_AUTH_SATISFY_%s, num_names=%d", - levels[best->level], types[type], - best->satisfy ? "ANY" : "ALL", best->num_names); - -- if (best->limit == AUTH_LIMIT_IPP) -+ if (best->limit == CUPSD_AUTH_LIMIT_IPP) - cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: op=%x(%s)", - best->op, ippOpString(best->op)); - -@@ -1890,7 +1895,7 @@ cupsdIsAuthorized(cupsd_client_t *con, / - * Access from localhost (127.0.0.1 or ::1) is always allowed... - */ - -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - } - else - { -@@ -1901,39 +1906,39 @@ cupsdIsAuthorized(cupsd_client_t *con, / - switch (best->order_type) - { - default : -- auth = AUTH_DENY; /* anti-compiler-warning-code */ -+ auth = CUPSD_AUTH_DENY; /* anti-compiler-warning-code */ - break; - -- case AUTH_ALLOW : /* Order Deny,Allow */ -- auth = AUTH_ALLOW; -+ case CUPSD_AUTH_ALLOW : /* Order Deny,Allow */ -+ auth = CUPSD_AUTH_ALLOW; - - if (cupsdCheckAuth(address, con->http.hostname, hostlen, - best->num_deny, best->deny)) -- auth = AUTH_DENY; -+ auth = CUPSD_AUTH_DENY; - - if (cupsdCheckAuth(address, con->http.hostname, hostlen, - best->num_allow, best->allow)) -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - break; - -- case AUTH_DENY : /* Order Allow,Deny */ -- auth = AUTH_DENY; -+ case CUPSD_AUTH_DENY : /* Order Allow,Deny */ -+ auth = CUPSD_AUTH_DENY; - - if (cupsdCheckAuth(address, con->http.hostname, hostlen, - best->num_allow, best->allow)) -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - - if (cupsdCheckAuth(address, con->http.hostname, hostlen, - best->num_deny, best->deny)) -- auth = AUTH_DENY; -+ auth = CUPSD_AUTH_DENY; - break; - } - } - -- cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: auth=AUTH_%s...", -+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdIsAuthorized: auth=CUPSD_AUTH_%s...", - auth ? "DENY" : "ALLOW"); - -- if (auth == AUTH_DENY && best->satisfy == AUTH_SATISFY_ALL) -+ if (auth == CUPSD_AUTH_DENY && best->satisfy == CUPSD_AUTH_SATISFY_ALL) - return (HTTP_FORBIDDEN); - - #ifdef HAVE_SSL -@@ -1943,9 +1948,9 @@ cupsdIsAuthorized(cupsd_client_t *con, / - - if ((best->encryption >= HTTP_ENCRYPT_REQUIRED && !con->http.tls && - strcasecmp(con->http.hostname, "localhost") && -- best->satisfy == AUTH_SATISFY_ALL) && -- !(type == AUTH_NEGOTIATE || -- (type == AUTH_NONE && DefaultAuthType == AUTH_NEGOTIATE))) -+ best->satisfy == CUPSD_AUTH_SATISFY_ALL) && -+ !(type == CUPSD_AUTH_NEGOTIATE || -+ (type == CUPSD_AUTH_NONE && DefaultAuthType == CUPSD_AUTH_NEGOTIATE))) - { - cupsdLogMessage(CUPSD_LOG_DEBUG, - "cupsdIsAuthorized: Need upgrade to TLS..."); -@@ -1957,12 +1962,12 @@ cupsdIsAuthorized(cupsd_client_t *con, / - * Now see what access level is required... - */ - -- if (best->level == AUTH_ANON || /* Anonymous access - allow it */ -- (type == AUTH_NONE && best->num_names == 0)) -+ if (best->level == CUPSD_AUTH_ANON || /* Anonymous access - allow it */ -+ (type == CUPSD_AUTH_NONE && best->num_names == 0)) - return (HTTP_OK); - -- if (!con->username[0] && type == AUTH_NONE && -- best->limit == AUTH_LIMIT_IPP) -+ if (!con->username[0] && type == CUPSD_AUTH_NONE && -+ best->limit == CUPSD_AUTH_LIMIT_IPP) - { - /* - * Check for unauthenticated username... -@@ -1979,7 +1984,7 @@ cupsdIsAuthorized(cupsd_client_t *con, / - attr->values[0].string.text); - strlcpy(username, attr->values[0].string.text, sizeof(username)); - } -- else if (best->satisfy == AUTH_SATISFY_ALL || auth == AUTH_DENY) -+ else if (best->satisfy == CUPSD_AUTH_SATISFY_ALL || auth == CUPSD_AUTH_DENY) - return (HTTP_UNAUTHORIZED); /* Non-anonymous needs user/pass */ - else - return (HTTP_OK); /* unless overridden with Satisfy */ -@@ -1995,14 +2000,14 @@ cupsdIsAuthorized(cupsd_client_t *con, / - if (!con->username[0]) - #endif /* HAVE_AUTHORIZATION_H */ - { -- if (best->satisfy == AUTH_SATISFY_ALL || auth == AUTH_DENY) -+ if (best->satisfy == CUPSD_AUTH_SATISFY_ALL || auth == CUPSD_AUTH_DENY) - return (HTTP_UNAUTHORIZED); /* Non-anonymous needs user/pass */ - else - return (HTTP_OK); /* unless overridden with Satisfy */ - } - -- if (con->type != type && type != AUTH_NONE && -- (con->type != AUTH_BASIC || type != AUTH_BASICDIGEST)) -+ if (con->type != type && type != CUPSD_AUTH_NONE && -+ (con->type != CUPSD_AUTH_BASIC || type != CUPSD_AUTH_BASICDIGEST)) - { - cupsdLogMessage(CUPSD_LOG_ERROR, "Authorized using %s, expected %s!", - types[con->type], types[type]); -@@ -2050,7 +2055,7 @@ cupsdIsAuthorized(cupsd_client_t *con, / - else - pw = NULL; - -- if (best->level == AUTH_USER) -+ if (best->level == CUPSD_AUTH_USER) - { - /* - * If there are no names associated with this location, then -diff -up cups-1.3.5/scheduler/cert.c.1.3.x cups-1.3.5/scheduler/cert.c ---- cups-1.3.5/scheduler/cert.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/cert.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Authentication certificate routines for the Common UNIX - * Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -42,7 +42,8 @@ - - void - cupsdAddCert(int pid, /* I - Process ID */ -- const char *username) /* I - Username */ -+ const char *username, /* I - Username */ -+ void *ccache) /* I - Kerberos credentials or NULL */ - { - int i; /* Looping var */ - cupsd_cert_t *cert; /* Current certificate */ -@@ -244,6 +245,16 @@ cupsdAddCert(int pid, /* I - Pro - close(fd); - - /* -+ * Add Kerberos credentials as needed... -+ */ -+ -+#ifdef HAVE_GSSAPI -+ cert->ccache = (krb5_ccache)ccache; -+#else -+ (void)ccache; -+#endif /* HAVE_GSSAPI */ -+ -+ /* - * Insert the certificate at the front of the list... - */ - -@@ -282,6 +293,15 @@ cupsdDeleteCert(int pid) /* I - Process - else - prev->next = cert->next; - -+#ifdef HAVE_GSSAPI -+ /* -+ * Release Kerberos credentials as needed... -+ */ -+ -+ if (cert->ccache) -+ krb5_cc_destroy(KerberosContext, cert->ccache); -+#endif /* HAVE_GSSAPI */ -+ - free(cert); - - /* -@@ -412,7 +432,7 @@ cupsdInitCerts(void) - */ - - if (!RunUser) -- cupsdAddCert(0, "root"); -+ cupsdAddCert(0, "root", NULL); - } - - -diff -up cups-1.3.5/scheduler/log.c.1.3.x cups-1.3.5/scheduler/log.c ---- cups-1.3.5/scheduler/log.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/log.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Log file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -261,6 +261,9 @@ cupsdLogMessage(int level, /* I - - - if (len >= linesize) - { -+ char *temp; /* Temporary string pointer */ -+ -+ - len ++; - - if (len < 8192) -@@ -268,18 +271,12 @@ cupsdLogMessage(int level, /* I - - else if (len > 65536) - len = 65536; - -- line = realloc(line, len); -+ temp = realloc(line, len); - -- if (line) -- linesize = len; -- else -+ if (temp) - { -- cupsFilePrintf(ErrorFile, -- "ERROR: Unable to allocate memory for line - %s\n", -- strerror(errno)); -- cupsFileFlush(ErrorFile); -- -- return (0); -+ line = temp; -+ linesize = len; - } - - va_start(ap, message); -@@ -355,7 +352,7 @@ cupsdLogPage(cupsd_job_t *job, /* I - J - /* - * Print a page log entry of the form: - * -- * printer job-id user [DD/MON/YYYY:HH:MM:SS +TTTT] page num-copies \ -+ * printer user job-id [DD/MON/YYYY:HH:MM:SS +TTTT] page num-copies \ - * billing hostname - */ - -diff -up cups-1.3.5/scheduler/cups-deviced.c.1.3.x cups-1.3.5/scheduler/cups-deviced.c ---- cups-1.3.5/scheduler/cups-deviced.c.1.3.x 2007-10-10 22:25:29.000000000 +0100 -+++ cups-1.3.5/scheduler/cups-deviced.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Device scanning mini-daemon for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -291,6 +291,8 @@ main(int argc, /* I - Number of comm - if (!dev) - { - cupsDirClose(dir); -+ fclose(fp); -+ kill(pid, SIGTERM); - return (1); - } - -diff -up cups-1.3.5/scheduler/cups-driverd.c.1.3.x cups-1.3.5/scheduler/cups-driverd.c ---- cups-1.3.5/scheduler/cups-driverd.c.1.3.x 2007-08-02 19:05:03.000000000 +0100 -+++ cups-1.3.5/scheduler/cups-driverd.c 2008-02-14 13:03:30.000000000 +0000 -@@ -7,7 +7,7 @@ - * in CUPS_DATADIR/model and dynamically generated PPD files using - * the driver helper programs in CUPS_SERVERBIN/driver. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -1664,6 +1664,7 @@ load_drivers(void) - if (!ppd) - { - cupsDirClose(dir); -+ pclose(fp); - return (0); - } - -diff -up cups-1.3.5/scheduler/mime.c.1.3.x cups-1.3.5/scheduler/mime.c ---- cups-1.3.5/scheduler/mime.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/mime.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * MIME database file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -235,7 +235,10 @@ mimeMerge(mime_t *mime, /* I - MIME - if (!mime) - mime = mimeNew(); - if (!mime) -+ { -+ cupsDirClose(dir); - return (NULL); -+ } - - /* - * Read all the .types files... -diff -up cups-1.3.5/scheduler/job.h.1.3.x cups-1.3.5/scheduler/job.h ---- cups-1.3.5/scheduler/job.h.1.3.x 2007-08-01 20:02:47.000000000 +0100 -+++ cups-1.3.5/scheduler/job.h 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Print job definitions for the Common UNIX Printing System (CUPS) scheduler. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -122,7 +122,7 @@ extern void cupsdSetJobHoldUntil(cupsd_ - extern void cupsdSetJobPriority(cupsd_job_t *job, int priority); - extern void cupsdStopAllJobs(int force); - extern void cupsdStopJob(cupsd_job_t *job, int force); --extern void cupsdTimeoutJob(cupsd_job_t *job); -+extern int cupsdTimeoutJob(cupsd_job_t *job); - extern void cupsdUnloadCompletedJobs(void); - - -diff -up cups-1.3.5/scheduler/cups-lpd.c.1.3.x cups-1.3.5/scheduler/cups-lpd.c ---- cups-1.3.5/scheduler/cups-lpd.c.1.3.x 2007-08-08 22:09:31.000000000 +0100 -+++ cups-1.3.5/scheduler/cups-lpd.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Line Printer Daemon interface for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -1274,9 +1274,9 @@ recv_print_job( - if (status) - break; - } -- -- fclose(fp); - } -+ -+ fclose(fp); - } - } - -diff -up cups-1.3.5/scheduler/client.c.1.3.x cups-1.3.5/scheduler/client.c ---- cups-1.3.5/scheduler/client.c.1.3.x 2007-09-28 20:47:00.000000000 +0100 -+++ cups-1.3.5/scheduler/client.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Client routines for the Common UNIX Printing System (CUPS) scheduler. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * This file contains Kerberos support code, copyright 2006 by -@@ -144,9 +144,19 @@ cupsdAcceptClient(cupsd_listener_t *lis) - Clients = cupsArrayNew(NULL, NULL); - - if (!Clients) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate memory for client array!"); -+ cupsdPauseListening(); - return; -+ } - -- con = calloc(1, sizeof(cupsd_client_t)); -+ if ((con = calloc(1, sizeof(cupsd_client_t))) == NULL) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate memory for client!"); -+ cupsdPauseListening(); -+ return; -+ } - - con->http.activity = time(NULL); - con->file = -1; -@@ -843,7 +853,7 @@ cupsdReadClient(cupsd_client_t *con) /* - cupsdLogMessage(CUPSD_LOG_ERROR, - "Bad request line \"%s\" from %s!", line, - con->http.hostname); -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - case 2 : -@@ -855,7 +865,7 @@ cupsdReadClient(cupsd_client_t *con) /* - cupsdLogMessage(CUPSD_LOG_ERROR, - "Bad request line \"%s\" from %s!", line, - con->http.hostname); -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -870,7 +880,7 @@ cupsdReadClient(cupsd_client_t *con) /* - } - else - { -- cupsdSendError(con, HTTP_NOT_SUPPORTED, AUTH_NONE); -+ cupsdSendError(con, HTTP_NOT_SUPPORTED, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -916,7 +926,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - cupsdLogMessage(CUPSD_LOG_ERROR, "Bad URI \"%s\" in request!", - con->uri); -- cupsdSendError(con, HTTP_METHOD_NOT_ALLOWED, AUTH_NONE); -+ cupsdSendError(con, HTTP_METHOD_NOT_ALLOWED, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -950,7 +960,7 @@ cupsdReadClient(cupsd_client_t *con) /* - else - { - cupsdLogMessage(CUPSD_LOG_ERROR, "Bad operation \"%s\"!", operation); -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -982,7 +992,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - if (status != HTTP_OK && status != HTTP_CONTINUE) - { -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -1050,7 +1060,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * HTTP/1.1 and higher require the "Host:" field... - */ - -- if (!cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1062,9 +1072,9 @@ cupsdReadClient(cupsd_client_t *con) /* - * Do OPTIONS command... - */ - -- if (con->best && con->best->type != AUTH_NONE) -+ if (con->best && con->best->type != CUPSD_AUTH_NONE) - { -- if (!cupsdSendHeader(con, HTTP_UNAUTHORIZED, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_UNAUTHORIZED, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1079,7 +1089,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Do encryption stuff... - */ - -- if (!cupsdSendHeader(con, HTTP_SWITCHING_PROTOCOLS, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_SWITCHING_PROTOCOLS, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1102,7 +1112,7 @@ cupsdReadClient(cupsd_client_t *con) /* - return; - } - #else -- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1110,7 +1120,7 @@ cupsdReadClient(cupsd_client_t *con) /* - #endif /* HAVE_SSL */ - } - -- if (!cupsdSendHeader(con, HTTP_OK, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_OK, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1132,7 +1142,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Protect against malicious users! - */ - -- if (!cupsdSendError(con, HTTP_FORBIDDEN, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_FORBIDDEN, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1148,7 +1158,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Do encryption stuff... - */ - -- if (!cupsdSendHeader(con, HTTP_SWITCHING_PROTOCOLS, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_SWITCHING_PROTOCOLS, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1171,7 +1181,7 @@ cupsdReadClient(cupsd_client_t *con) /* - return; - } - #else -- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1184,7 +1194,7 @@ cupsdReadClient(cupsd_client_t *con) /* - cupsdLogMessage(CUPSD_LOG_DEBUG2, - "cupsdReadClient: Unauthorized request for %s...\n", - con->uri); -- cupsdSendError(con, status, AUTH_NONE); -+ cupsdSendError(con, status, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -1198,7 +1208,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Send 100-continue header... - */ - -- if (!cupsdSendHeader(con, HTTP_CONTINUE, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_CONTINUE, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1210,7 +1220,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Send 417-expectation-failed header... - */ - -- if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1244,7 +1254,7 @@ cupsdReadClient(cupsd_client_t *con) /* - snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name); - else - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1316,7 +1326,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - if (!cupsdSendCommand(con, con->command, con->options, 0)) - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1340,7 +1350,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * /admin/conf... - */ - -- if (!cupsdSendError(con, HTTP_FORBIDDEN, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_FORBIDDEN, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1357,7 +1367,7 @@ cupsdReadClient(cupsd_client_t *con) /* - if ((filename = get_file(con, &filestats, buf, - sizeof(buf))) == NULL) - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1377,7 +1387,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - if (!cupsdSendCommand(con, con->command, con->options, 0)) - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1393,7 +1403,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - if (!check_if_modified(con, &filestats)) - { -- if (!cupsdSendError(con, HTTP_NOT_MODIFIED, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_MODIFIED, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1433,7 +1443,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Request too large... - */ - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1447,7 +1457,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Negative content lengths are invalid! - */ - -- if (!cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1542,7 +1552,7 @@ cupsdReadClient(cupsd_client_t *con) /* - if ((filename = get_file(con, &filestats, buf, - sizeof(buf))) == NULL) - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1559,7 +1569,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Only POST to CGI's... - */ - -- if (!cupsdSendError(con, HTTP_UNAUTHORIZED, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_UNAUTHORIZED, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1582,7 +1592,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * /admin/conf... - */ - -- if (!cupsdSendError(con, HTTP_FORBIDDEN, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_FORBIDDEN, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1608,7 +1618,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Request too large... - */ - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1622,7 +1632,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Negative content lengths are invalid! - */ - -- if (!cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1639,19 +1649,23 @@ cupsdReadClient(cupsd_client_t *con) /* - request_id ++); - con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640); - -- cupsdLogMessage(CUPSD_LOG_DEBUG2, -- "cupsdReadClient: %d REQUEST %s=%d", con->http.fd, -- con->filename, con->file); -- - if (con->file < 0) - { -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to create request file %s: %s", -+ con->filename, strerror(errno)); -+ -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; - } - } - -+ cupsdLogMessage(CUPSD_LOG_DEBUG2, -+ "cupsdReadClient: %d REQUEST %s=%d", con->http.fd, -+ con->filename, con->file); -+ - fchmod(con->file, 0640); - fchown(con->file, RunUser, Group); - fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); -@@ -1659,7 +1673,7 @@ cupsdReadClient(cupsd_client_t *con) /* - - case HTTP_DELETE : - case HTTP_TRACE : -- cupsdSendError(con, HTTP_NOT_IMPLEMENTED, AUTH_NONE); -+ cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - -@@ -1678,7 +1692,7 @@ cupsdReadClient(cupsd_client_t *con) /* - snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name); - else - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1700,7 +1714,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * CGI output... - */ - -- if (!cupsdSendHeader(con, HTTP_OK, "text/html", AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_OK, "text/html", CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1732,7 +1746,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * /admin/conf... - */ - -- if (!cupsdSendError(con, HTTP_FORBIDDEN, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_FORBIDDEN, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1743,7 +1757,7 @@ cupsdReadClient(cupsd_client_t *con) /* - else if ((filename = get_file(con, &filestats, buf, - sizeof(buf))) == NULL) - { -- if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html", AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html", CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1753,7 +1767,7 @@ cupsdReadClient(cupsd_client_t *con) /* - } - else if (!check_if_modified(con, &filestats)) - { -- if (!cupsdSendError(con, HTTP_NOT_MODIFIED, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_MODIFIED, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1773,7 +1787,7 @@ cupsdReadClient(cupsd_client_t *con) /* - else - snprintf(line, sizeof(line), "%s/%s", type->super, type->type); - -- if (!cupsdSendHeader(con, HTTP_OK, line, AUTH_NONE)) -+ if (!cupsdSendHeader(con, HTTP_OK, line, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1862,7 +1876,7 @@ cupsdReadClient(cupsd_client_t *con) /* - unlink(con->filename); - cupsdClearString(&con->filename); - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1902,7 +1916,7 @@ cupsdReadClient(cupsd_client_t *con) /* - unlink(con->filename); - cupsdClearString(&con->filename); - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1919,7 +1933,7 @@ cupsdReadClient(cupsd_client_t *con) /* - * Return the status to the client... - */ - -- if (!cupsdSendError(con, status, AUTH_NONE)) -+ if (!cupsdSendError(con, status, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -1950,7 +1964,7 @@ cupsdReadClient(cupsd_client_t *con) /* - "cupsdReadClient: %d IPP Read Error!", - con->http.fd); - -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -1958,7 +1972,7 @@ cupsdReadClient(cupsd_client_t *con) /* - { - if (con->http.state == HTTP_POST_SEND) - { -- cupsdSendError(con, HTTP_BAD_REQUEST, AUTH_NONE); -+ cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE); - cupsdCloseClient(con); - return; - } -@@ -1978,18 +1992,22 @@ cupsdReadClient(cupsd_client_t *con) /* - cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot, request_id ++); - con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640); - -- cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: %d REQUEST %s=%d", con->http.fd, -- con->filename, con->file); -- - if (con->file < 0) - { -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to create request file %s: %s", -+ con->filename, strerror(errno)); -+ -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; - } - } - -+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: %d REQUEST %s=%d", con->http.fd, -+ con->filename, con->file); -+ - fchmod(con->file, 0640); - fchown(con->file, RunUser, Group); - fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC); -@@ -2025,7 +2043,7 @@ cupsdReadClient(cupsd_client_t *con) /* - unlink(con->filename); - cupsdClearString(&con->filename); - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -2081,7 +2099,7 @@ cupsdReadClient(cupsd_client_t *con) /* - con->request = NULL; - } - -- if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -2092,7 +2110,7 @@ cupsdReadClient(cupsd_client_t *con) /* - { - if (!cupsdSendCommand(con, con->command, con->options, 0)) - { -- if (!cupsdSendError(con, HTTP_NOT_FOUND, AUTH_NONE)) -+ if (!cupsdSendError(con, HTTP_NOT_FOUND, CUPSD_AUTH_NONE)) - { - cupsdCloseClient(con); - return; -@@ -2232,7 +2250,7 @@ cupsdSendError(cupsd_client_t *con, /* I - * never disable it in that case. - */ - -- if (code >= HTTP_BAD_REQUEST && con->http.auth_type != AUTH_NEGOTIATE) -+ if (code >= HTTP_BAD_REQUEST && con->http.auth_type != CUPSD_AUTH_NEGOTIATE) - con->http.keep_alive = HTTP_KEEPALIVE_OFF; - - /* -@@ -2351,7 +2369,11 @@ cupsdSendHeader( - char *type, /* I - MIME type of document */ - int auth_type) /* I - Type of authentication */ - { -- char auth_str[1024]; /* Authorization string */ -+ char auth_str[1024]; /* Authorization string */ -+#ifdef HAVE_GSSAPI -+ static char *gss_buf = NULL; /* Kerberos auth data buffer */ -+ static int gss_bufsize = 0; /* Size of Kerberos auth data buffer */ -+#endif /* HAVE_GSSAPI */ - - - /* -@@ -2394,9 +2416,9 @@ cupsdSendHeader( - - if (code == HTTP_UNAUTHORIZED) - { -- if (auth_type == AUTH_NONE) -+ if (auth_type == CUPSD_AUTH_NONE) - { -- if (!con->best || con->best->type <= AUTH_NONE) -+ if (!con->best || con->best->type <= CUPSD_AUTH_NONE) - auth_type = DefaultAuthType; - else - auth_type = con->best->type; -@@ -2404,18 +2426,18 @@ cupsdSendHeader( - - auth_str[0] = '\0'; - -- if (auth_type == AUTH_BASIC || auth_type == AUTH_BASICDIGEST) -+ if (auth_type == CUPSD_AUTH_BASIC || auth_type == CUPSD_AUTH_BASICDIGEST) - strlcpy(auth_str, "Basic realm=\"CUPS\"", sizeof(auth_str)); -- else if (auth_type == AUTH_DIGEST) -+ else if (auth_type == CUPSD_AUTH_DIGEST) - snprintf(auth_str, sizeof(auth_str), "Digest realm=\"CUPS\", nonce=\"%s\"", - con->http.hostname); - #ifdef HAVE_GSSAPI -- else if (auth_type == AUTH_NEGOTIATE && con->gss_output_token.length == 0) -+ else if (auth_type == CUPSD_AUTH_NEGOTIATE && con->gss_output_token.length == 0) - strlcpy(auth_str, "Negotiate", sizeof(auth_str)); - #endif /* HAVE_GSSAPI */ - - #ifdef HAVE_AUTHORIZATION_H -- if (con->best && auth_type != AUTH_NEGOTIATE) -+ if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE) - { - int i; /* Looping var */ - char *auth_key; /* Auth key buffer */ -@@ -2460,23 +2482,57 @@ cupsdSendHeader( - * non-401 replies... - */ - -- if (con->gss_output_token.length > 0) -+ if (con->gss_output_token.length > 0 && con->gss_output_token.length <= 65536) - { -- char buf[2048]; /* Output token buffer */ - OM_uint32 minor_status; /* Minor status code */ -+ int bufsize; /* Size of output token buffer */ -+ -+ -+ bufsize = con->gss_output_token.length * 4 / 3 + 2; -+ -+ if (bufsize > gss_bufsize) -+ { -+ char *buf; /* New buffer */ -+ -+ -+ bufsize = (bufsize + 1023) & 1023;/* Round up */ -+ -+ if (gss_buf) -+ buf = realloc(gss_buf, bufsize); -+ else -+ buf = malloc(bufsize); - -+ if (!buf) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate %d bytes for Kerberos credentials!", -+ bufsize); -+ return (0); -+ } - -- httpEncode64_2(buf, sizeof(buf), -- con->gss_output_token.value, -+ gss_buf = buf; -+ gss_bufsize = bufsize; -+ } -+ -+ httpEncode64_2(gss_buf, gss_bufsize, -+ con->gss_output_token.value, - con->gss_output_token.length); - gss_release_buffer(&minor_status, &con->gss_output_token); - - cupsdLogMessage(CUPSD_LOG_DEBUG, -- "cupsdSendHeader: WWW-Authenticate: Negotiate %s", buf); -+ "cupsdSendHeader: WWW-Authenticate: Negotiate %s", gss_buf); - -- if (httpPrintf(HTTP(con), "WWW-Authenticate: Negotiate %s\r\n", buf) < 0) -+ if (httpPrintf(HTTP(con), "WWW-Authenticate: Negotiate %s\r\n", -+ gss_buf) < 0) - return (0); - } -+ else if (con->gss_output_token.length > 65536) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Kerberos credentials larger than 64k (%d)!", -+ (int)con->gss_output_token.length); -+ return (0); -+ } - #endif /* HAVE_GSSAPI */ - - if (con->language && strcmp(con->language->language, "C")) -@@ -2619,7 +2675,7 @@ cupsdWriteClient(cupsd_client_t *con) /* - - if (!strncasecmp(buf, "Location:", 9)) - { -- cupsdSendHeader(con, HTTP_SEE_OTHER, NULL, AUTH_NONE); -+ cupsdSendHeader(con, HTTP_SEE_OTHER, NULL, CUPSD_AUTH_NONE); - con->sent_header = 2; - - if (httpPrintf(HTTP(con), "Content-Length: 0\r\n") < 0) -@@ -2627,12 +2683,12 @@ cupsdWriteClient(cupsd_client_t *con) /* - } - else if (!strncasecmp(buf, "Status:", 7)) - { -- cupsdSendError(con, (http_status_t)atoi(buf + 7), AUTH_NONE); -+ cupsdSendError(con, (http_status_t)atoi(buf + 7), CUPSD_AUTH_NONE); - con->sent_header = 2; - } - else - { -- cupsdSendHeader(con, HTTP_OK, NULL, AUTH_NONE); -+ cupsdSendHeader(con, HTTP_OK, NULL, CUPSD_AUTH_NONE); - con->sent_header = 1; - - if (con->http.version == HTTP_1_1) -@@ -4220,7 +4276,7 @@ pipe_command(cupsd_client_t *con, /* I - - char argbuf[10240], /* Argument buffer */ - *argv[100], /* Argument strings */ - *envp[MAX_ENV + 20]; /* Environment variables */ -- char auth_type[256], /* AUTH_TYPE environment variable */ -+ char auth_type[256], /* CUPSD_AUTH_TYPE environment variable */ - content_length[1024], /* CONTENT_LENGTH environment variable */ - content_type[1024], /* CONTENT_TYPE environment variable */ - http_cookie[32768], /* HTTP_COOKIE environment variable */ -@@ -4236,6 +4292,10 @@ pipe_command(cupsd_client_t *con, /* I - - 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 */ -+ char krb5ccname[1024]; /* KRB5CCNAME environment variable */ -+#endif /* HAVE_GSSAPI */ - - - /* -@@ -4362,7 +4422,7 @@ pipe_command(cupsd_client_t *con, /* I - - - if (con->username[0]) - { -- snprintf(auth_type, sizeof(auth_type), "AUTH_TYPE=%s", -+ snprintf(auth_type, sizeof(auth_type), "CUPSD_AUTH_TYPE=%s", - httpGetField(HTTP(con), HTTP_FIELD_AUTHORIZATION)); - - if ((uriptr = strchr(auth_type + 10, ' ')) != NULL) -@@ -4455,6 +4515,120 @@ pipe_command(cupsd_client_t *con, /* I - - snprintf(remote_user, sizeof(remote_user), "REMOTE_USER=%s", con->username); - - envp[envc ++] = remote_user; -+ -+ /* -+ * Save Kerberos credentials, if any... -+ */ -+ -+#ifdef HAVE_GSSAPI -+ if (con->gss_have_creds) -+ { -+# if !defined(HAVE_KRB5_CC_NEW_UNIQUE) && !defined(HAVE_HEIMDAL) -+ cupsdLogMessage(CUPSD_LOG_INFO, -+ "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__ */ -+ -+ /* -+ * 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)); -+ ccache = NULL; -+ } -+ else 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); -+ ccache = NULL; -+ } -+ else 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); -+ 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, -+ "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 */ -+ } -+#endif /* HAVE_GSSAPI */ -+ - } - - if (con->http.version == HTTP_1_1) -@@ -4568,7 +4742,11 @@ pipe_command(cupsd_client_t *con, /* I - - */ - - if (con->username[0]) -- cupsdAddCert(pid, con->username); -+#ifdef HAVE_GSSAPI -+ cupsdAddCert(pid, con->username, ccache); -+#else -+ cupsdAddCert(pid, con->username, NULL); -+#endif /* HAVE_GSSAPI */ - - cupsdLogMessage(CUPSD_LOG_DEBUG, "[CGI] %s started - PID = %d", - command, pid); -@@ -4604,7 +4782,7 @@ write_file(cupsd_client_t *con, /* I - - - con->pipe_pid = 0; - -- if (!cupsdSendHeader(con, code, type, AUTH_NONE)) -+ if (!cupsdSendHeader(con, code, type, CUPSD_AUTH_NONE)) - return (0); - - if (httpPrintf(HTTP(con), "Last-Modified: %s\r\n", -diff -up cups-1.3.5/scheduler/cups-polld.c.1.3.x cups-1.3.5/scheduler/cups-polld.c ---- cups-1.3.5/scheduler/cups-polld.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/cups-polld.c 2008-02-14 13:03:30.000000000 +0000 -@@ -144,7 +144,7 @@ main(int argc, /* I - Number of comm - * Loop forever, asking for available printers and classes... - */ - -- for (http = NULL;;) -+ for (http = NULL; !ferror(stderr);) - { - /* - * Open a connection to the server... -@@ -180,6 +180,8 @@ main(int argc, /* I - Number of comm - if (remain > 0 && !restart_polling) - sleep(remain); - } -+ -+ return (1); - } - - -diff -up cups-1.3.5/scheduler/classes.c.1.3.x cups-1.3.5/scheduler/classes.c ---- cups-1.3.5/scheduler/classes.c.1.3.x 2007-11-30 03:37:11.000000000 +0000 -+++ cups-1.3.5/scheduler/classes.c 2008-02-14 13:03:30.000000000 +0000 -@@ -393,7 +393,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "")) -@@ -407,14 +407,14 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!p) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - else if (!strcasecmp(line, "AuthInfoRequired")) - { -@@ -458,7 +458,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - else if ((temp = cupsdFindPrinter(value)) == NULL) - { -@@ -504,7 +504,7 @@ cupsdLoadAllClasses(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "StateMessage")) -@@ -546,7 +546,7 @@ cupsdLoadAllClasses(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Shared")) -@@ -568,9 +568,9 @@ cupsdLoadAllClasses(void) - else - { - cupsdLogMessage(CUPSD_LOG_ERROR, -- "Syntax error on line %d of printers.conf.", -+ "Syntax error on line %d of classes.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "JobSheets")) -@@ -609,7 +609,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "AllowUser")) -@@ -623,7 +623,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "DenyUser")) -@@ -637,7 +637,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "QuotaPeriod")) -@@ -648,7 +648,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "PageLimit")) -@@ -659,7 +659,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "KLimit")) -@@ -670,7 +670,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "OpPolicy")) -@@ -694,7 +694,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "ErrorPolicy")) -@@ -705,7 +705,7 @@ cupsdLoadAllClasses(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of classes.conf.", linenum); -- return; -+ break; - } - } - else -diff -up cups-1.3.5/scheduler/cert.h.1.3.x cups-1.3.5/scheduler/cert.h ---- cups-1.3.5/scheduler/cert.h.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/cert.h 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Authentication certificate definitions for the Common UNIX - * Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -24,6 +24,9 @@ typedef struct cupsd_cert_s - int pid; /* Process ID (0 for root certificate) */ - char certificate[33]; /* 32 hex characters, or 128 bits */ - char username[33]; /* Authenticated username */ -+#ifdef HAVE_GSSAPI -+ krb5_ccache ccache; /* Kerberos credential cache */ -+#endif /* HAVE_GSSAPI */ - } cupsd_cert_t; - - -@@ -39,7 +42,8 @@ VAR time_t RootCertTime; /* Root certif - * Prototypes... - */ - --extern void cupsdAddCert(int pid, const char *username); -+extern void cupsdAddCert(int pid, const char *username, -+ void *ccache); - extern void cupsdDeleteCert(int pid); - extern void cupsdDeleteAllCerts(void); - extern const char *cupsdFindCert(const char *certificate); -diff -up cups-1.3.5/scheduler/policy.c.1.3.x cups-1.3.5/scheduler/policy.c ---- cups-1.3.5/scheduler/policy.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/policy.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Policy routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -105,7 +105,7 @@ cupsdAddPolicyOp(cupsd_policy_t *p, /* - p->num_ops ++; - - temp->op = op; -- temp->limit = AUTH_LIMIT_IPP; -+ temp->limit = CUPSD_AUTH_LIMIT_IPP; - - if (po) - { -@@ -125,12 +125,12 @@ cupsdAddPolicyOp(cupsd_policy_t *p, /* - for (i = 0; i < po->num_allow; i ++) - switch (po->allow[i].type) - { -- case AUTH_IP : -+ case CUPSD_AUTH_IP : - cupsdAllowIP(temp, po->allow[i].mask.ip.address, - po->allow[i].mask.ip.netmask); - break; - -- case AUTH_INTERFACE : -+ case CUPSD_AUTH_INTERFACE : - snprintf(name, sizeof(name), "@IF(%s)", - po->allow[i].mask.name.name); - cupsdAllowHost(temp, name); -@@ -144,12 +144,12 @@ cupsdAddPolicyOp(cupsd_policy_t *p, /* - for (i = 0; i < po->num_deny; i ++) - switch (po->deny[i].type) - { -- case AUTH_IP : -+ case CUPSD_AUTH_IP : - cupsdDenyIP(temp, po->deny[i].mask.ip.address, - po->deny[i].mask.ip.netmask); - break; - -- case AUTH_INTERFACE : -+ case CUPSD_AUTH_INTERFACE : - snprintf(name, sizeof(name), "@IF(%s)", - po->deny[i].mask.name.name); - cupsdDenyHost(temp, name); -diff -up cups-1.3.5/scheduler/auth.h.1.3.x cups-1.3.5/scheduler/auth.h ---- cups-1.3.5/scheduler/auth.h.1.3.x 2007-08-08 21:50:42.000000000 +0100 -+++ cups-1.3.5/scheduler/auth.h 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Authorization definitions for the Common UNIX Printing System (CUPS) - * scheduler. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -25,36 +25,36 @@ - * HTTP authorization types and levels... - */ - --#define AUTH_DEFAULT -1 /* Use DefaultAuthType */ --#define AUTH_NONE 0 /* No authentication */ --#define AUTH_BASIC 1 /* Basic authentication */ --#define AUTH_DIGEST 2 /* Digest authentication */ --#define AUTH_BASICDIGEST 3 /* Basic authentication w/passwd.md5 */ --#define AUTH_NEGOTIATE 4 /* Kerberos authentication */ -- --#define AUTH_ANON 0 /* Anonymous access */ --#define AUTH_USER 1 /* Must have a valid username/password */ --#define AUTH_GROUP 2 /* Must also be in a named group */ -- --#define AUTH_ALLOW 0 /* Allow access */ --#define AUTH_DENY 1 /* Deny access */ -- --#define AUTH_NAME 0 /* Authorize host by name */ --#define AUTH_IP 1 /* Authorize host by IP */ --#define AUTH_INTERFACE 2 /* Authorize host by interface */ -- --#define AUTH_SATISFY_ALL 0 /* Satisfy both address and auth */ --#define AUTH_SATISFY_ANY 1 /* Satisfy either address or auth */ -- --#define AUTH_LIMIT_DELETE 1 /* Limit DELETE requests */ --#define AUTH_LIMIT_GET 2 /* Limit GET requests */ --#define AUTH_LIMIT_HEAD 4 /* Limit HEAD requests */ --#define AUTH_LIMIT_OPTIONS 8 /* Limit OPTIONS requests */ --#define AUTH_LIMIT_POST 16 /* Limit POST requests */ --#define AUTH_LIMIT_PUT 32 /* Limit PUT requests */ --#define AUTH_LIMIT_TRACE 64 /* Limit TRACE requests */ --#define AUTH_LIMIT_ALL 127 /* Limit all requests */ --#define AUTH_LIMIT_IPP 128 /* Limit IPP requests */ -+#define CUPSD_AUTH_DEFAULT -1 /* Use DefaultAuthType */ -+#define CUPSD_AUTH_NONE 0 /* No authentication */ -+#define CUPSD_AUTH_BASIC 1 /* Basic authentication */ -+#define CUPSD_AUTH_DIGEST 2 /* Digest authentication */ -+#define CUPSD_AUTH_BASICDIGEST 3 /* Basic authentication w/passwd.md5 */ -+#define CUPSD_AUTH_NEGOTIATE 4 /* Kerberos authentication */ -+ -+#define CUPSD_AUTH_ANON 0 /* Anonymous access */ -+#define CUPSD_AUTH_USER 1 /* Must have a valid username/password */ -+#define CUPSD_AUTH_GROUP 2 /* Must also be in a named group */ -+ -+#define CUPSD_AUTH_ALLOW 0 /* Allow access */ -+#define CUPSD_AUTH_DENY 1 /* Deny access */ -+ -+#define CUPSD_AUTH_NAME 0 /* Authorize host by name */ -+#define CUPSD_AUTH_IP 1 /* Authorize host by IP */ -+#define CUPSD_AUTH_INTERFACE 2 /* Authorize host by interface */ -+ -+#define CUPSD_AUTH_SATISFY_ALL 0 /* Satisfy both address and auth */ -+#define CUPSD_AUTH_SATISFY_ANY 1 /* Satisfy either address or auth */ -+ -+#define CUPSD_AUTH_LIMIT_DELETE 1 /* Limit DELETE requests */ -+#define CUPSD_AUTH_LIMIT_GET 2 /* Limit GET requests */ -+#define CUPSD_AUTH_LIMIT_HEAD 4 /* Limit HEAD requests */ -+#define CUPSD_AUTH_LIMIT_OPTIONS 8 /* Limit OPTIONS requests */ -+#define CUPSD_AUTH_LIMIT_POST 16 /* Limit POST requests */ -+#define CUPSD_AUTH_LIMIT_PUT 32 /* Limit PUT requests */ -+#define CUPSD_AUTH_LIMIT_TRACE 64 /* Limit TRACE requests */ -+#define CUPSD_AUTH_LIMIT_ALL 127 /* Limit all requests */ -+#define CUPSD_AUTH_LIMIT_IPP 128 /* Limit IPP requests */ - - #define IPP_ANY_OPERATION (ipp_op_t)0 - /* Any IPP operation */ -@@ -116,7 +116,7 @@ typedef struct cupsd_client_s cupsd_clie - - VAR cups_array_t *Locations VALUE(NULL); - /* Authorization locations */ --VAR int DefaultAuthType VALUE(AUTH_BASIC); -+VAR int DefaultAuthType VALUE(CUPSD_AUTH_BASIC); - /* Default AuthType, if not specified */ - #ifdef HAVE_SSL - VAR http_encryption_t DefaultEncryption VALUE(HTTP_ENCRYPT_REQUIRED); -diff -up cups-1.3.5/scheduler/subscriptions.h.1.3.x cups-1.3.5/scheduler/subscriptions.h ---- cups-1.3.5/scheduler/subscriptions.h.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/subscriptions.h 2008-02-14 13:03:30.000000000 +0000 -@@ -20,47 +20,52 @@ - typedef enum - { - /* Individual printer events... */ -- CUPSD_EVENT_PRINTER_RESTARTED = 0x0001, -+ CUPSD_EVENT_PRINTER_STATE = 0x0001, /* Sent after generic printer state change */ -+ CUPSD_EVENT_PRINTER_RESTARTED = 0x0002, - /* Sent after printer restarted */ -- CUPSD_EVENT_PRINTER_SHUTDOWN = 0x0002,/* Sent after printer shutdown */ -- CUPSD_EVENT_PRINTER_STOPPED = 0x0004, /* Sent after printer stopped */ -- CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED = 0x0008, -+ CUPSD_EVENT_PRINTER_SHUTDOWN = 0x0004,/* Sent after printer shutdown */ -+ CUPSD_EVENT_PRINTER_STOPPED = 0x0008, /* Sent after printer stopped */ -+ -+ CUPSD_EVENT_PRINTER_CONFIG = 0x0010, /* Send after add/modify changes attrs */ -+ CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED = 0x0020, - /* Sent after finishings-supported changed */ -- CUPSD_EVENT_PRINTER_MEDIA_CHANGED = 0x0010, -+ CUPSD_EVENT_PRINTER_MEDIA_CHANGED = 0x0040, - /* Sent after media-supported changed */ -- CUPSD_EVENT_PRINTER_ADDED = 0x0020, /* Sent after printer added */ -- CUPSD_EVENT_PRINTER_DELETED = 0x0040, /* Sent after printer deleted */ -- CUPSD_EVENT_PRINTER_MODIFIED = 0x0080,/* Sent after printer modified */ -+ CUPSD_EVENT_PRINTER_ADDED = 0x0080, /* Sent after printer added */ -+ CUPSD_EVENT_PRINTER_DELETED = 0x0100, /* Sent after printer deleted */ -+ CUPSD_EVENT_PRINTER_MODIFIED = 0x0200,/* Sent after printer modified */ -+ CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x0400, -+ /* Sent when the order of jobs is changed */ - - /* Convenience printer event groupings... */ -- CUPSD_EVENT_PRINTER_STATE_CHANGED = 0x0007, -- /* RESTARTED + SHUTDOWN + STOPPED */ -- CUPSD_EVENT_PRINTER_CONFIG_CHANGED = 0x0018, -- /* FINISHINGS_CHANGED + MEDIA_CHANGED */ -- CUPSD_EVENT_PRINTER_CHANGED = 0x00ff, /* All of the above */ -+ CUPSD_EVENT_PRINTER_STATE_CHANGED = 0x000f, -+ /* STATE + RESTARTED + SHUTDOWN + STOPPED */ -+ CUPSD_EVENT_PRINTER_CONFIG_CHANGED = 0x0070, -+ /* CONFIG + FINISHINGS_CHANGED + MEDIA_CHANGED */ -+ CUPSD_EVENT_PRINTER_CHANGED = 0x07ff, /* All of the above */ - - /* Individual job events... */ -- CUPSD_EVENT_JOB_STATE = 0x0100, /* Any state change */ -- CUPSD_EVENT_JOB_CREATED = 0x0200, /* Send after job is created */ -- CUPSD_EVENT_JOB_COMPLETED = 0x0400, /* Sent after job is completed */ -- CUPSD_EVENT_JOB_STOPPED = 0x0800, /* Sent after job is stopped */ -- CUPSD_EVENT_JOB_CONFIG_CHANGED = 0x1000, -+ CUPSD_EVENT_JOB_STATE = 0x0800, /* Any state change */ -+ CUPSD_EVENT_JOB_CREATED = 0x1000, /* Send after job is created */ -+ CUPSD_EVENT_JOB_COMPLETED = 0x2000, /* Sent after job is completed */ -+ CUPSD_EVENT_JOB_STOPPED = 0x4000, /* Sent after job is stopped */ -+ CUPSD_EVENT_JOB_CONFIG_CHANGED = 0x8000, - /* Sent after set-job-attributes */ -- CUPSD_EVENT_JOB_PROGRESS = 0x2000, /* Sent for each page */ -+ CUPSD_EVENT_JOB_PROGRESS = 0x10000, /* Sent for each page */ - - /* Convenience job event grouping... */ -- CUPSD_EVENT_JOB_STATE_CHANGED = 0x0f00, -- /* Any state change + CREATED + COMPLETED + STOPPED */ -+ CUPSD_EVENT_JOB_STATE_CHANGED = 0x7800, -+ /* STATE + CREATED + COMPLETED + STOPPED */ - - /* Server events... */ -- CUPSD_EVENT_SERVER_RESTARTED = 0x4000,/* Sent after server restarts */ -- CUPSD_EVENT_SERVER_STARTED = 0x8000, /* Sent when server first starts */ -- CUPSD_EVENT_SERVER_STOPPED = 0x10000, /* Sent when server is stopped */ -- CUPSD_EVENT_SERVER_AUDIT = 0x20000, /* Security-related stuff */ -+ CUPSD_EVENT_SERVER_RESTARTED = 0x20000,/* Sent after server restarts */ -+ CUPSD_EVENT_SERVER_STARTED = 0x40000, /* Sent when server first starts */ -+ CUPSD_EVENT_SERVER_STOPPED = 0x80000, /* Sent when server is stopped */ -+ CUPSD_EVENT_SERVER_AUDIT = 0x100000, /* Security-related stuff */ - - /* Everything and nothing... */ - CUPSD_EVENT_NONE = 0, /* Nothing */ -- CUPSD_EVENT_ALL = 0x1ffff /* Everything */ -+ CUPSD_EVENT_ALL = 0x1fffff /* Everything */ - } cupsd_eventmask_t; - - -diff -up cups-1.3.5/scheduler/job.c.1.3.x cups-1.3.5/scheduler/job.c ---- cups-1.3.5/scheduler/job.c.1.3.x 2007-11-27 00:09:24.000000000 +0000 -+++ cups-1.3.5/scheduler/job.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Job management routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -113,7 +113,8 @@ cupsdAddJob(int priority, /* I - - cupsd_job_t *job; /* New job record */ - - -- job = calloc(sizeof(cupsd_job_t), 1); -+ if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL) -+ return (NULL); - - job->id = NextJobId ++; - job->priority = priority; -@@ -351,6 +352,7 @@ cupsdCheckJobs(void) - cupsd_job_t *job; /* Current job in queue */ - cupsd_printer_t *printer, /* Printer destination */ - *pclass; /* Printer class destination */ -+ ipp_attribute_t *attr; /* Job attribute */ - - - DEBUG_puts("cupsdCheckJobs()"); -@@ -376,10 +378,25 @@ cupsdCheckJobs(void) - job->hold_until < time(NULL)) - { - if (job->pending_timeout) -- cupsdTimeoutJob(job); /* Add trailing banner as needed */ -+ { -+ /* Add trailing banner as needed */ -+ if (cupsdTimeoutJob(job)) -+ continue; -+ } - - job->state->values[0].integer = IPP_JOB_PENDING; - job->state_value = IPP_JOB_PENDING; -+ -+ if ((attr = ippFindAttribute(job->attrs, "job-hold-until", -+ IPP_TAG_KEYWORD)) == NULL) -+ attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME); -+ -+ if (attr) -+ { -+ attr->value_tag = IPP_TAG_KEYWORD; -+ cupsdSetString(&(attr->values[0].string.text), "no-hold"); -+ cupsdSaveJob(job); -+ } - } - - /* -@@ -439,9 +456,6 @@ cupsdCheckJobs(void) - * so that we know which printer actually printed the job... - */ - -- ipp_attribute_t *attr; /* job-actual-printer-uri attribute */ -- -- - if ((attr = ippFindAttribute(job->attrs, "job-actual-printer-uri", - IPP_TAG_URI)) != NULL) - cupsdSetString(&attr->values[0].string.text, printer->uri); -@@ -1812,6 +1826,7 @@ free_job(cupsd_job_t *job) /* I - Job * - cupsdClearString(&job->auth_username); - cupsdClearString(&job->auth_domain); - cupsdClearString(&job->auth_password); -+ - #ifdef HAVE_GSSAPI - /* - * Destroy the credential cache and clear the KRB5CCNAME env var string. -@@ -2445,7 +2460,7 @@ start_job(cupsd_job_t *job, /* I - - title[IPP_MAX_NAME], - /* Job title string */ - copies[255], /* # copies string */ -- *envp[MAX_ENV + 15], -+ *envp[MAX_ENV + 16], - /* Environment variables */ - charset[255], /* CHARSET env variable */ - class_name[255],/* CLASS env variable */ -@@ -2458,6 +2473,10 @@ start_job(cupsd_job_t *job, /* I - - final_content_type[1024], - /* FINAL_CONTENT_TYPE env variable */ - lang[255], /* LANG env variable */ -+#ifdef __APPLE__ -+ apple_language[255], -+ /* APPLE_LANGUAGE env variable */ -+#endif /* __APPLE__ */ - ppd[1024], /* PPD env variable */ - printer_name[255], - /* PRINTER env variable */ -@@ -2514,7 +2533,7 @@ start_job(cupsd_job_t *job, /* I - - "[Job %d] Unable to convert file %d to printable format!", - job->current_file, job->id); - cupsdLogMessage(CUPSD_LOG_INFO, -- "Hint: Do you have ESP Ghostscript installed?"); -+ "Hint: Do you have Ghostscript installed?"); - - if (LogLevel < CUPSD_LOG_DEBUG) - cupsdLogMessage(CUPSD_LOG_INFO, -@@ -2964,6 +2983,17 @@ start_job(cupsd_job_t *job, /* I - - else - argv = calloc(8, sizeof(char *)); - -+ if (!argv) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate argument array!"); -+ cupsArrayDelete(filters); -+ -+ FilterLevel -= job->cost; -+ -+ cupsdStopPrinter(printer, 0); -+ return; -+ } -+ - sprintf(jobid, "%d", job->id); - - argv[0] = printer->name; -@@ -3000,6 +3030,12 @@ start_job(cupsd_job_t *job, /* I - - attr = ippFindAttribute(job->attrs, "attributes-natural-language", - IPP_TAG_LANGUAGE); - -+#ifdef __APPLE__ -+ strcpy(apple_language, "APPLE_LANGUAGE"); -+ _cupsAppleLanguage(attr->values[0].string.text, -+ apple_language + 15, sizeof(apple_language) - 15); -+#endif /* __APPLE__ */ -+ - switch (strlen(attr->values[0].string.text)) - { - default : -@@ -3060,6 +3096,9 @@ start_job(cupsd_job_t *job, /* I - - - envp[envc ++] = charset; - envp[envc ++] = lang; -+#ifdef __APPLE__ -+ envp[envc ++] = apple_language; -+#endif /* __APPLE__ */ - envp[envc ++] = ppd; - envp[envc ++] = rip_max_cache; - envp[envc ++] = content_type; -@@ -3114,8 +3153,8 @@ start_job(cupsd_job_t *job, /* I - - envp[envc] = NULL; - - for (i = 0; i < envc; i ++) -- if (!strncmp(envp[i], "AUTH_", 5)) -- cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"AUTH_%c****\"", -+ if (!strncmp(envp[i], "CUPSD_AUTH_", 5)) -+ cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"CUPSD_AUTH_%c****\"", - job->id, i, envp[i][5]); - else if (strncmp(envp[i], "DEVICE_URI=", 11)) - cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] envp[%d]=\"%s\"", -@@ -3321,7 +3360,7 @@ start_job(cupsd_job_t *job, /* I - - - if (strncmp(printer->device_uri, "file:", 5) != 0) - { -- if (job->current_file == 1) -+ if (job->current_file == 1 || printer->remote) - { - sscanf(printer->device_uri, "%254[^:]", method); - snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, method); -@@ -3538,7 +3577,7 @@ update_job(cupsd_job_t *job) /* I - Job - * job sheet count... - */ - -- if (job->sheets != NULL) -+ if (job->sheets) - { - if (!strncasecmp(message, "total ", 6)) - { -@@ -3583,8 +3622,9 @@ update_job(cupsd_job_t *job) /* I - Job - - cupsdLogPage(job, message); - -- cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, -- "Printed %d page(s).", job->sheets->values[0].integer); -+ if (job->sheets) -+ cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, -+ "Printed %d page(s).", job->sheets->values[0].integer); - } - else if (loglevel == CUPSD_LOG_STATE) - { -@@ -3597,7 +3637,7 @@ update_job(cupsd_job_t *job) /* I - Job - { - cupsdSetPrinterReasons(job->printer, message); - cupsdAddPrinterHistory(job->printer); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; - } - - update_job_attrs(job); -@@ -3626,14 +3666,42 @@ update_job(cupsd_job_t *job) /* I - Job - if ((attr = cupsGetOption("printer-alert", num_attrs, attrs)) != NULL) - { - cupsdSetString(&job->printer->alert, attr); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; - } - - if ((attr = cupsGetOption("printer-alert-description", num_attrs, - attrs)) != NULL) - { - cupsdSetString(&job->printer->alert_description, attr); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; -+ } -+ -+ if ((attr = cupsGetOption("marker-colors", num_attrs, attrs)) != NULL) -+ { -+ cupsdSetPrinterAttr(job->printer, "marker-colors", (char *)attr); -+ job->printer->marker_time = time(NULL); -+ event |= CUPSD_EVENT_PRINTER_STATE; -+ } -+ -+ if ((attr = cupsGetOption("marker-levels", num_attrs, attrs)) != NULL) -+ { -+ cupsdSetPrinterAttr(job->printer, "marker-levels", (char *)attr); -+ job->printer->marker_time = time(NULL); -+ event |= CUPSD_EVENT_PRINTER_STATE; -+ } -+ -+ if ((attr = cupsGetOption("marker-names", num_attrs, attrs)) != NULL) -+ { -+ cupsdSetPrinterAttr(job->printer, "marker-names", (char *)attr); -+ job->printer->marker_time = time(NULL); -+ event |= CUPSD_EVENT_PRINTER_STATE; -+ } -+ -+ if ((attr = cupsGetOption("marker-types", num_attrs, attrs)) != NULL) -+ { -+ cupsdSetPrinterAttr(job->printer, "marker-types", (char *)attr); -+ job->printer->marker_time = time(NULL); -+ event |= CUPSD_EVENT_PRINTER_STATE; - } - - cupsFreeOptions(num_attrs, attrs); -@@ -3650,7 +3718,7 @@ update_job(cupsd_job_t *job) /* I - Job - - cupsdSetString(&job->printer->recoverable, ptr); - cupsdAddPrinterHistory(job->printer); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; - } - else if (!strncmp(message, "recovered:", 10)) - { -@@ -3663,7 +3731,7 @@ update_job(cupsd_job_t *job) /* I - Job - - cupsdSetString(&job->printer->recoverable, ptr); - cupsdAddPrinterHistory(job->printer); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; - } - #endif /* __APPLE__ */ - else if (loglevel <= job->status_level) -@@ -3678,7 +3746,7 @@ update_job(cupsd_job_t *job) /* I - Job - strlcpy(job->printer->state_message, message, - sizeof(job->printer->state_message)); - cupsdAddPrinterHistory(job->printer); -- event |= CUPSD_EVENT_PRINTER_STATE_CHANGED; -+ event |= CUPSD_EVENT_PRINTER_STATE; - - update_job_attrs(job); - } -@@ -3687,8 +3755,8 @@ update_job(cupsd_job_t *job) /* I - Job - break; - } - -- if ((event & CUPSD_EVENT_PRINTER_STATE_CHANGED)) -- cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE_CHANGED, job->printer, NULL, -+ if (event & CUPSD_EVENT_PRINTER_STATE) -+ cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL, - (job->printer->type & CUPS_PRINTER_CLASS) ? - "Class \"%s\" state changed." : - "Printer \"%s\" state changed.", -diff -up cups-1.3.5/scheduler/type.c.1.3.x cups-1.3.5/scheduler/type.c ---- cups-1.3.5/scheduler/type.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/type.c 2008-02-14 13:03:30.000000000 +0000 -@@ -567,12 +567,12 @@ mimeFileType(mime_t *mime, /* I - M - if ((base = strrchr(filename, '/')) != NULL) - base ++; - else -- filename = filename; -+ base = filename; - } - else if ((base = strrchr(pathname, '/')) != NULL) - base ++; - else -- filename = pathname; -+ base = pathname; - - /* - * Then check it against all known types... -@@ -638,8 +638,8 @@ compare_types(mime_type_t *t0, /* I - F - int i; /* Result of comparison */ - - -- if ((i = strcmp(t0->super, t1->super)) == 0) -- i = strcmp(t0->type, t1->type); -+ if ((i = strcasecmp(t0->super, t1->super)) == 0) -+ i = strcasecmp(t0->type, t1->type); - - return (i); - } -diff -up cups-1.3.5/scheduler/subscriptions.c.1.3.x cups-1.3.5/scheduler/subscriptions.c ---- cups-1.3.5/scheduler/subscriptions.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scheduler/subscriptions.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Subscription routines for the Common UNIX Printing System (CUPS) scheduler. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -323,7 +323,7 @@ cupsdAddSubscription( - "cupsdAddSubscription(mask=%x, dest=%p(%s), job=%p(%d), " - "uri=\"%s\")", - mask, dest, dest ? dest->name : "", job, job ? job->id : 0, -- uri); -+ uri ? uri : "(null)"); - - if (!Subscriptions) - Subscriptions = cupsArrayNew((cups_array_func_t)cupsd_compare_subscriptions, -@@ -504,9 +504,14 @@ cupsdEventName( - case CUPSD_EVENT_PRINTER_MODIFIED : - return ("printer-modified"); - -+ case CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED : -+ return ("printer-queue-order-changed"); -+ -+ case CUPSD_EVENT_PRINTER_STATE : - case CUPSD_EVENT_PRINTER_STATE_CHANGED : - return ("printer-state-changed"); - -+ case CUPSD_EVENT_PRINTER_CONFIG : - case CUPSD_EVENT_PRINTER_CONFIG_CHANGED : - return ("printer-config-changed"); - -@@ -529,8 +534,6 @@ cupsdEventName( - return ("job-progress"); - - case CUPSD_EVENT_JOB_STATE : -- return ("job-state"); -- - case CUPSD_EVENT_JOB_STATE_CHANGED : - return ("job-state-changed"); - -@@ -577,14 +580,14 @@ cupsdEventValue(const char *name) /* I - - return (CUPSD_EVENT_PRINTER_DELETED); - else if (!strcmp(name, "printer-modified")) - return (CUPSD_EVENT_PRINTER_MODIFIED); -+ else if (!strcmp(name, "printer-queue-order-changed")) -+ return (CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED); - else if (!strcmp(name, "printer-state-changed")) - return (CUPSD_EVENT_PRINTER_STATE_CHANGED); - else if (!strcmp(name, "printer-config-changed")) - return (CUPSD_EVENT_PRINTER_CONFIG_CHANGED); - else if (!strcmp(name, "printer-changed")) - return (CUPSD_EVENT_PRINTER_CHANGED); -- else if (!strcmp(name, "job-state")) -- return (CUPSD_EVENT_JOB_STATE); - else if (!strcmp(name, "job-created")) - return (CUPSD_EVENT_JOB_CREATED); - else if (!strcmp(name, "job-completed")) -@@ -731,7 +734,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "")) -@@ -741,7 +744,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - - if (delete_sub) -@@ -755,7 +758,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - else if (!strcasecmp(line, "Events")) - { -@@ -769,7 +772,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - - while (*value) -@@ -792,7 +795,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unknown event name \'%s\' on line %d of subscriptions.conf.", - value, linenum); -- return; -+ break; - } - - value = valueptr; -@@ -811,7 +814,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Recipient")) -@@ -827,7 +830,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "JobId")) -@@ -851,7 +854,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "PrinterName")) -@@ -875,7 +878,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "UserData")) -@@ -937,7 +940,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "LeaseDuration")) -@@ -956,7 +959,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Interval")) -@@ -972,7 +975,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "ExpirationTime")) -@@ -988,7 +991,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "NextEventId")) -@@ -1004,7 +1007,7 @@ cupsdLoadAllSubscriptions(void) - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of subscriptions.conf.", - linenum); -- return; -+ break; - } - } - else -diff -up cups-1.3.5/scheduler/ipp.c.1.3.x cups-1.3.5/scheduler/ipp.c ---- cups-1.3.5/scheduler/ipp.c.1.3.x 2007-12-15 00:23:16.000000000 +0000 -+++ cups-1.3.5/scheduler/ipp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * IPP routines for the Common UNIX Printing System (CUPS) scheduler. - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * This file contains Kerberos support code, copyright 2006 by -@@ -658,7 +658,7 @@ cupsdProcessIPPRequest( - con->http.fd, con->response->request.status.status_code, - ippErrorString(con->response->request.status.status_code)); - -- if (cupsdSendHeader(con, HTTP_OK, "application/ipp", AUTH_NONE)) -+ if (cupsdSendHeader(con, HTTP_OK, "application/ipp", CUPSD_AUTH_NONE)) - { - #ifdef CUPSD_USE_CHUNKING - /* -@@ -746,7 +746,7 @@ cupsdProcessIPPRequest( - * 'cupsdTimeoutJob()' - Timeout a job waiting on job files. - */ - --void -+int /* O - 0 on success, -1 on error */ - cupsdTimeoutJob(cupsd_job_t *job) /* I - Job to timeout */ - { - cupsd_printer_t *printer; /* Destination printer or class */ -@@ -774,10 +774,13 @@ cupsdTimeoutJob(cupsd_job_t *job) /* I - - cupsdLogMessage(CUPSD_LOG_INFO, "[Job %d] Adding end banner page \"%s\".", - job->id, attr->values[1].string.text); - -- kbytes = copy_banner(NULL, job, attr->values[1].string.text); -+ if ((kbytes = copy_banner(NULL, job, attr->values[1].string.text)) < 0) -+ return (-1); - - cupsdUpdateQuota(printer, job->username, 0, kbytes); - } -+ -+ return (0); - } - - -@@ -1786,7 +1789,8 @@ add_job(cupsd_client_t *con, /* I - Cl - "[Job %d] Adding start banner page \"%s\".", - job->id, attr->values[0].string.text); - -- kbytes = copy_banner(con, job, attr->values[0].string.text); -+ if ((kbytes = copy_banner(con, job, attr->values[0].string.text)) < 0) -+ return (NULL); - - cupsdUpdateQuota(printer, job->username, 0, kbytes); - } -@@ -2403,12 +2407,15 @@ add_printer(cupsd_client_t *con, /* I - - - supported = ippFindAttribute(printer->attrs, "port-monitor-supported", - IPP_TAG_NAME); -- for (i = 0; i < supported->num_values; i ++) -- if (!strcmp(supported->values[i].string.text, -- attr->values[0].string.text)) -- break; -+ if (supported) -+ { -+ for (i = 0; i < supported->num_values; i ++) -+ if (!strcmp(supported->values[i].string.text, -+ attr->values[0].string.text)) -+ break; -+ } - -- if (i >= supported->num_values) -+ if (!supported || i >= supported->num_values) - { - send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad port-monitor \"%s\"!"), - attr->values[0].string.text); -@@ -3410,13 +3417,6 @@ check_quotas(cupsd_client_t *con, /* I - con, con->http.fd, p, p->name); - - /* -- * Check input... -- */ -- -- if (!con || !p) -- return (0); -- -- /* - * Figure out who is printing... - */ - -@@ -3922,7 +3922,7 @@ copy_banner(cupsd_client_t *con, /* I - - */ - - if (add_file(con, job, banner->filetype, 0)) -- return (0); -+ return (-1); - - snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, - job->num_files); -@@ -4644,6 +4644,10 @@ copy_printer_attrs( - printer->recoverable); - #endif /* __APPLE__ */ - -+ if (!ra || cupsArrayFind(ra, "marker-change-time")) -+ ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, -+ "marker-change-time", printer->marker_time); -+ - if (printer->alert && (!ra || cupsArrayFind(ra, "printer-alert"))) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, - "printer-alert", NULL, printer->alert); -@@ -7036,17 +7040,6 @@ move_job(cupsd_client_t *con, /* I - C - } - - /* -- * Check policy... -- */ -- -- if ((status = cupsdCheckPolicy(dprinter->op_policy_ptr, con, -- NULL)) != HTTP_OK) -- { -- send_http_error(con, status, dprinter); -- return; -- } -- -- /* - * See if we have a job URI or a printer URI... - */ - -@@ -7154,6 +7147,17 @@ move_job(cupsd_client_t *con, /* I - C - } - - /* -+ * Check the policy of the destination printer... -+ */ -+ -+ if ((status = cupsdCheckPolicy(dprinter->op_policy_ptr, con, -+ job ? job->username : NULL)) != HTTP_OK) -+ { -+ send_http_error(con, status, dprinter); -+ return; -+ } -+ -+ /* - * Now move the job or jobs... - */ - -@@ -7541,7 +7545,8 @@ print_job(cupsd_client_t *con, /* I - - * See if we need to add the ending sheet... - */ - -- cupsdTimeoutJob(job); -+ if (cupsdTimeoutJob(job)) -+ return; - - /* - * Log and save the job... -@@ -8265,13 +8270,13 @@ save_auth_info( - cupsFilePrintf(fp, "%s\n", line); - - if (!strcmp(dest->auth_info_required[i], "username")) -- cupsdSetStringf(&job->auth_username, "AUTH_USERNAME=%s", -+ cupsdSetStringf(&job->auth_username, "CUPSD_AUTH_USERNAME=%s", - auth_info->values[i].string.text); - else if (!strcmp(dest->auth_info_required[i], "domain")) -- cupsdSetStringf(&job->auth_domain, "AUTH_DOMAIN=%s", -+ cupsdSetStringf(&job->auth_domain, "CUPSD_AUTH_DOMAIN=%s", - auth_info->values[i].string.text); - else if (!strcmp(dest->auth_info_required[i], "password")) -- cupsdSetStringf(&job->auth_password, "AUTH_PASSWORD=%s", -+ cupsdSetStringf(&job->auth_password, "CUPSD_AUTH_PASSWORD=%s", - auth_info->values[i].string.text); - } - } -@@ -8284,7 +8289,7 @@ save_auth_info( - httpEncode64_2(line, sizeof(line), con->username, strlen(con->username)); - cupsFilePrintf(fp, "%s\n", line); - -- cupsdSetStringf(&job->auth_username, "AUTH_USERNAME=%s", con->username); -+ cupsdSetStringf(&job->auth_username, "CUPSD_AUTH_USERNAME=%s", con->username); - cupsdClearString(&job->auth_domain); - - /* -@@ -8294,7 +8299,7 @@ save_auth_info( - httpEncode64_2(line, sizeof(line), con->password, strlen(con->password)); - cupsFilePrintf(fp, "%s\n", line); - -- cupsdSetStringf(&job->auth_password, "AUTH_PASSWORD=%s", con->password); -+ cupsdSetStringf(&job->auth_password, "CUPSD_AUTH_PASSWORD=%s", con->password); - } - - /* -@@ -8745,7 +8750,8 @@ send_document(cupsd_client_t *con, /* I - * See if we need to add the ending sheet... - */ - -- cupsdTimeoutJob(job); -+ if (cupsdTimeoutJob(job)) -+ return; - - if (job->state_value == IPP_JOB_STOPPED) - { -@@ -8830,7 +8836,7 @@ send_http_error( - if (status == HTTP_UNAUTHORIZED && - printer && printer->num_auth_info_required > 0 && - !strcmp(printer->auth_info_required[0], "negotiate")) -- cupsdSendError(con, status, AUTH_NEGOTIATE); -+ cupsdSendError(con, status, CUPSD_AUTH_NEGOTIATE); - else if (printer) - { - char resource[HTTP_MAX_URI]; /* Resource portion of URI */ -@@ -8843,13 +8849,13 @@ send_http_error( - snprintf(resource, sizeof(resource), "/printers/%s", printer->name); - - if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL || -- auth->type == AUTH_NONE) -+ auth->type == CUPSD_AUTH_NONE) - auth = cupsdFindPolicyOp(printer->op_policy_ptr, IPP_PRINT_JOB); - -- cupsdSendError(con, status, auth ? auth->type : AUTH_NONE); -+ cupsdSendError(con, status, auth ? auth->type : CUPSD_AUTH_NONE); - } - else -- cupsdSendError(con, status, AUTH_NONE); -+ cupsdSendError(con, status, CUPSD_AUTH_NONE); - - ippDelete(con->response); - con->response = NULL; -@@ -9152,7 +9158,8 @@ set_job_attrs(cupsd_client_t *con, /* I - else if (con->response->request.status.status_code == IPP_OK) - { - cupsdSetJobPriority(job, attr->values[0].integer); -- event |= CUPSD_EVENT_JOB_CONFIG_CHANGED; -+ event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | -+ CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED; - } - } - else if (!strcmp(attr->name, "job-state")) -@@ -9299,6 +9306,10 @@ set_job_attrs(cupsd_client_t *con, /* I - * Send events as needed... - */ - -+ if (event & CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED) -+ cupsdAddEvent(CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED, job->printer, job, -+ "Job priority changed by user."); -+ - if (event & CUPSD_EVENT_JOB_STATE) - cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, - job->state_value == IPP_JOB_HELD ? -@@ -9805,6 +9816,8 @@ user_allowed(cupsd_printer_t *p, /* I - - { - int i; /* Looping var */ - struct passwd *pw; /* User password data */ -+ char baseuser[256], /* Base username */ -+ *baseptr; /* Pointer to "@" in base username */ - - - if (p->num_users == 0) -@@ -9813,6 +9826,20 @@ user_allowed(cupsd_printer_t *p, /* I - - if (!strcmp(username, "root")) - return (1); - -+ if (strchr(username, '@')) -+ { -+ /* -+ * Strip @REALM for username check... -+ */ -+ -+ strlcpy(baseuser, username, sizeof(baseuser)); -+ -+ if ((baseptr = strchr(baseuser, '@')) != NULL) -+ *baseptr = '\0'; -+ -+ username = baseuser; -+ } -+ - pw = getpwnam(username); - endpwent(); - -@@ -9979,8 +10006,8 @@ validate_user(cupsd_job_t *job, /* I - cupsdLogMessage(CUPSD_LOG_DEBUG2, - "validate_user(job=%d, con=%d, owner=\"%s\", username=%p, " - "userlen=%d)", -- job ? job->id : 0, con->http.fd, owner ? owner : "(null)", -- username, userlen); -+ job->id, con ? con->http.fd : 0, -+ owner ? owner : "(null)", username, userlen); - - /* - * Validate input... -diff -up cups-1.3.5/scheduler/dirsvc.c.1.3.x cups-1.3.5/scheduler/dirsvc.c ---- cups-1.3.5/scheduler/dirsvc.c.1.3.x 2007-12-06 20:44:04.000000000 +0000 -+++ cups-1.3.5/scheduler/dirsvc.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Directory services routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -325,7 +325,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "") || -@@ -386,14 +386,14 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!p) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - else if (!strcasecmp(line, "Info")) - { -@@ -426,7 +426,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Option") && value) -@@ -462,7 +462,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "StateMessage")) -@@ -494,7 +494,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Type")) -@@ -505,7 +505,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "BrowseTime")) -@@ -521,7 +521,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "JobSheets")) -@@ -556,7 +556,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "AllowUser")) -@@ -570,7 +570,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "DenyUser")) -@@ -584,7 +584,7 @@ cupsdLoadRemoteCache(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of remote.cache.", linenum); -- return; -+ break; - } - } - else -@@ -1793,9 +1793,9 @@ process_browse_data( - if (hptr && !*hptr) - *hptr = '.'; /* Resource FQDN */ - -- if ((p = cupsdFindClass(name)) == NULL && BrowseShortNames) -+ if ((p = cupsdFindDest(name)) == NULL && BrowseShortNames) - { -- if ((p = cupsdFindClass(resource + 9)) != NULL) -+ if ((p = cupsdFindDest(resource + 9)) != NULL) - { - if (p->hostname && strcasecmp(p->hostname, host)) - { -@@ -1900,9 +1900,9 @@ process_browse_data( - if (hptr && !*hptr) - *hptr = '.'; /* Resource FQDN */ - -- if ((p = cupsdFindPrinter(name)) == NULL && BrowseShortNames) -+ if ((p = cupsdFindDest(name)) == NULL && BrowseShortNames) - { -- if ((p = cupsdFindPrinter(resource + 10)) != NULL) -+ if ((p = cupsdFindDest(resource + 10)) != NULL) - { - if (p->hostname && strcasecmp(p->hostname, host)) - { -@@ -3629,7 +3629,7 @@ update_cups_browse(void) - * Access from localhost (127.0.0.1) is always allowed... - */ - -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - } - else - { -@@ -3640,39 +3640,39 @@ update_cups_browse(void) - switch (BrowseACL->order_type) - { - default : -- auth = AUTH_DENY; /* anti-compiler-warning-code */ -+ auth = CUPSD_AUTH_DENY; /* anti-compiler-warning-code */ - break; - -- case AUTH_ALLOW : /* Order Deny,Allow */ -- auth = AUTH_ALLOW; -+ case CUPSD_AUTH_ALLOW : /* Order Deny,Allow */ -+ auth = CUPSD_AUTH_ALLOW; - - if (cupsdCheckAuth(address, srcname, len, - BrowseACL->num_deny, BrowseACL->deny)) -- auth = AUTH_DENY; -+ auth = CUPSD_AUTH_DENY; - - if (cupsdCheckAuth(address, srcname, len, - BrowseACL->num_allow, BrowseACL->allow)) -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - break; - -- case AUTH_DENY : /* Order Allow,Deny */ -- auth = AUTH_DENY; -+ case CUPSD_AUTH_DENY : /* Order Allow,Deny */ -+ auth = CUPSD_AUTH_DENY; - - if (cupsdCheckAuth(address, srcname, len, - BrowseACL->num_allow, BrowseACL->allow)) -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - - if (cupsdCheckAuth(address, srcname, len, - BrowseACL->num_deny, BrowseACL->deny)) -- auth = AUTH_DENY; -+ auth = CUPSD_AUTH_DENY; - break; - } - } - } - else -- auth = AUTH_ALLOW; -+ auth = CUPSD_AUTH_ALLOW; - -- if (auth == AUTH_DENY) -+ if (auth == CUPSD_AUTH_DENY) - { - cupsdLogMessage(CUPSD_LOG_DEBUG, - "update_cups_browse: Refused %d bytes from %s", bytes, -diff -up cups-1.3.5/scheduler/printers.c.1.3.x cups-1.3.5/scheduler/printers.c ---- cups-1.3.5/scheduler/printers.c.1.3.x 2007-12-11 00:37:08.000000000 +0000 -+++ cups-1.3.5/scheduler/printers.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Printer routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -27,6 +27,7 @@ - * cupsdSaveAllPrinters() - Save all printer definitions to the - * printers.conf file. - * cupsdSetAuthInfoRequired() - Set the required authentication info. -+ * cupsdSetPrinterAttr() - Set a printer attribute. - * cupsdSetPrinterAttrs() - Set printer attributes based upon the PPD - * file. - * cupsdSetPrinterReasons() - Set/update the reasons strings. -@@ -900,7 +901,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "")) -@@ -945,14 +946,14 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!p) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - else if (!strcasecmp(line, "AuthInfoRequired")) - { -@@ -979,7 +980,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Option") && value) -@@ -1011,7 +1012,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "State")) -@@ -1028,7 +1029,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "StateMessage")) -@@ -1069,7 +1070,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "Shared")) -@@ -1092,7 +1093,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "JobSheets")) -@@ -1127,7 +1128,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "AllowUser")) -@@ -1141,7 +1142,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "DenyUser")) -@@ -1155,7 +1156,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "QuotaPeriod")) -@@ -1166,7 +1167,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "PageLimit")) -@@ -1177,7 +1178,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "KLimit")) -@@ -1188,7 +1189,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "OpPolicy")) -@@ -1212,7 +1213,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else if (!strcasecmp(line, "ErrorPolicy")) -@@ -1223,7 +1224,7 @@ cupsdLoadAllPrinters(void) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Syntax error on line %d of printers.conf.", linenum); -- return; -+ break; - } - } - else -@@ -1642,6 +1643,120 @@ cupsdSetAuthInfoRequired( - - - /* -+ * 'cupsdSetPrinterAttr()' - Set a printer attribute. -+ */ -+ -+void -+cupsdSetPrinterAttr( -+ cupsd_printer_t *p, /* I - Printer */ -+ const char *name, /* I - Attribute name */ -+ char *value) /* I - Attribute value string */ -+{ -+ ipp_attribute_t *attr; /* Attribute */ -+ int i, /* Looping var */ -+ count; /* Number of values */ -+ char *ptr; /* Pointer into value */ -+ ipp_tag_t value_tag; /* Value tag for this attribute */ -+ -+ -+ /* -+ * Count the number of values... -+ */ -+ -+ for (count = 1, ptr = value; -+ (ptr = strchr(ptr, ',')) != NULL; -+ ptr ++, count ++); -+ -+ /* -+ * Then add or update the attribute as needed... -+ */ -+ -+ if (!strcmp(name, "marker-levels")) -+ { -+ /* -+ * Integer values... -+ */ -+ -+ if ((attr = ippFindAttribute(p->attrs, name, IPP_TAG_INTEGER)) != NULL && -+ attr->num_values < count) -+ { -+ ippDeleteAttribute(p->attrs, attr); -+ attr = NULL; -+ } -+ -+ if (attr) -+ attr->num_values = count; -+ else -+ attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, name, -+ count, NULL); -+ -+ if (!attr) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate memory for printer attribute " -+ "(%d values)", count); -+ return; -+ } -+ -+ for (i = 0; i < count; i ++) -+ { -+ if ((ptr = strchr(value, ',')) != NULL) -+ *ptr++ = '\0'; -+ -+ attr->values[i].integer = strtol(value, NULL, 10); -+ -+ if (ptr) -+ value = ptr; -+ } -+ } -+ else -+ { -+ /* -+ * Name or keyword values... -+ */ -+ -+ if (!strcmp(name, "marker-types")) -+ value_tag = IPP_TAG_KEYWORD; -+ else -+ value_tag = IPP_TAG_NAME; -+ -+ if ((attr = ippFindAttribute(p->attrs, name, value_tag)) != NULL && -+ attr->num_values < count) -+ { -+ ippDeleteAttribute(p->attrs, attr); -+ attr = NULL; -+ } -+ -+ if (attr) -+ attr->num_values = count; -+ else -+ attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, value_tag, name, -+ count, NULL, NULL); -+ -+ if (!attr) -+ { -+ cupsdLogMessage(CUPSD_LOG_ERROR, -+ "Unable to allocate memory for printer attribute " -+ "(%d values)", count); -+ return; -+ } -+ -+ for (i = 0; i < count; i ++) -+ { -+ if ((ptr = strchr(value, ',')) != NULL) -+ *ptr++ = '\0'; -+ -+ _cupsStrFree(attr->values[i].string.text); -+ attr->values[i].string.text = _cupsStrAlloc(value); -+ -+ if (ptr) -+ value = ptr; -+ } -+ } -+} -+ -+ -+/* - * 'cupsdSetPrinterAttrs()' - Set printer attributes based upon the PPD file. - */ - -@@ -1736,25 +1851,25 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p) - snprintf(resource, sizeof(resource), "/printers/%s", p->name); - - if ((auth = cupsdFindBest(resource, HTTP_POST)) == NULL || -- auth->type == AUTH_NONE) -+ auth->type == CUPSD_AUTH_NONE) - auth = cupsdFindPolicyOp(p->op_policy_ptr, IPP_PRINT_JOB); - - if (auth) - { -- if (auth->type == AUTH_BASIC || auth->type == AUTH_BASICDIGEST) -+ if (auth->type == CUPSD_AUTH_BASIC || auth->type == CUPSD_AUTH_BASICDIGEST) - { - auth_supported = "basic"; - num_air = 2; - air = air_userpass; - } -- else if (auth->type == AUTH_DIGEST) -+ else if (auth->type == CUPSD_AUTH_DIGEST) - { - auth_supported = "digest"; - num_air = 2; - air = air_userpass; - } - #ifdef HAVE_GSSAPI -- else if (auth->type == AUTH_NEGOTIATE) -+ else if (auth->type == CUPSD_AUTH_NEGOTIATE) - { - auth_supported = "negotiate"; - num_air = 1; -@@ -1762,7 +1877,7 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p) - } - #endif /* HAVE_GSSAPI */ - -- if (auth->type != AUTH_NONE) -+ if (auth->type != CUPSD_AUTH_NONE) - p->type |= CUPS_PRINTER_AUTHENTICATED; - else - p->type &= ~CUPS_PRINTER_AUTHENTICATED; -@@ -2634,7 +2749,7 @@ cupsdSetPrinterState( - if (old_state != s) - { - cupsdAddEvent(s == IPP_PRINTER_STOPPED ? CUPSD_EVENT_PRINTER_STOPPED : -- CUPSD_EVENT_PRINTER_STATE_CHANGED, p, NULL, -+ CUPSD_EVENT_PRINTER_STATE, p, NULL, - "%s \"%s\" state changed.", - (p->type & CUPS_PRINTER_CLASS) ? "Class" : "Printer", - p->name); -diff -up cups-1.3.5/test/ipptest.c.1.3.x cups-1.3.5/test/ipptest.c ---- cups-1.3.5/test/ipptest.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/test/ipptest.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * IPP test command for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -268,6 +268,7 @@ do_tests(const char *uri, /* I - URI to - { - printf("Unable to connect to %s on port %d - %s\n", server, port, - strerror(errno)); -+ fclose(fp); - return (0); - } - -diff -up cups-1.3.5/scripting/java/src/com/easysw/cups/IPPAttribute.java.1.3.x cups-1.3.5/scripting/java/src/com/easysw/cups/IPPAttribute.java ---- cups-1.3.5/scripting/java/src/com/easysw/cups/IPPAttribute.java.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scripting/java/src/com/easysw/cups/IPPAttribute.java 2008-02-14 13:03:30.000000000 +0000 -@@ -7,7 +7,7 @@ package com.easysw.cups; - * Internet Printing Protocol definitions for the Common UNIX Printing - * System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2002 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -263,7 +263,9 @@ public class IPPAttribute - { - IPPValue val; - int bytes = 0; // Start with one for the group tag. -- -+ Charset utf8 = Charset::forName("UTF-8"); -+ ByteBuffer temp; -+ - // - // Add 1 if first time, or group tag changes. - // -@@ -308,8 +310,12 @@ public class IPPAttribute - case IPPDefs.TAG_CHARSET: - case IPPDefs.TAG_LANGUAGE: - case IPPDefs.TAG_MIMETYPE: -+ temp = utf8.encode(val.text); - bytes += 2; -- bytes += val.text.length(); -+ if (temp.capacity() > 32767) -+ bytes += 32767; -+ else -+ bytes += temp.capacity(); - break; - - case IPPDefs.TAG_DATE : -@@ -329,9 +335,13 @@ public class IPPAttribute - - case IPPDefs.TAG_TEXTLANG : - case IPPDefs.TAG_NAMELANG : -+ temp = utf8.encode(val.text); - bytes += 6; // 2 overall len, 2 charset len, 2 text len -- bytes += val.charset.length() + -- val.text.length(); -+ bytes += val.charset.length(); -+ if (temp.capacity() > 32767) -+ bytes += 32767; -+ else -+ bytes += temp.capacity(); - break; - - default : -@@ -359,6 +369,8 @@ public class IPPAttribute - int i,j, n; - int bi = 0; // Start with one for the group tag. - byte[] bytes = new byte[sz]; -+ Charset utf8 = Charset::forName("UTF-8"); -+ ByteBuffer temp; - - if (group_tag != last_group) - { -@@ -412,12 +424,16 @@ public class IPPAttribute - case IPPDefs.TAG_CHARSET : - case IPPDefs.TAG_LANGUAGE : - case IPPDefs.TAG_MIMETYPE : -- bytes[bi++] = (byte)((val.text.length() & 0xff00) >> 8); -- bytes[bi++] = (byte)(val.text.length() & 0xff); -- for (j=0; j < val.text.length(); j++) -- { -- bytes[bi++] = (byte)val.text.charAt(j); -- } -+ temp = utf8.encode(val.text); -+ n = temp.capacity(); -+ -+ if (n > 32767) -+ n = 32767; -+ -+ bytes[bi++] = (byte)((n & 0x7f00) >> 8); -+ bytes[bi++] = (byte)(n & 0xff); -+ temp.get(bytes, bi, n); -+ bi += n; - break; - - case IPPDefs.TAG_DATE: -@@ -456,23 +472,30 @@ public class IPPAttribute - - case IPPDefs.TAG_TEXTLANG : - case IPPDefs.TAG_NAMELANG : -- n = val.charset.length() + -- val.text.length() + 4; -- bytes[bi++] = (byte)((n & 0xff00) >> 8); -+ temp = utf8.encode(val.text); -+ n = temp.capacity() + val.charset.length() + 4; -+ -+ if (n > 32767) -+ n = 32767; -+ -+ bytes[bi++] = (byte)((n & 0x7f00) >> 8); - bytes[bi++] = (byte)(n & 0xff); - - n = val.charset.length(); -- bytes[bi++] = (byte)((n & 0xff00) >> 8); -+ bytes[bi++] = (byte)((n & 0x7f00) >> 8); - bytes[bi++] = (byte)(n & 0xff); - for (j=0; j < val.charset.length(); j++) - bytes[bi++] = (byte)val.charset.charAt(j); -- -- n = val.text.length(); -- bytes[bi++] = (byte)((n & 0xff00) >> 8); -+ -+ n = temp.capacity(); -+ -+ if (n > 32767) -+ n = 32767; -+ -+ bytes[bi++] = (byte)((n & 0x7f00) >> 8); - bytes[bi++] = (byte)(n & 0xff); -- for (j=0; j < (byte)val.text.length(); j++) -- bytes[bi++] = (byte)val.text.charAt(j); -- -+ temp.get(bytes, bi, n); -+ bi += n; - break; - - default : -diff -up cups-1.3.5/scripting/java/src/com/easysw/cups/Cups.java.1.3.x cups-1.3.5/scripting/java/src/com/easysw/cups/Cups.java ---- cups-1.3.5/scripting/java/src/com/easysw/cups/Cups.java.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/scripting/java/src/com/easysw/cups/Cups.java 2008-02-14 13:03:30.000000000 +0000 -@@ -7,7 +7,7 @@ package com.easysw.cups; - * Internet Printing Protocol definitions for the Common UNIX Printing - * System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -831,7 +831,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - -@@ -1014,7 +1014,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - -@@ -1091,7 +1091,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - -@@ -1155,7 +1155,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - -@@ -1229,7 +1229,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - // ------------ -@@ -1315,7 +1315,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - // ------------ -@@ -1375,7 +1375,7 @@ public class Cups - - a = new IPPAttribute( IPPDefs.TAG_OPERATION, IPPDefs.TAG_CHARSET, - "attributes-charset" ); -- a.addString( "", "iso-8859-1" ); -+ a.addString( "", "utf-8" ); - ipp.addAttribute(a); - - -diff -up cups-1.3.5/CHANGES.txt.1.3.x cups-1.3.5/CHANGES.txt ---- cups-1.3.5/CHANGES.txt.1.3.x 2007-12-17 22:12:45.000000000 +0000 -+++ cups-1.3.5/CHANGES.txt 2008-02-14 13:03:30.000000000 +0000 -@@ -1,6 +1,98 @@ --CHANGES.txt - 2007-12-17 -+CHANGES.txt - 2008-02-12 - ------------------------ - -+CHANGES IN CUPS V1.3.6 -+ -+ - Documentation updates (STR #2646, STR #2647, STR #2649) -+ - Fixed a problem with the web interface "Use Kerberos -+ Authentication" check box (STR #2703) -+ - The scheduler unconditionally overwrote the printer-state- -+ message with "process-name failed" when a filter or backend -+ failed, preventing a useful error message from being shown -+ to the user. -+ - Policies on CUPS-Move-Job didn't work as expected (STR -+ #2699) -+ - The configure script only supported D-BUS on Linux -+ (STR #2702) -+ - The scheduler did not support (STR #2701) -+ - The scheduler did not reset the job-hold-until attribute -+ after a job's hold time was reached. -+ - The scheduler did not support printer supply attributes -+ (STR #1307) -+ - The Kerberos credentials provided by some Windows KDCs -+ were still too large - now use a dynamic buffer to -+ support credentials up to 64k in size (STR #2695) -+ - Printing a test page from the web interface incorrectly -+ defaulted to the "guest" user (STR #2688) -+ - The cupsEncodeOptions2() function did not parse multiple- -+ value attribute values properly (STR #2690) -+ - The scheduler incorrectly sent printer-stopped events for -+ status updates from the print filters (STR #2680) -+ - The IPP backend could crash when handling printer errors -+ (STR #2667) -+ - Multi-file jobs did not print to remote CUPS servers -+ (STR #2673) -+ - The scheduler did not provide the Apple language ID to -+ job filters. -+ - Kerberos authentication did not work with the web -+ interface (STR #2606, STR #2669) -+ - The requesing-user-name-allowed and -denied functionality -+ did not work for Kerberos-authenticated usernames (STR -+ #2670) -+ - CUPS didn't compile on HP-UX 11i (STR #2679) -+ - cupsEncodeOptions2() did not handle option values like -+ "What's up, doc?" properly. -+ - Added lots of memory allocation checks (Fortify) -+ - The scheduler would crash if it was unable to add a job -+ file (Fortify) -+ - ppdOpen*() did not check all memory allocations (Coverity) -+ - ippReadIO() did not check all memory allocations (Coverity) -+ - The PostScript filter did not detect read errors (Coverity) -+ - The scheduler did not check for a missing job-sheets-completed -+ attribute when sending an event notification (Coverity) -+ - "Set Printer Options" might not work with raw queues (Coverity) -+ - cupsRasterInterpretPPD() could crash on certain PostScript -+ errors (Coverity) -+ - The USB backend did not check for back-channel support -+ properly on all systems (Coverity) -+ - Fixed memory leaks in the GIF and PNM image loading code -+ (Coverity) -+ - Removed some dead code in the CUPS API and scheduler (Coverity) -+ - Fixed two overflow bugs in the HP-GL/2 filter (Coverity) -+ - Fixed another ASN1 string parsing bug (STR #2665) -+ - The RSS notifier directory was not installed with the -+ correct permissions. -+ - The standard CUPS backends could use 100% CPU while waiting -+ for print data (STR #2664) -+ - Filename-based MIME rules did not work (STR #2659) -+ - The cups-polld program did not exit if the scheduler crashed -+ (STR #2640) -+ - The scheduler would crash if you tried to set the port-monitor -+ on a raw queue (STR #2639) -+ - The scheduler could crash if a polled remote printer was -+ converted to a class (STR #2656) -+ - The web interface and cupsctl did not correctly reflect -+ the "allow printing from the Internet" state (STR #2650) -+ - The scheduler incorrectly treated MIME types as case- -+ sensitive (STR #2657) -+ - The Java support classes did not send UTF-8 strings to -+ the scheduler (STR #2651) -+ - The CGI code did not handle interrupted POST requests -+ properly (STR #2652) -+ - The PostScript filter incorrectly handled number-up when -+ the number of pages was evenly divisible by the number-up -+ value. -+ - The PDF filter incorrectly filtered pages when page-ranges -+ and number-up were both specified (STR #2643) -+ - The IPP backend did not handle printing of pictwps files -+ to a non-Mac CUPS server properly. -+ - The scheduler did not detect network interface changes -+ on operating systems other than Mac OS X (STR #2631) -+ - The scheduler now logs the UNIX error message when it -+ is unable to create a request file such as a print job. -+ - Added support for --enable-pie on Mac OS X. -+ -+ - CHANGES IN CUPS V1.3.5 - - - The SNMP backend did not check for negative string -diff -up cups-1.3.5/conf/cupsd.conf.in.1.3.x cups-1.3.5/conf/cupsd.conf.in ---- cups-1.3.5/conf/cupsd.conf.in.1.3.x 2007-07-25 01:40:03.000000000 +0100 -+++ cups-1.3.5/conf/cupsd.conf.in 2008-02-14 13:03:30.000000000 +0000 -@@ -29,14 +29,12 @@ DefaultAuthType Basic - # Restrict access to the server... - - Order allow,deny -- Allow localhost - - - # Restrict access to the admin pages... - - @ENCRYPTION_REQUIRED@ - Order allow,deny -- Allow localhost - - - # Restrict access to configuration files... -@@ -44,7 +42,6 @@ DefaultAuthType Basic - AuthType Default - Require user @SYSTEM - Order allow,deny -- Allow localhost - - - # Set the default printer/job policies... -diff -up cups-1.3.5/templates/trailer.tmpl.1.3.x cups-1.3.5/templates/trailer.tmpl ---- cups-1.3.5/templates/trailer.tmpl.1.3.x 2007-12-07 18:37:40.000000000 +0000 -+++ cups-1.3.5/templates/trailer.tmpl 2008-02-14 13:03:30.000000000 +0000 -@@ -6,9 +6,9 @@ - WIDTH="15" HEIGHT="15" ALT=""> - - --

The Common UNIX Printing System, CUPS, and the CUPS logo are the --trademark property of Apple Inc. CUPS --is copyright 2007 by Apple Inc., all rights reserved.

-+

The Common UNIX Printing System, CUPS, and the CUPS logo are -+trademarks of Apple Inc. CUPS is -+copyright 2007-2008 Apple Inc. All rights reserved.

- - - -diff -up cups-1.3.5/config-scripts/cups-compiler.m4.1.3.x cups-1.3.5/config-scripts/cups-compiler.m4 ---- cups-1.3.5/config-scripts/cups-compiler.m4.1.3.x 2007-09-18 21:39:31.000000000 +0100 -+++ cups-1.3.5/config-scripts/cups-compiler.m4 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ dnl "$Id: cups-compiler.m4 6976 2007-09- - dnl - dnl Compiler stuff for the Common UNIX Printing System (CUPS). - dnl --dnl Copyright 2007 by Apple Inc. -+dnl Copyright 2007-2008 by Apple Inc. - dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. - dnl - dnl These coded instructions, statements, and computer programs are the -@@ -98,36 +98,56 @@ if test -n "$GCC"; then - fi - fi - -+ # Generate position-independent code as needed... - if test $PICFLAG = 1 -a $uname != AIX; then - OPTIM="-fPIC $OPTIM" - fi - -- case $uname in -- Linux*) -- if test x$enable_pie = xyes; then -- PIEFLAGS="-pie -fPIE" -- fi -- -- if test x$enable_relro = xyes; then -- RELROFLAGS="-Wl,-z,relro" -- fi -- ;; -- -- *) -- if test x$enable_pie = xyes; then -- echo "Sorry, --enable-pie is not supported on this OS!" -- fi -- ;; -- esac -+ # The -fstack-protector option is available with some versions of -+ # GCC and adds "stack canaries" which detect when the return address -+ # has been overwritten, preventing many types of exploit attacks. -+ AC_MSG_CHECKING(if GCC supports -fstack-protector) -+ OLDCFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS -fstack-protector" -+ AC_TRY_COMPILE(,, -+ OPTIM="$OPTIM -fstack-protector" -+ AC_MSG_RESULT(yes), -+ AC_MSG_RESULT(no)) -+ CFLAGS="$OLDCFLAGS" -+ -+ # The -pie option is available with some versions of GCC and adds -+ # randomization of addresses, which avoids another class of exploits -+ # that depend on a fixed address for common functions. -+ if test x$enable_pie = xyes; then -+ AC_MSG_CHECKING(if GCC supports -pie) -+ OLDCFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS -pie -fPIE" -+ AC_TRY_COMPILE(,, -+ PIEFLAGS="-pie -fPIE" -+ AC_MSG_RESULT(yes), -+ AC_MSG_RESULT(no, ignoring --enable-pie)) -+ CFLAGS="$OLDCFLAGS" -+ fi - - if test "x$with_optim" = x; then - # Add useful warning options for tracking down problems... - OPTIM="-Wall -Wno-format-y2k $OPTIM" -- # Additional warning options for alpha testing... -- OPTIM="-Wshadow -Wunused $OPTIM" -+ # Additional warning options for development testing... -+ if test -d .svn; then -+ OPTIM="-Wshadow -Wunused $OPTIM" -+ fi - fi - - case "$uname" in -+ Darwin*) -+ # -D_FORTIFY_SOURCE=2 adds additional object size -+ # checking, basically wrapping all string functions -+ # with buffer-limited ones. Not strictly needed for -+ # CUPS since we already use buffer-limited calls, but -+ # this will catch any additions that are broken. -+ CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" -+ ;; -+ - HP-UX*) - if test "x$enable_32bit" = xyes; then - # Build 32-bit libraries, 64-bit base... -@@ -201,6 +221,12 @@ if test -n "$GCC"; then - ;; - - Linux*) -+ # The -z relro option is provided by the Linux linker command to -+ # make relocatable data read-only. -+ if test x$enable_relro = xyes; then -+ RELROFLAGS="-Wl,-z,relro" -+ fi -+ - if test "x$enable_32bit" = xyes; then - # Build 32-bit libraries, 64-bit base... - if test -z "$with_arch32flags"; then -@@ -468,8 +494,8 @@ else - # cups-support@cups.org... - echo "Building CUPS with default compiler optimizations; contact" - echo "cups-bugs@cups.org with uname and compiler options needed" -- echo "for your platform, or set the CFLAGS and CXXFLAGS" -- echo "environment variable before running configure." -+ echo "for your platform, or set the CFLAGS, CXXFLAGS, and LDFLAGS" -+ echo "environment variables before running configure." - ;; - esac - fi -diff -up cups-1.3.5/config-scripts/cups-network.m4.1.3.x cups-1.3.5/config-scripts/cups-network.m4 ---- cups-1.3.5/config-scripts/cups-network.m4.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/config-scripts/cups-network.m4 2008-02-14 13:03:30.000000000 +0000 -@@ -29,24 +29,6 @@ fi - AC_CHECK_MEMBER(struct sockaddr.sa_len,,, [#include ]) - AC_CHECK_HEADER(sys/sockio.h, AC_DEFINE(HAVE_SYS_SOCKIO_H)) - --if test "$uname" = "SunOS"; then -- case "$uversion" in -- 55* | 56*) -- maxfiles=1024 -- ;; -- *) -- maxfiles=4096 -- ;; -- esac --else -- maxfiles=4096 --fi -- --AC_ARG_WITH(maxfiles, [ --with-maxfiles=N set maximum number of file descriptors for scheduler ], -- maxfiles=$withval) -- --AC_DEFINE_UNQUOTED(CUPS_MAX_FDS, $maxfiles) -- - CUPS_DEFAULT_DOMAINSOCKET="" - - dnl Domain socket support... -diff -up cups-1.3.5/config-scripts/cups-defaults.m4.1.3.x cups-1.3.5/config-scripts/cups-defaults.m4 ---- cups-1.3.5/config-scripts/cups-defaults.m4.1.3.x 2007-08-01 20:00:07.000000000 +0100 -+++ cups-1.3.5/config-scripts/cups-defaults.m4 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ dnl - dnl Default cupsd configuration settings for the Common UNIX Printing System - dnl (CUPS). - dnl --dnl Copyright 2007 by Apple Inc. -+dnl Copyright 2007-2008 by Apple Inc. - dnl Copyright 2006-2007 by Easy Software Products, all rights reserved. - dnl - dnl These coded instructions, statements, and computer programs are the -@@ -337,6 +337,14 @@ AC_ARG_WITH(snmp-community, [ --with-sn - AC_SUBST(CUPS_SNMP_ADDRESS) - AC_SUBST(CUPS_SNMP_COMMUNITY) - -+dnl New default port definition for IPP... -+AC_ARG_WITH(ipp-port, [ --with-ipp-port set default port number for IPP ], -+ DEFAULT_IPP_PORT="$withval", -+ DEFAULT_IPP_PORT="631") -+ -+AC_SUBST(DEFAULT_IPP_PORT) -+AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT) -+ - dnl - dnl End of "$Id: cups-defaults.m4 6754 2007-08-01 19:00:07Z mike $". - dnl -diff -up cups-1.3.5/config-scripts/cups-common.m4.1.3.x cups-1.3.5/config-scripts/cups-common.m4 ---- cups-1.3.5/config-scripts/cups-common.m4.1.3.x 2007-12-17 22:14:15.000000000 +0000 -+++ cups-1.3.5/config-scripts/cups-common.m4 2008-02-14 13:03:30.000000000 +0000 -@@ -183,37 +183,60 @@ esac - - AC_SUBST(ARFLAGS) - --dnl Extra platform-specific libraries... -+dnl Prep libraries specifically for cupsd and backends... - BACKLIBS="" - CUPSDLIBS="" --DBUSDIR="" --CUPS_DEFAULT_PRINTADMIN_AUTH="@SYSTEM" --CUPS_SYSTEM_AUTHKEY="" -+AC_SUBST(BACKLIBS) -+AC_SUBST(CUPSDLIBS) -+ -+dnl See if we have POSIX ACL support... -+SAVELIBS="$LIBS" -+LIBS="" -+AC_SEARCH_LIBS(acl_init, acl, AC_DEFINE(HAVE_ACL_INIT)) -+CUPSDLIBS="$CUPSDLIBS $LIBS" -+LIBS="$SAVELIBS" - -+dnl Check for DBUS support - AC_ARG_ENABLE(dbus, [ --enable-dbus enable DBUS support, default=auto]) -+AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ], -+ DBUSDIR="$withval" -+ DBUSDIR="/etc/dbus-1") -+ -+if test "x$enable_dbus" != xno; then -+ AC_PATH_PROG(PKGCONFIG, pkg-config) -+ if test "x$PKGCONFIG" != x; then -+ AC_MSG_CHECKING(for DBUS) -+ if $PKGCONFIG --exists dbus-1; then -+ AC_MSG_RESULT(yes) -+ AC_DEFINE(HAVE_DBUS) -+ CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE" -+ CUPSDLIBS="$CUPSDLIBS `$PKGCONFIG --libs dbus-1`" -+ AC_CHECK_LIB(dbus-1, -+ dbus_message_iter_init_append, -+ AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND)) -+ else -+ AC_MSG_RESULT(no) -+ DBUSDIR="" -+ fi -+ fi -+fi -+ -+AC_SUBST(DBUSDIR) - -+dnl Extra platform-specific libraries... -+CUPS_DEFAULT_PRINTADMIN_AUTH="@SYSTEM" -+CUPS_SYSTEM_AUTHKEY="" - FONTS="fonts" --AC_SUBST(FONTS) - LEGACY_BACKENDS="parallel scsi" --AC_SUBST(LEGACY_BACKENDS) - - case $uname in - Darwin*) - FONTS="" - LEGACY_BACKENDS="" -- BACKLIBS="-framework IOKit" -- CUPSDLIBS="-sectorder __TEXT __text cupsd.order -e start -framework IOKit -framework SystemConfiguration" -+ BACKLIBS="$BACKLIBS -framework IOKit" -+ CUPSDLIBS="$CUPSDLIBS -sectorder __TEXT __text cupsd.order -e start -framework IOKit -framework SystemConfiguration" - LIBS="-framework CoreFoundation $LIBS" - -- dnl Check for CFLocaleCreateCanonicalLocaleIdentifierFromString... -- AC_MSG_CHECKING(for CFLocaleCreateCanonicalLocaleIdentifierFromString) -- if test "$uname" = "Darwin" -a $uversion -ge 70; then -- AC_DEFINE(HAVE_CF_LOCALE_ID) -- AC_MSG_RESULT(yes) -- else -- AC_MSG_RESULT(no) -- fi -- - dnl Check for framework headers... - AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h,AC_DEFINE(HAVE_COREFOUNDATION_H)) - AC_CHECK_HEADER(CoreFoundation/CFPriv.h,AC_DEFINE(HAVE_CFPRIV_H)) -@@ -238,53 +261,13 @@ case $uname in - CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.preferences"]) - AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H)) - ;; -- -- Linux*) -- dnl Check for DBUS support -- if test "x$enable_dbus" != xno; then -- AC_PATH_PROG(PKGCONFIG, pkg-config) -- if test "x$PKGCONFIG" != x; then -- AC_MSG_CHECKING(for DBUS) -- if $PKGCONFIG --exists dbus-1; then -- AC_MSG_RESULT(yes) -- AC_DEFINE(HAVE_DBUS) -- CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE" -- CUPSDLIBS="`$PKGCONFIG --libs dbus-1`" -- AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ], dbusdir="$withval", dbusdir="/etc/dbus-1") -- DBUSDIR="$dbusdir" -- AC_CHECK_LIB(dbus-1, -- dbus_message_iter_init_append, -- AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND)) -- else -- AC_MSG_RESULT(no) -- fi -- fi -- fi -- ;; - esac - - AC_SUBST(CUPS_DEFAULT_PRINTADMIN_AUTH) - AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTADMIN_AUTH, "$CUPS_DEFAULT_PRINTADMIN_AUTH") - AC_SUBST(CUPS_SYSTEM_AUTHKEY) -- --dnl See if we have POSIX ACL support... --SAVELIBS="$LIBS" --LIBS="" --AC_SEARCH_LIBS(acl_init, acl, AC_DEFINE(HAVE_ACL_INIT)) --CUPSDLIBS="$CUPSDLIBS $LIBS" --LIBS="$SAVELIBS" -- --AC_SUBST(BACKLIBS) --AC_SUBST(CUPSDLIBS) --AC_SUBST(DBUSDIR) -- --dnl New default port definition for IPP... --AC_ARG_WITH(ipp-port, [ --with-ipp-port set default port number for IPP ], -- DEFAULT_IPP_PORT="$withval", -- DEFAULT_IPP_PORT="631") -- --AC_SUBST(DEFAULT_IPP_PORT) --AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT) -+AC_SUBST(FONTS) -+AC_SUBST(LEGACY_BACKENDS) - - dnl - dnl End of "$Id: cups-common.m4 7057 2007-11-01 23:29:14Z mike $". -diff -up cups-1.3.5/man/lpq.man.1.3.x cups-1.3.5/man/lpq.man ---- cups-1.3.5/man/lpq.man.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/man/lpq.man 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - .\" - .\" lpq man page for the Common UNIX Printing System (CUPS). - .\" --.\" Copyright 2007 by Apple Inc. -+.\" Copyright 2007-2008 by Apple Inc. - .\" Copyright 1997-2006 by Easy Software Products. - .\" - .\" These coded instructions, statements, and computer programs are the -@@ -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 lpq 1 "Common UNIX Printing System" "12 February 2006" "Apple Inc." -+.TH lpq 1 "Common UNIX Printing System" "2 January 2008" "Apple Inc." - .SH NAME - lpq \- show printer queue status - .SH SYNOPSIS -@@ -33,7 +33,7 @@ no printer or class is specified on the - .LP - The \fI+interval\fR option allows you to continuously report the - jobs in the queue until the queue is empty; the list of jobs is --show one every \fIinterval\fR seconds. -+show once every \fIinterval\fR seconds. - .SH OPTIONS - \fIlpq\fR supports the following options: - .TP 5 -@@ -66,7 +66,7 @@ Requests a more verbose (long) reporting - .br - http://localhost:631/help - .SH COPYRIGHT --Copyright 2007 by Apple Inc. -+Copyright 2007-2008 by Apple Inc. - .\" - .\" End of "$Id: lpq.man 6649 2007-07-11 21:46:42Z mike $". - .\" -diff -up cups-1.3.5/man/lpadmin.man.1.3.x cups-1.3.5/man/lpadmin.man ---- cups-1.3.5/man/lpadmin.man.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/man/lpadmin.man 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - .\" - .\" lpadmin man page for the Common UNIX Printing System (CUPS). - .\" --.\" Copyright 2007 by Apple Inc. -+.\" Copyright 2007-2008 by Apple Inc. - .\" Copyright 1997-2006 by Easy Software Products. - .\" - .\" These coded instructions, statements, and computer programs are the -@@ -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 lpadmin 8 "Common UNIX Printing System" "13 July 2006" "Apple Inc." -+.TH lpadmin 8 "Common UNIX Printing System" "2 January 2008" "Apple Inc." - .SH NAME - lpadmin \- configure cups printers and classes - .SH SYNOPSIS -@@ -81,12 +81,6 @@ and is intended for providing support fo - Sets a standard System V interface script or PPD file from the - \fImodel\fR directory. - .TP 5 ---o name=value --.br --Sets a PPD or server option for the printer. PPD options can be --listed using the \fI-l\fR option with the \fIlpoptions(1)\fR --command. --.TP 5 - -o job-k-limit=value - .br - Sets the kilobyte limit for per-user quotas. The value is an -@@ -109,10 +103,23 @@ integer number of seconds; 86,400 second - .br - Sets the default banner page(s) to use for print jobs. - .TP 5 -+-o name=value -+.br -+Sets a PPD option for the printer. PPD options can be -+listed using the \fI-l\fR option with the \fIlpoptions(1)\fR -+command. -+.TP 5 -+-o name-default=value -+.br -+Sets a default server-side option for the printer. Any print-time -+option can be defaulted, e.g. "-o cpi-default=17" to set the default -+"cpi" option value to 17. -+.TP 5 - -o port-monitor=name - .br - Sets the binary communications program to use when printing, --"none", "bcp", or "tbcp". The default program is "none". -+"none", "bcp", or "tbcp". The default program is "none". The -+specified port monitor must be listed in the printer's PPD file. - .TP 5 - -o printer-error-policy=name - .br -@@ -194,7 +201,7 @@ System V or Solaris printing system conf - .br - http://localhost:631/help - .SH COPYRIGHT --Copyright 2007 by Apple Inc. -+Copyright 2007-2008 by Apple Inc. - .\" - .\" End of "$Id: lpadmin.man 6649 2007-07-11 21:46:42Z mike $". - .\" -diff -up cups-1.3.5/man/cupsd.conf.man.in.1.3.x cups-1.3.5/man/cupsd.conf.man.in ---- cups-1.3.5/man/cupsd.conf.man.in.1.3.x 2007-10-02 00:11:47.000000000 +0100 -+++ cups-1.3.5/man/cupsd.conf.man.in 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - .\" - .\" cupsd.conf man page for the Common UNIX Printing System (CUPS). - .\" --.\" Copyright 2007 by Apple Inc. -+.\" Copyright 2007-2008 by Apple Inc. - .\" Copyright 1997-2006 by Easy Software Products. - .\" - .\" These coded instructions, statements, and computer programs are the -@@ -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 "Common UNIX Printing System" "6 June 2006" "Apple Inc." -+.TH cupsd.conf 5 "Common UNIX Printing System" "2 January 2008" "Apple Inc." - .SH NAME - cupsd.conf \- server configuration file for cups - .SH DESCRIPTION -@@ -230,6 +230,12 @@ DefaultPolicy policy-name - .br - Specifies the default access policy to use. - .TP 5 -+DefaultShared Yes -+.TP 5 -+DefaultShared No -+.br -+Specifies whether local printers are shared by default. -+.TP 5 - Deny all - .TP 5 - Deny none -@@ -606,7 +612,7 @@ Specifies the user name or ID that is us - .br - http://localhost:631/help - .SH COPYRIGHT --Copyright 2007 by Apple Inc. -+Copyright 2007-2008 by Apple Inc. - .\" - .\" End of "$Id: cupsd.conf.man.in 7004 2007-10-01 23:11:47Z mike $". - .\" -diff -up cups-1.3.5/INSTALL.txt.1.3.x cups-1.3.5/INSTALL.txt ---- cups-1.3.5/INSTALL.txt.1.3.x 2007-09-18 21:39:31.000000000 +0100 -+++ cups-1.3.5/INSTALL.txt 2008-02-14 13:03:30.000000000 +0000 -@@ -1,4 +1,4 @@ --INSTALL - CUPS v1.3.2 - 2007-09-18 -+INSTALL - CUPS v1.3.6 - 2008-01-22 - ---------------------------------- - - This file describes how to compile and install CUPS from source -@@ -31,9 +31,8 @@ BEFORE YOU BEGIN - compile and run without these, however you'll miss out on - many of the features provided by CUPS. - -- Kerberos support requires a very recent version of the MIT -- implementation with the krb5_cc_new_unique() function or the -- Heimdal implementation, along with the corresponding GSSAPI -+ Kerberos support requires MIT Kerberos 1.6.3 or later or -+ or Heimdal Kerberos, along with the corresponding GSSAPI - pieces. - - Also, please note that CUPS no longer includes the -@@ -47,7 +46,7 @@ COMPILING FROM SUBVERSION - - The CUPS Subversion repository doesn't hold a copy of the - pre-built configure script. You'll need to run the GNU -- autoconf software (2.52 or higher) before compiling the -+ autoconf software (2.60 or higher) before compiling the - software from Subversion: - - autoconf -f -diff -up cups-1.3.5/filter/pstops.c.1.3.x cups-1.3.5/filter/pstops.c ---- cups-1.3.5/filter/pstops.c.1.3.x 2007-11-09 19:54:09.000000000 +0000 -+++ cups-1.3.5/filter/pstops.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * PostScript filter for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -164,27 +164,27 @@ static void cancel_job(int sig); - static int check_range(pstops_doc_t *doc, int page); - static void copy_bytes(cups_file_t *fp, off_t offset, - size_t length); --static size_t copy_comments(cups_file_t *fp, pstops_doc_t *doc, -+static ssize_t copy_comments(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, char *line, -- size_t linelen, size_t linesize); -+ ssize_t linelen, size_t linesize); - static void copy_dsc(cups_file_t *fp, pstops_doc_t *doc, -- ppd_file_t *ppd, char *line, size_t linelen, -+ ppd_file_t *ppd, char *line, ssize_t linelen, - size_t linesize); - static void copy_non_dsc(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, char *line, -- size_t linelen, size_t linesize); --static size_t copy_page(cups_file_t *fp, pstops_doc_t *doc, -+ ssize_t linelen, size_t linesize); -+static ssize_t copy_page(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, int number, char *line, -- size_t linelen, size_t linesize); --static size_t copy_prolog(cups_file_t *fp, pstops_doc_t *doc, -+ ssize_t linelen, size_t linesize); -+static ssize_t copy_prolog(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, char *line, -- size_t linelen, size_t linesize); --static size_t copy_setup(cups_file_t *fp, pstops_doc_t *doc, -+ ssize_t linelen, size_t linesize); -+static ssize_t copy_setup(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, char *line, -- size_t linelen, size_t linesize); --static size_t copy_trailer(cups_file_t *fp, pstops_doc_t *doc, -+ ssize_t linelen, size_t linesize); -+static ssize_t copy_trailer(cups_file_t *fp, pstops_doc_t *doc, - ppd_file_t *ppd, int number, char *line, -- size_t linelen, size_t linesize); -+ ssize_t linelen, size_t linesize); - static void do_prolog(pstops_doc_t *doc, ppd_file_t *ppd); - static void do_setup(pstops_doc_t *doc, ppd_file_t *ppd); - static void doc_printf(pstops_doc_t *doc, const char *format, ...) -@@ -203,7 +203,7 @@ static char *parse_text(const char *sta - static void set_pstops_options(pstops_doc_t *doc, ppd_file_t *ppd, - char *argv[], int num_options, - cups_option_t *options); --static size_t skip_page(cups_file_t *fp, char *line, size_t linelen, -+static ssize_t skip_page(cups_file_t *fp, char *line, ssize_t linelen, - size_t linesize); - static void start_nup(pstops_doc_t *doc, int number, - int show_border, const int *bounding_box); -@@ -581,12 +581,12 @@ copy_bytes(cups_file_t *fp, /* I - File - * On return, "line" will contain the next line in the file, if any. - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - copy_comments(cups_file_t *fp, /* I - File to read from */ - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - int saw_bounding_box, /* Saw %%BoundingBox: comment? */ -@@ -809,7 +809,7 @@ copy_dsc(cups_file_t *fp, /* I - File - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - int number; /* Page number */ -@@ -889,7 +889,8 @@ copy_dsc(cups_file_t *fp, /* I - File - * Finish up the last page(s)... - */ - -- if (number && !is_first_page(number) && cupsArrayLast(doc->pages)) -+ if (number && is_not_last_page(number) && cupsArrayLast(doc->pages) && -+ check_range(doc, (number - 1) / doc->number_up + 1)) - { - pageinfo = (pstops_page_t *)cupsArrayLast(doc->pages); - -@@ -930,7 +931,7 @@ copy_dsc(cups_file_t *fp, /* I - File - - number = doc->slow_order ? 0 : doc->page; - -- if (doc->temp && !JobCanceled) -+ if (doc->temp && !JobCanceled && cupsArrayCount(doc->pages) > 0) - { - int copy; /* Current copy */ - -@@ -1068,7 +1069,7 @@ copy_non_dsc(cups_file_t *fp, /* I - F - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - int copy; /* Current copy */ -@@ -1244,13 +1245,13 @@ copy_non_dsc(cups_file_t *fp, /* I - F - * On return, "line" will contain the next line in the file, if any. - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - copy_page(cups_file_t *fp, /* I - File to read from */ - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - int number, /* I - Current page number */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - char label[256], /* Page label string */ -@@ -1713,12 +1714,12 @@ copy_page(cups_file_t *fp, /* I - File - * On return, "line" will contain the next line in the file, if any. - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - copy_prolog(cups_file_t *fp, /* I - File to read from */ - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - while (strncmp(line, "%%BeginProlog", 13)) -@@ -1767,12 +1768,12 @@ copy_prolog(cups_file_t *fp, /* I - Fi - * On return, "line" will contain the next line in the file, if any. - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - copy_setup(cups_file_t *fp, /* I - File to read from */ - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - while (strncmp(line, "%%BeginSetup", 12)) -@@ -1832,13 +1833,13 @@ copy_setup(cups_file_t *fp, /* I - Fil - * On return, "line" will contain the next line in the file, if any. - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - copy_trailer(cups_file_t *fp, /* I - File to read from */ - pstops_doc_t *doc, /* I - Document info */ - ppd_file_t *ppd, /* I - PPD file */ - int number, /* I - Number of pages */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - /* -@@ -2711,10 +2712,10 @@ set_pstops_options( - * 'skip_page()' - Skip past a page that won't be printed... - */ - --static size_t /* O - Length of next line */ -+static ssize_t /* O - Length of next line */ - skip_page(cups_file_t *fp, /* I - File to read from */ - char *line, /* I - Line buffer */ -- size_t linelen, /* I - Length of initial line */ -+ ssize_t linelen, /* I - Length of initial line */ - size_t linesize) /* I - Size of line buffer */ - { - int level; /* Embedded document level */ -diff -up cups-1.3.5/filter/image-photocd.c.1.3.x cups-1.3.5/filter/image-photocd.c ---- cups-1.3.5/filter/image-photocd.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-photocd.c 2008-02-14 13:03:30.000000000 +0000 -@@ -7,7 +7,7 @@ - * is only YCC encoded. Support for the higher resolution images will - * require a lot of extra code... - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -99,11 +99,33 @@ _cupsImageReadPhotoCD( - cupsImageSetMaxTiles(img, 0); - - bpp = cupsImageGetDepth(img); -- in = malloc(768 * 3); -- out = malloc(768 * bpp); -+ -+ if ((in = malloc(768 * 3)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ -+ if ((out = malloc(768 * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ return (1); -+ } - - if (bpp > 1) -- rgb = malloc(768 * 3); -+ { -+ if ((rgb = malloc(768 * 3)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ free(out); -+ return (1); -+ } -+ } - else - rgb = NULL; - -@@ -141,6 +163,9 @@ _cupsImageReadPhotoCD( - free(in); - free(out); - -+ if (bpp > 1) -+ free(rgb); -+ - return (-1); - } - -diff -up cups-1.3.5/filter/image-sgilib.c.1.3.x cups-1.3.5/filter/image-sgilib.c ---- cups-1.3.5/filter/image-sgilib.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-sgilib.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * SGI image file format library routines for the Common UNIX Printing - * System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -250,8 +250,20 @@ sgiOpenFile(FILE *file, /* I - File to - - fseek(sgip->file, 512, SEEK_SET); - -- sgip->table = calloc(sgip->zsize, sizeof(long *)); -- sgip->table[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long)); -+ if ((sgip->table = calloc(sgip->zsize, sizeof(long *))) == NULL) -+ { -+ free(sgip); -+ return (NULL); -+ } -+ -+ if ((sgip->table[0] = calloc(sgip->ysize * sgip->zsize, -+ sizeof(long))) == NULL) -+ { -+ free(sgip->table); -+ free(sgip); -+ return (NULL); -+ } -+ - for (i = 1; i < sgip->zsize; i ++) - sgip->table[i] = sgip->table[0] + i * sgip->ysize; - -@@ -333,12 +345,39 @@ sgiOpenFile(FILE *file, /* I - File to - - sgip->firstrow = ftell(sgip->file); - sgip->nextrow = ftell(sgip->file); -- sgip->table = calloc(sgip->zsize, sizeof(long *)); -- sgip->table[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long)); -+ if ((sgip->table = calloc(sgip->zsize, sizeof(long *))) == NULL) -+ { -+ free(sgip); -+ return (NULL); -+ } -+ -+ if ((sgip->table[0] = calloc(sgip->ysize * sgip->zsize, -+ sizeof(long))) == NULL) -+ { -+ free(sgip->table); -+ free(sgip); -+ return (NULL); -+ } -+ - for (i = 1; i < sgip->zsize; i ++) - sgip->table[i] = sgip->table[0] + i * sgip->ysize; -- sgip->length = calloc(sgip->zsize, sizeof(long *)); -- sgip->length[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long)); -+ -+ if ((sgip->length = calloc(sgip->zsize, sizeof(long *))) == NULL) -+ { -+ free(sgip->table); -+ free(sgip); -+ return (NULL); -+ } -+ -+ if ((sgip->length[0] = calloc(sgip->ysize * sgip->zsize, -+ sizeof(long))) == NULL) -+ { -+ free(sgip->length); -+ free(sgip->table); -+ free(sgip); -+ return (NULL); -+ } -+ - for (i = 1; i < sgip->zsize; i ++) - sgip->length[i] = sgip->length[0] + i * sgip->ysize; - break; -diff -up cups-1.3.5/filter/interpret.c.1.3.x cups-1.3.5/filter/interpret.c ---- cups-1.3.5/filter/interpret.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/interpret.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * PPD command interpreter for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -571,7 +571,7 @@ _cupsRasterExecPS( - break; - } - -- if (obj->type == CUPS_PS_OTHER) -+ if (obj && obj->type == CUPS_PS_OTHER) - break; - } - -diff -up cups-1.3.5/filter/image-sun.c.1.3.x cups-1.3.5/filter/image-sun.c ---- cups-1.3.5/filter/image-sun.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-sun.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Sun Raster image file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -152,9 +152,32 @@ _cupsImageReadSunRaster( - in = malloc(img->xsize * 3 + 1); - } - -- bpp = cupsImageGetDepth(img); -- out = malloc(img->xsize * bpp); -- scanline = malloc(scanwidth); -+ if (!in) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ -+ bpp = cupsImageGetDepth(img); -+ -+ if ((out = malloc(img->xsize * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ return (1); -+ } -+ -+ if ((scanline = malloc(scanwidth)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ free(out); -+ return (1); -+ } -+ - run_count = 0; - run_value = 0; - -diff -up cups-1.3.5/filter/rastertoepson.c.1.3.x cups-1.3.5/filter/rastertoepson.c ---- cups-1.3.5/filter/rastertoepson.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/rastertoepson.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * EPSON ESC/P and ESC/P2 filter for the Common UNIX Printing System - * (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -153,7 +153,7 @@ StartPage(const ppd_file_t *ppd, - * Send a reset sequence. - */ - -- if (ppd->nickname && strstr(ppd->nickname, "OKIDATA") != NULL) -+ if (ppd && ppd->nickname && strstr(ppd->nickname, "OKIDATA") != NULL) - printf("\033{A"); /* Set EPSON emulation mode */ - - printf("\033@"); -@@ -164,7 +164,7 @@ StartPage(const ppd_file_t *ppd, - - EjectPage = header->Margins[0] || header->Margins[1]; - -- switch (ppd->model_number) -+ switch (Model) - { - case EPSON_9PIN : - case EPSON_24PIN : -@@ -196,7 +196,7 @@ StartPage(const ppd_file_t *ppd, - DotColumns = header->HWResolution[0] / 60; - Shingling = 0; - -- if (ppd->model_number == EPSON_9PIN) -+ if (Model == EPSON_9PIN) - printf("\033\063\030"); /* Set line feed */ - else - switch (header->HWResolution[0]) -@@ -251,8 +251,11 @@ StartPage(const ppd_file_t *ppd, - putchar(n); - putchar(n >> 8); - -- t = (ppd->sizes[1].length - ppd->sizes[1].top) * -- header->HWResolution[1] / 72.0; -+ if (ppd) -+ t = (ppd->sizes[1].length - ppd->sizes[1].top) * -+ header->HWResolution[1] / 72.0; -+ else -+ t = 0; - - pwrite("\033(c\004\000", 5); /* Top & bottom margins */ - putchar(t); -@@ -293,18 +296,35 @@ StartPage(const ppd_file_t *ppd, - * Allocate memory for a line/row of graphics... - */ - -- Planes[0] = malloc(header->cupsBytesPerLine); -+ if ((Planes[0] = malloc(header->cupsBytesPerLine)) == NULL) -+ { -+ fputs("ERROR: Unable to allocate memory!\n", stderr); -+ exit(1); -+ } -+ - for (plane = 1; plane < NumPlanes; plane ++) - Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes; - - if (header->cupsCompression || DotBytes) -- CompBuffer = calloc(2, header->cupsWidth); -+ { -+ if ((CompBuffer = calloc(2, header->cupsWidth)) == NULL) -+ { -+ fputs("ERROR: Unable to allocate memory!\n", stderr); -+ exit(1); -+ } -+ } - else - CompBuffer = NULL; - - if (DotBytes) - { -- LineBuffers[0] = calloc(DotBytes, header->cupsWidth * (Shingling + 1)); -+ if ((LineBuffers[0] = calloc(DotBytes, -+ header->cupsWidth * (Shingling + 1))) == NULL) -+ { -+ fputs("ERROR: Unable to allocate memory!\n", stderr); -+ exit(1); -+ } -+ - LineBuffers[1] = LineBuffers[0] + DotBytes * header->cupsWidth; - DotBit = 128; - LineCount = 0; -diff -up cups-1.3.5/filter/image-sgi.c.1.3.x cups-1.3.5/filter/image-sgi.c ---- cups-1.3.5/filter/image-sgi.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-sgi.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * SGI image file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -77,7 +77,6 @@ _cupsImageReadSGI( - fprintf(stderr, "DEBUG: Bad SGI image dimensions %ux%ux%u!\n", - sgip->xsize, sgip->ysize, sgip->zsize); - sgiClose(sgip); -- fclose(fp); - return (1); - } - -@@ -92,10 +91,32 @@ _cupsImageReadSGI( - cupsImageSetMaxTiles(img, 0); - - bpp = cupsImageGetDepth(img); -- in = malloc(img->xsize * sgip->zsize); -- out = malloc(img->xsize * bpp); - -- rows[0] = calloc(img->xsize * sgip->zsize, sizeof(unsigned short)); -+ if ((in = malloc(img->xsize * sgip->zsize)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ sgiClose(sgip); -+ return (1); -+ } -+ -+ if ((out = malloc(img->xsize * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ sgiClose(sgip); -+ free(in); -+ return (1); -+ } -+ -+ if ((rows[0] = calloc(img->xsize * sgip->zsize, -+ sizeof(unsigned short))) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ sgiClose(sgip); -+ free(in); -+ free(out); -+ return (1); -+ } -+ - for (i = 1; i < sgip->zsize; i ++) - rows[i] = rows[0] + i * img->xsize; - -diff -up cups-1.3.5/filter/image-pnm.c.1.3.x cups-1.3.5/filter/image-pnm.c ---- cups-1.3.5/filter/image-pnm.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-pnm.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Portable Any Map file routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -67,7 +67,13 @@ _cupsImageReadPNM( - * max sample - */ - -- lineptr = fgets(line, sizeof(line), fp); -+ if ((lineptr = fgets(line, sizeof(line), fp)) == NULL) -+ { -+ fputs("DEBUG: Bad PNM header!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ - lineptr ++; - - format = atoi(lineptr); -@@ -147,8 +153,21 @@ _cupsImageReadPNM( - cupsImageSetMaxTiles(img, 0); - - bpp = cupsImageGetDepth(img); -- in = malloc(img->xsize * 3); -- out = malloc(img->xsize * bpp); -+ -+ if ((in = malloc(img->xsize * 3)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ -+ if ((out = malloc(img->xsize * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ return (1); -+ } - - /* - * Read the image file... -diff -up cups-1.3.5/filter/hpgl-input.c.1.3.x cups-1.3.5/filter/hpgl-input.c ---- cups-1.3.5/filter/hpgl-input.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/hpgl-input.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * HP-GL/2 input processing for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -48,6 +48,7 @@ ParseCommand(FILE *fp, /* I - File to - i; /* Looping var */ - char buf[262144], /* String buffer */ - *bufptr; /* Pointer into buffer */ -+ float temp; /* Temporary parameter value */ - static param_t p[MAX_PARAMS]; /* Parameter buffer */ - - -@@ -212,10 +213,10 @@ ParseCommand(FILE *fp, /* I - File to - case '-' : - case '+' : - ungetc(ch, fp); -- fscanf(fp, "%f", &(p[num_params].value.number)); -- if (num_params < MAX_PARAMS) -+ if (fscanf(fp, "%f", &temp) == 1 && num_params < MAX_PARAMS) - { -- p[num_params].type = PARAM_RELATIVE; -+ p[num_params].type = PARAM_RELATIVE; -+ p[num_params].value.number = temp; - num_params ++; - } - break; -@@ -231,10 +232,10 @@ ParseCommand(FILE *fp, /* I - File to - case '9' : - case '.' : - ungetc(ch, fp); -- fscanf(fp, "%f", &(p[num_params].value.number)); -- if (num_params < MAX_PARAMS) -+ if (fscanf(fp, "%f", &temp) == 1 && num_params < MAX_PARAMS) - { -- p[num_params].type = PARAM_ABSOLUTE; -+ p[num_params].type = PARAM_ABSOLUTE; -+ p[num_params].value.number = temp; - num_params ++; - } - break; -diff -up cups-1.3.5/filter/image-bmp.c.1.3.x cups-1.3.5/filter/image-bmp.c ---- cups-1.3.5/filter/image-bmp.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-bmp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * BMP image routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -179,9 +179,22 @@ _cupsImageReadBMP( - - cupsImageSetMaxTiles(img, 0); - -- in = malloc(img->xsize * 3); - bpp = cupsImageGetDepth(img); -- out = malloc(img->xsize * bpp); -+ -+ if ((in = malloc(img->xsize * 3)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ -+ if ((out = malloc(img->xsize * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ free(in); -+ fclose(fp); -+ return (1); -+ } - - /* - * Read the image data... -diff -up cups-1.3.5/filter/image-gif.c.1.3.x cups-1.3.5/filter/image-gif.c ---- cups-1.3.5/filter/image-gif.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-gif.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * GIF image routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -462,8 +462,14 @@ gif_read_image(FILE *fp, /* I - - pass = 0; - code_size = getc(fp); - -+ if (!pixels) -+ return (-1); -+ - if (gif_read_lzw(fp, 1, code_size) < 0) -+ { -+ free(pixels); - return (-1); -+ } - - temp = pixels; - while ((pixel = gif_read_lzw(fp, 0, code_size)) >= 0) -diff -up cups-1.3.5/filter/image-pix.c.1.3.x cups-1.3.5/filter/image-pix.c ---- cups-1.3.5/filter/image-pix.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image-pix.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Alias PIX image routines for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -95,9 +95,22 @@ _cupsImageReadPIX( - - cupsImageSetMaxTiles(img, 0); - -- in = malloc(img->xsize * (depth / 8)); - bpp = cupsImageGetDepth(img); -- out = malloc(img->xsize * bpp); -+ -+ if ((in = malloc(img->xsize * (depth / 8))) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ return (1); -+ } -+ -+ if ((out = malloc(img->xsize * bpp)) == NULL) -+ { -+ fputs("DEBUG: Unable to allocate memory!\n", stderr); -+ fclose(fp); -+ free(in); -+ return (1); -+ } - - /* - * Read the image data... -diff -up cups-1.3.5/filter/image.c.1.3.x cups-1.3.5/filter/image.c ---- cups-1.3.5/filter/image.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/image.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * Base image support for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -320,15 +320,10 @@ cupsImageOpen( - */ - - if ((fp = fopen(filename, "r")) == NULL) -- { --/* perror("ERROR: Unable to open image file"); --*/ return (NULL); -- } -+ return (NULL); - - if (fread(header, 1, sizeof(header), fp) == 0) - { --/* perror("ERROR: Unable to read image file header"); --*/ - fclose(fp); - return (NULL); - } -@@ -346,8 +341,7 @@ cupsImageOpen( - - if (img == NULL) - { --/* perror("ERROR: Unable to allocate memory for image file"); --*/ fclose(fp); -+ fclose(fp); - return (NULL); - } - -@@ -401,8 +395,7 @@ cupsImageOpen( - #endif /* HAVE_LIBTIFF */ - else - { --/* fputs("ERROR: Unknown image file format!"); --*/ fclose(fp); -+ fclose(fp); - status = -1; - } - -@@ -729,8 +722,11 @@ get_tile(cups_image_t *img, /* I - Imag - - DEBUG_printf(("Creating tile array (%dx%d)\n", xtiles, ytiles)); - -- img->tiles = calloc(sizeof(cups_itile_t *), ytiles); -- tile = calloc(sizeof(cups_itile_t), xtiles * ytiles); -+ if ((img->tiles = calloc(sizeof(cups_itile_t *), ytiles)) == NULL) -+ return (NULL); -+ -+ if ((tile = calloc(sizeof(cups_itile_t), xtiles * ytiles)) == NULL) -+ return (NULL); - - for (tiley = 0; tiley < ytiles; tiley ++) - { -@@ -751,13 +747,23 @@ get_tile(cups_image_t *img, /* I - Imag - { - if (img->num_ics < img->max_ics) - { -- ic = calloc(sizeof(cups_ic_t) + bpp * CUPS_TILE_SIZE * -- CUPS_TILE_SIZE, 1); -- ic->pixels = ((cups_ib_t *)ic) + sizeof(cups_ic_t); -+ if ((ic = calloc(sizeof(cups_ic_t) + -+ bpp * CUPS_TILE_SIZE * CUPS_TILE_SIZE, 1)) == NULL) -+ { -+ if (img->num_ics == 0) -+ return (NULL); -+ -+ flush_tile(img); -+ ic = img->first; -+ } -+ else -+ { -+ ic->pixels = ((cups_ib_t *)ic) + sizeof(cups_ic_t); - -- img->num_ics ++; -+ img->num_ics ++; - -- DEBUG_printf(("Allocated cache tile %d (%p)...\n", img->num_ics, ic)); -+ DEBUG_printf(("Allocated cache tile %d (%p)...\n", img->num_ics, ic)); -+ } - } - else - { -diff -up cups-1.3.5/filter/rastertohp.c.1.3.x cups-1.3.5/filter/rastertohp.c ---- cups-1.3.5/filter/rastertohp.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/filter/rastertohp.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * Hewlett-Packard Page Control Language filter for the Common UNIX - * Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1993-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -277,7 +277,7 @@ StartPage(ppd_file_t *ppd, /* I - * Set graphics mode... - */ - -- if (ppd->model_number == 2) -+ if (ppd && ppd->model_number == 2) - { - /* - * Figure out the number of color planes... -@@ -382,7 +382,12 @@ StartPage(ppd_file_t *ppd, /* I - * Allocate memory for a line of graphics... - */ - -- Planes[0] = malloc(header->cupsBytesPerLine); -+ if ((Planes[0] = malloc(header->cupsBytesPerLine)) == NULL) -+ { -+ fputs("ERROR: Unable to allocate memory!\n", stderr); -+ exit(1); -+ } -+ - for (plane = 1; plane < NumPlanes; plane ++) - Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes; - -diff -up cups-1.3.5/config.h.in.1.3.x cups-1.3.5/config.h.in ---- cups-1.3.5/config.h.in.1.3.x 2007-08-29 18:22:26.000000000 +0100 -+++ cups-1.3.5/config.h.in 2008-02-14 13:03:30.000000000 +0000 -@@ -77,13 +77,6 @@ - - - /* -- * Maximum number of file descriptors to support. -- */ -- --#define CUPS_MAX_FDS 4096 -- -- --/* - * Do we have domain socket support? - */ - -@@ -446,13 +439,6 @@ - - - /* -- * Do we have CFLocaleCreateCanonicalLocaleIdentifierFromString()? -- */ -- --#undef HAVE_CF_LOCALE_ID -- -- --/* - * Do we have MacOSX 10.4's mbr_XXX functions()? - */ - -diff -up cups-1.3.5/Makedefs.in.1.3.x cups-1.3.5/Makedefs.in ---- cups-1.3.5/Makedefs.in.1.3.x 2007-10-10 23:50:07.000000000 +0100 -+++ cups-1.3.5/Makedefs.in 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - # - # Common makefile definitions for the Common UNIX Printing System (CUPS). - # --# Copyright 2007 by Apple Inc. -+# Copyright 2007-2008 by Apple Inc. - # Copyright 1997-2007 by Easy Software Products, all rights reserved. - # - # These coded instructions, statements, and computer programs are the -@@ -108,17 +108,17 @@ INSTALLSTATIC = @INSTALLSTATIC@ - # for extra debug info) - # - --ALL_CFLAGS = $(CFLAGS) $(SSLFLAGS) @LARGEFILE@ @PTHREAD_FLAGS@ \ -- $(OPTIONS) -+ALL_CFLAGS = -I.. -D_CUPS_SOURCE $(CFLAGS) $(SSLFLAGS) \ -+ @LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS) -+ALL_CXXFLAGS = -I.. -D_CUPS_SOURCE $(CXXFLAGS) $(SSLFLAGS) \ -+ @LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS) - ARCHFLAGS = @ARCHFLAGS@ - ARFLAGS = @ARFLAGS@ - BACKLIBS = @BACKLIBS@ --CFLAGS = -I.. @CPPFLAGS@ @CFLAGS@ \ -- @LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS) -+CFLAGS = @CPPFLAGS@ @CFLAGS@ - COMMONLIBS = @LIBS@ - CUPSDLIBS = @CUPSDLIBS@ --CXXFLAGS = -I.. $(SSLFLAGS) @CPPFLAGS@ @CXXFLAGS@ \ -- @LARGEFILE@ @PTHREAD_FLAGS@ $(OPTIONS) -+CXXFLAGS = @CPPFLAGS@ @CXXFLAGS@ - CXXLIBS = @CXXLIBS@ - DSOFLAGS = @DSOFLAGS@ - DSOLIBS = @DSOLIBS@ $(COMMONLIBS) -@@ -258,7 +258,7 @@ DBUSDIR = @DBUSDIR@ - - .cxx.o: - echo Compiling $<... -- $(CXX) $(ARCHFLAGS) $(OPTIM) $(CXXFLAGS) -c $< -+ $(CXX) $(ARCHFLAGS) $(OPTIM) $(ALL_CXXFLAGS) -c $< - - .man.1 .man.1m .man.5 .man.7 .man.8: - echo Linking $<... -diff -up cups-1.3.5/doc/index.html.in.1.3.x cups-1.3.5/doc/index.html.in ---- cups-1.3.5/doc/index.html.in.1.3.x 2007-12-07 18:37:40.000000000 +0000 -+++ cups-1.3.5/doc/index.html.in 2008-02-14 13:03:30.000000000 +0000 -@@ -112,9 +112,9 @@ assistance:

- WIDTH="15" HEIGHT="15" ALT=""> - - --

The Common UNIX Printing System, CUPS, and the CUPS logo are the --trademark property of Apple Inc. --CUPS is copyright 2007 by Apple Inc., All Rights Reserved.

-+

The Common UNIX Printing System, CUPS, and the CUPS logo are -+trademarks of Apple Inc. CUPS is -+copyright 2007-2008 Apple Inc. All rights reserved.

- - - -diff -up cups-1.3.5/doc/help/spec-ppd.html.1.3.x cups-1.3.5/doc/help/spec-ppd.html ---- cups-1.3.5/doc/help/spec-ppd.html.1.3.x 2007-10-31 18:35:56.000000000 +0000 -+++ cups-1.3.5/doc/help/spec-ppd.html 2008-02-14 13:03:30.000000000 +0000 -@@ -1204,7 +1204,7 @@ list of locale names ("en", "en_US", "fr - -
- *% Specify Canadian, UK, and US English, and Candian and French French 
--*cupsLanguages: "en_CA en_UK en_US fr_CA fr_CA"
-+*cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
- 
- -

cupsManualCopies

-diff -up cups-1.3.5/doc/help/spec-ipp.html.1.3.x cups-1.3.5/doc/help/spec-ipp.html ---- cups-1.3.5/doc/help/spec-ipp.html.1.3.x 2007-07-12 23:58:17.000000000 +0100 -+++ cups-1.3.5/doc/help/spec-ipp.html 2008-02-14 13:03:30.000000000 +0000 -@@ -11,7 +11,7 @@ - - CUPS IPP specification for the Common UNIX Printing System (CUPS). - -- Copyright 2007 by Apple Inc. -+ Copyright 2007-2008 by Apple Inc. - Copyright 1997-2007 by Easy Software Products. - - These coded instructions, statements, and computer programs are the -@@ -2251,6 +2251,101 @@ the system. -

The job-sheets-supported attribute specifies the available banner files. - There will always be at least one banner file available called "none". - -+

marker-change-time (integer)

-+ -+

The marker-change-time attribute specifies the printer-up-time value when -+the last change to the marker-colors, marker-levels, marker-names, or -+marker-types attributes was made.

-+ -+

marker-colors (1setof name(MAX))

-+ -+

The marker-colors attribute specifies the color(s) for each supply in the -+printer. It is only available when the driver provides supply levels. The -+color is either "none" or one or more hex-encoded sRGB colors of the form -+"#RRGGBB".

-+ -+

marker-levels (1setof integer(-1:100))

-+ -+

The marker-levels attribute specifies the current supply levels for the -+printer. It is only available when the driver provides supply levels. A -+value of -1 indicates the level is unknown, while values from 0 to 100 -+indicate the corresponding percentage.

-+ -+

marker-names (1setof name(MAX))

-+ -+

The marker-names attribute specifies the name(s) for each supply in the -+printer. It is only available when the driver provides supply levels.

-+ -+

marker-types (1setof type3 keyword)

-+ -+

The marker-types attribute specifies the type(s) of each supply in the -+printer. It is only available when the driver provides supply levels. The -+following (RFC 3805) types are currently supported:

-+ -+
    -+ -+
  • toner
  • -+ -+
  • wasteToner
  • -+ -+
  • ink
  • -+ -+
  • inkCartridge
  • -+ -+
  • inkRibbon
  • -+ -+
  • wasteInk
  • -+ -+
  • opc
  • -+ -+
  • developer
  • -+ -+
  • fuserOil
  • -+ -+
  • solidWax
  • -+ -+
  • ribbonWax
  • -+ -+
  • wasteWax
  • -+ -+
  • fuser
  • -+ -+
  • coronaWire
  • -+ -+
  • fuserOilWick
  • -+ -+
  • cleanerUnit
  • -+ -+
  • fuserCleaningPad
  • -+ -+
  • transferUnit
  • -+ -+
  • tonerCartridge
  • -+ -+
  • fuserOiler
  • -+ -+
  • water
  • -+ -+
  • wasteWater
  • -+ -+
  • bindingSupply
  • -+ -+
  • bandingSupply
  • -+ -+
  • stichingWire
  • -+ -+
  • shrinkWrap
  • -+ -+
  • paperWrap
  • -+ -+
  • staples
  • -+ -+
  • inserts
  • -+ -+
  • covers
  • -+ -+
-+ -

port-monitor" (name(127))

- -

The port-monitor attribute specifies the port monitor to use when printing -diff -up cups-1.3.5/systemv/cupstestppd.c.1.3.x cups-1.3.5/systemv/cupstestppd.c ---- cups-1.3.5/systemv/cupstestppd.c.1.3.x 2007-11-27 00:09:24.000000000 +0000 -+++ cups-1.3.5/systemv/cupstestppd.c 2008-02-14 13:03:30.000000000 +0000 -@@ -3,7 +3,7 @@ - * - * PPD test program for the Common UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the -@@ -2010,8 +2010,10 @@ check_translations(ppd_file_t *ppd, /* I - * This file contains localizations, check them... - */ - -- languages = strdup(attr->value); -- langlist = cupsArrayNew((cups_array_func_t)strcmp, NULL); -+ if ((languages = strdup(attr->value)) == NULL) -+ return (1); -+ -+ langlist = cupsArrayNew((cups_array_func_t)strcmp, NULL); - - for (langptr = languages; *langptr;) - { -diff -up cups-1.3.5/systemv/lpmove.c.1.3.x cups-1.3.5/systemv/lpmove.c ---- cups-1.3.5/systemv/lpmove.c.1.3.x 2007-11-27 00:09:24.000000000 +0000 -+++ cups-1.3.5/systemv/lpmove.c 2008-02-14 13:03:30.000000000 +0000 -@@ -61,7 +61,6 @@ main(int argc, /* I - Number of comm - - dest = NULL; - dests = NULL; -- http = NULL; - job = NULL; - jobid = 0; - num_dests = 0; -@@ -75,8 +74,6 @@ main(int argc, /* I - Number of comm - #ifdef HAVE_SSL - cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); - -- if (http) -- httpEncryption(http, HTTP_ENCRYPT_REQUIRED); - #else - _cupsLangPrintf(stderr, - _("%s: Sorry, no encryption support compiled in!\n"), -@@ -85,12 +82,6 @@ main(int argc, /* I - Number of comm - break; - - case 'h' : /* Connect to host */ -- if (http) -- { -- httpClose(http); -- http = NULL; -- } -- - if (argv[i][2] != '\0') - cupsSetServer(argv[i] + 2); - else -@@ -142,17 +133,14 @@ main(int argc, /* I - Number of comm - return (1); - } - -- if (!http) -- { -- http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); -+ http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption()); - -- if (http == NULL) -- { -- _cupsLangPrintf(stderr, -- _("lpmove: Unable to connect to server: %s\n"), -- strerror(errno)); -- return (1); -- } -+ if (http == NULL) -+ { -+ _cupsLangPrintf(stderr, -+ _("lpmove: Unable to connect to server: %s\n"), -+ strerror(errno)); -+ return (1); - } - - return (move_job(http, src, jobid, dest)); -diff -up cups-1.3.5/systemv/accept.c.1.3.x cups-1.3.5/systemv/accept.c ---- cups-1.3.5/systemv/accept.c.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/systemv/accept.c 2008-02-14 13:03:30.000000000 +0000 -@@ -4,7 +4,7 @@ - * "accept", "disable", "enable", and "reject" commands for the Common - * UNIX Printing System (CUPS). - * -- * Copyright 2007 by Apple Inc. -+ * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the -@@ -125,8 +125,11 @@ main(int argc, /* I - Number of comm - break; - - case 'h' : /* Connect to host */ -- if (http != NULL) -+ if (http) -+ { - httpClose(http); -+ http = NULL; -+ } - - if (argv[i][2] != '\0') - cupsSetServer(argv[i] + 2); -diff -up cups-1.3.5/README.txt.1.3.x cups-1.3.5/README.txt ---- cups-1.3.5/README.txt.1.3.x 2007-09-18 21:39:31.000000000 +0100 -+++ cups-1.3.5/README.txt 2008-02-14 13:03:30.000000000 +0000 -@@ -1,4 +1,4 @@ --README - CUPS v1.3.2 - 2007-09-18 -+README - CUPS v1.3.6 - 2008-01-22 - --------------------------------- - - Looking for compile instructions? Read the file "INSTALL.txt" -@@ -153,9 +153,9 @@ PRINTING FILES - - LEGAL STUFF - -- CUPS is Copyright 2007 by Apple Inc. CUPS, the CUPS logo, and -- the Common UNIX Printing System are the trademark property of -- Apple Inc. -+ CUPS is Copyright 2007-2008 by Apple Inc. CUPS, the CUPS logo, -+ and the Common UNIX Printing System are the trademark property -+ of Apple Inc. - - The MD5 Digest code is Copyright 1999 Aladdin Enterprises. - -diff -up cups-1.3.5/data/testprint.ps.1.3.x cups-1.3.5/data/testprint.ps ---- cups-1.3.5/data/testprint.ps.1.3.x 2007-07-11 22:46:42.000000000 +0100 -+++ cups-1.3.5/data/testprint.ps 2008-02-14 13:03:30.000000000 +0000 -@@ -14,7 +14,7 @@ - % - % PostScript test page for the Common UNIX Printing System ("CUPS"). - % --% Copyright 2007 Apple Inc. -+% Copyright 2007-2008 Apple Inc. - % Copyright 1993-2007 Easy Software Products - % - % These coded instructions, statements, and computer programs are the -@@ -573,10 +573,10 @@ gsave - pageHeight 8 mul % Move down... - 2 copy moveto % Position text - smallFont setfont % Font -- (Copyright 2007 Apple Inc., All Rights Reserved. CUPS and the CUPS logo are the trademark) show -+ (Copyright 2007-2008 Apple Inc., All Rights Reserved. CUPS and the CUPS logo are the) show - pageHeight 2 add sub % Move down... - 2 copy moveto % Position text -- (property of Apple Inc., 1 Infinite Loop, Cupertino, CA 95014, USA.) show -+ (trademark property of Apple Inc., 1 Infinite Loop, Cupertino, CA 95014, USA.) show - pageHeight 2 mul 4 add sub % Move down... - moveto % Position text - (Need help? Contact your operating system vendor or visit "http://www.cups.org/".) show diff --git a/cups.spec b/cups.spec index 194143a..10af7f1 100644 --- a/cups.spec +++ b/cups.spec @@ -5,8 +5,8 @@ Summary: Common Unix Printing System Name: cups -Version: 1.3.5 -Release: 6%{?dist} +Version: 1.3.6 +Release: 1%{?dist} License: GPLv2 Group: System Environment/Daemons Source: ftp://ftp.easysw.com/pub/cups/test//cups-%{version}-source.tar.bz2 @@ -24,7 +24,6 @@ Source12: cups.cron Source13: pdftops.conf Source14: textonly.filter Source15: textonly.ppd -Patch0: cups-1.3.x.patch Patch1: cups-1.1.15-initscript.patch Patch2: cups-no-gzip-man.patch Patch3: cups-1.1.16-system-auth.patch @@ -139,7 +138,6 @@ lpd emulation. %prep %setup -q -n %{name}-%{version} -%patch0 -p1 -b .1.3.x %patch1 -p1 -b .noinit %patch2 -p1 -b .no-gzip-man %patch3 -p1 -b .system-auth @@ -185,7 +183,7 @@ export CFLAGS="-DLDAP_DEPRECATED=1" --enable-lspp \ %endif --with-log-file-perm=0600 --enable-pie --enable-relro \ - --with-dbusdir=%{_sysconfig}/dbus-1/system.d \ + --with-dbusdir=%{_sysconfdir}/dbus-1 \ localedir=%{_datadir}/locale # If we got this far, all prerequisite libraries must be here. @@ -457,6 +455,9 @@ rm -rf $RPM_BUILD_ROOT %{cups_serverbin}/daemon/cups-lpd %changelog +* Wed Feb 20 2008 Tim Waugh 1:1.3.6-1 +- 1.3.6. + * Thu Feb 14 2008 Tim Waugh 1:1.3.5-6 - Include fixes from svn up to revision 7304. No longer need str2703 patch. Build with --with-dbusdir. diff --git a/sources b/sources index 57f13e6..0be8b39 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ b0bb017098e8e76b8a25e666c41ce540 postscript.ppd.gz -355705c528e9a8d0d439da15454d79a6 cups-1.3.5-source.tar.bz2 +642f9f6d879999bff1b51aeee57a3ce1 cups-1.3.6-source.tar.bz2