summaryrefslogtreecommitdiffstats
path: root/utils/mountd/rmtab.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2010-06-22 10:41:03 -0400
committerSteve Dickson <steved@redhat.com>2010-06-22 16:04:53 -0400
commit94ce1eb94babb4c587b2826452fb053cba745098 (patch)
tree3fb09941085d89296ee6b6904f82b44058910f95 /utils/mountd/rmtab.c
parent8d61f2518bebe11c5fd0624857f83de1dceca991 (diff)
downloadnfs-utils-94ce1eb94babb4c587b2826452fb053cba745098.tar.gz
nfs-utils-94ce1eb94babb4c587b2826452fb053cba745098.tar.xz
nfs-utils-94ce1eb94babb4c587b2826452fb053cba745098.zip
libexport.a: Add helpers to manage DNS lookups
Introduce DNS query helpers based on getaddrinfo(3) and getnameinfo(3). These will eventually replace the existing hostent-based functions in support/export/hostname.c. Put some of these new helpers to immediate use, where convenient. As they are part of libexport.a, I've added the forward declarations for these new functions in exportfs.h rather than misc.h, where the hostent-based forward declarations are currently. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/mountd/rmtab.c')
-rw-r--r--utils/mountd/rmtab.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c
index 19b22ee..ba0fcf6 100644
--- a/utils/mountd/rmtab.c
+++ b/utils/mountd/rmtab.c
@@ -133,8 +133,7 @@ mountlist_del(char *hname, const char *path)
void
mountlist_del_all(struct sockaddr_in *sin)
{
- struct in_addr addr = sin->sin_addr;
- struct hostent *hp;
+ char *hostname;
struct rmtabent *rep;
nfs_export *exp;
FILE *fp;
@@ -142,11 +141,13 @@ mountlist_del_all(struct sockaddr_in *sin)
if ((lockid = xflock(_PATH_RMTABLCK, "w")) < 0)
return;
- if (!(hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET))) {
- xlog(L_ERROR, "can't get hostname of %s", inet_ntoa(addr));
+ hostname = host_canonname((struct sockaddr *)sin);
+ if (hostname == NULL) {
+ char buf[INET_ADDRSTRLEN];
+ xlog(L_ERROR, "can't get hostname of %s",
+ host_ntop((struct sockaddr *)sin, buf, sizeof(buf)));
goto out_unlock;
}
- hp = hostent_dup (hp);
if (!setrmtabent("r"))
goto out_free;
@@ -155,7 +156,7 @@ mountlist_del_all(struct sockaddr_in *sin)
goto out_close;
while ((rep = getrmtabent(1, NULL)) != NULL) {
- if (strcmp(rep->r_client, hp->h_name) == 0 &&
+ if (strcmp(rep->r_client, hostname) == 0 &&
(exp = auth_authenticate("umountall", sin, rep->r_path)))
continue;
fputrmtabent(fp, rep, NULL);
@@ -168,7 +169,7 @@ mountlist_del_all(struct sockaddr_in *sin)
out_close:
endrmtabent(); /* close & unlink */
out_free:
- free (hp);
+ free(hostname);
out_unlock:
xfunlock(lockid);
}