Neil Brown reports that recent changes to replace gethostby{addr,name}(3) with get{addr,info}name(3) may have inadvertently broken netgroup support. There used to be a gethostbyaddr(3) call in the third paragraph in check_netgroup(). See http://marc.info/?l=linux-nfs&m=128084830214653&w=2 . Introduced by commit 0509d3428f523776ddd9d6e9fa318587d3ec7d84. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Reviewed-by: Neil Brown <neilb@xxxxxxx> --- support/export/client.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-) diff --git a/support/export/client.c b/support/export/client.c index 6667200..278a990 100644 --- a/support/export/client.c +++ b/support/export/client.c @@ -583,14 +583,19 @@ static int check_netgroup(const nfs_client *clp, const struct addrinfo *ai) { const char *netgroup = clp->m_hostname + 1; - const char *hname = ai->ai_canonname; struct addrinfo *tmp = NULL; struct hostent *hp; + char *dot, *hname; int i, match; - char *dot; match = 0; + hname = strdup(ai->ai_canonname); + if (hname == NULL) { + xlog(D_GENERAL, "%s: no memory for strdup", __func__); + goto out; + } + /* First, try to match the hostname without * splitting off the domain */ if (innetgr(netgroup, hname, NULL, NULL)) { @@ -612,10 +617,15 @@ check_netgroup(const nfs_client *clp, const struct addrinfo *ai) /* If hname is ip address convert to FQDN */ tmp = host_pton(hname); if (tmp != NULL) { + char *cname = host_canonname(tmp->ai_addr); freeaddrinfo(tmp); - if (innetgr(netgroup, hname, NULL, NULL)) { - match = 1; - goto out; + if (cname != NULL) { + free(hname); + hname = cname; + if (innetgr(netgroup, hname, NULL, NULL)) { + match = 1; + goto out; + } } } @@ -626,9 +636,9 @@ check_netgroup(const nfs_client *clp, const struct addrinfo *ai) *dot = '\0'; match = innetgr(netgroup, hname, NULL, NULL); - *dot = '.'; out: + free(hname); return match; } #else /* !HAVE_INNETGR */ -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html