xref: /illumos-gate/usr/src/head/nss_netdir.h (revision 1a2d662a91cee3bf82f41cd47c7ae6f3825d9db2)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
23  *
24  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
25  * Use is subject to license terms.
26  */
27 
28 /*
29  * nss_netdir.h
30  *
31  * Defines structures that are shared between the OSNET-private
32  * _get_hostserv_inetnetdir_byYY() interfaces and the public
33  * interfaces gethostbyYY()/getservbyYY() and netdir_getbyYY().
34  * Ideally, this header file should never be visible to developers
35  * outside of the OSNET build.
36  */
37 
38 #ifndef _NSS_NETDIR_H
39 #define	_NSS_NETDIR_H
40 
41 #ifdef	__cplusplus
42 extern "C" {
43 #endif
44 
45 typedef enum {
46 	NSS_HOST,
47 	NSS_SERV,
48 	NETDIR_BY,
49 	NETDIR_BY_NOSRV,		/* bypass service lookup */
50 	NETDIR_BY6,
51 	NETDIR_BY_NOSRV6,		/* bypass service lookup */
52 	NSS_HOST6
53 } nss_netdir_op_t;
54 
55 struct nss_netdirbyname_in {
56 	nss_netdir_op_t	op_t;
57 	union {
58 		struct nd_hostserv *nd_hs;
59 		union {
60 			struct {
61 				const char	*name;
62 				char	*buf;
63 				int	buflen;
64 			} host;
65 			struct {
66 				const char	*name;
67 				char	*buf;
68 				int	buflen;
69 				int	af_family;	/* for ipnode */
70 				int	flags;		/* for ipnode */
71 			} host6;
72 			struct {
73 				const char	*name;
74 				const char	*proto;
75 				char	*buf;
76 				int	buflen;
77 			} serv;
78 		} nss;
79 	} arg;
80 };
81 
82 union nss_netdirbyname_out {
83 	struct nd_addrlist **nd_alist;
84 	union {
85 		struct {
86 			struct hostent *hent;
87 			int	*herrno_p;
88 		} host;
89 		struct servent *serv;
90 	} nss;
91 };
92 
93 struct nss_netdirbyaddr_in {
94 	nss_netdir_op_t	op_t;
95 	union {
96 		struct netbuf *nd_nbuf;
97 		union {
98 			struct {
99 				const char	*addr;
100 				int	len;
101 				int	type;
102 				char	*buf;
103 				int	buflen;
104 			} host;
105 			struct {
106 				int	port;
107 				const char	*proto;
108 				char	*buf;
109 				int	buflen;
110 			} serv;
111 		} nss;
112 	} arg;
113 };
114 
115 union nss_netdirbyaddr_out {
116 	struct nd_hostservlist **nd_hslist;
117 	union {
118 		struct {
119 			struct hostent *hent;
120 			int	*herrno_p;
121 		} host;
122 		struct servent *serv;
123 	} nss;
124 };
125 
126 int __classic_netdir_getbyname(struct netconfig *,
127 		struct nd_hostserv *, struct nd_addrlist **);
128 int __classic_netdir_getbyaddr(struct netconfig *,
129 		struct nd_hostservlist **, struct netbuf *);
130 int _get_hostserv_inetnetdir_byname(struct netconfig *,
131 		struct nss_netdirbyname_in *, union nss_netdirbyname_out *);
132 int _get_hostserv_inetnetdir_byaddr(struct netconfig *,
133 		struct nss_netdirbyaddr_in *, union nss_netdirbyaddr_out *);
134 int __inet_netdir_options(struct netconfig *,
135 		int option, int fd, char *par);
136 struct netbuf *__inet_uaddr2taddr(struct netconfig *, char *);
137 char *__inet_taddr2uaddr(struct netconfig *, struct netbuf *);
138 
139 #ifdef	__cplusplus
140 }
141 #endif
142 
143 #endif /* _NSS_NETDIR_H */
144