summaryrefslogtreecommitdiffstats
path: root/support/export
diff options
context:
space:
mode:
Diffstat (limited to 'support/export')
-rw-r--r--support/export/client.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/support/export/client.c b/support/export/client.c
index af9e6bb..2346f99 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -639,7 +639,7 @@ check_netgroup(const nfs_client *clp, const struct addrinfo *ai)
const char *netgroup = clp->m_hostname + 1;
struct addrinfo *tmp = NULL;
struct hostent *hp;
- char *dot, *hname;
+ char *dot, *hname, *ip;
int i, match;
match = 0;
@@ -687,19 +687,16 @@ check_netgroup(const nfs_client *clp, const struct addrinfo *ai)
}
/* check whether the IP itself is in the netgroup */
- for (tmp = (struct addrinfo *)ai ; tmp != NULL ; tmp = tmp->ai_next) {
- free(hname);
- hname = calloc(INET6_ADDRSTRLEN, 1);
-
- if (inet_ntop(tmp->ai_family, &(((struct sockaddr_in *)tmp->ai_addr)->sin_addr), hname, INET6_ADDRSTRLEN) != hname) {
- xlog(D_GENERAL, " %s: unable to inet_ntop addrinfo %p: %m", __func__, tmp, errno);
- goto out;
- }
- if (innetgr(netgroup, hname, NULL, NULL)) {
+ ip = calloc(INET6_ADDRSTRLEN, 1);
+ if (inet_ntop(ai->ai_family, &(((struct sockaddr_in *)ai->ai_addr)->sin_addr), ip, INET6_ADDRSTRLEN) == ip) {
+ if (innetgr(netgroup, ip, NULL, NULL)) {
+ free(hname);
+ hname = ip;
match = 1;
goto out;
}
}
+ free(ip);
/* Okay, strip off the domain (if we have one) */
dot = strchr(hname, '.');