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 /* EMACS_MODES: !fill, lnumb, !overwrite, !nodelete, !picture */
32
33 #include "errno.h"
34 #include "sys/types.h"
35 #include "stdlib.h"
36
37 #include "lp.h"
38 #include "printers.h"
39
40 #if defined(__STDC__)
41 static int _delprinter ( char * );
42 #else
43 static int _delprinter();
44 #endif
45
46 /**
47 ** delprinter()
48 **/
49
50 int
51 #if defined(__STDC__)
delprinter(char * name)52 delprinter (
53 char * name
54 )
55 #else
56 delprinter (name)
57 char *name;
58 #endif
59 {
60 long lastdir;
61
62
63 if (!name || !*name) {
64 errno = EINVAL;
65 return (-1);
66 }
67
68 if (!Lp_A_Printers || !Lp_A_Interfaces) {
69 getadminpaths (LPUSER);
70 if (!Lp_A_Printers || !Lp_A_Interfaces)
71 return (0);
72 }
73
74 if (STREQU(NAME_ALL, name)) {
75 lastdir = -1;
76 while ((name = next_dir(Lp_A_Printers, &lastdir)))
77 if (_delprinter(name) == -1)
78 return (-1);
79 return (0);
80 } else
81 return (_delprinter(name));
82 }
83
84 /**
85 ** _delprinter()
86 **/
87
88 static int
89 #if defined(__STDC__)
_delprinter(char * name)90 _delprinter (
91 char * name
92 )
93 #else
94 _delprinter (name)
95 char *name;
96 #endif
97 {
98 register char *path;
99 #ifdef LP_USE_PAPI_ATTR
100 char ppdfile[BUFSIZ];
101 #endif
102
103 #define RMFILE(X) if (!(path = getprinterfile(name, X))) \
104 return (-1); \
105 if (rmfile(path) == -1) { \
106 Free (path); \
107 return (-1); \
108 } \
109 Free (path)
110 RMFILE (COMMENTFILE);
111 RMFILE (CONFIGFILE);
112 RMFILE (FALLOWFILE);
113 RMFILE (FDENYFILE);
114 RMFILE (UALLOWFILE);
115 RMFILE (UDENYFILE);
116 RMFILE (STATUSFILE);
117 RMFILE (FAULTMESSAGEFILE);
118
119 delalert (Lp_A_Printers, name);
120
121 if (!(path = makepath(Lp_A_Interfaces, name, (char *)0)))
122 return (-1);
123 if (rmfile(path) == -1) {
124 Free (path);
125 return (-1);
126 }
127 Free (path);
128
129 #ifdef LP_USE_PAPI_ATTR
130 /* Check if the printer has a ppd file, if it does delete it */
131 (void) snprintf(ppdfile, sizeof (ppdfile), "%s.ppd", name);
132
133 if (!(path = makepath(ETCDIR, "ppd", ppdfile, (char *)0)))
134 {
135 return (-1);
136 }
137 if (rmfile(path) == -1)
138 {
139 Free(path);
140 return (-1);
141 }
142 Free(path);
143 #endif
144
145 if (!(path = getprinterfile(name, (char *)0)))
146 return (-1);
147 if (Rmdir(path) == -1) {
148 Free (path);
149 return (-1);
150 }
151 Free (path);
152
153 return (0);
154 }
155