xref: /illumos-gate/usr/src/cmd/acct/lib/namtouid.c (revision 2a8bcb4e)
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  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
27  * Use is subject to license terms.
28  */
29 
30 /*
31  *	namtouid converts login names to uids
32  *	maintains ulist for speed only
33  */
34 #include <stdio.h>
35 #include <sys/types.h>
36 #include "acctdef.h"
37 #include <pwd.h>
38 static int	usize;
39 static struct ulist {
40 	char	uname[NSZ];
41 	uid_t	uuid;
42 } ul[A_USIZE];
43 char	ntmp[NSZ+1];
44 
45 char	*strncpy();
46 
47 uid_t
namtouid(name)48 namtouid(name)
49 char	name[NSZ];
50 {
51 	register struct ulist *up;
52 	register uid_t tuid;
53 	struct passwd *getpwnam(), *pp;
54 
55 	for (up = ul; up < &ul[usize]; up++)
56 		if (strncmp(name, up->uname, NSZ) == 0)
57 			return(up->uuid);
58 	strncpy(ntmp, name, NSZ);
59 	(void) setpwent();
60 	if ((pp = getpwnam(ntmp)) == NULL)
61 		tuid = -1;
62 	else {
63 		tuid = pp->pw_uid;
64 		if (usize < A_USIZE) {
65 			CPYN(up->uname, name);
66 			up->uuid = tuid;
67 			usize++;
68 		}
69 	}
70 	return(tuid);
71 }
72