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 #ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.5 */ 27 28 #include "stdio.h" 29 #include "errno.h" 30 31 #include "lp.h" 32 #include "class.h" 33 #include "msgs.h" 34 35 #define WHO_AM_I I_AM_LPADMIN 36 #include "oam.h" 37 38 #include "lpadmin.h" 39 40 41 static void _fromclass(); 42 43 /** 44 ** fromclass() - REMOVE PRINTER FROM A CLASS 45 **/ 46 47 void fromclass (printer, class) 48 char *printer, 49 *class; 50 { 51 CLASS *pc; 52 53 if (!(pc = getclass(class))) { 54 LP_ERRMSG1 (ERROR, E_LP_NOCLASS, class); 55 done (1); 56 } 57 58 if (!searchlist(printer, pc->members)) { 59 LP_ERRMSG2 (ERROR, E_ADM_NOTMEM, printer, class); 60 done (1); 61 } 62 63 _fromclass (printer, class, pc); 64 65 return; 66 } 67 68 /** 69 ** fromallclasses() - DELETE A PRINTER FROM ALL CLASSES 70 **/ 71 72 void fromallclasses (printer) 73 char *printer; 74 { 75 register CLASS *pc; 76 77 78 while ((pc = getclass(NAME_ALL))) 79 if (searchlist(printer, pc->members)) 80 _fromclass (printer, pc->name, pc); 81 82 if (errno != ENOENT) { 83 LP_ERRMSG1 (ERROR, E_ADM_GETCLASSES, PERROR); 84 done (1); 85 } 86 87 return; 88 } 89 90 /** 91 ** _fromclass() - REALLY DELETE PRINTER FROM CLASS 92 **/ 93 94 static void _fromclass (printer, class, pc) 95 char *printer, 96 *class; 97 CLASS *pc; 98 { 99 int rc; 100 101 102 if (dellist(&pc->members, printer) == -1) { 103 LP_ERRMSG (ERROR, E_LP_MALLOC); 104 done(1); 105 } 106 107 if (!pc->members) 108 rmdest (1, class); 109 110 else { 111 BEGIN_CRITICAL 112 if (putclass(class, pc) == -1) { 113 LP_ERRMSG2 ( 114 ERROR, 115 E_LP_PUTCLASS, 116 class, 117 PERROR 118 ); 119 done(1); 120 } 121 END_CRITICAL 122 123 send_message(S_LOAD_CLASS, class, "", ""); 124 rc = output(R_LOAD_CLASS); 125 126 switch(rc) { 127 case MOK: 128 break; 129 130 case MNODEST: 131 case MERRDEST: 132 LP_ERRMSG (ERROR, E_ADM_ERRDEST); 133 done (1); 134 /*NOTREACHED*/ 135 136 case MNOSPACE: 137 LP_ERRMSG (WARNING, E_ADM_NOCSPACE); 138 break; 139 140 case MNOPERM: /* taken care of up front */ 141 default: 142 LP_ERRMSG1 (ERROR, E_LP_BADSTATUS, rc); 143 done (1); 144 /*NOTREACHED*/ 145 } 146 147 } 148 return; 149 } 150