[PATCH 2/5] daemon: if one of the standard fds is missing open it to /dev/null
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
daemon.c | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/daemon.c b/daemon.c
index a7636bc..e6b1730 100644
--- a/daemon.c
+++ b/daemon.c
@@ -662,6 +662,24 @@ static int service_loop(int socknum, int
}
}
+/* if any standard file descriptor is missing open it to /dev/null */
+static void sanitize_stdfds(void)
+{
+ int devnull = -1, i;
+ struct stat buf;
+ for (i = 0; i < 3; ++i) {
+ if (fstat(i, &buf) != -1)
+ continue;
+ if (devnull == -1 &&
+ (devnull = open("/dev/null", O_RDWR, 0)) == -1)
+ die("open /dev/null failed: %s", strerror(errno));
+ if (dup2(devnull, i) != i)
+ die("dup2 failed: %s", strerror(errno));
+ }
+ if (devnull != -1)
+ close(devnull);
+}
+
static int serve(int port)
{
int socknum, *socklist;
@@ -773,5 +791,7 @@ int main(int argc, char **argv)
return execute(peer);
}
+ sanitize_stdfds();
+
return serve(port);
}
--
1.4.1.gb16f