summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-print/cups/files/cups-1.3.11-str3367-security-1.3v2.patch')
-rw-r--r--net-print/cups/files/cups-1.3.11-str3367-security-1.3v2.patch435
1 files changed, 0 insertions, 435 deletions
diff --git a/net-print/cups/files/cups-1.3.11-str3367-security-1.3v2.patch b/net-print/cups/files/cups-1.3.11-str3367-security-1.3v2.patch
deleted file mode 100644
index 8fe6b17..0000000
--- a/net-print/cups/files/cups-1.3.11-str3367-security-1.3v2.patch
+++ /dev/null
@@ -1,435 +0,0 @@
-Index: cgi-bin/printers.c
-===================================================================
---- cgi-bin/printers.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/printers.c (.../branches/leopard/cups) (revision 1707)
-@@ -72,6 +72,7 @@
- */
-
- cgiSetVariable("SECTION", "printers");
-+ cgiSetVariable("REFRESH_PAGE", "");
-
- /*
- * See if we are displaying a printer or all printers...
-Index: cgi-bin/cgi.h
-===================================================================
---- cgi-bin/cgi.h (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/cgi.h (.../branches/leopard/cups) (revision 1707)
-@@ -54,6 +54,7 @@
- extern void cgiAbort(const char *title, const char *stylesheet,
- const char *format, ...);
- extern int cgiCheckVariables(const char *names);
-+extern void cgiClearVariables(void);
- extern void *cgiCompileSearch(const char *query);
- extern void cgiCopyTemplateFile(FILE *out, const char *tmpl);
- extern void cgiCopyTemplateLang(const char *tmpl);
-Index: cgi-bin/template.c
-===================================================================
---- cgi-bin/template.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/template.c (.../branches/leopard/cups) (revision 1707)
-@@ -639,6 +639,8 @@
- fputs(">", out);
- else if (*s == '\"')
- fputs(""", out);
-+ else if (*s == '\'')
-+ fputs("'", out);
- else if (*s == '&')
- fputs("&", out);
- else
-@@ -659,7 +661,7 @@
- {
- while (*s)
- {
-- if (strchr("%&+ <>#=", *s) || *s & 128)
-+ if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128)
- fprintf(out, "%%%02X", *s & 255);
- else
- putc(*s, out);
-Index: cgi-bin/ipp-var.c
-===================================================================
---- cgi-bin/ipp-var.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/ipp-var.c (.../branches/leopard/cups) (revision 1707)
-@@ -1220,7 +1220,9 @@
- int ascending, /* Order of jobs (0 = descending) */
- first, /* First job to show */
- count; /* Number of jobs */
-- const char *var; /* Form variable */
-+ const char *var, /* Form variable */
-+ *query, /* Query string */
-+ *section; /* Section in web interface */
- void *search; /* Search data */
- char url[1024], /* URL for prev/next/this */
- *urlptr, /* Position in URL */
-@@ -1265,10 +1267,13 @@
- * Get a list of matching job objects.
- */
-
-- if ((var = cgiGetVariable("QUERY")) != NULL)
-- search = cgiCompileSearch(var);
-+ if ((query = cgiGetVariable("QUERY")) != NULL)
-+ search = cgiCompileSearch(query);
- else
-+ {
-+ query = NULL;
- search = NULL;
-+ }
-
- jobs = cgiGetIPPObjects(response, search);
- count = cupsArrayCount(jobs);
-@@ -1293,17 +1298,28 @@
- if (first < 0)
- first = 0;
-
-- sprintf(url, "%d", count);
-- cgiSetVariable("TOTAL", url);
--
- if ((var = cgiGetVariable("ORDER")) != NULL)
- ascending = !strcasecmp(var, "asc");
- else
-- {
- ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
-- cgiSetVariable("ORDER", ascending ? "asc" : "dec");
-- }
-
-+ section = cgiGetVariable("SECTION");
-+
-+ cgiClearVariables();
-+
-+ if (query)
-+ cgiSetVariable("QUERY", query);
-+
-+ cgiSetVariable("ORDER", ascending ? "asc" : "dec");
-+
-+ cgiSetVariable("SECTION", section);
-+
-+ sprintf(url, "%d", count);
-+ cgiSetVariable("TOTAL", url);
-+
-+ if (which_jobs)
-+ cgiSetVariable("WHICH_JOBS", which_jobs);
-+
- if (ascending)
- {
- for (i = 0, job = (ipp_attribute_t *)cupsArrayIndex(jobs, first);
-@@ -1325,11 +1341,10 @@
-
- urlend = url + sizeof(url);
-
-- if ((var = cgiGetVariable("QUERY")) != NULL)
-+ if (query != NULL)
- {
- if (dest)
-- snprintf(url, sizeof(url), "/%s/%s?QUERY=", cgiGetVariable("SECTION"),
-- dest);
-+ snprintf(url, sizeof(url), "/%s/%s?QUERY=", section, dest);
- else
- strlcpy(url, "/jobs/?QUERY=", sizeof(url));
-
-@@ -1344,7 +1359,7 @@
- else
- {
- if (dest)
-- snprintf(url, sizeof(url), "/%s/%s?", cgiGetVariable("SECTION"), dest);
-+ snprintf(url, sizeof(url), "/%s/%s?", section, dest);
- else
- strlcpy(url, "/jobs/?", sizeof(url));
-
-Index: cgi-bin/admin.c
-===================================================================
---- cgi-bin/admin.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/admin.c (.../branches/leopard/cups) (revision 1707)
-@@ -104,6 +104,7 @@
- */
-
- cgiSetVariable("SECTION", "admin");
-+ cgiSetVariable("REFRESH_PAGE", "");
-
- /*
- * See if we have form data...
-@@ -134,16 +135,61 @@
-
-
- if (getenv("HTTPS"))
-- snprintf(prefix, sizeof(prefix), "https://%s:%s",
-- getenv("SERVER_NAME"), getenv("SERVER_PORT"));
-+ snprintf(prefix, sizeof(prefix), "https://%s:%s",
-+ getenv("SERVER_NAME"), getenv("SERVER_PORT"));
- else
-- snprintf(prefix, sizeof(prefix), "http://%s:%s",
-- getenv("SERVER_NAME"), getenv("SERVER_PORT"));
-+ snprintf(prefix, sizeof(prefix), "http://%s:%s",
-+ getenv("SERVER_NAME"), getenv("SERVER_PORT"));
-
-+ fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix);
-+
- if ((url = cgiGetVariable("URL")) != NULL)
-- printf("Location: %s%s\n\n", prefix, url);
-+ {
-+ char encoded[1024], /* Encoded URL string */
-+ *ptr; /* Pointer into encoded string */
-+
-+
-+ ptr = encoded;
-+ if (*url != '/')
-+ *ptr++ = '/';
-+
-+ for (; *url && ptr < (encoded + sizeof(encoded) - 4); url ++)
-+ {
-+ if (strchr("%@&+ <>#=", *url) || *url < ' ' || *url & 128)
-+ {
-+ /*
-+ * Percent-encode this character; safe because we have at least 4
-+ * bytes left in the array...
-+ */
-+
-+ sprintf(ptr, "%%%02X", *url & 255);
-+ ptr += 3;
-+ }
-+ else
-+ *ptr++ = *url;
-+ }
-+
-+ *ptr = '\0';
-+
-+ if (*url)
-+ {
-+ /*
-+ * URL was too long, just redirect to the admin page...
-+ */
-+
-+ printf("Location: %s/admin\n\n", prefix);
-+ }
-+ else
-+ {
-+ /*
-+ * URL is OK, redirect there...
-+ */
-+
-+ printf("Location: %s%s\n\n", prefix, encoded);
-+ }
-+ }
- else
-- printf("Location: %s/admin\n\n", prefix);
-+ printf("Location: %s/admin\n\n", prefix);
- }
- else if (!strcmp(op, "start-printer"))
- do_printer_op(http, IPP_RESUME_PRINTER, cgiText(_("Start Printer")));
-@@ -293,6 +339,31 @@
- * and classes and (re)show the add page...
- */
-
-+ if (cgiGetVariable("EVENT_JOB_CREATED"))
-+ cgiSetVariable("EVENT_JOB_CREATED", "CHECKED");
-+ if (cgiGetVariable("EVENT_JOB_COMPLETED"))
-+ cgiSetVariable("EVENT_JOB_COMPLETED", "CHECKED");
-+ if (cgiGetVariable("EVENT_JOB_STOPPED"))
-+ cgiSetVariable("EVENT_JOB_STOPPED", "CHECKED");
-+ if (cgiGetVariable("EVENT_JOB_CONFIG_CHANGED"))
-+ cgiSetVariable("EVENT_JOB_CONFIG_CHANGED", "CHECKED");
-+ if (cgiGetVariable("EVENT_PRINTER_STOPPED"))
-+ cgiSetVariable("EVENT_PRINTER_STOPPED", "CHECKED");
-+ if (cgiGetVariable("EVENT_PRINTER_ADDED"))
-+ cgiSetVariable("EVENT_PRINTER_ADDED", "CHECKED");
-+ if (cgiGetVariable("EVENT_PRINTER_MODIFIED"))
-+ cgiSetVariable("EVENT_PRINTER_MODIFIED", "CHECKED");
-+ if (cgiGetVariable("EVENT_PRINTER_DELETED"))
-+ cgiSetVariable("EVENT_PRINTER_DELETED", "CHECKED");
-+ if (cgiGetVariable("EVENT_SERVER_STARTED"))
-+ cgiSetVariable("EVENT_SERVER_STARTED", "CHECKED");
-+ if (cgiGetVariable("EVENT_SERVER_STOPPED"))
-+ cgiSetVariable("EVENT_SERVER_STOPPED", "CHECKED");
-+ if (cgiGetVariable("EVENT_SERVER_RESTARTED"))
-+ cgiSetVariable("EVENT_SERVER_RESTARTED", "CHECKED");
-+ if (cgiGetVariable("EVENT_SERVER_AUDIT"))
-+ cgiSetVariable("EVENT_SERVER_AUDIT", "CHECKED");
-+
- request = ippNewRequest(CUPS_GET_PRINTERS);
- response = cupsDoRequest(http, request, "/");
-
-@@ -450,6 +521,10 @@
- * Do the request and get back a response...
- */
-
-+ cgiClearVariables();
-+ if (name)
-+ cgiSetVariable("PRINTER_NAME", name);
-+
- if ((response = cupsDoRequest(http, request, "/")) != NULL)
- {
- /*
-@@ -2336,7 +2411,9 @@
- if ((val = cupsGetOption("DefaultAuthType", num_settings,
- settings)) != NULL && !strcasecmp(val, "Negotiate"))
- cgiSetVariable("KERBEROS", "CHECKED");
-+ else
- #endif /* HAVE_GSSAPI */
-+ cgiSetVariable("KERBEROS", "");
-
- cupsFreeOptions(num_settings, settings);
-
-Index: cgi-bin/help.c
-===================================================================
---- cgi-bin/help.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/help.c (.../branches/leopard/cups) (revision 1707)
-@@ -63,6 +63,7 @@
- */
-
- cgiSetVariable("SECTION", "help");
-+ cgiSetVariable("REFRESH_PAGE", "");
-
- /*
- * Load the help index...
-@@ -102,7 +103,7 @@
- */
-
- for (i = 0; i < argc; i ++)
-- fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
-+ fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
-
- if ((helpfile = getenv("PATH_INFO")) != NULL)
- {
-@@ -179,6 +180,12 @@
- topic = cgiGetVariable("TOPIC");
- si = helpSearchIndex(hi, query, topic, helpfile);
-
-+ cgiClearVariables();
-+ if (query)
-+ cgiSetVariable("QUERY", query);
-+ if (topic)
-+ cgiSetVariable("TOPIC", topic);
-+
- fprintf(stderr, "DEBUG: query=\"%s\", topic=\"%s\"\n",
- query ? query : "(null)", topic ? topic : "(null)");
-
-Index: cgi-bin/var.c
-===================================================================
---- cgi-bin/var.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/var.c (.../branches/leopard/cups) (revision 1707)
-@@ -15,6 +15,7 @@
- * Contents:
- *
- * cgiCheckVariables() - Check for the presence of "required" variables.
-+ * cgiClearVariables() - Clear all form variables.
- * cgiGetArray() - Get an element from a form array...
- * cgiGetFile() - Get the file (if any) that was submitted in the form.
- * cgiGetSize() - Get the size of a form array value.
-@@ -135,6 +136,31 @@
-
-
- /*
-+ * 'cgiClearVariables()' - Clear all form variables.
-+ */
-+
-+void
-+cgiClearVariables(void)
-+{
-+ int i, j; /* Looping vars */
-+ _cgi_var_t *v; /* Current variable */
-+
-+
-+ for (v = form_vars, i = form_count; i > 0; v ++, i --)
-+ {
-+ _cupsStrFree(v->name);
-+ for (j = 0; j < v->nvalues; j ++)
-+ if (v->values[j])
-+ _cupsStrFree(v->values[j]);
-+ }
-+
-+ form_count = 0;
-+
-+ cgi_unlink_file();
-+}
-+
-+
-+/*
- * 'cgiGetArray()' - Get an element from a form array...
- */
-
-@@ -154,7 +180,7 @@
- if (element < 0 || element >= var->nvalues)
- return (NULL);
-
-- return (var->values[element]);
-+ return (_cupsStrAlloc(var->values[element]));
- }
-
-
-@@ -209,7 +235,7 @@
- var->values[var->nvalues - 1]);
- #endif /* DEBUG */
-
-- return ((var == NULL) ? NULL : var->values[var->nvalues - 1]);
-+ return ((var == NULL) ? NULL : _cupsStrAlloc(var->values[var->nvalues - 1]));
- }
-
-
-@@ -341,9 +367,9 @@
- var->nvalues = element + 1;
- }
- else if (var->values[element])
-- free((char *)var->values[element]);
-+ _cupsStrFree((char *)var->values[element]);
-
-- var->values[element] = strdup(value);
-+ var->values[element] = _cupsStrAlloc(value);
- }
- }
-
-@@ -388,7 +414,7 @@
- {
- for (i = size; i < var->nvalues; i ++)
- if (var->values[i])
-- free((void *)(var->values[i]));
-+ _cupsStrFree((void *)(var->values[i]));
- }
-
- var->nvalues = size;
-@@ -421,9 +447,9 @@
- {
- for (i = 0; i < var->nvalues; i ++)
- if (var->values[i])
-- free((char *)var->values[i]);
-+ _cupsStrFree((char *)var->values[i]);
-
-- var->values[0] = strdup(value);
-+ var->values[0] = _cupsStrAlloc(value);
- var->nvalues = 1;
- }
- }
-@@ -470,10 +496,10 @@
- if ((var->values = calloc(element + 1, sizeof(char *))) == NULL)
- return;
-
-- var->name = strdup(name);
-+ var->name = _cupsStrAlloc(name);
- var->nvalues = element + 1;
- var->avalues = element + 1;
-- var->values[element] = strdup(value);
-+ var->values[element] = _cupsStrAlloc(value);
-
- form_count ++;
- }
-Index: cgi-bin/jobs.c
-===================================================================
---- cgi-bin/jobs.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/jobs.c (.../branches/leopard/cups) (revision 1707)
-@@ -57,6 +57,7 @@
- */
-
- cgiSetVariable("SECTION", "jobs");
-+ cgiSetVariable("REFRESH_PAGE", "");
-
- /*
- * Connect to the HTTP server...
-Index: cgi-bin/classes.c
-===================================================================
---- cgi-bin/classes.c (.../easysw/current-1.3.x) (revision 1707)
-+++ cgi-bin/classes.c (.../branches/leopard/cups) (revision 1707)
-@@ -69,6 +69,7 @@
- */
-
- cgiSetVariable("SECTION", "classes");
-+ cgiSetVariable("REFRESH_PAGE", "");
-
- /*
- * See if we are displaying a printer or all classes...
-