BIND: update vendor tree to 9.5.2-P2
[dragonfly.git] / contrib / bind / lib / bind / irs / getnetgrent.c
blob4400fd4abad1082eaeaac124d6707025eaea3ee7
1 /*
2 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (c) 1996,1999 by Internet Software Consortium.
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.
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.
18 #if defined(LIBC_SCCS) && !defined(lint)
19 static const char rcsid[] = "$Id: getnetgrent.c,v 1.4.672.1 2008/02/27 00:05:45 marka Exp $";
20 #endif /* LIBC_SCCS and not lint */
22 /* Imports */
24 #include "port_before.h"
26 #if !defined(__BIND_NOSTATIC)
28 #include <sys/types.h>
30 #include <netinet/in.h>
31 #include <arpa/nameser.h>
33 #include <errno.h>
34 #include <resolv.h>
35 #include <stdio.h>
37 #include <irs.h>
39 #include "port_after.h"
41 #include "irs_data.h"
43 /* Forward */
45 static struct net_data *init(void);
48 /* Public */
50 #ifndef SETNETGRENT_ARGS
51 #define SETNETGRENT_ARGS const char *netgroup
52 #endif
53 void
54 setnetgrent(SETNETGRENT_ARGS) {
55 struct net_data *net_data = init();
57 setnetgrent_p(netgroup, net_data);
60 void
61 endnetgrent(void) {
62 struct net_data *net_data = init();
64 endnetgrent_p(net_data);
67 #ifndef INNETGR_ARGS
68 #define INNETGR_ARGS const char *netgroup, const char *host, \
69 const char *user, const char *domain
70 #endif
71 int
72 innetgr(INNETGR_ARGS) {
73 struct net_data *net_data = init();
75 return (innetgr_p(netgroup, host, user, domain, net_data));
78 int
79 getnetgrent(NGR_R_CONST char **host, NGR_R_CONST char **user,
80 NGR_R_CONST char **domain)
82 struct net_data *net_data = init();
83 const char *ch, *cu, *cd;
84 int ret;
86 ret = getnetgrent_p(&ch, &cu, &cd, net_data);
87 if (ret != 1)
88 return (ret);
90 DE_CONST(ch, *host);
91 DE_CONST(cu, *user);
92 DE_CONST(cd, *domain);
93 return (ret);
96 /* Shared private. */
98 void
99 setnetgrent_p(const char *netgroup, struct net_data *net_data) {
100 struct irs_ng *ng;
102 if ((net_data != NULL) && ((ng = net_data->ng) != NULL))
103 (*ng->rewind)(ng, netgroup);
106 void
107 endnetgrent_p(struct net_data *net_data) {
108 struct irs_ng *ng;
110 if (!net_data)
111 return;
112 if ((ng = net_data->ng) != NULL)
113 (*ng->close)(ng);
114 net_data->ng = NULL;
118 innetgr_p(const char *netgroup, const char *host,
119 const char *user, const char *domain,
120 struct net_data *net_data) {
121 struct irs_ng *ng;
123 if (!net_data || !(ng = net_data->ng))
124 return (0);
125 return ((*ng->test)(ng, netgroup, host, user, domain));
129 getnetgrent_p(const char **host, const char **user, const char **domain,
130 struct net_data *net_data ) {
131 struct irs_ng *ng;
133 if (!net_data || !(ng = net_data->ng))
134 return (0);
135 return ((*ng->next)(ng, host, user, domain));
138 /* Private */
140 static struct net_data *
141 init(void) {
142 struct net_data *net_data;
144 if (!(net_data = net_data_init(NULL)))
145 goto error;
146 if (!net_data->ng) {
147 net_data->ng = (*net_data->irs->ng_map)(net_data->irs);
148 if (!net_data->ng) {
149 error:
150 errno = EIO;
151 return (NULL);
155 return (net_data);
158 #endif /*__BIND_NOSTATIC*/
160 /*! \file */