Revert manifest to default one
[external/cups.git] / systemv / cupsctl.c
1 /*
2  * "$Id: cupsctl.c 9636 2011-03-21 22:02:00Z mike $"
3  *
4  *   Scheduler control program for CUPS.
5  *
6  *   Copyright 2007-2011 by Apple Inc.
7  *   Copyright 2006-2007 by Easy Software Products.
8  *
9  *   These coded instructions, statements, and computer programs are the
10  *   property of Apple Inc. and are protected by Federal copyright
11  *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12  *   which should have been included with this file.  If this file is
13  *   file is missing or damaged, see the license at "http://www.cups.org/".
14  *
15  *   This file is subject to the Apple OS-Developed Software exception.
16  *
17  * Contents:
18  *
19  *   main()  - Get/set server settings.
20  *   usage() - Show program usage.
21  */
22
23 /*
24  * Include necessary headers...
25  */
26
27 #include <cups/cups-private.h>
28 #include <cups/adminutil.h>
29
30
31 /*
32  * Local functions...
33  */
34
35 static void     usage(const char *opt);
36
37
38 /*
39  * 'main()' - Get/set server settings.
40  */
41
42 int                                     /* O - Exit status */
43 main(int  argc,                         /* I - Number of command-line args */
44      char *argv[])                      /* I - Command-line arguments */
45 {
46   int           i,                      /* Looping var */
47                 num_settings;           /* Number of settings */
48   cups_option_t *settings;              /* Settings */
49   const char    *opt;                   /* Current option character */
50   http_t        *http;                  /* Connection to server */
51
52
53  /*
54   * Process the command-line...
55   */
56
57   _cupsSetLocale(argv);
58
59   num_settings = 0;
60   settings     = NULL;
61
62   for (i = 1; i < argc; i ++)
63   {
64     if (argv[i][0] == '-')
65     {
66       if (argv[i][1] == '-')
67       {
68         if (!strcmp(argv[i], "--debug-logging"))
69           num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "1",
70                                        num_settings, &settings);
71         else if (!strcmp(argv[i], "--no-debug-logging"))
72           num_settings = cupsAddOption(CUPS_SERVER_DEBUG_LOGGING, "0",
73                                        num_settings, &settings);
74         else if (!strcmp(argv[i], "--remote-admin"))
75           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "1",
76                                        num_settings, &settings);
77         else if (!strcmp(argv[i], "--no-remote-admin"))
78           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ADMIN, "0",
79                                        num_settings, &settings);
80         else if (!strcmp(argv[i], "--remote-any"))
81           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "1",
82                                        num_settings, &settings);
83         else if (!strcmp(argv[i], "--no-remote-any"))
84           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_ANY, "0",
85                                        num_settings, &settings);
86         else if (!strcmp(argv[i], "--remote-printers"))
87           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS, "1",
88                                        num_settings, &settings);
89         else if (!strcmp(argv[i], "--no-remote-printers"))
90           num_settings = cupsAddOption(CUPS_SERVER_REMOTE_PRINTERS, "0",
91                                        num_settings, &settings);
92         else if (!strcmp(argv[i], "--share-printers"))
93           num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "1",
94                                        num_settings, &settings);
95         else if (!strcmp(argv[i], "--no-share-printers"))
96           num_settings = cupsAddOption(CUPS_SERVER_SHARE_PRINTERS, "0",
97                                        num_settings, &settings);
98         else if (!strcmp(argv[i], "--user-cancel-any"))
99           num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "1",
100                                        num_settings, &settings);
101         else if (!strcmp(argv[i], "--no-user-cancel-any"))
102           num_settings = cupsAddOption(CUPS_SERVER_USER_CANCEL_ANY, "0",
103                                        num_settings, &settings);
104         else
105           usage(argv[i]);
106       }
107       else
108       {
109         for (opt = argv[i] + 1; *opt; opt ++)
110           switch (*opt)
111           {
112             case 'E' :
113                 cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
114                 break;
115
116             case 'U' :
117                 i ++;
118                 if (i >= argc)
119                   usage(NULL);
120
121                 cupsSetUser(argv[i]);
122                 break;
123
124             case 'h' :
125                 i ++;
126                 if (i >= argc)
127                   usage(NULL);
128
129                 cupsSetServer(argv[i]);
130                 break;
131
132             default :
133                 usage(opt);
134                 break;
135           }
136       }
137     }
138     else if (strchr(argv[i], '='))
139       num_settings = cupsParseOptions(argv[i], num_settings, &settings);
140     else
141       usage(argv[i]);
142   }
143
144   if (cupsGetOption("Listen", num_settings, settings) ||
145       cupsGetOption("Port", num_settings, settings))
146   {
147     _cupsLangPuts(stderr, _("cupsctl: Cannot set Listen or Port directly."));
148     return (1);
149   }
150
151  /*
152   * Connect to the server using the defaults...
153   */
154
155   if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
156                                  cupsEncryption())) == NULL)
157   {
158     _cupsLangPrintf(stderr, _("cupsctl: Unable to connect to server: %s"),
159                     strerror(errno));
160     return (1);
161   }
162
163  /*
164   * Set the current configuration if we have anything on the command-line...
165   */
166
167   if (num_settings > 0)
168   {
169     if (!cupsAdminSetServerSettings(http, num_settings, settings))
170     {
171       _cupsLangPrintf(stderr, "cupsctl: %s", cupsLastErrorString());
172       return (1);
173     }
174   }
175   else if (!cupsAdminGetServerSettings(http, &num_settings, &settings))
176   {
177     _cupsLangPrintf(stderr, "cupsctl: %s", cupsLastErrorString());
178     return (1);
179   }
180   else
181   {
182     for (i = 0; i < num_settings; i ++)
183       _cupsLangPrintf(stdout, "%s=%s", settings[i].name, settings[i].value);
184   }
185
186   cupsFreeOptions(num_settings, settings);
187   return (0);
188 }
189
190
191 /*
192  * 'usage()' - Show program usage.
193  */
194
195 static void
196 usage(const char *opt)                  /* I - Option character/string */
197 {
198   if (opt)
199   {
200     if (*opt == '-')
201       _cupsLangPrintf(stderr, _("cupsctl: Unknown option \"%s\""), opt);
202     else
203       _cupsLangPrintf(stderr, _("cupsctl: Unknown option \"-%c\""), *opt);
204   }
205
206   _cupsLangPuts(stdout, _("Usage: cupsctl [options] [param=value ... "
207                           "paramN=valueN]"));
208   _cupsLangPuts(stdout, "");
209   _cupsLangPuts(stdout, _("Options:"));
210   _cupsLangPuts(stdout, "");
211   _cupsLangPuts(stdout, _("  -E                      Enable encryption."));
212   _cupsLangPuts(stdout, _("  -U username             Specify username."));
213   _cupsLangPuts(stdout, _("  -h server[:port]        Specify server "
214                           "address."));
215   _cupsLangPuts(stdout, "");
216   _cupsLangPuts(stdout, _("  --[no-]debug-logging    Turn debug logging "
217                           "on/off."));
218   _cupsLangPuts(stdout, _("  --[no-]remote-admin     Turn remote "
219                           "administration on/off."));
220   _cupsLangPuts(stdout, _("  --[no-]remote-any       Allow/prevent access "
221                           "from the Internet."));
222   _cupsLangPuts(stdout, _("  --[no-]remote-printers  Show/hide remote "
223                           "printers."));
224   _cupsLangPuts(stdout, _("  --[no-]share-printers   Turn printer sharing "
225                           "on/off."));
226   _cupsLangPuts(stdout, _("  --[no-]user-cancel-any  Allow/prevent users to "
227                           "cancel any job."));
228
229   exit(1);
230 }
231
232
233 /*
234  * End of "$Id: cupsctl.c 9636 2011-03-21 22:02:00Z mike $".
235  */