1*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: nsswitch.h,v 1.21 2011/07/17 20:54:34 joerg Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker 3*8d67ca89SAndroid Build Coastguard Worker /*- 4*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc. 5*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 6*8d67ca89SAndroid Build Coastguard Worker * 7*8d67ca89SAndroid Build Coastguard Worker * This code is derived from software contributed to The NetBSD Foundation 8*8d67ca89SAndroid Build Coastguard Worker * by Luke Mewburn. 9*8d67ca89SAndroid Build Coastguard Worker * 10*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 11*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 12*8d67ca89SAndroid Build Coastguard Worker * are met: 13*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 14*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 15*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 16*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 17*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 18*8d67ca89SAndroid Build Coastguard Worker * 19*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*8d67ca89SAndroid Build Coastguard Worker * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*8d67ca89SAndroid Build Coastguard Worker * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*8d67ca89SAndroid Build Coastguard Worker * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*8d67ca89SAndroid Build Coastguard Worker * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*8d67ca89SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*8d67ca89SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*8d67ca89SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*8d67ca89SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*8d67ca89SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*8d67ca89SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 30*8d67ca89SAndroid Build Coastguard Worker */ 31*8d67ca89SAndroid Build Coastguard Worker 32*8d67ca89SAndroid Build Coastguard Worker #ifndef _NSSWITCH_H 33*8d67ca89SAndroid Build Coastguard Worker #define _NSSWITCH_H 1 34*8d67ca89SAndroid Build Coastguard Worker 35*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 36*8d67ca89SAndroid Build Coastguard Worker #include <stdarg.h> 37*8d67ca89SAndroid Build Coastguard Worker 38*8d67ca89SAndroid Build Coastguard Worker #define NSS_MODULE_INTERFACE_VERSION 0 39*8d67ca89SAndroid Build Coastguard Worker 40*8d67ca89SAndroid Build Coastguard Worker #ifndef _PATH_NS_CONF 41*8d67ca89SAndroid Build Coastguard Worker #define _PATH_NS_CONF "/etc/nsswitch.conf" 42*8d67ca89SAndroid Build Coastguard Worker #endif 43*8d67ca89SAndroid Build Coastguard Worker 44*8d67ca89SAndroid Build Coastguard Worker #define NS_CONTINUE 0 45*8d67ca89SAndroid Build Coastguard Worker #define NS_RETURN 1 46*8d67ca89SAndroid Build Coastguard Worker 47*8d67ca89SAndroid Build Coastguard Worker /* 48*8d67ca89SAndroid Build Coastguard Worker * Layout of: 49*8d67ca89SAndroid Build Coastguard Worker * uint32_t ns_src.flags 50*8d67ca89SAndroid Build Coastguard Worker */ 51*8d67ca89SAndroid Build Coastguard Worker /* nsswitch.conf status codes and nsdispatch(3) return values */ 52*8d67ca89SAndroid Build Coastguard Worker #define NS_SUCCESS (1<<0) /* entry was found */ 53*8d67ca89SAndroid Build Coastguard Worker #define NS_UNAVAIL (1<<1) /* source not responding, or corrupt */ 54*8d67ca89SAndroid Build Coastguard Worker #define NS_NOTFOUND (1<<2) /* source responded 'no such entry' */ 55*8d67ca89SAndroid Build Coastguard Worker #define NS_TRYAGAIN (1<<3) /* source busy, may respond to retrys */ 56*8d67ca89SAndroid Build Coastguard Worker #define NS_STATUSMASK 0x000000ff /* bitmask to get the status flags */ 57*8d67ca89SAndroid Build Coastguard Worker 58*8d67ca89SAndroid Build Coastguard Worker /* internal nsdispatch(3) flags; not settable in nsswitch.conf(5) */ 59*8d67ca89SAndroid Build Coastguard Worker #define NS_FORCEALL (1<<8) /* force all methods to be invoked; */ 60*8d67ca89SAndroid Build Coastguard Worker 61*8d67ca89SAndroid Build Coastguard Worker /* 62*8d67ca89SAndroid Build Coastguard Worker * Currently implemented sources. 63*8d67ca89SAndroid Build Coastguard Worker */ 64*8d67ca89SAndroid Build Coastguard Worker #define NSSRC_FILES "files" /* local files */ 65*8d67ca89SAndroid Build Coastguard Worker #define NSSRC_DNS "dns" /* DNS; IN for hosts, HS for others */ 66*8d67ca89SAndroid Build Coastguard Worker #define NSSRC_NIS "nis" /* YP/NIS */ 67*8d67ca89SAndroid Build Coastguard Worker #define NSSRC_COMPAT "compat" /* passwd,group in YP compat mode */ 68*8d67ca89SAndroid Build Coastguard Worker 69*8d67ca89SAndroid Build Coastguard Worker /* 70*8d67ca89SAndroid Build Coastguard Worker * Currently implemented databases. 71*8d67ca89SAndroid Build Coastguard Worker */ 72*8d67ca89SAndroid Build Coastguard Worker #define NSDB_HOSTS "hosts" 73*8d67ca89SAndroid Build Coastguard Worker #define NSDB_GROUP "group" 74*8d67ca89SAndroid Build Coastguard Worker #define NSDB_GROUP_COMPAT "group_compat" 75*8d67ca89SAndroid Build Coastguard Worker #define NSDB_NETGROUP "netgroup" 76*8d67ca89SAndroid Build Coastguard Worker #define NSDB_NETWORKS "networks" 77*8d67ca89SAndroid Build Coastguard Worker #define NSDB_PASSWD "passwd" 78*8d67ca89SAndroid Build Coastguard Worker #define NSDB_PASSWD_COMPAT "passwd_compat" 79*8d67ca89SAndroid Build Coastguard Worker #define NSDB_SHELLS "shells" 80*8d67ca89SAndroid Build Coastguard Worker 81*8d67ca89SAndroid Build Coastguard Worker /* 82*8d67ca89SAndroid Build Coastguard Worker * Suggested databases to implement. 83*8d67ca89SAndroid Build Coastguard Worker */ 84*8d67ca89SAndroid Build Coastguard Worker #define NSDB_ALIASES "aliases" 85*8d67ca89SAndroid Build Coastguard Worker #define NSDB_AUTH "auth" 86*8d67ca89SAndroid Build Coastguard Worker #define NSDB_AUTOMOUNT "automount" 87*8d67ca89SAndroid Build Coastguard Worker #define NSDB_BOOTPARAMS "bootparams" 88*8d67ca89SAndroid Build Coastguard Worker #define NSDB_ETHERS "ethers" 89*8d67ca89SAndroid Build Coastguard Worker #define NSDB_EXPORTS "exports" 90*8d67ca89SAndroid Build Coastguard Worker #define NSDB_NETMASKS "netmasks" 91*8d67ca89SAndroid Build Coastguard Worker #define NSDB_PHONES "phones" 92*8d67ca89SAndroid Build Coastguard Worker #define NSDB_PRINTCAP "printcap" 93*8d67ca89SAndroid Build Coastguard Worker #define NSDB_PROTOCOLS "protocols" 94*8d67ca89SAndroid Build Coastguard Worker #define NSDB_REMOTE "remote" 95*8d67ca89SAndroid Build Coastguard Worker #define NSDB_RPC "rpc" 96*8d67ca89SAndroid Build Coastguard Worker #define NSDB_SENDMAILVARS "sendmailvars" 97*8d67ca89SAndroid Build Coastguard Worker #define NSDB_SERVICES "services" 98*8d67ca89SAndroid Build Coastguard Worker #define NSDB_TERMCAP "termcap" 99*8d67ca89SAndroid Build Coastguard Worker #define NSDB_TTYS "ttys" 100*8d67ca89SAndroid Build Coastguard Worker 101*8d67ca89SAndroid Build Coastguard Worker /* 102*8d67ca89SAndroid Build Coastguard Worker * ns_dtab `callback' function signature. 103*8d67ca89SAndroid Build Coastguard Worker */ 104*8d67ca89SAndroid Build Coastguard Worker typedef int (*nss_method)(void *, void *, va_list); 105*8d67ca89SAndroid Build Coastguard Worker 106*8d67ca89SAndroid Build Coastguard Worker /* 107*8d67ca89SAndroid Build Coastguard Worker * ns_dtab - `nsswitch dispatch table' 108*8d67ca89SAndroid Build Coastguard Worker * Contains an entry for each source and the appropriate function to call. 109*8d67ca89SAndroid Build Coastguard Worker */ 110*8d67ca89SAndroid Build Coastguard Worker typedef struct { 111*8d67ca89SAndroid Build Coastguard Worker const char *src; 112*8d67ca89SAndroid Build Coastguard Worker nss_method callback; 113*8d67ca89SAndroid Build Coastguard Worker void *cb_data; 114*8d67ca89SAndroid Build Coastguard Worker } ns_dtab; 115*8d67ca89SAndroid Build Coastguard Worker 116*8d67ca89SAndroid Build Coastguard Worker /* 117*8d67ca89SAndroid Build Coastguard Worker * Macros to help build an ns_dtab[] 118*8d67ca89SAndroid Build Coastguard Worker */ 119*8d67ca89SAndroid Build Coastguard Worker #define NS_FILES_CB(F,C) { NSSRC_FILES, F, __UNCONST(C) }, 120*8d67ca89SAndroid Build Coastguard Worker #define NS_COMPAT_CB(F,C) { NSSRC_COMPAT, F, __UNCONST(C) }, 121*8d67ca89SAndroid Build Coastguard Worker 122*8d67ca89SAndroid Build Coastguard Worker #ifdef HESIOD 123*8d67ca89SAndroid Build Coastguard Worker # define NS_DNS_CB(F,C) { NSSRC_DNS, F, __UNCONST(C) }, 124*8d67ca89SAndroid Build Coastguard Worker #else 125*8d67ca89SAndroid Build Coastguard Worker # define NS_DNS_CB(F,C) 126*8d67ca89SAndroid Build Coastguard Worker #endif 127*8d67ca89SAndroid Build Coastguard Worker 128*8d67ca89SAndroid Build Coastguard Worker #ifdef YP 129*8d67ca89SAndroid Build Coastguard Worker # define NS_NIS_CB(F,C) { NSSRC_NIS, F, __UNCONST(C) }, 130*8d67ca89SAndroid Build Coastguard Worker #else 131*8d67ca89SAndroid Build Coastguard Worker # define NS_NIS_CB(F,C) 132*8d67ca89SAndroid Build Coastguard Worker #endif 133*8d67ca89SAndroid Build Coastguard Worker #define NS_NULL_CB { .src = NULL }, 134*8d67ca89SAndroid Build Coastguard Worker 135*8d67ca89SAndroid Build Coastguard Worker /* 136*8d67ca89SAndroid Build Coastguard Worker * ns_src - `nsswitch source' 137*8d67ca89SAndroid Build Coastguard Worker * Used by the nsparser routines to store a mapping between a source 138*8d67ca89SAndroid Build Coastguard Worker * and its dispatch control flags for a given database. 139*8d67ca89SAndroid Build Coastguard Worker */ 140*8d67ca89SAndroid Build Coastguard Worker typedef struct { 141*8d67ca89SAndroid Build Coastguard Worker const char *name; 142*8d67ca89SAndroid Build Coastguard Worker uint32_t flags; 143*8d67ca89SAndroid Build Coastguard Worker } ns_src; 144*8d67ca89SAndroid Build Coastguard Worker 145*8d67ca89SAndroid Build Coastguard Worker 146*8d67ca89SAndroid Build Coastguard Worker /* 147*8d67ca89SAndroid Build Coastguard Worker * ns_mtab - `nsswitch method table' 148*8d67ca89SAndroid Build Coastguard Worker * An nsswitch module provides a mapping from (database name, method name) 149*8d67ca89SAndroid Build Coastguard Worker * tuples to the nss_method and associated callback data. Effectively, 150*8d67ca89SAndroid Build Coastguard Worker * ns_dtab, but used for dynamically loaded modules. 151*8d67ca89SAndroid Build Coastguard Worker */ 152*8d67ca89SAndroid Build Coastguard Worker typedef struct { 153*8d67ca89SAndroid Build Coastguard Worker const char *database; 154*8d67ca89SAndroid Build Coastguard Worker const char *name; 155*8d67ca89SAndroid Build Coastguard Worker nss_method method; 156*8d67ca89SAndroid Build Coastguard Worker void *mdata; 157*8d67ca89SAndroid Build Coastguard Worker } ns_mtab; 158*8d67ca89SAndroid Build Coastguard Worker 159*8d67ca89SAndroid Build Coastguard Worker /* 160*8d67ca89SAndroid Build Coastguard Worker * nss_module_register_fn - module registration function 161*8d67ca89SAndroid Build Coastguard Worker * called at module load 162*8d67ca89SAndroid Build Coastguard Worker * nss_module_unregister_fn - module un-registration function 163*8d67ca89SAndroid Build Coastguard Worker * called at module unload 164*8d67ca89SAndroid Build Coastguard Worker */ 165*8d67ca89SAndroid Build Coastguard Worker typedef void (*nss_module_unregister_fn)(ns_mtab *, u_int); 166*8d67ca89SAndroid Build Coastguard Worker typedef ns_mtab *(*nss_module_register_fn)(const char *, u_int *, 167*8d67ca89SAndroid Build Coastguard Worker nss_module_unregister_fn *); 168*8d67ca89SAndroid Build Coastguard Worker 169*8d67ca89SAndroid Build Coastguard Worker #ifdef _NS_PRIVATE 170*8d67ca89SAndroid Build Coastguard Worker 171*8d67ca89SAndroid Build Coastguard Worker /* 172*8d67ca89SAndroid Build Coastguard Worker * Private data structures for back-end nsswitch implementation. 173*8d67ca89SAndroid Build Coastguard Worker */ 174*8d67ca89SAndroid Build Coastguard Worker 175*8d67ca89SAndroid Build Coastguard Worker /* 176*8d67ca89SAndroid Build Coastguard Worker * ns_dbt - `nsswitch database thang' 177*8d67ca89SAndroid Build Coastguard Worker * For each database in /etc/nsswitch.conf there is a ns_dbt, with its 178*8d67ca89SAndroid Build Coastguard Worker * name and a list of ns_src's containing the source information. 179*8d67ca89SAndroid Build Coastguard Worker */ 180*8d67ca89SAndroid Build Coastguard Worker typedef struct { 181*8d67ca89SAndroid Build Coastguard Worker const char *name; /* name of database */ 182*8d67ca89SAndroid Build Coastguard Worker ns_src *srclist; /* list of sources */ 183*8d67ca89SAndroid Build Coastguard Worker u_int srclistsize; /* size of srclist */ 184*8d67ca89SAndroid Build Coastguard Worker } ns_dbt; 185*8d67ca89SAndroid Build Coastguard Worker 186*8d67ca89SAndroid Build Coastguard Worker /* 187*8d67ca89SAndroid Build Coastguard Worker * ns_mod - `nsswitch module' 188*8d67ca89SAndroid Build Coastguard Worker */ 189*8d67ca89SAndroid Build Coastguard Worker typedef struct { 190*8d67ca89SAndroid Build Coastguard Worker const char *name; /* module name */ 191*8d67ca89SAndroid Build Coastguard Worker void *handle; /* handle from dlopen() */ 192*8d67ca89SAndroid Build Coastguard Worker ns_mtab *mtab; /* method table */ 193*8d67ca89SAndroid Build Coastguard Worker u_int mtabsize; /* size of mtab */ 194*8d67ca89SAndroid Build Coastguard Worker /* called to unload module */ 195*8d67ca89SAndroid Build Coastguard Worker nss_module_unregister_fn unregister; 196*8d67ca89SAndroid Build Coastguard Worker } ns_mod; 197*8d67ca89SAndroid Build Coastguard Worker 198*8d67ca89SAndroid Build Coastguard Worker #endif /* _NS_PRIVATE */ 199*8d67ca89SAndroid Build Coastguard Worker 200*8d67ca89SAndroid Build Coastguard Worker 201*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 202*8d67ca89SAndroid Build Coastguard Worker 203*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 204*8d67ca89SAndroid Build Coastguard Worker int nsdispatch(void *, const ns_dtab [], const char *, 205*8d67ca89SAndroid Build Coastguard Worker const char *, const ns_src [], ...); 206*8d67ca89SAndroid Build Coastguard Worker 207*8d67ca89SAndroid Build Coastguard Worker #ifdef _NS_PRIVATE 208*8d67ca89SAndroid Build Coastguard Worker int _nsdbtaddsrc(ns_dbt *, const ns_src *); 209*8d67ca89SAndroid Build Coastguard Worker void _nsdbtdump(const ns_dbt *); 210*8d67ca89SAndroid Build Coastguard Worker int _nsdbtput(const ns_dbt *); 211*8d67ca89SAndroid Build Coastguard Worker void _nsyyerror(const char *); 212*8d67ca89SAndroid Build Coastguard Worker int _nsyylex(void); 213*8d67ca89SAndroid Build Coastguard Worker #endif /* _NS_PRIVATE */ 214*8d67ca89SAndroid Build Coastguard Worker 215*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 216*8d67ca89SAndroid Build Coastguard Worker 217*8d67ca89SAndroid Build Coastguard Worker #endif /* !_NSSWITCH_H */ 218