diff options
Diffstat (limited to 'support/export')
-rw-r--r-- | support/export/client.c | 17 |
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, '.'); |