irs.h revision 1.1.1.1 1 1.1 christos /* $NetBSD: irs.h,v 1.1.1.1 2009/04/12 15:33:32 christos Exp $ */
2 1.1 christos
3 1.1 christos /*
4 1.1 christos * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
5 1.1 christos * Copyright (c) 1996,1999 by Internet Software Consortium.
6 1.1 christos *
7 1.1 christos * Permission to use, copy, modify, and distribute this software for any
8 1.1 christos * purpose with or without fee is hereby granted, provided that the above
9 1.1 christos * copyright notice and this permission notice appear in all copies.
10 1.1 christos *
11 1.1 christos * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
12 1.1 christos * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1 christos * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
14 1.1 christos * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1 christos * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1 christos * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17 1.1 christos * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1 christos */
19 1.1 christos
20 1.1 christos /*
21 1.1 christos * Id: irs.h,v 1.5 2005/04/27 04:56:15 sra Exp
22 1.1 christos */
23 1.1 christos
24 1.1 christos #ifndef _IRS_H_INCLUDED
25 1.1 christos #define _IRS_H_INCLUDED
26 1.1 christos
27 1.1 christos /*! \file */
28 1.1 christos
29 1.1 christos #include <sys/types.h>
30 1.1 christos
31 1.1 christos #include <arpa/nameser.h>
32 1.1 christos
33 1.1 christos #include <grp.h>
34 1.1 christos #include <netdb.h>
35 1.1 christos #include <resolv.h>
36 1.1 christos #include <pwd.h>
37 1.1 christos
38 1.1 christos /*%
39 1.1 christos * This is the group map class.
40 1.1 christos */
41 1.1 christos struct irs_gr {
42 1.1 christos void * private;
43 1.1 christos void (*close) __P((struct irs_gr *));
44 1.1 christos struct group * (*next) __P((struct irs_gr *));
45 1.1 christos struct group * (*byname) __P((struct irs_gr *, const char *));
46 1.1 christos struct group * (*bygid) __P((struct irs_gr *, gid_t));
47 1.1 christos int (*list) __P((struct irs_gr *, const char *,
48 1.1 christos gid_t, gid_t *, int *));
49 1.1 christos void (*rewind) __P((struct irs_gr *));
50 1.1 christos void (*minimize) __P((struct irs_gr *));
51 1.1 christos struct __res_state * (*res_get) __P((struct irs_gr *));
52 1.1 christos void (*res_set) __P((struct irs_gr *, res_state,
53 1.1 christos void (*)(void *)));
54 1.1 christos };
55 1.1 christos
56 1.1 christos /*%
57 1.1 christos * This is the password map class.
58 1.1 christos */
59 1.1 christos struct irs_pw {
60 1.1 christos void * private;
61 1.1 christos void (*close) __P((struct irs_pw *));
62 1.1 christos struct passwd * (*next) __P((struct irs_pw *));
63 1.1 christos struct passwd * (*byname) __P((struct irs_pw *, const char *));
64 1.1 christos struct passwd * (*byuid) __P((struct irs_pw *, uid_t));
65 1.1 christos void (*rewind) __P((struct irs_pw *));
66 1.1 christos void (*minimize) __P((struct irs_pw *));
67 1.1 christos struct __res_state * (*res_get) __P((struct irs_pw *));
68 1.1 christos void (*res_set) __P((struct irs_pw *, res_state,
69 1.1 christos void (*)(void *)));
70 1.1 christos };
71 1.1 christos
72 1.1 christos /*%
73 1.1 christos * This is the service map class.
74 1.1 christos */
75 1.1 christos struct irs_sv {
76 1.1 christos void * private;
77 1.1 christos void (*close) __P((struct irs_sv *));
78 1.1 christos struct servent *(*byname) __P((struct irs_sv *,
79 1.1 christos const char *, const char *));
80 1.1 christos struct servent *(*byport) __P((struct irs_sv *, int, const char *));
81 1.1 christos struct servent *(*next) __P((struct irs_sv *));
82 1.1 christos void (*rewind) __P((struct irs_sv *));
83 1.1 christos void (*minimize) __P((struct irs_sv *));
84 1.1 christos struct __res_state * (*res_get) __P((struct irs_sv *));
85 1.1 christos void (*res_set) __P((struct irs_sv *, res_state,
86 1.1 christos void (*)(void *)));
87 1.1 christos };
88 1.1 christos
89 1.1 christos /*%
90 1.1 christos * This is the protocols map class.
91 1.1 christos */
92 1.1 christos struct irs_pr {
93 1.1 christos void * private;
94 1.1 christos void (*close) __P((struct irs_pr *));
95 1.1 christos struct protoent *(*byname) __P((struct irs_pr *, const char *));
96 1.1 christos struct protoent *(*bynumber) __P((struct irs_pr *, int));
97 1.1 christos struct protoent *(*next) __P((struct irs_pr *));
98 1.1 christos void (*rewind) __P((struct irs_pr *));
99 1.1 christos void (*minimize) __P((struct irs_pr *));
100 1.1 christos struct __res_state * (*res_get) __P((struct irs_pr *));
101 1.1 christos void (*res_set) __P((struct irs_pr *, res_state,
102 1.1 christos void (*)(void *)));
103 1.1 christos };
104 1.1 christos
105 1.1 christos /*%
106 1.1 christos * This is the hosts map class.
107 1.1 christos */
108 1.1 christos struct irs_ho {
109 1.1 christos void * private;
110 1.1 christos void (*close) __P((struct irs_ho *));
111 1.1 christos struct hostent *(*byname) __P((struct irs_ho *, const char *));
112 1.1 christos struct hostent *(*byname2) __P((struct irs_ho *, const char *, int));
113 1.1 christos struct hostent *(*byaddr) __P((struct irs_ho *,
114 1.1 christos const void *, int, int));
115 1.1 christos struct hostent *(*next) __P((struct irs_ho *));
116 1.1 christos void (*rewind) __P((struct irs_ho *));
117 1.1 christos void (*minimize) __P((struct irs_ho *));
118 1.1 christos struct __res_state * (*res_get) __P((struct irs_ho *));
119 1.1 christos void (*res_set) __P((struct irs_ho *, res_state,
120 1.1 christos void (*)(void *)));
121 1.1 christos struct addrinfo *(*addrinfo) __P((struct irs_ho *, const char *,
122 1.1 christos const struct addrinfo *));
123 1.1 christos };
124 1.1 christos
125 1.1 christos /*%
126 1.1 christos * This is the networks map class.
127 1.1 christos */
128 1.1 christos struct irs_nw {
129 1.1 christos void * private;
130 1.1 christos void (*close) __P((struct irs_nw *));
131 1.1 christos struct nwent * (*byname) __P((struct irs_nw *, const char *, int));
132 1.1 christos struct nwent * (*byaddr) __P((struct irs_nw *, void *, int, int));
133 1.1 christos struct nwent * (*next) __P((struct irs_nw *));
134 1.1 christos void (*rewind) __P((struct irs_nw *));
135 1.1 christos void (*minimize) __P((struct irs_nw *));
136 1.1 christos struct __res_state * (*res_get) __P((struct irs_nw *));
137 1.1 christos void (*res_set) __P((struct irs_nw *, res_state,
138 1.1 christos void (*)(void *)));
139 1.1 christos };
140 1.1 christos
141 1.1 christos /*%
142 1.1 christos * This is the netgroups map class.
143 1.1 christos */
144 1.1 christos struct irs_ng {
145 1.1 christos void * private;
146 1.1 christos void (*close) __P((struct irs_ng *));
147 1.1 christos int (*next) __P((struct irs_ng *, const char **,
148 1.1 christos const char **, const char **));
149 1.1 christos int (*test) __P((struct irs_ng *, const char *,
150 1.1 christos const char *, const char *,
151 1.1 christos const char *));
152 1.1 christos void (*rewind) __P((struct irs_ng *, const char *));
153 1.1 christos void (*minimize) __P((struct irs_ng *));
154 1.1 christos };
155 1.1 christos
156 1.1 christos /*%
157 1.1 christos * This is the generic map class, which copies the front of all others.
158 1.1 christos */
159 1.1 christos struct irs_map {
160 1.1 christos void * private;
161 1.1 christos void (*close) __P((void *));
162 1.1 christos };
163 1.1 christos
164 1.1 christos /*%
165 1.1 christos * This is the accessor class. It contains pointers to all of the
166 1.1 christos * initializers for the map classes for a particular accessor.
167 1.1 christos */
168 1.1 christos struct irs_acc {
169 1.1 christos void * private;
170 1.1 christos void (*close) __P((struct irs_acc *));
171 1.1 christos struct irs_gr * (*gr_map) __P((struct irs_acc *));
172 1.1 christos struct irs_pw * (*pw_map) __P((struct irs_acc *));
173 1.1 christos struct irs_sv * (*sv_map) __P((struct irs_acc *));
174 1.1 christos struct irs_pr * (*pr_map) __P((struct irs_acc *));
175 1.1 christos struct irs_ho * (*ho_map) __P((struct irs_acc *));
176 1.1 christos struct irs_nw * (*nw_map) __P((struct irs_acc *));
177 1.1 christos struct irs_ng * (*ng_map) __P((struct irs_acc *));
178 1.1 christos struct __res_state * (*res_get) __P((struct irs_acc *));
179 1.1 christos void (*res_set) __P((struct irs_acc *, res_state,
180 1.1 christos void (*)(void *)));
181 1.1 christos };
182 1.1 christos
183 1.1 christos /*%
184 1.1 christos * This is because the official definition of "struct netent" has no
185 1.1 christos * concept of CIDR even though it allows variant address families (on
186 1.1 christos * output but not input). The compatibility stubs convert the structs
187 1.1 christos * below into "struct netent"'s.
188 1.1 christos */
189 1.1 christos struct nwent {
190 1.1 christos char *n_name; /*%< official name of net */
191 1.1 christos char **n_aliases; /*%< alias list */
192 1.1 christos int n_addrtype; /*%< net address type */
193 1.1 christos void *n_addr; /*%< network address */
194 1.1 christos int n_length; /*%< address length, in bits */
195 1.1 christos };
196 1.1 christos
197 1.1 christos /*%
198 1.1 christos * Hide external function names from POSIX.
199 1.1 christos */
200 1.1 christos #define irs_gen_acc __irs_gen_acc
201 1.1 christos #define irs_lcl_acc __irs_lcl_acc
202 1.1 christos #define irs_dns_acc __irs_dns_acc
203 1.1 christos #define irs_nis_acc __irs_nis_acc
204 1.1 christos #define irs_irp_acc __irs_irp_acc
205 1.1 christos #define irs_destroy __irs_destroy
206 1.1 christos #define irs_dns_gr __irs_dns_gr
207 1.1 christos #define irs_dns_ho __irs_dns_ho
208 1.1 christos #define irs_dns_nw __irs_dns_nw
209 1.1 christos #define irs_dns_pr __irs_dns_pr
210 1.1 christos #define irs_dns_pw __irs_dns_pw
211 1.1 christos #define irs_dns_sv __irs_dns_sv
212 1.1 christos #define irs_gen_gr __irs_gen_gr
213 1.1 christos #define irs_gen_ho __irs_gen_ho
214 1.1 christos #define irs_gen_ng __irs_gen_ng
215 1.1 christos #define irs_gen_nw __irs_gen_nw
216 1.1 christos #define irs_gen_pr __irs_gen_pr
217 1.1 christos #define irs_gen_pw __irs_gen_pw
218 1.1 christos #define irs_gen_sv __irs_gen_sv
219 1.1 christos #define irs_irp_get_full_response __irs_irp_get_full_response
220 1.1 christos #define irs_irp_gr __irs_irp_gr
221 1.1 christos #define irs_irp_ho __irs_irp_ho
222 1.1 christos #define irs_irp_is_connected __irs_irp_is_connected
223 1.1 christos #define irs_irp_ng __irs_irp_ng
224 1.1 christos #define irs_irp_nw __irs_irp_nw
225 1.1 christos #define irs_irp_pr __irs_irp_pr
226 1.1 christos #define irs_irp_pw __irs_irp_pw
227 1.1 christos #define irs_irp_read_line __irs_irp_read_line
228 1.1 christos #define irs_irp_sv __irs_irp_sv
229 1.1 christos #define irs_lcl_gr __irs_lcl_gr
230 1.1 christos #define irs_lcl_ho __irs_lcl_ho
231 1.1 christos #define irs_lcl_ng __irs_lcl_ng
232 1.1 christos #define irs_lcl_nw __irs_lcl_nw
233 1.1 christos #define irs_lcl_pr __irs_lcl_pr
234 1.1 christos #define irs_lcl_pw __irs_lcl_pw
235 1.1 christos #define irs_lcl_sv __irs_lcl_sv
236 1.1 christos #define irs_nis_gr __irs_nis_gr
237 1.1 christos #define irs_nis_ho __irs_nis_ho
238 1.1 christos #define irs_nis_ng __irs_nis_ng
239 1.1 christos #define irs_nis_nw __irs_nis_nw
240 1.1 christos #define irs_nis_pr __irs_nis_pr
241 1.1 christos #define irs_nis_pw __irs_nis_pw
242 1.1 christos #define irs_nis_sv __irs_nis_sv
243 1.1 christos #define net_data_create __net_data_create
244 1.1 christos #define net_data_destroy __net_data_destroy
245 1.1 christos #define net_data_minimize __net_data_minimize
246 1.1 christos
247 1.1 christos /*%
248 1.1 christos * Externs.
249 1.1 christos */
250 1.1 christos extern struct irs_acc * irs_gen_acc __P((const char *, const char *));
251 1.1 christos extern struct irs_acc * irs_lcl_acc __P((const char *));
252 1.1 christos extern struct irs_acc * irs_dns_acc __P((const char *));
253 1.1 christos extern struct irs_acc * irs_nis_acc __P((const char *));
254 1.1 christos extern struct irs_acc * irs_irp_acc __P((const char *));
255 1.1 christos
256 1.1 christos extern void irs_destroy __P((void));
257 1.1 christos
258 1.1 christos /*%
259 1.1 christos * These forward declarations are for the semi-private functions in
260 1.1 christos * the get*.c files. Each of these funcs implements the real get*
261 1.1 christos * functionality and the standard versions are just wrappers that
262 1.1 christos * call these. Apart from the wrappers, only irpd is expected to
263 1.1 christos * call these directly, hence these decls are put here and not in
264 1.1 christos * the /usr/include replacements.
265 1.1 christos */
266 1.1 christos
267 1.1 christos struct net_data; /*%< forward */
268 1.1 christos /*
269 1.1 christos * net_data_create gets a singleton net_data object. net_data_init
270 1.1 christos * creates as many net_data objects as times it is called. Clients using
271 1.1 christos * the default interface will use net_data_create by default. Servers will
272 1.1 christos * probably want net_data_init (one call per client)
273 1.1 christos */
274 1.1 christos struct net_data *net_data_create __P((const char *));
275 1.1 christos struct net_data *net_data_init __P((const char *));
276 1.1 christos void net_data_destroy __P((void *));
277 1.1 christos
278 1.1 christos extern struct group *getgrent_p __P((struct net_data *));
279 1.1 christos extern struct group *getgrnam_p __P((const char *, struct net_data *));
280 1.1 christos extern struct group *getgrgid_p __P((gid_t, struct net_data *));
281 1.1 christos extern int setgroupent_p __P((int, struct net_data *));
282 1.1 christos extern void endgrent_p __P((struct net_data *));
283 1.1 christos extern int getgrouplist_p __P((const char *, gid_t, gid_t *, int *,
284 1.1 christos struct net_data *));
285 1.1 christos
286 1.1 christos #ifdef SETGRENT_VOID
287 1.1 christos extern void setgrent_p __P((struct net_data *));
288 1.1 christos #else
289 1.1 christos extern int setgrent_p __P((struct net_data *));
290 1.1 christos #endif
291 1.1 christos
292 1.1 christos extern struct hostent *gethostbyname_p __P((const char *,
293 1.1 christos struct net_data *));
294 1.1 christos extern struct hostent *gethostbyname2_p __P((const char *, int,
295 1.1 christos struct net_data *));
296 1.1 christos extern struct hostent *gethostbyaddr_p __P((const char *, int, int,
297 1.1 christos struct net_data *));
298 1.1 christos extern struct hostent *gethostent_p __P((struct net_data *));
299 1.1 christos extern void sethostent_p __P((int, struct net_data *));
300 1.1 christos extern void endhostent_p __P((struct net_data *));
301 1.1 christos extern struct hostent *getipnodebyname_p __P((const char *, int, int, int *,
302 1.1 christos struct net_data *));
303 1.1 christos extern struct hostent *getipnodebyaddr_p __P((const void *, size_t,
304 1.1 christos int, int *, struct net_data *));
305 1.1 christos
306 1.1 christos extern struct netent *getnetent_p __P((struct net_data *));
307 1.1 christos extern struct netent *getnetbyname_p __P((const char *, struct net_data *));
308 1.1 christos extern struct netent *getnetbyaddr_p __P((unsigned long, int,
309 1.1 christos struct net_data *));
310 1.1 christos extern void setnetent_p __P((int, struct net_data *));
311 1.1 christos extern void endnetent_p __P((struct net_data *));
312 1.1 christos
313 1.1 christos extern void setnetgrent_p __P((const char *, struct net_data *));
314 1.1 christos extern void endnetgrent_p __P((struct net_data *));
315 1.1 christos extern int innetgr_p __P((const char *, const char *, const char *,
316 1.1 christos const char *, struct net_data *));
317 1.1 christos extern int getnetgrent_p __P((const char **, const char **,
318 1.1 christos const char **, struct net_data *));
319 1.1 christos
320 1.1 christos extern struct protoent *getprotoent_p __P((struct net_data *));
321 1.1 christos extern struct protoent *getprotobyname_p __P((const char *,
322 1.1 christos struct net_data *));
323 1.1 christos extern struct protoent *getprotobynumber_p __P((int, struct net_data *));
324 1.1 christos extern void setprotoent_p __P((int, struct net_data *));
325 1.1 christos extern void endprotoent_p __P((struct net_data *));
326 1.1 christos
327 1.1 christos
328 1.1 christos extern struct passwd *getpwent_p __P((struct net_data *));
329 1.1 christos extern struct passwd *getpwnam_p __P((const char *, struct net_data *));
330 1.1 christos extern struct passwd *getpwuid_p __P((uid_t, struct net_data *));
331 1.1 christos extern int setpassent_p __P((int, struct net_data *));
332 1.1 christos extern void endpwent_p __P((struct net_data *));
333 1.1 christos
334 1.1 christos #ifdef SETPWENT_VOID
335 1.1 christos extern void setpwent_p __P((struct net_data *));
336 1.1 christos #else
337 1.1 christos extern int setpwent_p __P((struct net_data *));
338 1.1 christos #endif
339 1.1 christos
340 1.1 christos extern struct servent *getservent_p __P((struct net_data *));
341 1.1 christos extern struct servent *getservbyname_p __P((const char *, const char *,
342 1.1 christos struct net_data *));
343 1.1 christos extern struct servent *getservbyport_p __P((int, const char *,
344 1.1 christos struct net_data *));
345 1.1 christos extern void setservent_p __P((int, struct net_data *));
346 1.1 christos extern void endservent_p __P((struct net_data *));
347 1.1 christos
348 1.1 christos #endif /*_IRS_H_INCLUDED*/
349 1.1 christos
350 1.1 christos /*! \file */
351