]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/nfsd/nfssvc.c
nfsd: fix version-setting regression on old kernels
[nfs-utils.git] / utils / nfsd / nfssvc.c
index ee862b28eb251631cd42b9ac6d12c24c7cf70311..60232b88a935943a67fe55a38d4796fcab0b154b 100644 (file)
 #include "nfslib.h"
 #include "xlog.h"
 
+/*
+ * IPv6 support for nfsd was finished before some of the other daemons (mountd
+ * and statd in particular). That could be a problem in the future if someone
+ * were to boot a kernel that supports IPv6 serving with an older nfs-utils. For
+ * now, hardcode the IPv6 switch into the off position until the other daemons
+ * are functional.
+ */
+#undef IPV6_SUPPORTED
+
 #define NFSD_PORTS_FILE     "/proc/fs/nfsd/portlist"
 #define NFSD_VERS_FILE    "/proc/fs/nfsd/versions"
 #define NFSD_THREAD_FILE  "/proc/fs/nfsd/threads"
@@ -203,7 +212,7 @@ int
 nfssvc_set_sockets(const int family, const unsigned int protobits,
                   const char *host, const char *port)
 {
-       struct addrinfo hints = { .ai_flags = AI_PASSIVE | AI_ADDRCONFIG };
+       struct addrinfo hints = { .ai_flags = AI_PASSIVE };
 
        hints.ai_family = family;
 
@@ -229,17 +238,17 @@ nfssvc_setvers(unsigned int ctlbits, int minorvers4)
        if (fd < 0)
                return;
 
+       n = minorvers4 >= 0 ? minorvers4 : -minorvers4;
+       if (n >= NFSD_MINMINORVERS4 && n <= NFSD_MAXMINORVERS4)
+                   off += snprintf(ptr+off, sizeof(buf) - off, "%c4.%d ",
+                                   minorvers4 > 0 ? '+' : '-',
+                                   n);
        for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) {
                if (NFSCTL_VERISSET(ctlbits, n))
                    off += snprintf(ptr+off, sizeof(buf) - off, "+%d ", n);
                else
                    off += snprintf(ptr+off, sizeof(buf) - off, "-%d ", n);
        }
-       n = minorvers4 >= 0 ? minorvers4 : -minorvers4;
-       if (n >= NFSD_MINMINORVERS4 && n <= NFSD_MAXMINORVERS4)
-                   off += snprintf(ptr+off, sizeof(buf) - off, "%c4.%d",
-                                   minorvers4 > 0 ? '+' : '-',
-                                   n);
        xlog(D_GENERAL, "Writing version string to kernel: %s", buf);
        snprintf(ptr+off, sizeof(buf) - off, "\n");
        if (write(fd, buf, strlen(buf)) != strlen(buf))