summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2016-12-17 12:22:50 -0500
committerSteve Dickson <steved@redhat.com>2016-12-20 13:29:04 -0500
commit1717330ffe1831166f73f8b25b1d7d3b9a49b8c6 (patch)
tree699a25cd3afc402ca27be5aa569ebf33c200c89b /utils
parent1b5881d5b9f3e88e76665139fda08fefdbef7795 (diff)
downloadnfs-utils-1717330ffe1831166f73f8b25b1d7d3b9a49b8c6.tar.gz
nfs-utils-1717330ffe1831166f73f8b25b1d7d3b9a49b8c6.tar.xz
nfs-utils-1717330ffe1831166f73f8b25b1d7d3b9a49b8c6.zip
nfsd: move and improve test on valid port
nfssvc_set_sockets() access textual port numbers (by lookup in /etc/services). This uses getaddrinfo which reports errors, except for out-of-range numbers. So change the test on a valid port to only complain if the port given is purely numeric, but is out-of-range. Also move it so that any default value gets tested the same as any argument value. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils')
-rw-r--r--utils/nfsd/nfsd.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index 62b2876..89179be 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -59,7 +59,7 @@ static struct option longopts[] =
int
main(int argc, char **argv)
{
- int count = NFSD_NPROC, c, i, error = 0, portnum = 0, fd, found_one;
+ int count = NFSD_NPROC, c, i, error = 0, portnum, fd, found_one;
char *p, *progname, *port, *rdma_port = NULL;
char **haddr = NULL;
int hcounter = 0;
@@ -132,12 +132,6 @@ main(int argc, char **argv)
case 'P': /* XXX for nfs-server compatibility */
case 'p':
/* only the last -p option has any effect */
- portnum = atoi(optarg);
- if (portnum <= 0 || portnum > 65535) {
- fprintf(stderr, "%s: bad port number: %s\n",
- progname, optarg);
- usage(progname);
- }
free(port);
port = xstrdup(optarg);
break;
@@ -245,6 +239,15 @@ main(int argc, char **argv)
xlog_open(progname);
+ portnum = strtol(port, &p, 0);
+ if (!*p && (portnum <= 0 || portnum > 65535)) {
+ /* getaddrinfo will catch other errors, but not
+ * out-of-range numbers.
+ */
+ xlog(L_ERROR, "invalid port number: %s", port);
+ exit(1);
+ }
+
/* make sure that at least one version is enabled */
found_one = 0;
for (c = NFSD_MINVERS; c <= NFSD_MAXVERS; c++) {