diff options
author | chip <chip> | 2001-11-26 19:57:30 +0000 |
---|---|---|
committer | chip <chip> | 2001-11-26 19:57:30 +0000 |
commit | ac84b80afc13d5a96813e678ad5c86c6036f022e (patch) | |
tree | f7ec7c94f0ac960c446df48be27f68e4733e10ac /utils/nfsd | |
parent | 7a95c7d38ec451cf3736d485899d980216364c0f (diff) | |
download | nfs-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.c | 28 |
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); } |