X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=005a11dd7c239e502932e956905defbfa7fc059c;hb=5245a9d7c49b2b397f38b915382adae3483b6e17;hp=86223ae95bd47e628817d7d37e36e4e91c6ef7ca;hpb=22738bad54cb5fba35f31e545d2489ab1f2de5bd;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 86223ae95..005a11dd7 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -1,16 +1,31 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2010 InspIRCd Development Team - * See: http://wiki.inspircd.org/Credits + * Copyright (C) 2012 William Pitcock + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2003-2008 Craig Edwards + * Copyright (C) 2008 Uli Schlachter + * Copyright (C) 2006-2008 Robin Burchell + * Copyright (C) 2006-2007 Oliver Lupton + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2007 Burlex + * Copyright (C) 2003 Craig McLure + * Copyright (C) 2003 randomdan * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. * - * --------------------------------------------------- + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + /* $Core */ #include "inspircd.h" #include "inspircd_version.h" @@ -595,23 +610,36 @@ InspIRCd::InspIRCd(int argc, char** argv) : } } - if (isatty(0) && isatty(1) && isatty(2)) + /* Explicitly shut down stdio's stdin/stdout/stderr. + * + * The previous logic here was to only do this if stdio was connected to a controlling + * terminal. However, we must do this always to avoid information leaks and other + * problems related to stdio. + * + * The only exception is if we are in debug mode. + * + * -- nenolod + */ + if ((!do_nofork) && (!do_testsuite) && (!Config->cmdline.forcedebug)) { - /* We didn't start from a TTY, we must have started from a background process - - * e.g. we are restarting, or being launched by cron. Dont kill parent, and dont - * close stdin/stdout - */ - if ((!do_nofork) && (!do_testsuite)) - { - fclose(stdin); - fclose(stderr); - if (!Config->cmdline.forcedebug) - fclose(stdout); - } - else - { - Logs->Log("STARTUP", DEFAULT,"Keeping pseudo-tty open as we are running in the foreground."); - } + int fd; + + fclose(stdin); + fclose(stderr); + fclose(stdout); + + fd = open("/dev/null", O_RDWR); + if (dup2(fd, 0) < 0) + Logs->Log("STARTUP", DEFAULT, "Failed to dup /dev/null to stdin."); + if (dup2(fd, 1) < 0) + Logs->Log("STARTUP", DEFAULT, "Failed to dup /dev/null to stdout."); + if (dup2(fd, 2) < 0) + Logs->Log("STARTUP", DEFAULT, "Failed to dup /dev/null to stderr."); + close(fd); + } + else + { + Logs->Log("STARTUP", DEFAULT,"Keeping pseudo-tty open as we are running in the foreground."); } #else WindowsIPC = new IPC;