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__) 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__) 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