#include <cups/adminutil.h>
#include <cups/string.h>
#include <cups/i18n.h>
static void usage(const char *opt);
int
main(int argc,
char *argv[])
{
int i,
num_settings;
cups_option_t *settings;
const char *opt;
http_t *http;
_cupsSetLocale(argv);
num_settings = 0;
settings = NULL;
for (i = 1; i < argc; i ++)
{
if (argv[i][0] == '-')
{
if (argv[i][1] == '-')
{
if (!strcmp(argv[i], "--debug-logging"))
num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-debug-logging"))
num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "0",
num_settings, &settings);
else if (!strcmp(argv[i], "--remote-admin"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-remote-admin"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "0",
num_settings, &settings);
else if (!strcmp(argv[i], "--remote-any"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-remote-any"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "0",
num_settings, &settings);
else if (!strcmp(argv[i], "--remote-printers"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-remote-printers"))
num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS, "0",
num_settings, &settings);
else if (!strcmp(argv[i], "--share-printers"))
num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-share-printers"))
num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "0",
num_settings, &settings);
else if (!strcmp(argv[i], "--user-cancel-any"))
num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "1",
num_settings, &settings);
else if (!strcmp(argv[i], "--no-user-cancel-any"))
num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "0",
num_settings, &settings);
else
usage(argv[i]);
}
else
{
for (opt = argv[i] + 1; *opt; opt ++)
switch (*opt)
{
case 'E' :
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
break;
case 'U' :
i ++;
if (i >= argc)
usage(NULL);
cupsSetUser(argv[i]);
break;
case 'h' :
i ++;
if (i >= argc)
usage(NULL);
cupsSetServer(argv[i]);
break;
default :
usage(opt);
break;
}
}
}
else if (strchr(argv[i], '='))
num_settings = cupsParseOptions(argv[i], num_settings, &settings);
else
usage(argv[i]);
}
http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
if (num_settings > 0)
{
if (!cupsAdminSetServerSettings(http, num_settings, settings))
{
_cupsLangPrintf(stderr, "cupsctl: %s\n", cupsLastErrorString());
return (1);
}
}
else if (!cupsAdminGetServerSettings(http, &num_settings, &settings))
{
_cupsLangPrintf(stderr, "cupsctl: %s\n", cupsLastErrorString());
return (1);
}
else
{
for (i = 0; i < num_settings; i ++)
_cupsLangPrintf(stdout, "%s=%s\n", settings[i].name, settings[i].value);
}
cupsFreeOptions(num_settings, settings);
return (0);
}
static void
usage(const char *opt)
{
if (opt)
{
if (*opt == '-')
_cupsLangPrintf(stderr, _("cupsctl: Unknown option \"%s\"!\n"), opt);
else
_cupsLangPrintf(stderr, _("cupsctl: Unknown option \"-%c\"!\n"), *opt);
}
_cupsLangPuts(stdout,
_("Usage: cupsctl [options] [param=value ... paramN=valueN]\n"
"\n"
"Options:\n"
"\n"
" -E Enable encryption\n"
" -U username Specify username\n"
" -h server[:port] Specify server address\n"
"\n"
" --[no-]debug-logging Turn debug logging on/off\n"
" --[no-]remote-admin Turn remote administration "
"on/off\n"
" --[no-]remote-any Allow/prevent access from the "
"Internet\n"
" --[no-]remote-printers Show/hide remote printers\n"
" --[no-]share-printers Turn printer sharing on/off\n"
" --[no-]user-cancel-any Allow/prevent users to cancel "
"any job\n"));
exit(1);
}