summaryrefslogtreecommitdiffstats
path: root/utils/nfsd/nfsd.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2015-07-14 10:42:16 -0400
committerSteve Dickson <steved@redhat.com>2015-07-14 14:04:45 -0400
commit2f8a60200f4cc599bb421eb22de3212488d28701 (patch)
treeebd8c76717fe4abbee46b3b4be2701ff464ff24f /utils/nfsd/nfsd.c
parentc6b8191374d9ad064eb96423400a6314c2d0102e (diff)
downloadnfs-utils-2f8a60200f4cc599bb421eb22de3212488d28701.tar.gz
nfs-utils-2f8a60200f4cc599bb421eb22de3212488d28701.tar.xz
nfs-utils-2f8a60200f4cc599bb421eb22de3212488d28701.zip
rpc.nfsd: Squelch DNS errors when using the --host option
Sean Elble <elbles@sessys.com> says: > [rpc.nfsd --host] throws an error/warning (where nfs-server is > defined in /etc/hosts for the IPv4 address of the interface I wish > for TCP port 2049 to be opened on): > > rpc.nfsd: unable to resolve nfs-server:nfs to inet6 address: Name > or service not known I think we can simplify the use of getaddrinfo(3) so that only one call is needed to gather both IPv4 and IPv6 addresses. The call should fail, and an error should be reported, only when there are _no_ addresses bound to a hostname. Reported-by: Sean Elble <elbles@sessys.com> Reviewed-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/nfsd/nfsd.c')
-rw-r--r--utils/nfsd/nfsd.c70
1 files changed, 3 insertions, 67 deletions
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index 201bb13..2165744 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -52,50 +52,6 @@ static struct option longopts[] =
{ NULL, 0, 0, 0 }
};
-/* given a family and ctlbits, disable any that aren't listed in netconfig */
-#ifdef HAVE_LIBTIRPC
-static void
-nfsd_enable_protos(unsigned int *proto4, unsigned int *proto6)
-{
- struct netconfig *nconf;
- unsigned int *famproto;
- void *handle;
-
- xlog(D_GENERAL, "Checking netconfig for visible protocols.");
-
- handle = setnetconfig();
- while((nconf = getnetconfig(handle))) {
- if (!(nconf->nc_flag & NC_VISIBLE))
- continue;
-
- if (!strcmp(nconf->nc_protofmly, NC_INET))
- famproto = proto4;
- else if (!strcmp(nconf->nc_protofmly, NC_INET6))
- famproto = proto6;
- else
- continue;
-
- if (!strcmp(nconf->nc_proto, NC_TCP))
- NFSCTL_TCPSET(*famproto);
- else if (!strcmp(nconf->nc_proto, NC_UDP))
- NFSCTL_UDPSET(*famproto);
-
- xlog(D_GENERAL, "Enabling %s %s.", nconf->nc_protofmly,
- nconf->nc_proto);
- }
- endnetconfig(handle);
- return;
-}
-#else /* HAVE_LIBTIRPC */
-static void
-nfsd_enable_protos(unsigned int *proto4, unsigned int *proto6)
-{
- /* Enable all IPv4 protocols if no TIRPC support */
- *proto4 = NFSCTL_ALLBITS;
- *proto6 = 0;
-}
-#endif /* HAVE_LIBTIRPC */
-
int
main(int argc, char **argv)
{
@@ -108,8 +64,6 @@ main(int argc, char **argv)
unsigned int minorversset = 0;
unsigned int versbits = NFSCTL_VERDEFAULT;
unsigned int protobits = NFSCTL_ALLBITS;
- unsigned int proto4 = 0;
- unsigned int proto6 = 0;
int grace = -1;
int lease = -1;
@@ -278,18 +232,6 @@ main(int argc, char **argv)
xlog_open(progname);
- nfsd_enable_protos(&proto4, &proto6);
-
- if (!NFSCTL_TCPISSET(protobits)) {
- NFSCTL_TCPUNSET(proto4);
- NFSCTL_TCPUNSET(proto6);
- }
-
- if (!NFSCTL_UDPISSET(protobits)) {
- NFSCTL_UDPUNSET(proto4);
- NFSCTL_UDPUNSET(proto6);
- }
-
/* make sure that at least one version is enabled */
found_one = 0;
for (c = NFSD_MINVERS; c <= NFSD_MAXVERS; c++) {
@@ -302,8 +244,7 @@ main(int argc, char **argv)
}
if (NFSCTL_VERISSET(versbits, 4) &&
- !NFSCTL_TCPISSET(proto4) &&
- !NFSCTL_TCPISSET(proto6)) {
+ !NFSCTL_TCPISSET(protobits)) {
xlog(L_ERROR, "version 4 requires the TCP protocol");
exit(1);
}
@@ -337,15 +278,10 @@ main(int argc, char **argv)
i = 0;
do {
- error = nfssvc_set_sockets(AF_INET, proto4, haddr[i], port);
- if (!error)
- socket_up = 1;
-#ifdef IPV6_SUPPORTED
- error = nfssvc_set_sockets(AF_INET6, proto6, haddr[i], port);
+ error = nfssvc_set_sockets(protobits, haddr[i], port);
if (!error)
socket_up = 1;
-#endif /* IPV6_SUPPORTED */
- } while (++i < hcounter);
+ } while (++i < hcounter);
if (rdma_port) {
error = nfssvc_set_rdmaport(rdma_port);