diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/nfsd/nfsd.c | 15 | ||||
-rw-r--r-- | utils/nfsd/nfssvc.c | 12 | ||||
-rw-r--r-- | utils/nfsd/nfssvc.h | 2 |
3 files changed, 17 insertions, 12 deletions
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c index a9d77ab..edeb621 100644 --- a/utils/nfsd/nfsd.c +++ b/utils/nfsd/nfsd.c @@ -99,7 +99,8 @@ main(int argc, char **argv) char *p, *progname, *port; char *haddr = NULL; int socket_up = 0; - int minorvers[NFS4_MAXMINOR + 1] = {0}; + unsigned int minorvers = 0; + unsigned int minorversset = 0; unsigned int versbits = NFSCTL_VERDEFAULT; unsigned int protobits = NFSCTL_ALLBITS; unsigned int proto4 = 0; @@ -160,11 +161,12 @@ main(int argc, char **argv) case 4: if (*p == '.') { int i = atoi(p+1); - if (i > 2) { + if (i > NFS4_MAXMINOR) { fprintf(stderr, "%s: unsupported minor version\n", optarg); exit(1); } - minorvers[i] = -1; + NFSCTL_VERSET(minorversset, i); + NFSCTL_VERUNSET(minorvers, i); break; } case 3: @@ -181,11 +183,12 @@ main(int argc, char **argv) case 4: if (*p == '.') { int i = atoi(p+1); - if (i > 2) { + if (i > NFS4_MAXMINOR) { fprintf(stderr, "%s: unsupported minor version\n", optarg); exit(1); } - minorvers[i] = 1; + NFSCTL_VERSET(minorversset, i); + NFSCTL_VERSET(minorvers, i); break; } case 3: @@ -282,7 +285,7 @@ main(int argc, char **argv) * registered with rpcbind. Note that on older kernels w/o the right * interfaces, these are a no-op. */ - nfssvc_setvers(versbits, minorvers); + nfssvc_setvers(versbits, minorvers, minorversset); error = nfssvc_set_sockets(AF_INET, proto4, haddr, port); if (!error) diff --git a/utils/nfsd/nfssvc.c b/utils/nfsd/nfssvc.c index 1b50aba..1a52cca 100644 --- a/utils/nfsd/nfssvc.c +++ b/utils/nfsd/nfssvc.c @@ -269,7 +269,7 @@ nfssvc_set_sockets(const int family, const unsigned int protobits, } void -nfssvc_setvers(unsigned int ctlbits, int minorvers[]) +nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset) { int fd, n, off; char *ptr; @@ -281,10 +281,12 @@ nfssvc_setvers(unsigned int ctlbits, int minorvers[]) return; for (n = NFS4_MINMINOR; n <= NFS4_MAXMINOR; n++) { - if (minorvers[n] == 1) - off += snprintf(ptr+off, sizeof(buf) - off, "+4.%d ", n); - else if (minorvers[n] == -1) - off += snprintf(ptr+off, sizeof(buf) - off, "-4.%d ", n); + if (NFSCTL_VERISSET(minorversset, n)) { + if (NFSCTL_VERISSET(minorvers, n)) + off += snprintf(ptr+off, sizeof(buf) - off, "+4.%d ", n); + else + off += snprintf(ptr+off, sizeof(buf) - off, "-4.%d ", n); + } } for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) { if (NFSCTL_VERISSET(ctlbits, n)) diff --git a/utils/nfsd/nfssvc.h b/utils/nfsd/nfssvc.h index 2bbd3d3..4418ac8 100644 --- a/utils/nfsd/nfssvc.h +++ b/utils/nfsd/nfssvc.h @@ -24,5 +24,5 @@ void nfssvc_mount_nfsdfs(char *progname); int nfssvc_inuse(void); int nfssvc_set_sockets(const int family, const unsigned int protobits, const char *host, const char *port); -void nfssvc_setvers(unsigned int ctlbits, int minorvers4[]); +void nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers4, unsigned int minorvers4set); int nfssvc_threads(unsigned short port, int nrservs); |