X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fnfssvc.c;h=c51ace18ea078c223aa597afb4637b9fbd1663a1;hp=dae16f7f7adc59a540b565e210e8861f71cacd37;hb=fde2ae7794047a698feeaf17963d690a1e660a80;hpb=1c4fdb00a0cb5208294d745e7491ce58b153606b diff --git a/support/nfs/nfssvc.c b/support/nfs/nfssvc.c index dae16f7..c51ace1 100644 --- a/support/nfs/nfssvc.c +++ b/support/nfs/nfssvc.c @@ -6,20 +6,55 @@ * Copyright (C) 1995, 1996 Olaf Kirch */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif #include #include +#include +#include #include "nfslib.h" +static void +nfssvc_versbits(unsigned int ctlbits) +{ + int fd, n, off; + char buf[BUFSIZ], *ptr; + + ptr = buf; + off = 0; + fd = open("/proc/fs/nfsd/versions", O_WRONLY); + if (fd < 0) + return; + + for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) { + if (NFSCTL_VERISSET(ctlbits, n)) + off += snprintf(ptr+off, BUFSIZ - off, "+%d ", n); + else + off += snprintf(ptr+off, BUFSIZ - off, "-%d ", n); + } + snprintf(ptr+off, BUFSIZ - off, "\n"); + if (write(fd, buf, strlen(buf)) != strlen(buf)) { + syslog(LOG_ERR, "nfssvc: Setting version failed: errno %d (%s)", + errno, strerror(errno)); + } + close(fd); + + return; +} int -nfssvc(int port, int nrservs) +nfssvc(int port, int nrservs, unsigned int versbits) { struct nfsctl_arg arg; int fd; - fd = open("/proc/fs/nfs/threads", O_WRONLY); + nfssvc_versbits(versbits); + + fd = open("/proc/fs/nfsd/threads", O_WRONLY); + if (fd < 0) + fd = open("/proc/fs/nfs/threads", O_WRONLY); if (fd >= 0) { /* 2.5+ kernel with nfsd filesystem mounted. * Just write the number in.