Home | History | Annotate | Line # | Download | only in include
      1      1.1  christos /*	$NetBSD: irs.h,v 1.1.1.2 2012/09/09 16:07:48 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.1.2  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