summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2013-11-05 14:10:05 -0500
committerSteve Dickson <steved@redhat.com>2013-11-05 14:10:05 -0500
commita80482157632584ee03df58ed1eef3cefd95bbcb (patch)
tree17f9875fc50aceaa5468e7907f5c178e2c37845e
parentd4a408776d611cd62235232d65d488d02fca78e4 (diff)
downloadnfs-utils-a80482157632584ee03df58ed1eef3cefd95bbcb.tar.gz
nfs-utils-a80482157632584ee03df58ed1eef3cefd95bbcb.tar.xz
nfs-utils-a80482157632584ee03df58ed1eef3cefd95bbcb.zip
mountd: Use protocol bit fields to turn protocols off.
Convert the current code to used the NFSCTL_XXX macros to turn off the TCP listener. Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--support/include/rpcmisc.h2
-rw-r--r--support/nfs/rpcmisc.c19
-rw-r--r--support/nfs/svc_create.c5
-rw-r--r--utils/mountd/mountd.c2
4 files changed, 21 insertions, 7 deletions
diff --git a/support/include/rpcmisc.h b/support/include/rpcmisc.h
index b806227..31c8e5d 100644
--- a/support/include/rpcmisc.h
+++ b/support/include/rpcmisc.h
@@ -56,7 +56,7 @@ void rpc_dispatch(struct svc_req *rq, SVCXPRT *xprt,
int getservport(u_long number, const char *proto);
extern int _rpcpmstart;
-extern int _rpcfdtype;
+extern unsigned int _rpcprotobits;
extern int _rpcsvcdirty;
static inline struct sockaddr_in *nfs_getrpccaller_in(SVCXPRT *xprt)
diff --git a/support/nfs/rpcmisc.c b/support/nfs/rpcmisc.c
index b73187a..64c98ff 100644
--- a/support/nfs/rpcmisc.c
+++ b/support/nfs/rpcmisc.c
@@ -39,7 +39,7 @@
#define _RPCSVC_CLOSEDOWN 120
int _rpcpmstart = 0;
-int _rpcfdtype = 0;
+unsigned int _rpcprotobits = (NFSCTL_UDPBIT|NFSCTL_TCPBIT);
int _rpcsvcdirty = 0;
static void
@@ -51,7 +51,7 @@ closedown(int sig)
static int size;
int i, openfd;
- if (_rpcfdtype == SOCK_DGRAM)
+ if (NFSCTL_TCPISSET(_rpcprotobits) == 0)
exit(0);
if (size == 0)
@@ -130,7 +130,16 @@ rpc_init(char *name, int prog, int vers,
* listen will fail on a connected TCP socket(passed by rsh).
*/
if (!(fdtype == SOCK_STREAM && listen(0,5) == -1)) {
- _rpcfdtype = fdtype;
+ switch(fdtype) {
+ case SOCK_DGRAM:
+ NFSCTL_UDPSET(_rpcprotobits);
+ break;
+ case SOCK_STREAM:
+ NFSCTL_TCPSET(_rpcprotobits);
+ break;
+ default:
+ xlog(L_FATAL, "getsockopt returns bad socket type: %d", fdtype);
+ }
_rpcpmstart = 1;
}
}
@@ -139,7 +148,7 @@ rpc_init(char *name, int prog, int vers,
sock = RPC_ANYSOCK;
}
- if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) {
+ if (NFSCTL_UDPISSET(_rpcprotobits)) {
static SVCXPRT *last_transp = NULL;
if (_rpcpmstart == 0) {
@@ -167,7 +176,7 @@ rpc_init(char *name, int prog, int vers,
last_transp = transp;
}
- if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) {
+ if (NFSCTL_TCPISSET(_rpcprotobits)) {
static SVCXPRT *last_transp = NULL;
if (_rpcpmstart == 0) {
diff --git a/support/nfs/svc_create.c b/support/nfs/svc_create.c
index c159fc8..9ae2965 100644
--- a/support/nfs/svc_create.c
+++ b/support/nfs/svc_create.c
@@ -29,6 +29,7 @@
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
+#include "nfslib.h"
#include <netinet/in.h>
@@ -417,6 +418,10 @@ nfs_svc_create(char *name, const rpcprog_t program, const rpcvers_t version,
if (!(nconf->nc_flag & NC_VISIBLE))
continue;
visible++;
+
+ if (!strcmp(nconf->nc_proto, NC_TCP) && !NFSCTL_TCPISSET(_rpcprotobits))
+ continue;
+
if (port == 0)
servport = getservport(program, nconf->nc_proto);
else
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
index 993b6e6..f918472 100644
--- a/utils/mountd/mountd.c
+++ b/utils/mountd/mountd.c
@@ -755,7 +755,7 @@ main(int argc, char **argv)
nfs_version &= ~NFSVERSBIT(vers);
break;
case 'n':
- _rpcfdtype = SOCK_DGRAM;
+ NFSCTL_TCPUNSET(_rpcprotobits);
break;
case 'r':
reverse_resolve = 1;