summaryrefslogtreecommitdiffstats
path: root/utils/nfsd
diff options
context:
space:
mode:
authorchip <chip>2001-11-26 19:57:30 +0000
committerchip <chip>2001-11-26 19:57:30 +0000
commitac84b80afc13d5a96813e678ad5c86c6036f022e (patch)
treef7ec7c94f0ac960c446df48be27f68e4733e10ac /utils/nfsd
parent7a95c7d38ec451cf3736d485899d980216364c0f (diff)
downloadnfs-utils-ac84b80afc13d5a96813e678ad5c86c6036f022e.tar.gz
nfs-utils-ac84b80afc13d5a96813e678ad5c86c6036f022e.tar.xz
nfs-utils-ac84b80afc13d5a96813e678ad5c86c6036f022e.zip
2001-11-26 Chip Salzenberg <chip@pobox.com>
* utils/showmount/showmount.c (main): Don't assume that strings starting with digits are IP addresses. * utils/nfsd/nfsd.c (main): Close all fds and reopen 0,1,2 on /dev/null before nfssvc(). Use syslog to report nfssvc errors. * support/misc/tcpwrapper.c, utils/mountd/mountd.man, utils/rquotad/rquotad.man, utils/statd/statd.man: Fix comments and man pages: We check host names *and* addresses with tcpwrappers.
Diffstat (limited to 'utils/nfsd')
-rw-r--r--utils/nfsd/nfsd.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index c1cb56f..772f72d 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -12,9 +12,11 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <getopt.h>
+#include <syslog.h>
#include "nfslib.h"
static void usage(const char *);
@@ -22,7 +24,7 @@ static void usage(const char *);
int
main(int argc, char **argv)
{
- int count = 1, c, error, port;
+ int count = 1, c, error, port, fd;
port = 2049;
@@ -62,8 +64,28 @@ main(int argc, char **argv)
}
}
- if ((error = nfssvc(port, count)) < 0)
- perror("nfssvc");
+ /* KLUDGE ALERT:
+ Some kernels let nfsd kernel threads inherit open files
+ from the program that spawns them (i.e. us). So close
+ everything before spawning kernel threads. --Chip */
+ fd = open("/dev/null", O_RDWR);
+ if (fd == -1)
+ perror("/dev/null");
+ else {
+ (void) dup2(fd, 0);
+ (void) dup2(fd, 1);
+ (void) dup2(fd, 2);
+ }
+ fd = sysconf(_SC_OPEN_MAX);
+ while (--fd > 2)
+ (void) close(fd);
+
+ if ((error = nfssvc(port, count)) < 0) {
+ int e = errno;
+ openlog("nfsd", LOG_PID, LOG_DAEMON);
+ syslog(LOG_ERR, "nfssvc: %s", strerror(e));
+ closelog();
+ }
return (error != 0);
}