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