X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fmountd.c;h=73f9f66c074d3328309920cc63affe24ed8103a4;hp=e93f0ba73121d017946697accf2cb98d6d4165be;hb=9743207017ccface520f839fb573ddef22e464ed;hpb=47e5725d85dc2fed09c584d5de16afbe1b434887 diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index e93f0ba..73f9f66 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -484,6 +484,13 @@ main(int argc, char **argv) /* WARNING: the following works on Linux and SysV, but not BSD! */ sigaction(SIGCHLD, &sa, NULL); + /* Daemons should close all extra filehandles ... *before* RPC init. */ + if (!foreground) { + int fd = sysconf (_SC_OPEN_MAX); + while (--fd > 2) + (void) close(fd); + } + if (nfs_version & 0x1) rpc_init("mountd", MOUNTPROG, MOUNTVERS, mount_dispatch, port); @@ -512,17 +519,11 @@ main(int argc, char **argv) /* Now we remove ourselves from the foreground. Redirect stdin/stdout/stderr first. */ { - int fd, fdmax; - - fd = open("/dev/null", O_RDWR); + int fd = open("/dev/null", O_RDWR); (void) dup2(fd, 0); (void) dup2(fd, 1); (void) dup2(fd, 2); - - fdmax = sysconf (_SC_OPEN_MAX); - for (fd = 3; fd < fdmax; fd++) { - close (fd); - } + if (fd > 2) (void) close(fd); } setsid(); xlog_background();