Revert manifest to default one
[external/cups.git] / berkeley / lprm.c
1 /*
2  * "$Id: lprm.c 9384 2010-11-22 07:06:39Z mike $"
3  *
4  *   "lprm" command for CUPS.
5  *
6  *   Copyright 2007-2010 by Apple Inc.
7  *   Copyright 1997-2006 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  * Contents:
16  *
17  *   main() - Parse options and cancel jobs.
18  */
19
20 /*
21  * Include necessary headers...
22  */
23
24 #include <cups/cups-private.h>
25
26
27 /*
28  * 'main()' - Parse options and cancel jobs.
29  */
30
31 int                             /* O - Exit status */
32 main(int  argc,                 /* I - Number of command-line arguments */
33      char *argv[])              /* I - Command-line arguments */
34 {
35   int           i;              /* Looping var */
36   int           job_id;         /* Job ID */
37   const char    *name;          /* Destination printer */
38   char          *instance;      /* Pointer to instance name */
39   cups_dest_t   *dest,          /* Destination */
40                 *defdest;       /* Default destination */
41   int           did_cancel;     /* Did we cancel something? */
42
43
44   _cupsSetLocale(argv);
45
46  /*
47   * Setup to cancel individual print jobs...
48   */
49
50   did_cancel = 0;
51   defdest    = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
52   name       = defdest ? defdest->name : NULL;
53
54  /*
55   * Process command-line arguments...
56   */
57
58   for (i = 1; i < argc; i ++)
59     if (argv[i][0] == '-' && argv[i][1] != '\0')
60       switch (argv[i][1])
61       {
62         case 'E' : /* Encrypt */
63 #ifdef HAVE_SSL
64             cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
65 #else
66             _cupsLangPrintf(stderr,
67                             _("%s: Sorry, no encryption support."), argv[0]);
68 #endif /* HAVE_SSL */
69             break;
70
71         case 'P' : /* Cancel jobs on a printer */
72             if (argv[i][2])
73               name = argv[i] + 2;
74             else
75             {
76               i ++;
77               name = argv[i];
78             }
79
80             if ((instance = strchr(name, '/')) != NULL)
81               *instance = '\0';
82
83             if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
84                                          NULL)) == NULL)
85             {
86               _cupsLangPrintf(stderr,
87                               _("%s: Error - unknown destination \"%s\"."),
88                               argv[0], name);
89               goto error;
90             }
91
92             cupsFreeDests(1, dest);
93             break;
94
95         case 'U' : /* Username */
96             if (argv[i][2] != '\0')
97               cupsSetUser(argv[i] + 2);
98             else
99             {
100               i ++;
101               if (i >= argc)
102               {
103                 _cupsLangPrintf(stderr,
104                                 _("%s: Error - expected username after "
105                                   "\"-U\" option."), argv[0]);
106                 goto error;
107               }
108
109               cupsSetUser(argv[i]);
110             }
111             break;
112             
113         case 'h' : /* Connect to host */
114             if (argv[i][2] != '\0')
115               cupsSetServer(argv[i] + 2);
116             else
117             {
118               i ++;
119
120               if (i >= argc)
121               {
122                 _cupsLangPrintf(stderr,
123                                 _("%s: Error - expected hostname after "
124                                   "\"-h\" option."), argv[0]);
125                 goto error;
126               }
127               else
128                 cupsSetServer(argv[i]);
129             }
130
131             if (defdest)
132               cupsFreeDests(1, defdest);
133
134             defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
135             name    = defdest ? defdest->name : NULL;
136             break;
137
138         default :
139             _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."),
140                             argv[0], argv[i][1]);
141             goto error;
142       }
143     else
144     {
145      /*
146       * Cancel a job or printer...
147       */
148
149       if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[i], NULL)) != NULL)
150         cupsFreeDests(1, dest);
151
152       if (dest)
153       {
154         name   = argv[i];
155         job_id = 0;
156       }
157       else if (isdigit(argv[i][0] & 255))
158       {
159         name   = NULL;
160         job_id = atoi(argv[i]);
161       }
162       else if (!strcmp(argv[i], "-"))
163       {
164        /*
165         * Cancel all jobs
166         */
167
168         job_id = -1;
169       }
170       else
171       {
172         _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."),
173                         argv[0], argv[i]);
174         goto error;
175       }
176
177       if (cupsCancelJob2(CUPS_HTTP_DEFAULT, name, job_id, 0) != IPP_OK)
178       {
179         _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
180         goto error;
181       }
182
183       did_cancel = 1;
184     }
185
186  /*
187   * If nothing has been canceled yet, cancel the current job on the specified
188   * (or default) printer...
189   */
190
191   if (!did_cancel && cupsCancelJob2(CUPS_HTTP_DEFAULT, name, 0, 0) != IPP_OK)
192     {
193       _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
194       goto error;
195     }
196
197   if (defdest)
198     cupsFreeDests(1, defdest);
199
200   return (0);
201
202  /*
203   * If we get here there was an error, so clean up...
204   */
205
206   error:
207
208   if (defdest)
209     cupsFreeDests(1, defdest);
210
211   return (1);
212 }
213
214
215 /*
216  * End of "$Id: lprm.c 9384 2010-11-22 07:06:39Z mike $".
217  */