Commit | Line | Data |
---|---|---|
ed5d5720 PA |
1 | /* $NetBSD: nsswitch.h,v 1.6 1999/01/26 01:04:07 lukem Exp $ */ |
2 | /* $FreeBSD: src/include/nsswitch.h,v 1.5 2007/12/12 10:08:02 bushman Exp $ */ | |
3 | ||
4 | /*- | |
5 | * Copyright (c) 1997, 1998, 1999 The NetBSD Foundation, Inc. | |
6 | * All rights reserved. | |
7 | * | |
8 | * This code is derived from software contributed to The NetBSD Foundation | |
9 | * by Luke Mewburn. | |
10 | * | |
11 | * Redistribution and use in source and binary forms, with or without | |
12 | * modification, are permitted provided that the following conditions | |
13 | * are met: | |
14 | * 1. Redistributions of source code must retain the above copyright | |
15 | * notice, this list of conditions and the following disclaimer. | |
16 | * 2. Redistributions in binary form must reproduce the above copyright | |
17 | * notice, this list of conditions and the following disclaimer in the | |
18 | * documentation and/or other materials provided with the distribution. | |
19 | * 3. All advertising materials mentioning features or use of this software | |
20 | * must display the following acknowledgement: | |
21 | * This product includes software developed by the NetBSD | |
22 | * Foundation, Inc. and its contributors. | |
23 | * 4. Neither the name of The NetBSD Foundation nor the names of its | |
24 | * contributors may be used to endorse or promote products derived | |
25 | * from this software without specific prior written permission. | |
26 | * | |
27 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |
28 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
29 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
30 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |
31 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
32 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
33 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
34 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
35 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
36 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
37 | * POSSIBILITY OF SUCH DAMAGE. | |
38 | */ | |
39 | ||
40 | #ifndef _NSSWITCH_H | |
41 | #define _NSSWITCH_H 1 | |
42 | ||
43 | #include <sys/types.h> | |
44 | #include <stdarg.h> | |
45 | ||
46 | #define NSS_MODULE_INTERFACE_VERSION 1 | |
47 | ||
48 | #ifndef _PATH_NS_CONF | |
49 | #define _PATH_NS_CONF "/etc/nsswitch.conf" | |
50 | #endif | |
51 | ||
52 | /* NSS source actions */ | |
53 | #define NS_ACTION_CONTINUE 0 /* try the next source */ | |
54 | #define NS_ACTION_RETURN 1 /* look no further */ | |
55 | ||
56 | #define NS_SUCCESS (1<<0) /* entry was found */ | |
57 | #define NS_UNAVAIL (1<<1) /* source not responding, or corrupt */ | |
58 | #define NS_NOTFOUND (1<<2) /* source responded 'no such entry' */ | |
59 | #define NS_TRYAGAIN (1<<3) /* source busy, may respond to retry */ | |
60 | #define NS_RETURN (1<<4) /* stop search, e.g. for ERANGE */ | |
61 | #define NS_TERMINATE (NS_SUCCESS|NS_RETURN) /* flags that end search */ | |
62 | #define NS_STATUSMASK 0x000000ff /* bitmask to get the status flags */ | |
63 | ||
64 | /* | |
65 | * currently implemented sources | |
66 | */ | |
67 | #define NSSRC_FILES "files" /* local files */ | |
68 | #define NSSRC_DNS "dns" /* DNS; IN for hosts, HS for others */ | |
69 | #define NSSRC_NIS "nis" /* YP/NIS */ | |
70 | #define NSSRC_COMPAT "compat" /* passwd,group in YP compat mode */ | |
71 | #define NSSRC_CACHE "cache" /* nscd daemon */ | |
72 | #define NSSRC_FALLBACK "__fallback" /* internal fallback source */ | |
73 | ||
74 | /* | |
75 | * currently implemented databases | |
76 | */ | |
77 | #define NSDB_HOSTS "hosts" | |
78 | #define NSDB_GROUP "group" | |
79 | #define NSDB_GROUP_COMPAT "group_compat" | |
80 | #define NSDB_NETGROUP "netgroup" | |
81 | #define NSDB_NETWORKS "networks" | |
82 | #define NSDB_PASSWD "passwd" | |
83 | #define NSDB_PASSWD_COMPAT "passwd_compat" | |
84 | #define NSDB_SHELLS "shells" | |
85 | #define NSDB_SERVICES "services" | |
86 | #define NSDB_SERVICES_COMPAT "services_compat" | |
87 | #define NSDB_SSH_HOSTKEYS "ssh_hostkeys" | |
88 | #define NSDB_PROTOCOLS "protocols" | |
89 | #define NSDB_RPC "rpc" | |
90 | ||
91 | /* | |
92 | * suggested databases to implement | |
93 | */ | |
94 | #define NSDB_ALIASES "aliases" | |
95 | #define NSDB_AUTH "auth" | |
96 | #define NSDB_AUTOMOUNT "automount" | |
97 | #define NSDB_BOOTPARAMS "bootparams" | |
98 | #define NSDB_ETHERS "ethers" | |
99 | #define NSDB_EXPORTS "exports" | |
100 | #define NSDB_NETMASKS "netmasks" | |
101 | #define NSDB_PHONES "phones" | |
102 | #define NSDB_PRINTCAP "printcap" | |
103 | #define NSDB_REMOTE "remote" | |
104 | #define NSDB_SENDMAILVARS "sendmailvars" | |
105 | #define NSDB_TERMCAP "termcap" | |
106 | #define NSDB_TTYS "ttys" | |
107 | ||
108 | /* | |
109 | * ns_dtab `method' function signature. | |
110 | */ | |
111 | typedef int (*nss_method)(void *_retval, void *_mdata, va_list _ap); | |
112 | ||
113 | /* | |
114 | * Macro for generating method prototypes. | |
115 | */ | |
116 | #define NSS_METHOD_PROTOTYPE(method) \ | |
117 | int method(void *, void *, va_list) | |
118 | ||
119 | /* | |
120 | * ns_dtab - `nsswitch dispatch table' | |
121 | * Contains an entry for each source and the appropriate function to | |
122 | * call. ns_dtabs are used in the nsdispatch() API in order to allow | |
123 | * the application to override built-in actions. | |
124 | */ | |
125 | typedef struct _ns_dtab { | |
126 | const char *src; /* Source this entry implements */ | |
127 | nss_method method; /* Method to be called */ | |
128 | void *mdata; /* Data passed to method */ | |
129 | } ns_dtab; | |
130 | ||
131 | /* | |
132 | * macros to help build an ns_dtab[] | |
133 | */ | |
134 | #define NS_FILES_CB(F,C) { NSSRC_FILES, F, C }, | |
135 | #define NS_COMPAT_CB(F,C) { NSSRC_COMPAT, F, C }, | |
136 | #define NS_FALLBACK_CB(F) { NSSRC_FALLBACK, F, NULL }, | |
137 | ||
138 | #ifdef HESIOD | |
139 | # define NS_DNS_CB(F,C) { NSSRC_DNS, F, C }, | |
140 | #else | |
141 | # define NS_DNS_CB(F,C) | |
142 | #endif | |
143 | ||
144 | #ifdef YP | |
145 | # define NS_NIS_CB(F,C) { NSSRC_NIS, F, C }, | |
146 | #else | |
147 | # define NS_NIS_CB(F,C) | |
148 | #endif | |
149 | ||
150 | /* | |
151 | * ns_src - `nsswitch source' | |
152 | * used by the nsparser routines to store a mapping between a source | |
153 | * and its dispatch control flags for a given database. | |
154 | */ | |
155 | typedef struct _ns_src { | |
156 | const char *name; | |
157 | u_int32_t flags; | |
158 | } ns_src; | |
159 | ||
160 | ||
161 | /* | |
162 | * default sourcelist (if nsswitch.conf is missing, corrupt, | |
163 | * or the requested database doesn't have an entry. | |
164 | */ | |
165 | extern const ns_src __nsdefaultsrc[]; | |
166 | ||
167 | /* | |
168 | * ns_mtab - NSS method table | |
169 | * An NSS module provides a mapping from (database name, method name) | |
170 | * tuples to the nss_method and associated data. | |
171 | */ | |
172 | typedef struct _ns_mtab { | |
173 | const char *database; | |
174 | const char *name; | |
175 | nss_method method; | |
176 | void *mdata; | |
177 | } ns_mtab; | |
178 | ||
179 | /* | |
180 | * NSS module de-registration, called at module unload. | |
181 | */ | |
182 | typedef void (*nss_module_unregister_fn)(ns_mtab *, unsigned int); | |
183 | ||
184 | /* | |
185 | * NSS module registration, called at module load. | |
186 | */ | |
187 | typedef ns_mtab *(*nss_module_register_fn)(const char *, unsigned int *, | |
188 | nss_module_unregister_fn *); | |
189 | ||
190 | /* | |
191 | * Many NSS interfaces follow the getXXnam, getXXid, getXXent pattern. | |
192 | * Developers are encouraged to use nss_lookup_type where approriate. | |
193 | */ | |
194 | enum nss_lookup_type { | |
195 | nss_lt_name = 1, | |
196 | nss_lt_id = 2, | |
197 | nss_lt_all = 3 | |
198 | }; | |
199 | ||
200 | #ifdef _NS_PRIVATE | |
201 | /* | |
202 | * private data structures for back-end nsswitch implementation | |
203 | */ | |
204 | ||
205 | /* | |
206 | * ns_dbt - `nsswitch database thang' | |
207 | * for each database in /etc/nsswitch.conf there is a ns_dbt, with its | |
208 | * name and a list of ns_src's containing the source information. | |
209 | */ | |
210 | typedef struct _ns_dbt { | |
211 | const char *name; /* name of database */ | |
212 | ns_src *srclist; /* list of sources */ | |
213 | int srclistsize; /* size of srclist */ | |
214 | } ns_dbt; | |
215 | ||
216 | /* | |
217 | * ns_mod - NSS module | |
218 | */ | |
219 | typedef struct _ns_mod { | |
220 | char *name; /* module name */ | |
221 | void *handle; /* handle from dlopen */ | |
222 | ns_mtab *mtab; /* method table */ | |
223 | unsigned int mtabsize; /* count of entries in method table */ | |
224 | nss_module_unregister_fn unregister; /* called to unload module */ | |
225 | } ns_mod; | |
226 | ||
227 | #endif /* _NS_PRIVATE */ | |
228 | ||
229 | ||
230 | #include <sys/cdefs.h> | |
231 | ||
232 | __BEGIN_DECLS | |
233 | extern int nsdispatch(void *, const ns_dtab [], const char *, | |
234 | const char *, const ns_src [], ...); | |
235 | ||
236 | #ifdef _NS_PRIVATE | |
237 | extern void _nsdbtaddsrc(ns_dbt *, const ns_src *); | |
238 | extern void _nsdbtput(const ns_dbt *); | |
239 | extern void _nsyyerror(const char *); | |
240 | extern int _nsyylex(void); | |
241 | extern int _nsyyparse(void); | |
242 | extern int _nsyylineno; | |
243 | #ifdef _NSS_DEBUG | |
244 | extern void _nsdbtdump(const ns_dbt *); | |
245 | #endif | |
246 | #endif /* _NS_PRIVATE */ | |
247 | ||
248 | __END_DECLS | |
249 | ||
250 | #endif /* !_NSSWITCH_H */ |