X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fnfsd%2Fnfsd.c;h=183681b98953c1ed7af112a0043394e39b6f78d7;hp=d0bbfb30abd721cecea08c80f8deee6b82a9425d;hb=5d37055061e92df07c4bf483ce06551d82ae9338;hpb=940c7c304d4a43c00c27529cdddc7c87db6eef87 diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c index d0bbfb3..183681b 100644 --- a/utils/nfsd/nfsd.c +++ b/utils/nfsd/nfsd.c @@ -25,6 +25,7 @@ #include #include "nfslib.h" +#include "nfssvc.h" static void usage(const char *); @@ -41,6 +42,7 @@ static struct option longopts[] = }; unsigned int protobits = NFSCTL_ALLBITS; unsigned int versbits = NFSCTL_ALLBITS; +int minorvers4 = NFSD_MAXMINORVERS4; /* nfsv4 minor version */ char *haddr = NULL; int @@ -49,6 +51,7 @@ main(int argc, char **argv) int count = 1, c, error, port, fd, found_one; struct servent *ent; struct hostent *hp; + char *p; ent = getservbyname ("nfs", "udp"); if (ent != NULL) @@ -79,23 +82,27 @@ main(int argc, char **argv) } break; case 'N': - switch((c = atoi(optarg))) { - case 2: - case 3: + switch((c = strtol(optarg, &p, 0))) { case 4: + if (*p == '.') { + minorvers4 = -atoi(p + 1); + break; + } + case 3: + case 2: NFSCTL_VERUNSET(versbits, c); break; default: - fprintf(stderr, "%c: Unsupported version\n", c); + fprintf(stderr, "%s: Unsupported version\n", optarg); exit(1); } break; case 'T': - NFSCTL_TCPUNSET(protobits); - break; + NFSCTL_TCPUNSET(protobits); + break; case 'U': - NFSCTL_UDPUNSET(protobits); - break; + NFSCTL_UDPUNSET(protobits); + break; default: fprintf(stderr, "Invalid argument: '%c'\n", c); case 'h': @@ -118,7 +125,8 @@ main(int argc, char **argv) fprintf(stderr, "no version specified\n"); exit(1); } - if (NFSCTL_VERISSET(versbits, 4) && !NFSCTL_TCPISSET(versbits)) { + + if (NFSCTL_VERISSET(versbits, 4) && !NFSCTL_TCPISSET(protobits)) { fprintf(stderr, "version 4 requires the TCP protocol\n"); exit(1); } @@ -157,7 +165,7 @@ main(int argc, char **argv) closeall(3); openlog("nfsd", LOG_PID, LOG_DAEMON); - if ((error = nfssvc(port, count, versbits, protobits, haddr)) < 0) { + if ((error = nfssvc(port, count, versbits, minorvers4, protobits, haddr)) < 0) { int e = errno; syslog(LOG_ERR, "nfssvc: %s", strerror(e)); closelog();