common-main: call sanitize_stdfds()
authorJeff King <peff@peff.net>
Fri, 1 Jul 2016 06:06:02 +0000 (02:06 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jul 2016 22:09:10 +0000 (15:09 -0700)
commit57f5d52a942e8bbfa82e2741faf050de0d6b3eb3
tree01e59edce0ed0b96a8bcc275f21bc04a1db4bb34
parent650c449250d7279dcbfe2f7cc23624955d53d339
common-main: call sanitize_stdfds()

This is setup that should be done in every program for
safety, but we never got around to adding it everywhere (so
builtins benefited from the call in git.c, but any external
commands did not). Putting it in the common main() gives us
this safety everywhere.

Note that the case in daemon.c is a little funny. We wait
until we know whether we want to daemonize, and then either:

 - call daemonize(), which will close stdio and reopen it to
   /dev/null under the hood

 - sanitize_stdfds(), to fix up any odd cases

But that is way too late; the point of sanitizing is to give
us reliable descriptors on 0/1/2, and we will already have
executed code, possibly called die(), etc. The sanitizing
should be the very first thing that happens.

With this patch, git-daemon will sanitize first, and can
remove the call in the non-daemonize case. It does mean that
daemonize() may just end up closing the descriptors we
opened, but that's not a big deal (it's not wrong to do so,
nor is it really less optimal than the case where our parent
process redirected us from /dev/null ahead of time).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
common-main.c
daemon.c
git.c
shell.c