summaryrefslogtreecommitdiff
path: root/cgi-bin/admin.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgi-bin/admin.c')
-rw-r--r--cgi-bin/admin.c294
1 files changed, 267 insertions, 27 deletions
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
index 206b6dda8..3dea06ded 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -115,7 +115,7 @@ main(int argc, /* I - Number of command-line arguments */
* See if we have form data...
*/
- if (!cgiInitialize())
+ if (!cgiInitialize() || !cgiGetVariable("OP"))
{
/*
* Nope, send the administration menu...
@@ -204,6 +204,8 @@ main(int argc, /* I - Number of command-line arguments */
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);
else
@@ -1201,8 +1203,12 @@ do_am_printer(http_t *http, /* I - HTTP connection */
NULL, cgiGetVariable("PRINTER_INFO"));
if (!file)
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
- NULL, cgiGetVariable("PPD_NAME"));
+ {
+ var = cgiGetVariable("PPD_NAME");
+ if (strcmp(var, "__no_change__"))
+ ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
+ NULL, var);
+ }
strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
@@ -1396,14 +1402,28 @@ do_config_server(http_t *http) /* I - HTTP connection */
int num_settings; /* Number of server settings */
cups_option_t *settings; /* Server settings */
+ int advanced, /* Advanced settings shown? */
+ changed; /* Have settings changed? */
const char *debug_logging, /* DEBUG_LOGGING value */
*remote_admin, /* REMOTE_ADMIN value */
*remote_any, /* REMOTE_ANY value */
*remote_printers,
/* REMOTE_PRINTERS value */
*share_printers,/* SHARE_PRINTERS value */
- *user_cancel_any;
+ *user_cancel_any,
/* USER_CANCEL_ANY value */
+ *browse_web_if, /* BrowseWebIF value */
+ *preserve_job_history,
+ /* PreserveJobHistory value */
+ *preserve_job_files,
+ /* PreserveJobFiles value */
+ *max_jobs, /* MaxJobs value */
+ *max_log_size, /* MaxLogSize value */
+ *val; /* Value for other setting */
+ char local_protocols[255],
+ /* BrowseLocalProtocols */
+ remote_protocols[255];
+ /* BrowseRemoteProtocols */
#ifdef HAVE_GSSAPI
char default_auth_type[255];
/* DefaultAuthType value */
@@ -1414,12 +1434,92 @@ do_config_server(http_t *http) /* I - HTTP connection */
* Get the checkbox values from the form...
*/
- debug_logging = cgiGetVariable("DEBUG_LOGGING") ? "1" : "0";
- remote_admin = cgiGetVariable("REMOTE_ADMIN") ? "1" : "0";
- remote_any = cgiGetVariable("REMOTE_ANY") ? "1" : "0";
- remote_printers = cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0";
- share_printers = cgiGetVariable("SHARE_PRINTERS") ? "1" : "0";
- user_cancel_any = cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0";
+ debug_logging = cgiGetVariable("DEBUG_LOGGING") ? "1" : "0";
+ remote_admin = cgiGetVariable("REMOTE_ADMIN") ? "1" : "0";
+ remote_any = cgiGetVariable("REMOTE_ANY") ? "1" : "0";
+ remote_printers = cgiGetVariable("REMOTE_PRINTERS") ? "1" : "0";
+ share_printers = cgiGetVariable("SHARE_PRINTERS") ? "1" : "0";
+ user_cancel_any = cgiGetVariable("USER_CANCEL_ANY") ? "1" : "0";
+
+ advanced = cgiGetVariable("ADVANCEDSETTINGS") != NULL;
+ if (advanced)
+ {
+ /*
+ * Get advanced settings...
+ */
+
+ browse_web_if = cgiGetVariable("BROWSE_WEB_IF") ? "Yes" : "No";
+ preserve_job_history = cgiGetVariable("PRESERVE_JOB_HISTORY") ? "Yes" : "No";
+ preserve_job_files = cgiGetVariable("PRESERVE_JOB_FILES") ? "Yes" : "No";
+ max_jobs = cgiGetVariable("MAX_JOBS");
+ max_log_size = cgiGetVariable("MAX_LOG_SIZE");
+
+ if (!max_jobs || atoi(max_jobs) <= 0)
+ max_jobs = "500";
+
+ if (!max_log_size || atof(max_log_size) <= 0.0)
+ max_log_size = "1m";
+
+ if (cgiGetVariable("BROWSE_LOCAL_CUPS"))
+ strcpy(local_protocols, "cups");
+ else
+ local_protocols[0] = '\0';
+
+#ifdef HAVE_DNSSD
+ if (cgiGetVariable("BROWSE_LOCAL_DNSSD"))
+ {
+ if (local_protocols[0])
+ strcat(local_protocols, " dnssd");
+ else
+ strcat(local_protocols, "dnssd");
+ }
+#endif /* HAVE_DNSSD */
+
+#ifdef HAVE_LDAP
+ if (cgiGetVariable("BROWSE_LOCAL_LDAP"))
+ {
+ if (local_protocols[0])
+ strcat(local_protocols, " ldap");
+ else
+ strcat(local_protocols, "ldap");
+ }
+#endif /* HAVE_LDAP */
+
+#ifdef HAVE_LIBSLP
+ if (cgiGetVariable("BROWSE_LOCAL_SLP"))
+ {
+ if (local_protocols[0])
+ strcat(local_protocols, " slp");
+ else
+ strcat(local_protocols, "slp");
+ }
+#endif /* HAVE_SLP */
+
+ if (cgiGetVariable("BROWSE_REMOTE_CUPS"))
+ strcpy(remote_protocols, "cups");
+ else
+ remote_protocols[0] = '\0';
+
+#ifdef HAVE_LDAP
+ if (cgiGetVariable("BROWSE_REMOTE_LDAP"))
+ {
+ if (remote_protocols[0])
+ strcat(remote_protocols, " ldap");
+ else
+ strcat(remote_protocols, "ldap");
+ }
+#endif /* HAVE_LDAP */
+
+#ifdef HAVE_LIBSLP
+ if (cgiGetVariable("BROWSE_REMOTE_SLP"))
+ {
+ if (remote_protocols[0])
+ strcat(remote_protocols, " slp");
+ else
+ strcat(remote_protocols, "slp");
+ }
+#endif /* HAVE_SLP */
+ }
/*
* Get the current server settings...
@@ -1445,8 +1545,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
strlcpy(default_auth_type, "Negotiate", sizeof(default_auth_type));
else
{
- const char *val = cupsGetOption("DefaultAuthType", num_settings,
- settings);
+ val = cupsGetOption("DefaultAuthType", num_settings, settings);
if (val && !strcasecmp(val, "Negotiate"))
strlcpy(default_auth_type, "Basic", sizeof(default_auth_type));
@@ -1461,23 +1560,44 @@ do_config_server(http_t *http) /* I - HTTP connection */
* See if the settings have changed...
*/
- if (strcmp(debug_logging, cupsGetOption(CUPS_SERVER_DEBUG_LOGGING,
- num_settings, settings)) ||
- strcmp(remote_admin, cupsGetOption(CUPS_SERVER_REMOTE_ADMIN,
- num_settings, settings)) ||
- strcmp(remote_any, cupsGetOption(CUPS_SERVER_REMOTE_ANY,
- num_settings, settings)) ||
- strcmp(remote_printers, cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS,
- num_settings, settings)) ||
- strcmp(share_printers, cupsGetOption(CUPS_SERVER_SHARE_PRINTERS,
- num_settings, settings)) ||
+ changed = strcmp(debug_logging, cupsGetOption(CUPS_SERVER_DEBUG_LOGGING,
+ num_settings, settings)) ||
+ strcmp(remote_admin, cupsGetOption(CUPS_SERVER_REMOTE_ADMIN,
+ num_settings, settings)) ||
+ strcmp(remote_any, cupsGetOption(CUPS_SERVER_REMOTE_ANY,
+ num_settings, settings)) ||
+ strcmp(remote_printers, cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS,
+ num_settings, settings)) ||
+ strcmp(share_printers, cupsGetOption(CUPS_SERVER_SHARE_PRINTERS,
+ num_settings, settings)) ||
#ifdef HAVE_GSSAPI
- !cupsGetOption("DefaultAuthType", num_settings, settings) ||
- strcmp(default_auth_type, cupsGetOption("DefaultAuthType",
- num_settings, settings)) ||
+ !cupsGetOption("DefaultAuthType", num_settings, settings) ||
+ strcmp(default_auth_type, cupsGetOption("DefaultAuthType",
+ num_settings, settings)) ||
#endif /* HAVE_GSSAPI */
- strcmp(user_cancel_any, cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY,
- num_settings, settings)))
+ strcmp(user_cancel_any, cupsGetOption(CUPS_SERVER_USER_CANCEL_ANY,
+ num_settings, settings));
+
+ if (advanced && !changed)
+ changed = cupsGetOption("BrowseLocalProtocols", num_settings, settings) ||
+ strcasecmp(local_protocols,
+ CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS) ||
+ cupsGetOption("BrowseRemoteProtocols", num_settings,
+ settings) ||
+ strcasecmp(remote_protocols,
+ CUPS_DEFAULT_BROWSE_REMOTE_PROTOCOLS) ||
+ cupsGetOption("BrowseWebIF", num_settings, settings) ||
+ strcasecmp(browse_web_if, "No") ||
+ cupsGetOption("PreserveJobHistory", num_settings, settings) ||
+ strcasecmp(preserve_job_history, "Yes") ||
+ cupsGetOption("PreserveJobFiles", num_settings, settings) ||
+ strcasecmp(preserve_job_files, "No") ||
+ cupsGetOption("MaxJobs", num_settings, settings) ||
+ strcasecmp(max_jobs, "500") ||
+ cupsGetOption("MaxLogSize", num_settings, settings) ||
+ strcasecmp(max_log_size, "1m");
+
+ if (changed)
{
/*
* Settings *have* changed, so save the changes...
@@ -1503,6 +1623,43 @@ do_config_server(http_t *http) /* I - HTTP connection */
num_settings, &settings);
#endif /* HAVE_GSSAPI */
+ if (advanced)
+ {
+ /*
+ * Add advanced settings...
+ */
+
+ if (cupsGetOption("BrowseLocalProtocols", num_settings, settings) ||
+ strcasecmp(local_protocols, CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS))
+ num_settings = cupsAddOption("BrowseLocalProtocols", local_protocols,
+ num_settings, &settings);
+ if (cupsGetOption("BrowseRemoteProtocols", num_settings, settings) ||
+ strcasecmp(remote_protocols, CUPS_DEFAULT_BROWSE_REMOTE_PROTOCOLS))
+ num_settings = cupsAddOption("BrowseRemoteProtocols", remote_protocols,
+ num_settings, &settings);
+ if (cupsGetOption("BrowseWebIF", num_settings, settings) ||
+ strcasecmp(browse_web_if, "No"))
+ num_settings = cupsAddOption("BrowseWebIF", browse_web_if,
+ num_settings, &settings);
+ if (cupsGetOption("PreserveJobHistory", num_settings, settings) ||
+ strcasecmp(preserve_job_history, "Yes"))
+ num_settings = cupsAddOption("PreserveJobHistory",
+ preserve_job_history, num_settings,
+ &settings);
+ if (cupsGetOption("PreserveJobFiles", num_settings, settings) ||
+ strcasecmp(preserve_job_files, "No"))
+ num_settings = cupsAddOption("PreserveJobFiles", preserve_job_files,
+ num_settings, &settings);
+ if (cupsGetOption("MaxJobs", num_settings, settings) ||
+ strcasecmp(max_jobs, "500"))
+ num_settings = cupsAddOption("MaxJobs", max_jobs, num_settings,
+ &settings);
+ if (cupsGetOption("MaxLogSize", num_settings, settings) ||
+ strcasecmp(max_log_size, "1m"))
+ num_settings = cupsAddOption("MaxLogSize", max_log_size, num_settings,
+ &settings);
+ }
+
if (!cupsAdminSetServerSettings(http, num_settings, settings))
{
if (cupsLastError() == IPP_NOT_AUTHORIZED)
@@ -2354,6 +2511,89 @@ do_menu(http_t *http) /* I - HTTP connection */
cgiSetVariable("KERBEROS", "CHECKED");
#endif /* HAVE_GSSAPI */
+#ifdef HAVE_DNSSD
+ cgiSetVariable("HAVE_DNSSD", "1");
+#endif /* HAVE_DNSSD */
+
+#ifdef HAVE_LDAP
+ cgiSetVariable("HAVE_LDAP", "1");
+#endif /* HAVE_LDAP */
+
+#ifdef HAVE_LIBSLP
+ cgiSetVariable("HAVE_LIBSLP", "1");
+#endif /* HAVE_LIBSLP */
+
+ if ((val = cupsGetOption("BrowseRemoteProtocols", num_settings,
+ settings)) == NULL)
+ if ((val = cupsGetOption("BrowseProtocols", num_settings,
+ settings)) == NULL)
+ val = CUPS_DEFAULT_BROWSE_REMOTE_PROTOCOLS;
+
+ if (strstr(val, "cups") || strstr(val, "CUPS"))
+ cgiSetVariable("BROWSE_REMOTE_CUPS", "CHECKED");
+
+ if (strstr(val, "ldap") || strstr(val, "LDAP"))
+ cgiSetVariable("BROWSE_REMOTE_LDAP", "CHECKED");
+
+ if (strstr(val, "slp") || strstr(val, "SLP"))
+ cgiSetVariable("BROWSE_REMOTE_SLP", "CHECKED");
+
+ if ((val = cupsGetOption("BrowseLocalProtocols", num_settings,
+ settings)) == NULL)
+ if ((val = cupsGetOption("BrowseProtocols", num_settings,
+ settings)) == NULL)
+ val = CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS;
+
+ if (strstr(val, "cups") || strstr(val, "CUPS"))
+ cgiSetVariable("BROWSE_LOCAL_CUPS", "CHECKED");
+
+ if (strstr(val, "dnssd") || strstr(val, "DNSSD") ||
+ strstr(val, "dns-sd") || strstr(val, "DNS-SD") ||
+ strstr(val, "bonjour") || strstr(val, "BONJOUR"))
+ cgiSetVariable("BROWSE_LOCAL_DNSSD", "CHECKED");
+
+ if (strstr(val, "ldap") || strstr(val, "LDAP"))
+ cgiSetVariable("BROWSE_LOCAL_LDAP", "CHECKED");
+
+ if (strstr(val, "slp") || strstr(val, "SLP"))
+ cgiSetVariable("BROWSE_LOCAL_SLP", "CHECKED");
+
+ if ((val = cupsGetOption("BrowseWebIF", num_settings,
+ settings)) == NULL)
+ val = "No";
+
+ if (!strcasecmp(val, "yes") || !strcasecmp(val, "on") ||
+ !strcasecmp(val, "true"))
+ cgiSetVariable("BROWSE_WEB_IF", "CHECKED");
+
+ if ((val = cupsGetOption("PreserveJobHistory", num_settings,
+ settings)) == NULL)
+ val = "Yes";
+
+ if (!strcasecmp(val, "yes") || !strcasecmp(val, "on") ||
+ !strcasecmp(val, "true"))
+ {
+ cgiSetVariable("PRESERVE_JOB_HISTORY", "CHECKED");
+
+ if ((val = cupsGetOption("PreserveJobFiles", num_settings,
+ settings)) == NULL)
+ val = "No";
+
+ if (!strcasecmp(val, "yes") || !strcasecmp(val, "on") ||
+ !strcasecmp(val, "true"))
+ cgiSetVariable("PRESERVE_JOB_FILES", "CHECKED");
+ }
+
+ if ((val = cupsGetOption("MaxJobs", num_settings, settings)) == NULL)
+ val = "500";
+
+ cgiSetVariable("MAX_JOBS", val);
+
+ if ((val = cupsGetOption("MaxLogSize", num_settings, settings)) == NULL)
+ val = "1m";
+
+ cgiSetVariable("MAX_LOG_SIZE", val);
+
cupsFreeOptions(num_settings, settings);
/*