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 /* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28 /* All Rights Reserved */ 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 /* LINTLIBRARY */ 33 34 # include <stdio.h> 35 36 # include "lp.h" 37 # include "users.h" 38 39 static int loaded = 0; 40 static struct user_priority *ppri_tbl; 41 struct user_priority *ld_priority_file(); 42 static USER usr; 43 44 int putuser ( char * user, USER * pri_s ) 45 { 46 int fd; 47 48 if (!loaded) 49 { 50 if (!(ppri_tbl = ld_priority_file(Lp_Users))) 51 return(-1); 52 loaded = 1; 53 } 54 55 if (!add_user(ppri_tbl, user, pri_s->priority_limit)) 56 { 57 return(-1); 58 } 59 60 if ((fd = open_locked(Lp_Users, "w", LPU_MODE)) < 0) 61 return(-1); 62 output_tbl(fd, ppri_tbl); 63 close(fd); 64 return(0); 65 } 66 67 USER * getuser ( char * user ) 68 { 69 int limit; 70 71 /* root and lp do not get a limit */ 72 if (STREQU(user, "root") || STREQU(user, LPUSER)) 73 { 74 usr.priority_limit = 0; 75 return(&usr); 76 } 77 78 if (!loaded) 79 { 80 if (!(ppri_tbl = ld_priority_file(Lp_Users))) 81 return((USER *)0); 82 83 loaded = 1; 84 } 85 86 for (limit = PRI_MIN; limit <= PRI_MAX; limit++) 87 if (bang_searchlist(user, ppri_tbl->users[limit - PRI_MIN])) 88 { 89 usr.priority_limit = limit; 90 return(&usr); 91 } 92 93 usr.priority_limit = ppri_tbl->deflt_limit; 94 return(&usr); 95 } 96 97 int deluser ( char * user ) 98 { 99 int fd; 100 101 if (!loaded) 102 { 103 if (!(ppri_tbl = ld_priority_file(Lp_Users))) 104 return(-1); 105 106 loaded = 1; 107 } 108 109 del_user(ppri_tbl, user); 110 111 if ((fd = open_locked(Lp_Users, "w", LPU_MODE)) < 0) 112 return(-1); 113 114 output_tbl(fd, ppri_tbl); 115 close(fd); 116 return(0); 117 } 118 119 int getdfltpri ( void ) 120 { 121 if (!loaded) 122 { 123 if (!(ppri_tbl = ld_priority_file(Lp_Users))) 124 return(-1); 125 126 loaded = 1; 127 } 128 129 return (ppri_tbl->deflt); 130 } 131 132 void 133 trashusers(void) 134 { 135 int limit; 136 137 if (loaded) 138 { 139 if (ppri_tbl) 140 { 141 for (limit = PRI_MIN; limit <= PRI_MAX; limit++) 142 freelist (ppri_tbl->users[limit - PRI_MIN]); 143 ppri_tbl = 0; 144 } 145 loaded = 0; 146 } 147 } 148 149