436 lines
12 KiB
Diff
436 lines
12 KiB
Diff
|
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...
|
||
|
|