Home | History | Annotate | Line # | Download | only in include
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