1/*
2 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (c) 1996,1999 by Internet Software Consortium.
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18/*
19 * $Id: gen_p.h,v 1.3 2005/04/27 04:56:23 sra Exp $
20 */
21
22/*! \file
23 *  Notes:
24 *	We hope to create a complete set of thread-safe entry points someday,
25 *	which will mean a set of getXbyY() functions that take as an argument
26 *	a pointer to the map class, which will have a pointer to the private
27 *	data, which will be used preferentially to the static variables that
28 *	are necessary to support the "classic" interface.  This "classic"
29 *	interface will then be reimplemented as stubs on top of the thread
30 *	safe modules, and will keep the map class pointers as their only
31 *	static data.  HOWEVER, we are not there yet.  So while we will call
32 *	the just-barely-converted map class methods with map class pointers,
33 *	right now they probably all still use statics.  We're not fooling
34 *	anybody, and we're not trying to (yet).
35 */
36
37#ifndef _GEN_P_H_INCLUDED
38#define _GEN_P_H_INCLUDED
39
40/*%
41 * These are the access methods.
42 */
43enum irs_acc_id {
44	irs_lcl,	/*%< Local. */
45	irs_dns,	/*%< DNS or Hesiod. */
46	irs_nis,	/*%< Sun NIS ("YP"). */
47	irs_irp,	/*%< IR protocol. */
48	irs_nacc
49};
50
51/*%
52 * These are the map types.
53 */
54enum irs_map_id {
55	irs_gr,		/*%< "group" */
56	irs_pw,		/*%< "passwd" */
57	irs_sv,		/*%< "services" */
58	irs_pr,		/*%< "protocols" */
59	irs_ho,		/*%< "hosts" */
60	irs_nw,		/*%< "networks" */
61	irs_ng,		/*%< "netgroup" */
62	irs_nmap
63};
64
65/*%
66 * This is an accessor instance.
67 */
68struct irs_inst {
69	struct irs_acc *acc;
70	struct irs_gr *	gr;
71	struct irs_pw *	pw;
72	struct irs_sv *	sv;
73	struct irs_pr *	pr;
74	struct irs_ho *	ho;
75	struct irs_nw *	nw;
76	struct irs_ng *	ng;
77};
78
79/*%
80 * This is a search rule for some map type.
81 */
82struct irs_rule {
83	struct irs_rule *	next;
84	struct irs_inst *	inst;
85	int			flags;
86};
87#define IRS_MERGE		0x0001	/*%< Don't stop if acc. has data? */
88#define	IRS_CONTINUE		0x0002	/*%< Don't stop if acc. has no data? */
89/*
90 * This is the private data for a search access class.
91 */
92struct gen_p {
93	char *			options;
94	struct irs_rule *	map_rules[(int)irs_nmap];
95	struct irs_inst		accessors[(int)irs_nacc];
96	struct __res_state *	res;
97	void			(*free_res) __P((void *));
98};
99
100/*
101 * Externs.
102 */
103
104extern struct irs_acc *	irs_gen_acc __P((const char *, const char *conf_file));
105extern struct irs_gr *	irs_gen_gr __P((struct irs_acc *));
106extern struct irs_pw *	irs_gen_pw __P((struct irs_acc *));
107extern struct irs_sv *	irs_gen_sv __P((struct irs_acc *));
108extern struct irs_pr *	irs_gen_pr __P((struct irs_acc *));
109extern struct irs_ho *	irs_gen_ho __P((struct irs_acc *));
110extern struct irs_nw *	irs_gen_nw __P((struct irs_acc *));
111extern struct irs_ng *	irs_gen_ng __P((struct irs_acc *));
112
113#endif /*_IRS_P_H_INCLUDED*/
114