]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/nfsd/nfsd.c
nfs-utils: clean up option parsing in nfsd.c
[nfs-utils.git] / utils / nfsd / nfsd.c
index c97c81f83f919d414734739904c44470825ae067..183681b98953c1ed7af112a0043394e39b6f78d7 100644 (file)
@@ -25,6 +25,7 @@
 #include <arpa/inet.h>
 
 #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,10 +82,14 @@ 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:
@@ -91,11 +98,11 @@ main(int argc, char **argv)
                        }
                        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':
@@ -158,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();