summaryrefslogtreecommitdiff
path: root/scheduler
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2019-10-02 14:06:02 -0400
committerMichael R Sweet <michael.r.sweet@gmail.com>2019-10-02 14:06:02 -0400
commiteff8c82f6a43ee1816e3b5899381d525c3231d37 (patch)
tree02a4031762ea0c8b00278adc025c9a827befb6f9 /scheduler
parent3ba95ec48d785979ccfe90516d8fb4567ab81fe0 (diff)
downloadcups-eff8c82f6a43ee1816e3b5899381d525c3231d37.tar.gz
Fix handling of printer resource files (Issue #5652)
Diffstat (limited to 'scheduler')
-rw-r--r--scheduler/client.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/scheduler/client.c b/scheduler/client.c
index f693e7c49..c2ee8f12a 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -1099,7 +1099,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
}
}
}
- else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5))
+ else if (!buf[0] && (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9)))
{
if (!WebInterface)
{
@@ -1125,14 +1125,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
cupsdSetStringf(&con->command, "%s/cgi-bin/admin.cgi", ServerBin);
cupsdSetString(&con->options, strchr(con->uri + 6, '?'));
}
- else if (!strncmp(con->uri, "/printers", 9))
- {
- cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin);
- if (con->uri[9] && con->uri[10])
- cupsdSetString(&con->options, con->uri + 9);
- else
- cupsdSetString(&con->options, NULL);
- }
else if (!strncmp(con->uri, "/classes", 8))
{
cupsdSetStringf(&con->command, "%s/cgi-bin/classes.cgi", ServerBin);
@@ -1149,6 +1141,14 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
else
cupsdSetString(&con->options, NULL);
}
+ else if (!strncmp(con->uri, "/printers", 9))
+ {
+ cupsdSetStringf(&con->command, "%s/cgi-bin/printers.cgi", ServerBin);
+ if (con->uri[9] && con->uri[10])
+ cupsdSetString(&con->options, con->uri + 9);
+ else
+ cupsdSetString(&con->options, NULL);
+ }
else
{
cupsdSetStringf(&con->command, "%s/cgi-bin/help.cgi", ServerBin);
@@ -1458,7 +1458,7 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */
break;
}
- if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/printers", 9) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5))
+ if (!buf[0] && (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/help", 5) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9)))
{
/*
* CGI output...
@@ -2701,6 +2701,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
* Figure out the real filename...
*/
+ filename[0] = '\0';
language[0] = '\0';
if (!strncmp(con->uri, "/help", 5) && (con->uri[5] == '/' || !con->uri[5]))
@@ -2718,6 +2719,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
if ((p = cupsdFindDest(dest)) == NULL)
{
+ strlcpy(filename, "/", len);
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
return (NULL);
}
@@ -2754,6 +2756,7 @@ get_file(cupsd_client_t *con, /* I - Client connection */
if ((p = cupsdFindDest(dest)) == NULL)
{
+ strlcpy(filename, "/", len);
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
return (NULL);
}
@@ -2786,6 +2789,14 @@ get_file(cupsd_client_t *con, /* I - Client connection */
perm_check = 0;
}
+ else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9))
+ {
+ /*
+ * Admin/class/job/printer pages are served by CGI...
+ */
+
+ return (NULL);
+ }
else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/'))
snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5);
else if (!strncmp(con->uri, "/strings/", 9) && !strcmp(con->uri + strlen(con->uri) - 8, ".strings"))
@@ -2795,12 +2806,14 @@ get_file(cupsd_client_t *con, /* I - Client connection */
if ((p = cupsdFindDest(dest)) == NULL)
{
+ strlcpy(filename, "/", len);
cupsdLogClient(con, CUPSD_LOG_INFO, "No destination \"%s\" found.", dest);
return (NULL);
}
if (!p->strings)
{
+ strlcpy(filename, "/", len);
cupsdLogClient(con, CUPSD_LOG_INFO, "No strings files for \"%s\".", dest);
return (NULL);
}