/*
- * "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $"
+ * "$Id$"
*
- * Administration CGI for the Common UNIX Printing System (CUPS).
+ * Administration CGI for CUPS.
*
- * Copyright 2007-2008 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
*
- * These coded instructions, statements, and computer programs are the
- * 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:
- *
- * main() - Main entry for CGI.
- * choose_device_cb() - Add a device to the device selection page.
- * do_add_rss_subscription() - Add a RSS subscription.
- * do_am_class() - Add or modify a class.
- * do_am_printer() - Add or modify a printer.
- * do_cancel_subscription() - Cancel a subscription.
- * do_config_server() - Configure server settings.
- * do_delete_class() - Delete a class.
- * do_delete_printer() - Delete a printer.
- * do_export() - Export printers to Samba.
- * do_list_printers() - List available printers.
- * do_menu() - Show the main menu.
- * do_set_allowed_users() - Set the allowed/denied users for a queue.
- * do_set_default() - Set the server default printer/class.
- * do_set_options() - Configure the default options for a queue.
- * do_set_sharing() - Set printer-is-shared value.
- * get_option_value() - Return the value of an option.
- * get_points() - Get a value in points.
+ * These coded instructions, statements, and computer programs are the
+ * 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/".
*/
/*
#include "cgi-private.h"
#include <cups/adminutil.h>
-#include <cups/file.h>
+#include <cups/ppd.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
* Local globals...
*/
-static int current_device; /* Current device for add/modify */
-static time_t last_device_time; /* Last update time for device list */
+static int current_device = 0; /* Current device shown */
/*
*/
int /* O - Exit status */
-main(int argc, /* I - Number of command-line arguments */
- char *argv[]) /* I - Command-line arguments */
+main(void)
{
http_t *http; /* Connection to the server */
const char *op; /* Operation name */
*/
cgiSetVariable("SECTION", "admin");
+ cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we have form data...
fprintf(stderr, "DEBUG: op=\"%s\"...\n", op);
- if (!strcmp(op, "set-allowed-users"))
+ if (!*op)
+ {
+ const char *printer = getenv("PRINTER_NAME"),
+ /* Printer or class name */
+ *server_port = getenv("SERVER_PORT");
+ /* Port number string */
+ int port = atoi(server_port ? server_port : "0");
+ /* Port number */
+ char uri[1024]; /* URL */
+
+ if (printer)
+ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri),
+ getenv("HTTPS") ? "https" : "http", NULL,
+ getenv("SERVER_NAME"), port, "/%s/%s",
+ cgiGetVariable("IS_CLASS") ? "classes" : "printers",
+ printer);
+ else
+ httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri),
+ getenv("HTTPS") ? "https" : "http", NULL,
+ getenv("SERVER_NAME"), port, "/admin");
+
+ printf("Location: %s\n\n", uri);
+ }
+ else if (!strcmp(op, "set-allowed-users"))
do_set_allowed_users(http);
else if (!strcmp(op, "set-as-default"))
do_set_default(http);
}
else if (op && !strcmp(op, "redirect"))
{
- const char *url; /* Redirection URL... */
+ const char *url; /* Redirection URL... */
char prefix[1024]; /* URL prefix */
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);
}
const char *device_location, /* I - Location */
const char *title) /* I - Page title */
{
+ /*
+ * For modern browsers, start a multi-part page so we can show that something
+ * is happening. Non-modern browsers just get everything at the end...
+ */
+
+ if (current_device == 0 && cgiSupportsMultipart())
+ {
+ cgiStartMultipart();
+ cgiStartHTML(title);
+ cgiCopyTemplateLang("choose-device.tmpl");
+ cgiEndHTML();
+ fflush(stdout);
+ }
+
+
/*
* Add the device to the array...
*/
cgiSetArray("device_location", current_device, device_location);
current_device ++;
-
- if (time(NULL) > last_device_time)
- {
- /*
- * Update the page...
- */
-
- cgiStartHTML(title);
- cgiCopyTemplateLang("choose-device.tmpl");
- cgiEndHTML();
- fflush(stdout);
-
- time(&last_device_time);
- }
}
* 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, "/");
request = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION);
- if (!strcasecmp(printer_uri, "#ALL#"))
+ if (!_cups_strcasecmp(printer_uri, "#ALL#"))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, "ipp://localhost/");
else
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(_("Add RSS Subscription"));
- cgiShowIPPError(_("Unable to add RSS subscription:"));
+ cgiShowIPPError(_("Unable to add RSS subscription"));
}
else
{
ipp_attribute_t *attr; /* member-uris attribute */
char uri[HTTP_MAX_URI]; /* Device or printer URI */
const char *name, /* Pointer to class name */
+ *op, /* Operation name */
*ptr; /* Pointer to CGI variable */
const char *title; /* Title of page */
static const char * const pattrs[] = /* Requested printer attributes */
title = cgiText(modify ? _("Modify Class") : _("Add Class"));
+ op = cgiGetVariable("OP");
name = cgiGetVariable("PRINTER_NAME");
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
request = ippNewRequest(CUPS_GET_PRINTERS);
+ ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type",
+ CUPS_PRINTER_LOCAL);
+ ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask",
+ CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE);
+
/*
* Do the request and get back a response...
*/
+ cgiClearVariables();
+ if (op)
+ cgiSetVariable("OP", op);
+ if (name)
+ cgiSetVariable("PRINTER_NAME", name);
+
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
/*
if (attr->name && !strcmp(attr->name, "printer-uri-supported"))
{
if ((ptr = strrchr(attr->values[0].string.text, '/')) != NULL &&
- (!name || strcasecmp(name, ptr + 1)))
+ (!name || _cups_strcasecmp(name, ptr + 1)))
{
/*
* Don't show the current class...
attr = attr->next)
if (attr->name && !strcmp(attr->name, "printer-name"))
{
- if (!name || strcasecmp(name, attr->values[0].string.text))
+ if (!name || _cups_strcasecmp(name, attr->values[0].string.text))
{
/*
* Don't show the current class...
{
for (j = 0; j < num_printers; j ++)
{
- if (!strcasecmp(attr->values[i].string.text,
+ if (!_cups_strcasecmp(attr->values[i].string.text,
cgiGetArray("MEMBER_NAMES", j)))
{
cgiSetArray("MEMBER_SELECTED", j, "SELECTED");
return;
}
+ if (!name)
+ {
+ cgiStartHTML(title);
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
+ cgiCopyTemplateLang("error.tmpl");
+ cgiEndHTML();
+ return;
+ }
+
for (ptr = name; *ptr; ptr ++)
if ((*ptr >= 0 && *ptr <= ' ') || *ptr == 127 || *ptr == '/' || *ptr == '#')
break;
request = ippNewRequest(CUPS_ADD_CLASS);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
- "localhost", 0, "/classes/%s",
- cgiGetVariable("PRINTER_NAME"));
+ "localhost", 0, "/classes/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris",
num_printers, NULL, NULL);
for (i = 0; i < num_printers; i ++)
- attr->values[i].string.text = strdup(cgiGetArray("MEMBER_URIS", i));
+ attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i));
}
/*
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(title);
- cgiShowIPPError(modify ? _("Unable to modify class:") :
- _("Unable to add class:"));
+ cgiShowIPPError(modify ? _("Unable to modify class") :
+ _("Unable to add class"));
}
else
{
*makeptr = '\0';
else if ((makeptr = strchr(make, '-')) != NULL)
*makeptr = '\0';
- else if (!strncasecmp(make, "laserjet", 8) ||
- !strncasecmp(make, "deskjet", 7) ||
- !strncasecmp(make, "designjet", 9))
- strcpy(make, "HP");
- else if (!strncasecmp(make, "phaser", 6))
- strcpy(make, "Xerox");
- else if (!strncasecmp(make, "stylus", 6))
- strcpy(make, "Epson");
+ else if (!_cups_strncasecmp(make, "laserjet", 8) ||
+ !_cups_strncasecmp(make, "deskjet", 7) ||
+ !_cups_strncasecmp(make, "designjet", 9))
+ strlcpy(make, "HP", sizeof(make));
+ else if (!_cups_strncasecmp(make, "phaser", 6))
+ strlcpy(make, "Xerox", sizeof(make));
+ else if (!_cups_strncasecmp(make, "stylus", 6))
+ strlcpy(make, "Epson", sizeof(make));
else
- strcpy(make, "Generic");
+ strlcpy(make, "Generic", sizeof(make));
if (!cgiGetVariable("CURRENT_MAKE"))
cgiSetVariable("CURRENT_MAKE", make);
- cgiSetVariable("PPD_MAKE", make);
-
if (!cgiGetVariable("CURRENT_MAKE_AND_MODEL"))
cgiSetVariable("CURRENT_MAKE_AND_MODEL", uriptr);
if (isalnum(*uriptr & 255) || *uriptr == '_' || *uriptr == '-' ||
*uriptr == '.')
*tptr++ = *uriptr;
- else if ((*uriptr == ' ' || *uriptr == '/') && tptr[-1] != '_')
+ else if ((*uriptr == ' ' || *uriptr == '/') && tptr > template &&
+ tptr[-1] != '_')
*tptr++ = '_';
else if (*uriptr == '?' || *uriptr == '(')
break;
}
/*
- * Prime the page with the current device listed...
- */
-
- cgiStartMultipart();
- cgiStartHTML(title);
- cgiCopyTemplateLang("choose-device.tmpl");
- cgiEndHTML();
- fflush(stdout);
-
- /*
- * Scan for devices for up to 30 seconds, updating the page as we find
- * them...
+ * Scan for devices for up to 30 seconds...
*/
fputs("DEBUG: Getting list of devices...\n", stderr);
- time(&last_device_time);
current_device = 0;
- if (cupsGetDevices(http, 30, NULL, (cups_device_cb_t)choose_device_cb,
- (void *)title) == IPP_OK)
+ if (cupsGetDevices(http, 5, CUPS_INCLUDE_ALL, CUPS_EXCLUDE_NONE,
+ (cups_device_cb_t)choose_device_cb,
+ (void *)title) == IPP_OK)
+ {
fputs("DEBUG: Got device list!\n", stderr);
+
+ if (cgiSupportsMultipart())
+ cgiStartMultipart();
+
+ cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
+ cgiStartHTML(title);
+ cgiCopyTemplateLang("choose-device.tmpl");
+ cgiEndHTML();
+
+ if (cgiSupportsMultipart())
+ cgiEndMultipart();
+ }
else
+ {
fprintf(stderr,
"ERROR: CUPS-Get-Devices request failed with status %x: %s\n",
cupsLastError(), cupsLastErrorString());
-
- /*
- * Show the final selection page...
- */
-
- cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
- cgiStartHTML(title);
- cgiCopyTemplateLang("choose-device.tmpl");
- cgiEndHTML();
- cgiEndMultipart();
+ if (cupsLastError() == IPP_NOT_AUTHORIZED)
+ {
+ puts("Status: 401\n");
+ exit(0);
+ }
+ else
+ {
+ cgiStartHTML(title);
+ cgiShowIPPError(modify ? _("Unable to modify printer") :
+ _("Unable to add printer"));
+ cgiEndHTML();
+ return;
+ }
+ }
}
- else if (strchr(var, '/') == NULL)
+ else if (!strchr(var, '/') ||
+ (!strncmp(var, "lpd://", 6) && !strchr(var + 6, '/')))
{
if ((attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
{
if ((attr = ippFindAttribute(oldinfo, "printer-location",
IPP_TAG_TEXT)) != NULL)
cgiSetVariable("PRINTER_LOCATION", attr->values[0].string.text);
+
+ if ((attr = ippFindAttribute(oldinfo, "printer-is-shared",
+ IPP_TAG_BOOLEAN)) != NULL)
+ cgiSetVariable("PRINTER_IS_SHARED",
+ attr->values[0].boolean ? "1" : "0");
}
cgiCopyTemplateLang("modify-printer.tmpl");
return;
}
- else if (!file && !cgiGetVariable("PPD_NAME"))
+ else if (!file &&
+ (!cgiGetVariable("PPD_NAME") || cgiGetVariable("SELECT_MAKE")))
{
- if (modify)
+ if (modify && !cgiGetVariable("SELECT_MAKE"))
{
/*
* Get the PPD file...
char filename[1024]; /* PPD filename */
ppd_file_t *ppd; /* PPD information */
char buffer[1024]; /* Buffer */
- int bytes; /* Number of bytes */
+ ssize_t bytes; /* Number of bytes */
http_status_t get_status; /* Status of GET */
if (get_status != HTTP_OK)
{
+ httpFlush(http);
+
fprintf(stderr, "ERROR: Unable to get PPD file %s: %d - %s\n",
uri, get_status, httpStatus(get_status));
}
else if ((fd = cupsTempFd(filename, sizeof(filename))) >= 0)
{
while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0)
- write(fd, buffer, bytes);
+ write(fd, buffer, (size_t)bytes);
close(fd);
}
else
{
+ int linenum; /* Line number */
+
fprintf(stderr, "ERROR: Unable to open PPD file %s: %s\n",
- filename, ppdErrorString(ppdLastError(&bytes)));
+ filename, ppdErrorString(ppdLastError(&linenum)));
}
}
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, "ipp://localhost/printers/");
- if ((var = cgiGetVariable("CURRENT_MAKE")) == NULL)
- var = cgiGetVariable("PPD_MAKE");
- if (var)
+ if ((var = cgiGetVariable("PPD_MAKE")) == NULL)
+ var = cgiGetVariable("CURRENT_MAKE");
+ if (var && !cgiGetVariable("SELECT_MAKE"))
{
+ const char *make_model; /* Make and model */
+
+
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT,
"ppd-make", NULL, var);
- if ((var = cgiGetVariable("CURRENT_MAKE_AND_MODEL")) != NULL)
+ if ((make_model = cgiGetVariable("CURRENT_MAKE_AND_MODEL")) != NULL)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT,
- "ppd-make-and-model", NULL, var);
+ "ppd-make-and-model", NULL, make_model);
}
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
* Got the list of PPDs, see if the user has selected a make...
*/
- if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0)
+ if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0 && !modify)
{
/*
* No PPD files with this make, try again with all makes...
*/
cgiStartHTML(title);
- cgiSetVariable("CURRENT_MAKE_AND_MODEL",
- cgiGetArray("PPD_MAKE_AND_MODEL", 0));
+ if (!cgiGetVariable("PPD_MAKE"))
+ cgiSetVariable("PPD_MAKE", cgiGetVariable("CURRENT_MAKE"));
+ if (!modify)
+ cgiSetVariable("CURRENT_MAKE_AND_MODEL",
+ cgiGetArray("PPD_MAKE_AND_MODEL", 0));
cgiCopyTemplateLang("choose-model.tmpl");
cgiEndHTML();
}
else
{
cgiStartHTML(title);
- cgiShowIPPError(_("Unable to get list of printer drivers:"));
+ cgiShowIPPError(_("Unable to get list of printer drivers"));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
}
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
- NULL, cgiGetVariable("PRINTER_LOCATION"));
-
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
- NULL, cgiGetVariable("PRINTER_INFO"));
-
if (!file)
{
var = cgiGetVariable("PPD_NAME");
if (strcmp(var, "__no_change__"))
- ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
NULL, var);
}
+ ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
+ NULL, cgiGetVariable("PRINTER_LOCATION"));
+
+ ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
+ NULL, cgiGetVariable("PRINTER_INFO"));
+
strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
/*
if ((uriptr = strchr(uri, '?')) == NULL)
uriptr = uri + strlen(uri);
- snprintf(uriptr, sizeof(uri) - (uriptr - uri),
+ snprintf(uriptr, sizeof(uri) - (size_t)(uriptr - uri),
"?baud=%s+bits=%s+parity=%s+flow=%s",
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(title);
- cgiShowIPPError(modify ? _("Unable to modify printer:") :
- _("Unable to add printer:"));
+ cgiShowIPPError(modify ? _("Unable to modify printer") :
+ _("Unable to add printer"));
}
else if (modify)
{
if (id <= 0)
{
- cgiSetVariable("ERROR", cgiText(_("Bad subscription ID!")));
+ cgiSetVariable("ERROR", cgiText(_("Bad subscription ID")));
cgiStartHTML(_("Cancel RSS Subscription"));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(_("Cancel RSS Subscription"));
- cgiShowIPPError(_("Unable to cancel RSS subscription:"));
+ cgiShowIPPError(_("Unable to cancel RSS subscription"));
}
else
{
int advanced, /* Advanced settings shown? */
changed; /* Have settings changed? */
const char *debug_logging, /* DEBUG_LOGGING value */
+ *preserve_jobs = NULL,
+ /* PRESERVE_JOBS 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 value */
- *browse_web_if, /* BrowseWebIF value */
- *preserve_job_history,
+ *browse_web_if = NULL,
+ /* BrowseWebIF value */
+ *preserve_job_history = NULL,
/* PreserveJobHistory value */
- *preserve_job_files,
+ *preserve_job_files = NULL,
/* PreserveJobFiles value */
- *max_clients, /* MaxClients value */
- *max_jobs, /* MaxJobs value */
- *max_log_size; /* MaxLogSize value */
- char local_protocols[255],
- /* BrowseLocalProtocols */
- remote_protocols[255];
- /* BrowseRemoteProtocols */
+ *max_clients = NULL,
+ /* MaxClients value */
+ *max_jobs = NULL,
+ /* MaxJobs value */
+ *max_log_size = NULL;
+ /* MaxLogSize value */
const char *current_browse_web_if,
/* BrowseWebIF value */
*current_preserve_job_history,
/* MaxClients value */
*current_max_jobs,
/* MaxJobs value */
- *current_max_log_size,
+ *current_max_log_size;
/* MaxLogSize value */
- *current_local_protocols,
- /* BrowseLocalProtocols */
- *current_remote_protocols;
- /* BrowseRemoteProtocols */
#ifdef HAVE_GSSAPI
char default_auth_type[255];
/* DefaultAuthType value */
- const char *val; /* Setting value */
+ const char *val; /* Setting value */
#endif /* HAVE_GSSAPI */
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";
*/
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_clients = cgiGetVariable("MAX_CLIENTS");
- max_jobs = cgiGetVariable("MAX_JOBS");
max_log_size = cgiGetVariable("MAX_LOG_SIZE");
+ preserve_jobs = cgiGetVariable("PRESERVE_JOBS");
- if (!max_clients || atoi(max_clients) <= 0)
- max_clients = "100";
-
- 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 (preserve_jobs)
{
- if (local_protocols[0])
- strcat(local_protocols, " dnssd");
- else
- strcat(local_protocols, "dnssd");
- }
-#endif /* HAVE_DNSSD */
+ max_jobs = cgiGetVariable("MAX_JOBS");
+ preserve_job_history = cgiGetVariable("PRESERVE_JOB_HISTORY");
+ preserve_job_files = cgiGetVariable("PRESERVE_JOB_FILES");
-#ifdef HAVE_LDAP
- if (cgiGetVariable("BROWSE_LOCAL_LDAP"))
- {
- if (local_protocols[0])
- strcat(local_protocols, " ldap");
- else
- strcat(local_protocols, "ldap");
- }
-#endif /* HAVE_LDAP */
+ if (!max_jobs || atoi(max_jobs) < 0)
+ max_jobs = "500";
-#ifdef HAVE_LIBSLP
- if (cgiGetVariable("BROWSE_LOCAL_SLP"))
- {
- if (local_protocols[0])
- strcat(local_protocols, " slp");
- else
- strcat(local_protocols, "slp");
+ if (!preserve_job_history)
+ preserve_job_history = "On";
+
+ if (!preserve_job_files)
+ preserve_job_files = "1d";
}
-#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");
+ max_jobs = "0";
+ preserve_job_history = "No";
+ preserve_job_files = "No";
}
-#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 */
+ if (!max_clients || atoi(max_clients) <= 0)
+ max_clients = "100";
+
+ if (!max_log_size || atoi(max_log_size) <= 0.0)
+ max_log_size = "1m";
}
/*
{
cgiStartHTML(cgiText(_("Change Settings")));
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to change server settings:")));
+ cgiText(_("Unable to change server settings")));
cgiSetVariable("ERROR", cupsLastErrorString());
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
{
val = cupsGetOption("DefaultAuthType", num_settings, settings);
- if (!val || !strcasecmp(val, "Negotiate"))
+ if (!val || !_cups_strcasecmp(val, "Negotiate"))
strlcpy(default_auth_type, "Basic", sizeof(default_auth_type));
else
strlcpy(default_auth_type, val, sizeof(default_auth_type));
if ((current_preserve_job_files = cupsGetOption("PreserveJobFiles",
num_settings,
settings)) == NULL)
- current_preserve_job_files = "No";
+ current_preserve_job_files = "1d";
if ((current_max_clients = cupsGetOption("MaxClients", num_settings,
settings)) == NULL)
settings)) == NULL)
current_max_log_size = "1m";
- if ((current_local_protocols = cupsGetOption("BrowseLocalProtocols",
- num_settings,
- settings)) == NULL)
- current_local_protocols = CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS;
-
- if ((current_remote_protocols = cupsGetOption("BrowseRemoteProtocols",
- num_settings,
- settings)) == NULL)
- current_remote_protocols = CUPS_DEFAULT_BROWSE_REMOTE_PROTOCOLS;
-
/*
* See if the settings have changed...
*/
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
num_settings, settings));
if (advanced && !changed)
- changed = strcasecmp(local_protocols, current_local_protocols) ||
- strcasecmp(remote_protocols, current_remote_protocols) ||
- strcasecmp(browse_web_if, current_browse_web_if) ||
- strcasecmp(preserve_job_history, current_preserve_job_history) ||
- strcasecmp(preserve_job_files, current_preserve_job_files) ||
- strcasecmp(max_clients, current_max_clients) ||
- strcasecmp(max_jobs, current_max_jobs) ||
- strcasecmp(max_log_size, current_max_log_size);
+ changed = _cups_strcasecmp(browse_web_if, current_browse_web_if) ||
+ _cups_strcasecmp(preserve_job_history, current_preserve_job_history) ||
+ _cups_strcasecmp(preserve_job_files, current_preserve_job_files) ||
+ _cups_strcasecmp(max_clients, current_max_clients) ||
+ _cups_strcasecmp(max_jobs, current_max_jobs) ||
+ _cups_strcasecmp(max_log_size, current_max_log_size);
if (changed)
{
remote_admin, num_settings, &settings);
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY,
remote_any, num_settings, &settings);
- num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS,
- remote_printers, num_settings, &settings);
num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS,
share_printers, num_settings, &settings);
num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY,
* Add advanced settings...
*/
- if (strcasecmp(local_protocols, current_local_protocols))
- num_settings = cupsAddOption("BrowseLocalProtocols", local_protocols,
- num_settings, &settings);
- if (strcasecmp(remote_protocols, current_remote_protocols))
- num_settings = cupsAddOption("BrowseRemoteProtocols", remote_protocols,
- num_settings, &settings);
- if (strcasecmp(browse_web_if, current_browse_web_if))
+ if (_cups_strcasecmp(browse_web_if, current_browse_web_if))
num_settings = cupsAddOption("BrowseWebIF", browse_web_if,
num_settings, &settings);
- if (strcasecmp(preserve_job_history, current_preserve_job_history))
+ if (_cups_strcasecmp(preserve_job_history, current_preserve_job_history))
num_settings = cupsAddOption("PreserveJobHistory",
preserve_job_history, num_settings,
&settings);
- if (strcasecmp(preserve_job_files, current_preserve_job_files))
+ if (_cups_strcasecmp(preserve_job_files, current_preserve_job_files))
num_settings = cupsAddOption("PreserveJobFiles", preserve_job_files,
num_settings, &settings);
- if (strcasecmp(max_clients, current_max_clients))
+ if (_cups_strcasecmp(max_clients, current_max_clients))
num_settings = cupsAddOption("MaxClients", max_clients, num_settings,
&settings);
- if (strcasecmp(max_jobs, current_max_jobs))
+ if (_cups_strcasecmp(max_jobs, current_max_jobs))
num_settings = cupsAddOption("MaxJobs", max_jobs, num_settings,
&settings);
- if (strcasecmp(max_log_size, current_max_log_size))
+ if (_cups_strcasecmp(max_log_size, current_max_log_size))
num_settings = cupsAddOption("MaxLogSize", max_log_size, num_settings,
&settings);
}
cgiStartHTML(cgiText(_("Change Settings")));
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to change server settings:")));
+ cgiText(_("Unable to change server settings")));
cgiSetVariable("ERROR", cupsLastErrorString());
cgiCopyTemplateLang("error.tmpl");
}
else
{
if (advanced)
- cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect&URL=/admin/?ADVANCEDSETTINGS=YES");
+ cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect&"
+ "URL=/admin/?ADVANCEDSETTINGS=YES");
else
cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
cgiStartHTML(cgiText(_("Change Settings")));
if ((tempfd = cupsTempFd(tempfile, sizeof(tempfile))) < 0)
{
cgiStartHTML(cgiText(_("Edit Configuration File")));
- cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file:")));
+ cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file")));
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
-
+
perror(tempfile);
return;
}
if ((temp = cupsFileOpenFd(tempfd, "w")) == NULL)
{
cgiStartHTML(cgiText(_("Edit Configuration File")));
- cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file:")));
+ cgiSetVariable("MESSAGE", cgiText(_("Unable to create temporary file")));
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
-
+
perror(tempfile);
close(tempfd);
unlink(tempfile);
if ((end = strstr(start, "\n")) == NULL)
end = start + strlen(start);
- cupsFileWrite(temp, start, end - start);
+ cupsFileWrite(temp, start, (size_t)(end - start));
cupsFilePutChar(temp, '\n');
if (*end == '\r')
else if (status != HTTP_CREATED)
{
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to upload cupsd.conf file:")));
+ cgiText(_("Unable to upload cupsd.conf file")));
cgiSetVariable("ERROR", httpStatus(status));
cgiStartHTML(cgiText(_("Edit Configuration File")));
{
cgiStartHTML(cgiText(_("Edit Configuration File")));
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to access cupsd.conf file:")));
+ cgiText(_("Unable to access cupsd.conf file")));
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
{
cgiStartHTML(cgiText(_("Edit Configuration File")));
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to access cupsd.conf file:")));
+ cgiText(_("Unable to access cupsd.conf file")));
cgiSetVariable("ERROR",
cgiText(_("Unable to edit cupsd.conf files larger than "
- "1MB!")));
+ "1MB")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
cgiStartHTML(cgiText(_("Edit Configuration File")));
cgiSetVariable("MESSAGE",
- cgiText(_("Unable to access cupsd.conf file:")));
+ cgiText(_("Unable to access cupsd.conf file")));
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
* Allocate memory and load the file into a string buffer...
*/
- if ((buffer = calloc(1, info.st_size + 1)) != NULL)
+ if ((buffer = calloc(1, (size_t)info.st_size + 1)) != NULL)
{
- cupsFileRead(cupsd, buffer, info.st_size);
+ cupsFileRead(cupsd, buffer, (size_t)info.st_size);
cgiSetVariable("CUPSDCONF", buffer);
free(buffer);
}
if (!stat(filename, &info) && info.st_size < (1024 * 1024) &&
(cupsd = cupsFileOpen(filename, "r")) != NULL)
{
- if ((buffer = calloc(1, 2 * info.st_size + 1)) != NULL)
+ if ((buffer = calloc(1, 2 * (size_t)info.st_size + 1)) != NULL)
{
bufend = buffer + 2 * info.st_size - 1;
if (ch == '\\' || ch == '\"')
{
*bufptr++ = '\\';
- *bufptr++ = ch;
+ *bufptr++ = (char)ch;
}
else if (ch == '\n')
{
*bufptr++ = 't';
}
else if (ch >= ' ')
- *bufptr++ = ch;
+ *bufptr++ = (char)ch;
}
*bufptr = '\0';
else
{
cgiStartHTML(cgiText(_("Delete Class")));
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
return;
cgiStartHTML(cgiText(_("Delete Class")));
if (cupsLastError() > IPP_OK_CONFLICT)
- cgiShowIPPError(_("Unable to delete class:"));
+ cgiShowIPPError(_("Unable to delete class"));
else
cgiCopyTemplateLang("class-deleted.tmpl");
else
{
cgiStartHTML(cgiText(_("Delete Printer")));
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
return;
cgiStartHTML(cgiText(_("Delete Printer")));
if (cupsLastError() > IPP_OK_CONFLICT)
- cgiShowIPPError(_("Unable to delete printer:"));
+ cgiShowIPPError(_("Unable to delete printer"));
else
cgiCopyTemplateLang("printer-deleted.tmpl");
"printer-type", 0);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM,
- "printer-type-mask", CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE |
- CUPS_PRINTER_IMPLICIT);
+ "printer-type-mask", CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-name");
dest = cgiGetArray("PRINTER_NAME", i);
for (j = 0; j < export_count; j ++)
- if (!strcasecmp(dest, cgiGetArray("EXPORT_NAME", j)))
+ if (!_cups_strcasecmp(dest, cgiGetArray("EXPORT_NAME", j)))
break;
cgiSetArray("PRINTER_EXPORT", i, j < export_count ? "Y" : "");
else if (username && !*username)
cgiSetVariable("ERROR",
cgiText(_("A Samba username is required to export "
- "printer drivers!")));
+ "printer drivers")));
else if (username && (!password || !*password))
cgiSetVariable("ERROR",
cgiText(_("A Samba password is required to export "
- "printer drivers!")));
+ "printer drivers")));
/*
* Show form...
attr;
attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI))
{
- cupsArrayAdd(printer_devices, strdup(attr->values[0].string.text));
+ cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text));
}
/*
*/
if (device_info && device_make_and_model && device_uri &&
- strcasecmp(device_make_and_model, "unknown") &&
+ _cups_strcasecmp(device_make_and_model, "unknown") &&
strchr(device_uri, ':'))
{
/*
* suitable name.
*/
- if (strncasecmp(device_info, "unknown", 7))
+ if (_cups_strncasecmp(device_info, "unknown", 7))
ptr = device_info;
else if ((ptr = strstr(device_uri, "://")) != NULL)
ptr += 3;
if (isalnum(*ptr & 255) || *ptr == '_' || *ptr == '-' ||
*ptr == '.')
*option_ptr++ = *ptr;
- else if ((*ptr == ' ' || *ptr == '/') && option_ptr[-1] != '_')
+ else if ((*ptr == ' ' || *ptr == '/') && option_ptr > option &&
+ option_ptr[-1] != '_')
*option_ptr++ = '_';
else if (*ptr == '?' || *ptr == '(')
break;
for (printer_device = (char *)cupsArrayFirst(printer_devices);
printer_device;
printer_device = (char *)cupsArrayNext(printer_devices))
- free(printer_device);
+ _cupsStrFree(printer_device);
cupsArrayDelete(printer_devices);
}
settings)) != NULL && atoi(val))
cgiSetVariable("REMOTE_ANY", "CHECKED");
- if ((val = cupsGetOption(CUPS_SERVER_REMOTE_PRINTERS, num_settings,
- settings)) != NULL && atoi(val))
- cgiSetVariable("REMOTE_PRINTERS", "CHECKED");
-
if ((val = cupsGetOption(CUPS_SERVER_SHARE_PRINTERS, num_settings,
settings)) != NULL && atoi(val))
cgiSetVariable("SHARE_PRINTERS", "CHECKED");
cgiSetVariable("HAVE_GSSAPI", "1");
if ((val = cupsGetOption("DefaultAuthType", num_settings,
- settings)) != NULL && !strcasecmp(val, "Negotiate"))
+ settings)) != NULL && !_cups_strcasecmp(val, "Negotiate"))
cgiSetVariable("KERBEROS", "CHECKED");
+ else
#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");
+ cgiSetVariable("KERBEROS", "");
if ((val = cupsGetOption("BrowseWebIF", num_settings,
settings)) == NULL)
val = "No";
- if (!strcasecmp(val, "yes") || !strcasecmp(val, "on") ||
- !strcasecmp(val, "true"))
+ if (!_cups_strcasecmp(val, "yes") || !_cups_strcasecmp(val, "on") ||
+ !_cups_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"))
+ if (val &&
+ (!_cups_strcasecmp(val, "0") || !_cups_strcasecmp(val, "no") ||
+ !_cups_strcasecmp(val, "off") || !_cups_strcasecmp(val, "false") ||
+ !_cups_strcasecmp(val, "disabled")))
+ {
+ cgiSetVariable("PRESERVE_JOB_HISTORY", "0");
+ cgiSetVariable("PRESERVE_JOB_FILES", "0");
+ }
+ else
{
- cgiSetVariable("PRESERVE_JOB_HISTORY", "CHECKED");
+ cgiSetVariable("PRESERVE_JOBS", "CHECKED");
+ cgiSetVariable("PRESERVE_JOB_HISTORY", val);
if ((val = cupsGetOption("PreserveJobFiles", num_settings,
settings)) == NULL)
- val = "No";
+ val = "1d";
+
+ cgiSetVariable("PRESERVE_JOB_FILES", val);
- if (!strcasecmp(val, "yes") || !strcasecmp(val, "on") ||
- !strcasecmp(val, "true"))
- cgiSetVariable("PRESERVE_JOB_FILES", "CHECKED");
}
if ((val = cupsGetOption("MaxClients", num_settings, settings)) == NULL)
if (!printer)
{
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiStartHTML(cgiText(_("Set Allowed Users")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
exit(0);
}
else if (cupsLastError() > IPP_OK_CONFLICT)
- cgiShowIPPError(_("Unable to get printer attributes:"));
+ cgiShowIPPError(_("Unable to get printer attributes"));
else
cgiCopyTemplateLang("users.tmpl");
* Add the name...
*/
- attr->values[i].string.text = strdup(ptr);
+ attr->values[i].string.text = _cupsStrAlloc(ptr);
/*
* Advance to the next name...
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(cgiText(_("Set Allowed Users")));
- cgiShowIPPError(_("Unable to change printer:"));
+ cgiShowIPPError(_("Unable to change printer"));
}
else
{
if (!printer)
{
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiStartHTML(title);
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(title);
- cgiShowIPPError(_("Unable to set server default:"));
+ cgiShowIPPError(_("Unable to set server default"));
}
else
{
printer);
else
{
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiStartHTML(title);
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
if ((ppd = ppdOpenFile(filename)) == NULL)
{
cgiSetVariable("ERROR", ppdErrorString(ppdLastError(&i)));
- cgiSetVariable("MESSAGE", cgiText(_("Unable to open PPD file:")));
+ cgiSetVariable("MESSAGE", cgiText(_("Unable to open PPD file")));
cgiStartHTML(title);
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
for (option = ppdFirstOption(ppd);
option;
option = ppdNextOption(ppd))
+ {
if ((var = cgiGetVariable(option->keyword)) != NULL)
{
have_options = 1;
ppdMarkOption(ppd, option->keyword, var);
+ fprintf(stderr, "DEBUG: Set %s to %s...\n", option->keyword, var);
}
+ else
+ fprintf(stderr, "DEBUG: Didn't find %s...\n", option->keyword);
+ }
}
if (!have_options || ppdConflicts(ppd))
((ppdattr = ppdFindAttr(ppd, "cupsCommands", NULL)) != NULL &&
ppdattr->value && strstr(ppdattr->value, "AutoConfigure")))
cgiSetVariable("HAVE_AUTOCONFIGURE", "YES");
- else
+ else
{
for (i = 0; i < ppd->num_filters; i ++)
if (!strncmp(ppd->filters[i], "application/vnd.cups-postscript", 31))
{
cgiSetArray("ckeyword", k, option->keyword);
cgiSetArray("ckeytext", k, option->text);
+
+ for (m = 0; m < option->num_choices; m ++)
+ {
+ if (option->choices[m].marked)
+ {
+ cgiSetArray("cchoice", k, option->choices[m].text);
+ break;
+ }
+ }
+
k ++;
}
i > 0;
i --, group ++)
{
+ for (j = group->num_options, option = group->options;
+ j > 0;
+ j --, option ++)
+ {
+ if (!strcmp(option->keyword, "PageRegion"))
+ continue;
+
+ if (option->num_choices > 1)
+ break;
+ }
+
+ if (j == 0)
+ continue;
+
cgiSetVariable("GROUP_ID", group->name);
if (!strcmp(group->name, "InstallableOptions"))
cgiSetVariable("GROUP", group->text);
cgiCopyTemplateLang("option-header.tmpl");
-
+
for (j = group->num_options, option = group->options;
j > 0;
j --, option ++)
{
- if (!strcmp(option->keyword, "PageRegion"))
+ if (!strcmp(option->keyword, "PageRegion") || option->num_choices < 2)
continue;
cgiSetVariable("KEYWORD", option->keyword);
{
const char *units = NULL; /* Units value, if any */
-
cgiSetVariable("ISCUSTOM", "1");
for (cparam = ppdFirstCustomParam(coption), m = 0;
cparam;
cparam = ppdNextCustomParam(coption), m ++)
{
- if (!strcasecmp(option->keyword, "PageSize") &&
- strcasecmp(cparam->name, "Width") &&
- strcasecmp(cparam->name, "Height"))
+ if (!_cups_strcasecmp(option->keyword, "PageSize") &&
+ _cups_strcasecmp(cparam->name, "Width") &&
+ _cups_strcasecmp(cparam->name, "Height"))
{
m --;
continue;
switch (cparam->type)
{
case PPD_CUSTOM_POINTS :
- if (!strncasecmp(option->defchoice, "Custom.", 7))
+ if (!_cups_strncasecmp(option->defchoice, "Custom.", 7))
{
units = option->defchoice + strlen(option->defchoice) - 2;
attr = ippFindAttribute(response, "job-sheets-default", IPP_TAG_ZERO);
cgiSetVariable("KEYWORD", "job_sheets_start");
- cgiSetVariable("KEYTEXT", cgiText(_("Starting Banner")));
+ cgiSetVariable("KEYTEXT",
+ /* TRANSLATORS: Banner/cover sheet before the print job. */
+ cgiText(_("Starting Banner")));
cgiSetVariable("DEFCHOICE", attr != NULL ?
attr->values[0].string.text : "");
cgiCopyTemplateLang("option-pickone.tmpl");
cgiSetVariable("KEYWORD", "job_sheets_end");
- cgiSetVariable("KEYTEXT", cgiText(_("Ending Banner")));
+ cgiSetVariable("KEYTEXT",
+ /* TRANSLATORS: Banner/cover sheet after the print job. */
+ cgiText(_("Ending Banner")));
cgiSetVariable("DEFCHOICE", attr != NULL && attr->num_values > 1 ?
attr->values[1].string.text : "");
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(title);
- cgiShowIPPError(_("Unable to set options:"));
+ cgiShowIPPError(_("Unable to set options"));
}
else
{
if (!printer || !shared)
{
- cgiSetVariable("ERROR", cgiText(_("Missing form variable!")));
+ cgiSetVariable("ERROR", cgiText(_("Missing form variable")));
cgiStartHTML(cgiText(_("Set Publishing")));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
- ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", atoi(shared));
+ ippAddBoolean(request, IPP_TAG_OPERATION, "printer-is-shared", (char)atoi(shared));
/*
* Do the request and get back a response...
else if (cupsLastError() > IPP_OK_CONFLICT)
{
cgiStartHTML(cgiText(_("Set Publishing")));
- cgiShowIPPError(_("Unable to change printer-is-shared attribute:"));
+ cgiShowIPPError(_("Unable to change printer-is-shared attribute"));
}
else
{
return (NULL);
}
- else if (strcasecmp(val, "Custom") ||
+ else if (_cups_strcasecmp(val, "Custom") ||
(coption = ppdFindCustomOption(ppd, name)) == NULL)
{
/*
snprintf(buffer, bufsize, "Custom.%gx%g%s", width, length, uval);
}
- else if (cupsArrayCount(coption->params) == 1)
+ else if (cupsArrayCount(coption->params) == 1)
{
cparam = ppdFirstCustomParam(coption);
snprintf(keyword, sizeof(keyword), "%s.%s", coption->keyword, cparam->name);
if ((val = cgiGetVariable(keyword)) == NULL)
return (NULL);
- snprintf(bufptr, bufend - bufptr, "%s%s=", prefix, cparam->name);
+ snprintf(bufptr, (size_t)(bufend - bufptr), "%s%s=", prefix, cparam->name);
bufptr += strlen(bufptr);
prefix = " ";
number > cparam->maximum.custom_real)
return (NULL);
- snprintf(bufptr, bufend - bufptr, "%g", number);
+ snprintf(bufptr, (size_t)(bufend - bufptr), "%g", number);
break;
case PPD_CUSTOM_INT :
integer > cparam->maximum.custom_int)
return (NULL);
- snprintf(bufptr, bufend - bufptr, "%ld", integer);
+ snprintf(bufptr, (size_t)(bufend - bufptr), "%ld", integer);
break;
case PPD_CUSTOM_POINTS :
number_points > cparam->maximum.custom_points)
return (NULL);
- snprintf(bufptr, bufend - bufptr, "%g%s", number, uval);
+ snprintf(bufptr, (size_t)(bufend - bufptr), "%g%s", number, uval);
break;
case PPD_CUSTOM_PASSCODE :
if (bufptr == buffer || (bufend - bufptr) < 2)
return (NULL);
- strcpy(bufptr, "}");
+ memcpy(bufptr, "}", 2);
}
return (buffer);
/*
- * End of "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $".
+ * End of "$Id$".
*/