11556Srgrimes/*-
21556Srgrimes * Copyright (c) 1992 Keith Muller.
31556Srgrimes * Copyright (c) 1992, 1993
41556Srgrimes *	The Regents of the University of California.  All rights reserved.
51556Srgrimes *
61556Srgrimes * This code is derived from software contributed to Berkeley by
71556Srgrimes * Keith Muller of the University of California, San Diego.
81556Srgrimes *
91556Srgrimes * Redistribution and use in source and binary forms, with or without
101556Srgrimes * modification, are permitted provided that the following conditions
111556Srgrimes * are met:
121556Srgrimes * 1. Redistributions of source code must retain the above copyright
131556Srgrimes *    notice, this list of conditions and the following disclaimer.
141556Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
151556Srgrimes *    notice, this list of conditions and the following disclaimer in the
161556Srgrimes *    documentation and/or other materials provided with the distribution.
171556Srgrimes * 4. Neither the name of the University nor the names of its contributors
181556Srgrimes *    may be used to endorse or promote products derived from this software
191556Srgrimes *    without specific prior written permission.
201556Srgrimes *
211556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
221556Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
231556Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
241556Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
251556Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
261556Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
271556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
281556Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
291556Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
301556Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
311556Srgrimes * SUCH DAMAGE.
321556Srgrimes *
331556Srgrimes *      @(#)cache.h	8.1 (Berkeley) 5/31/93
3450471Speter * $FreeBSD$
351556Srgrimes */
361556Srgrimes
371556Srgrimes/*
381556Srgrimes * Constants and data structures used to implement group and password file
391556Srgrimes * caches. Traditional passwd/group cache routines perform quite poorly with
401556Srgrimes * archives. The chances of hitting a valid lookup with an archive is quite a
41102230Strhodes * bit worse than with files already resident on the file system. These misses
4246684Skris * create a MAJOR performance cost. To address this problem, these routines
431556Srgrimes * cache both hits and misses.
441556Srgrimes *
451556Srgrimes * NOTE:  name lengths must be as large as those stored in ANY PROTOCOL and
461556Srgrimes * as stored in the passwd and group files. CACHE SIZES MUST BE PRIME
471556Srgrimes */
481556Srgrimes#define UNMLEN		32	/* >= user name found in any protocol */
491556Srgrimes#define GNMLEN		32	/* >= group name found in any protocol */
501556Srgrimes#define UID_SZ		317	/* size of user_name/uid cache */
511556Srgrimes#define UNM_SZ		317	/* size of user_name/uid cache */
521556Srgrimes#define GID_SZ		251	/* size of gid cache */
531556Srgrimes#define GNM_SZ		317	/* size of group name cache */
541556Srgrimes#define VALID		1	/* entry and name are valid */
551556Srgrimes#define INVALID		2	/* entry valid, name NOT valid */
561556Srgrimes
571556Srgrimes/*
581556Srgrimes * Node structures used in the user, group, uid, and gid caches.
591556Srgrimes */
601556Srgrimes
611556Srgrimestypedef struct uidc {
621556Srgrimes	int valid;		/* is this a valid or a miss entry */
631556Srgrimes	char name[UNMLEN];	/* uid name */
641556Srgrimes	uid_t uid;		/* cached uid */
651556Srgrimes} UIDC;
661556Srgrimes
671556Srgrimestypedef struct gidc {
681556Srgrimes	int valid;		/* is this a valid or a miss entry */
691556Srgrimes	char name[GNMLEN];	/* gid name */
701556Srgrimes	gid_t gid;		/* cached gid */
711556Srgrimes} GIDC;
72