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 */ 43 enum 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 */ 54 enum 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 */ 68 struct 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 */ 82 struct 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 */ 92 struct 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 104 extern struct irs_acc * irs_gen_acc __P((const char *, const char *conf_file)); 105 extern struct irs_gr * irs_gen_gr __P((struct irs_acc *)); 106 extern struct irs_pw * irs_gen_pw __P((struct irs_acc *)); 107 extern struct irs_sv * irs_gen_sv __P((struct irs_acc *)); 108 extern struct irs_pr * irs_gen_pr __P((struct irs_acc *)); 109 extern struct irs_ho * irs_gen_ho __P((struct irs_acc *)); 110 extern struct irs_nw * irs_gen_nw __P((struct irs_acc *)); 111 extern struct irs_ng * irs_gen_ng __P((struct irs_acc *)); 112 113 #endif /*_IRS_P_H_INCLUDED*/ 114