X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=cgi-bin%2Fipp-var.c;h=8f86191274172060ccf59053d67c01554acbd627;hb=5bd77a735f888a051bcc81bbb241ddac9274b059;hp=4bf7977765de04b11f3724a04c312b83f5dc7832;hpb=7a6a01ddca9307aa0f0abe27bb0f9074b86b1093;p=thirdparty%2Fcups.git diff --git a/cgi-bin/ipp-var.c b/cgi-bin/ipp-var.c index 4bf797776..8f8619127 100644 --- a/cgi-bin/ipp-var.c +++ b/cgi-bin/ipp-var.c @@ -1,25 +1,16 @@ /* - * "$Id$" + * "$Id: ipp-var.c 6889 2007-08-29 22:23:35Z mike $" * * CGI <-> IPP variable routines for the Common UNIX Printing System (CUPS). * - * Copyright 1997-2006 by Easy Software Products. + * Copyright 2007-2008 by Apple Inc. + * Copyright 1997-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the - * property of Easy Software Products and are protected by Federal - * copyright law. Distribution and use rights are outlined in the file - * "LICENSE.txt" which should have been included with this file. If this - * file is missing or damaged please contact Easy Software Products - * at: - * - * Attn: CUPS Licensing Information - * Easy Software Products - * 44141 Airport View Drive, Suite 204 - * Hollywood, Maryland 20636 USA - * - * Voice: (301) 373-9600 - * EMail: cups-info@cups.org - * WWW: http://www.cups.org + * property of Apple Inc. and are protected by Federal copyright + * law. Distribution and use rights are outlined in the file "LICENSE.txt" + * which should have been included with this file. If this file is + * file is missing or damaged, see the license at "http://www.cups.org/". * * Contents: * @@ -110,6 +101,7 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */ */ num_attrs = 0; + attrs[0] = NULL; /* Eliminate compiler warning */ while ((ch = getc(in)) != EOF) if (ch == '\\') @@ -166,6 +158,8 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */ for (i = 0; i < num_attrs; i ++) free(attrs[i]); } + + fclose(in); } @@ -601,6 +595,11 @@ cgiPrintTestPage(http_t *http, /* I - Connection to server */ 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"))); @@ -827,6 +826,144 @@ cgiSetIPPObjectVars( cgiSetArray("job_printer_name", element, valptr); } + /* + * Localize event names in "notify_events" variable... + */ + + if (!strcmp(name, "notify_events")) + { + size_t remaining; /* Remaining bytes in buffer */ + + + value[0] = '\0'; + valptr = value; + + for (i = 0; i < attr->num_values; i ++) + { + if (valptr >= (value + sizeof(value) - 3)) + break; + + if (i) + { + *valptr++ = ','; + *valptr++ = ' '; + } + + remaining = sizeof(value) - (valptr - value); + + if (!strcmp(attr->values[i].string.text, "printer-stopped")) + strlcpy(valptr, _("Printer Paused"), remaining); + else if (!strcmp(attr->values[i].string.text, "printer-added")) + strlcpy(valptr, _("Printer Added"), remaining); + else if (!strcmp(attr->values[i].string.text, "printer-modified")) + strlcpy(valptr, _("Printer Modified"), remaining); + else if (!strcmp(attr->values[i].string.text, "printer-deleted")) + strlcpy(valptr, _("Printer Deleted"), remaining); + else if (!strcmp(attr->values[i].string.text, "job-created")) + strlcpy(valptr, _("Job Created"), remaining); + else if (!strcmp(attr->values[i].string.text, "job-completed")) + strlcpy(valptr, _("Job Completed"), remaining); + else if (!strcmp(attr->values[i].string.text, "job-stopped")) + strlcpy(valptr, _("Job Stopped"), remaining); + else if (!strcmp(attr->values[i].string.text, "job-config-changed")) + strlcpy(valptr, _("Job Options Changed"), remaining); + else if (!strcmp(attr->values[i].string.text, "server-restarted")) + strlcpy(valptr, _("Server Restarted"), remaining); + else if (!strcmp(attr->values[i].string.text, "server-started")) + strlcpy(valptr, _("Server Started"), remaining); + else if (!strcmp(attr->values[i].string.text, "server-stopped")) + strlcpy(valptr, _("Server Stopped"), remaining); + else if (!strcmp(attr->values[i].string.text, "server-audit")) + strlcpy(valptr, _("Server Security Auditing"), remaining); + else + strlcpy(valptr, attr->values[i].string.text, remaining); + + valptr += strlen(valptr); + } + + cgiSetArray("notify_events", element, value); + continue; + } + + /* + * Add "notify_printer_name" variable if we have a "notify_printer_uri" + * attribute... + */ + + if (!strcmp(name, "notify_printer_uri")) + { + if ((valptr = strrchr(attr->values[0].string.text, '/')) == NULL) + valptr = "unknown"; + else + valptr ++; + + cgiSetArray("notify_printer_name", element, valptr); + } + + /* + * Add "notify_recipient_name" variable if we have a "notify_recipient_uri" + * attribute, and rewrite recipient URI... + */ + + if (!strcmp(name, "notify_recipient_uri")) + { + char uri[1024], /* New URI */ + scheme[32], /* Scheme portion of URI */ + userpass[256], /* Username/password portion of URI */ + host[1024], /* Hostname portion of URI */ + resource[1024], /* Resource portion of URI */ + *options; /* Options in URI */ + int port; /* Port number */ + + + httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text, + scheme, sizeof(scheme), userpass, sizeof(userpass), + host, sizeof(host), &port, resource, sizeof(resource)); + + if (!strcmp(scheme, "rss")) + { + /* + * RSS notification... + */ + + if ((options = strchr(resource, '?')) != NULL) + *options = '\0'; + + if (host[0]) + { + /* + * Link to remote feed... + */ + + httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "http", + userpass, host, port, resource); + strlcpy(name, uri, sizeof(name)); + } + else + { + /* + * Link to local feed... + */ + + snprintf(uri, sizeof(uri), "/rss%s", resource); + strlcpy(name, resource + 1, sizeof(name)); + } + } + else + { + /* + * Other... + */ + + strlcpy(uri, attr->values[0].string.text, sizeof(uri)); + strlcpy(name, resource, sizeof(name)); + } + + cgiSetArray("notify_recipient_uri", element, uri); + cgiSetArray("notify_recipient_name", element, name); + continue; + } + /* * Add "admin_uri" variable if we have a "printer_uri_supported" * attribute... @@ -850,7 +987,7 @@ cgiSetIPPObjectVars( for (i = 0; i < attr->num_values; i ++) { if (i) - strlcat(valptr, ",", sizeof(value) - (valptr - value)); + strlcat(valptr, ", ", sizeof(value) - (valptr - value)); valptr += strlen(valptr); @@ -913,7 +1050,7 @@ cgiSetIPPObjectVars( snprintf(valptr, sizeof(value) - (valptr - value), "%s", url, - strrchr(url, '/') + 1); + strrchr(attr->values[i].string.text, '/') + 1); } else cgiRewriteURL(attr->values[i].string.text, valptr, @@ -1077,9 +1214,8 @@ cgiShowJobs(http_t *http, /* I - Connection to server */ count; /* Number of jobs */ const char *var; /* Form variable */ void *search; /* Search data */ - char url[1024], /* URL for prev/next/this */ - *urlptr, /* Position in URL */ - *urlend; /* End of URL */ + char url[1024], /* Printer URI */ + val[1024]; /* Form variable */ /* @@ -1120,7 +1256,8 @@ cgiShowJobs(http_t *http, /* I - Connection to server */ * Get a list of matching job objects. */ - if ((var = cgiGetVariable("QUERY")) != NULL) + if ((var = cgiGetVariable("QUERY")) != NULL && + !cgiGetVariable("CLEAR")) search = cgiCompileSearch(var); else search = NULL; @@ -1148,8 +1285,8 @@ cgiShowJobs(http_t *http, /* I - Connection to server */ if (first < 0) first = 0; - sprintf(url, "%d", count); - cgiSetVariable("TOTAL", url); + sprintf(val, "%d", count); + cgiSetVariable("TOTAL", val); if ((var = cgiGetVariable("ORDER")) != NULL) ascending = !strcasecmp(var, "asc"); @@ -1178,61 +1315,23 @@ cgiShowJobs(http_t *http, /* I - Connection to server */ * Save navigation URLs... */ - urlend = url + sizeof(url); - - if ((var = cgiGetVariable("QUERY")) != NULL) - { - if (dest) - snprintf(url, sizeof(url), "/%s/%s?QUERY=", cgiGetVariable("SECTION"), - dest); - else - strlcpy(url, "/jobs/?QUERY=", sizeof(url)); - - urlptr = url + strlen(url); - - cgiFormEncode(urlptr, var, urlend - urlptr); - urlptr += strlen(urlptr); - - strlcpy(urlptr, "&", urlend - urlptr); - urlptr += strlen(urlptr); - } + if (dest) + snprintf(val, sizeof(val), "/%s/%s", cgiGetVariable("SECTION"), dest); else - { - if (dest) - snprintf(url, sizeof(url), "/%s/%s?", cgiGetVariable("SECTION"), dest); - else - strlcpy(url, "/jobs/?", sizeof(url)); - - urlptr = url + strlen(url); - } - - if (which_jobs) - { - strlcpy(urlptr, "WHICH_JOBS=", urlend - urlptr); - urlptr += strlen(urlptr); - - cgiFormEncode(urlptr, which_jobs, urlend - urlptr); - urlptr += strlen(urlptr); - - strlcpy(urlptr, "&", urlend - urlptr); - urlptr += strlen(urlptr); - } + strlcpy(val, "/jobs/", sizeof(val)); - snprintf(urlptr, urlend - urlptr, "FIRST=%d", first); - cgiSetVariable("THISURL", url); + cgiSetVariable("THISURL", val); if (first > 0) { - snprintf(urlptr, urlend - urlptr, "FIRST=%d&ORDER=%s", - first - CUPS_PAGE_MAX, ascending ? "asc" : "dec"); - cgiSetVariable("PREVURL", url); + sprintf(val, "%d", first - CUPS_PAGE_MAX); + cgiSetVariable("PREV", val); } if ((first + CUPS_PAGE_MAX) < count) { - snprintf(urlptr, urlend - urlptr, "FIRST=%d&ORDER=%s", - first + CUPS_PAGE_MAX, ascending ? "asc" : "dec"); - cgiSetVariable("NEXTURL", url); + sprintf(val, "%d", first + CUPS_PAGE_MAX); + cgiSetVariable("NEXT", val); } /* @@ -1279,5 +1378,5 @@ cgiText(const char *message) /* I - Message */ /* - * End of "$Id$". + * End of "$Id: ipp-var.c 6889 2007-08-29 22:23:35Z mike $". */