16ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*	$NetBSD: nsswitch.h,v 1.18 2005/11/29 03:12:58 christos Exp $	*/
26ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
36ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*-
46ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
56ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * All rights reserved.
66ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
76ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * This code is derived from software contributed to The NetBSD Foundation
86ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * by Luke Mewburn.
96ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Redistribution and use in source and binary forms, with or without
116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * modification, are permitted provided that the following conditions
126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * are met:
136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * 1. Redistributions of source code must retain the above copyright
146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    notice, this list of conditions and the following disclaimer.
156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * 2. Redistributions in binary form must reproduce the above copyright
166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    notice, this list of conditions and the following disclaimer in the
176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    documentation and/or other materials provided with the distribution.
186ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * 3. All advertising materials mentioning features or use of this software
196ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    must display the following acknowledgement:
206ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *        This product includes software developed by the NetBSD
216ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *        Foundation, Inc. and its contributors.
226ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * 4. Neither the name of The NetBSD Foundation nor the names of its
236ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    contributors may be used to endorse or promote products derived
246ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    from this software without specific prior written permission.
256ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
266ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
276ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
286ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
296ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
306ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
316ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
326ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
336ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
346ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
356ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
366ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * POSSIBILITY OF SUCH DAMAGE.
376ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
386ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
396ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifndef _NSSWITCH_H
406ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define _NSSWITCH_H	1
416ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
426ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <sys/types.h>
436ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <stdarg.h>
446ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
456ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NSS_MODULE_INTERFACE_VERSION	0
466ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
476ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifndef _PATH_NS_CONF
486ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define _PATH_NS_CONF	"/etc/nsswitch.conf"
496ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
506ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
516ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_CONTINUE	0
526ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_RETURN	1
536ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
546ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
556ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Layout of:
566ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *	uint32_t ns_src.flags
576ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
586ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	/* nsswitch.conf status codes and nsdispatch(3) return values */
596ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_SUCCESS	(1<<0)		/* entry was found */
606ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_UNAVAIL	(1<<1)		/* source not responding, or corrupt */
616ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_NOTFOUND	(1<<2)		/* source responded 'no such entry' */
626ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_TRYAGAIN	(1<<3)		/* source busy, may respond to retrys */
636ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_STATUSMASK	0x000000ff	/* bitmask to get the status flags */
646ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
656ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	/* internal nsdispatch(3) flags; not settable in nsswitch.conf(5)  */
666ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NS_FORCEALL	(1<<8)		/* force all methods to be invoked; */
676ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
686ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
696ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Currently implemented sources.
706ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
716ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSSRC_FILES	"files"		/* local files */
726ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NSSRC_DNS	"dns"		/* DNS; IN for hosts, HS for others */
736ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NSSRC_NIS	"nis"		/* YP/NIS */
746ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define	NSSRC_COMPAT	"compat"	/* passwd,group in YP compat mode */
756ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
766ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
776ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Currently implemented databases.
786ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
796ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_HOSTS		"hosts"
806ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_GROUP		"group"
816ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_GROUP_COMPAT	"group_compat"
826ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_NETGROUP		"netgroup"
836ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_NETWORKS		"networks"
846ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_PASSWD		"passwd"
856ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_PASSWD_COMPAT	"passwd_compat"
866ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_SHELLS		"shells"
876ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
886ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
896ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Suggested databases to implement.
906ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
916ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_ALIASES		"aliases"
926ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_AUTH		"auth"
936ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_AUTOMOUNT		"automount"
946ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_BOOTPARAMS		"bootparams"
956ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_ETHERS		"ethers"
966ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_EXPORTS		"exports"
976ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_NETMASKS		"netmasks"
986ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_PHONES		"phones"
996ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_PRINTCAP		"printcap"
1006ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_PROTOCOLS		"protocols"
1016ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_REMOTE		"remote"
1026ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_RPC		"rpc"
1036ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_SENDMAILVARS	"sendmailvars"
1046ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_SERVICES		"services"
1056ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_TERMCAP		"termcap"
1066ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NSDB_TTYS		"ttys"
1076ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1086ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1096ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_dtab `callback' function signature.
1106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef	int (*nss_method)(void *, void *, va_list);
1126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_dtab - `nsswitch dispatch table'
1156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Contains an entry for each source and the appropriate function to call.
1166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct {
1186ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	 *src;
1196ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	nss_method	 callback;
1206ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	void		 *cb_data;
1216ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ns_dtab;
1226ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1236ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1246ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Macros to help build an ns_dtab[]
1256ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1266ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NS_FILES_CB(F,C)	{ NSSRC_FILES,	F,	__UNCONST(C) },
1276ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define NS_COMPAT_CB(F,C)	{ NSSRC_COMPAT,	F,	__UNCONST(C) },
1286ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1296ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef HESIOD
1306ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#   define NS_DNS_CB(F,C)	{ NSSRC_DNS,	F,	__UNCONST(C) },
1316ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#else
1326ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#   define NS_DNS_CB(F,C)
1336ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
1346ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1356ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef YP
1366ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#   define NS_NIS_CB(F,C)	{ NSSRC_NIS,	F,	__UNCONST(C) },
1376ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#else
1386ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#   define NS_NIS_CB(F,C)
1396ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
1406ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1416ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1426ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_src - `nsswitch source'
1436ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Used by the nsparser routines to store a mapping between a source
1446ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * and its dispatch control flags for a given database.
1456ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1466ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct {
1476ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	*name;
1486ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	uint32_t	 flags;
1496ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ns_src;
1506ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1516ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1526ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1536ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Default sourcelists (if nsswitch.conf is missing, corrupt,
1546ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * or the requested database doesn't have an entry)
1556ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1566ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#if 0 /* MISSING FROM BIONIC */
1576ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultsrc[];
1586ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultcompat[];
1596ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultcompat_forceall[];
1606ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultfiles[];
1616ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultfiles_forceall[];
1626ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultnis[];
1636ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern const ns_src __nsdefaultnis_forceall[];
1646ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif /* MISSING */
1656ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1666ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1676ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_mtab - `nsswitch method table'
1686ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * An nsswitch module provides a mapping from (database name, method name)
1696ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * tuples to the nss_method and associated callback data.  Effectively,
1706ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_dtab, but used for dynamically loaded modules.
1716ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1726ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct {
1736ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	*database;
1746ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	*name;
1756ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	nss_method	 method;
1766ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	void		*mdata;
1776ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ns_mtab;
1786ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1796ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1806ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * nss_module_register_fn - module registration function
1816ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *	called at module load
1826ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * nss_module_unregister_fn - module un-registration function
1836ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *	called at module unload
1846ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1856ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef	void (*nss_module_unregister_fn)(ns_mtab *, u_int);
1866ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef	ns_mtab *(*nss_module_register_fn)(const char *, u_int *,
1876ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh					   nss_module_unregister_fn *);
1886ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1896ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef _NS_PRIVATE
1906ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1916ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1926ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Private data structures for back-end nsswitch implementation.
1936ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1946ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1956ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
1966ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_dbt - `nsswitch database thang'
1976ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * For each database in /etc/nsswitch.conf there is a ns_dbt, with its
1986ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * name and a list of ns_src's containing the source information.
1996ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
2006ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct {
2016ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	*name;		/* name of database */
2026ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	ns_src		*srclist;	/* list of sources */
2036ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	u_int		 srclistsize;	/* size of srclist */
2046ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ns_dbt;
2056ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2066ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
2076ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * ns_mod - `nsswitch module'
2086ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
2096ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct {
2106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	const char	*name;		/* module name */
2116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	void		*handle;	/* handle from dlopen() */
2126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	ns_mtab		*mtab;		/* method table */
2136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	u_int		 mtabsize;	/* size of mtab */
2146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh					/* called to unload module */
2156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh	nss_module_unregister_fn unregister;
2166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ns_mod;
2176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2186ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif /* _NS_PRIVATE */
2196ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2206ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2216ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <sys/cdefs.h>
2226ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2236ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh__BEGIN_DECLS
2246ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint	nsdispatch(void *, const ns_dtab [], const char *,
2256ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh			const char *, const ns_src [], ...);
2266ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2276ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef _NS_PRIVATE
2286ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint		 _nsdbtaddsrc(ns_dbt *, const ns_src *);
2296ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehvoid		 _nsdbtdump(const ns_dbt *);
2306ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint		 _nsdbtput(const ns_dbt *);
2316ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehvoid		 _nsyyerror(const char *);
2326ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint		 _nsyylex(void);
2336ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif /* _NS_PRIVATE */
2346ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2356ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh__END_DECLS
2366ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
2376ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif /* !_NSSWITCH_H */
238