1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
23 /* All Rights Reserved */
24
25
26 /*
27 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
28 * Use is subject to license terms.
29 */
30
31 #pragma ident "%Z%%M% %I% %E% SMI"
32
33 /* EMACS_MODES: !fill, lnumb, !overwrite, !nodelete, !picture */
34
35 #include "errno.h"
36 #include "sys/types.h"
37 #include "stdlib.h"
38
39 #include "lp.h"
40 #include "printers.h"
41
42 #if defined(__STDC__)
43 static int _delprinter ( char * );
44 #else
45 static int _delprinter();
46 #endif
47
48 /**
49 ** delprinter()
50 **/
51
52 int
53 #if defined(__STDC__)
delprinter(char * name)54 delprinter (
55 char * name
56 )
57 #else
58 delprinter (name)
59 char *name;
60 #endif
61 {
62 long lastdir;
63
64
65 if (!name || !*name) {
66 errno = EINVAL;
67 return (-1);
68 }
69
70 if (!Lp_A_Printers || !Lp_A_Interfaces) {
71 getadminpaths (LPUSER);
72 if (!Lp_A_Printers || !Lp_A_Interfaces)
73 return (0);
74 }
75
76 if (STREQU(NAME_ALL, name)) {
77 lastdir = -1;
78 while ((name = next_dir(Lp_A_Printers, &lastdir)))
79 if (_delprinter(name) == -1)
80 return (-1);
81 return (0);
82 } else
83 return (_delprinter(name));
84 }
85
86 /**
87 ** _delprinter()
88 **/
89
90 static int
91 #if defined(__STDC__)
_delprinter(char * name)92 _delprinter (
93 char * name
94 )
95 #else
96 _delprinter (name)
97 char *name;
98 #endif
99 {
100 register char *path;
101 #ifdef LP_USE_PAPI_ATTR
102 char ppdfile[BUFSIZ];
103 #endif
104
105 #define RMFILE(X) if (!(path = getprinterfile(name, X))) \
106 return (-1); \
107 if (rmfile(path) == -1) { \
108 Free (path); \
109 return (-1); \
110 } \
111 Free (path)
112 RMFILE (COMMENTFILE);
113 RMFILE (CONFIGFILE);
114 RMFILE (FALLOWFILE);
115 RMFILE (FDENYFILE);
116 RMFILE (UALLOWFILE);
117 RMFILE (UDENYFILE);
118 RMFILE (STATUSFILE);
119 RMFILE (FAULTMESSAGEFILE);
120
121 delalert (Lp_A_Printers, name);
122
123 if (!(path = makepath(Lp_A_Interfaces, name, (char *)0)))
124 return (-1);
125 if (rmfile(path) == -1) {
126 Free (path);
127 return (-1);
128 }
129 Free (path);
130
131 #ifdef LP_USE_PAPI_ATTR
132 /* Check if the printer has a ppd file, if it does delete it */
133 (void) snprintf(ppdfile, sizeof (ppdfile), "%s.ppd", name);
134
135 if (!(path = makepath(ETCDIR, "ppd", ppdfile, (char *)0)))
136 {
137 return (-1);
138 }
139 if (rmfile(path) == -1)
140 {
141 Free(path);
142 return (-1);
143 }
144 Free(path);
145 #endif
146
147 if (!(path = getprinterfile(name, (char *)0)))
148 return (-1);
149 if (Rmdir(path) == -1) {
150 Free (path);
151 return (-1);
152 }
153 Free (path);
154
155 return (0);
156 }
157