X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=cf8c22633315e3538c25a7d50da04bf732ea6c8b;hb=37d7160b3a2434abcb4b39898bb86fa314fc3e5b;hp=c6faf88021b458893e0392614cdf03f99ac49190;hpb=4d46f5f9ef94c295649afad38c6d496ae2bbe5e1;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index c6faf8802..cf8c22633 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" @@ -205,6 +220,7 @@ void InspIRCd::RehashUsersAndChans() for (std::vector::const_iterator i = Users->local_users.begin(); i != Users->local_users.end(); i++) { (**i).already_sent = 0; + (**i).RemoveExpiredInvites(); } } @@ -344,8 +360,7 @@ InspIRCd::InspIRCd(int argc, char** argv) : this->Res = 0; this->ConfigThread = NULL; - // Initialise TIME - clock_gettime(CLOCK_REALTIME, &TIME); + UpdateTime(); this->startup_time = TIME.tv_sec; // This must be created first, so other parts of Insp can use it while starting up @@ -457,7 +472,7 @@ InspIRCd::InspIRCd(int argc, char** argv) : if (do_debug) { FileWriter* fw = new FileWriter(stdout); - FileLogStream* fls = new FileLogStream(DEBUG, fw); + FileLogStream* fls = new FileLogStream(RAWIO, fw); Logs->AddLogTypes("*", fls, true); } else if (!this->OpenLog(argv, argc)) @@ -489,8 +504,8 @@ InspIRCd::InspIRCd(int argc, char** argv) : printf_c("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__); printf_c("(C) InspIRCd Development Team.\033[0m\n\n"); printf_c("Developers:\n"); - printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special\n"); - printf_c("\t\033[1;32mpeavey, aquanight, psychon, dz, danieldg\033[0m\n\n"); + printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special, peavey\n"); + printf_c("\t\033[1;32maquanight, psychon, dz, danieldg, jackmcbarn\033[0m\n\n"); printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n"); this->Modes = new ModeParser; @@ -596,27 +611,40 @@ 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; - if(!Config->nofork) + if(!Config->cmdline.nofork) { WindowsForkKillOwner(); FreeConsole(); @@ -693,7 +721,14 @@ InspIRCd::InspIRCd(int argc, char** argv) : void InspIRCd::UpdateTime() { +#ifdef HAS_CLOCK_GETTIME clock_gettime(CLOCK_REALTIME, &TIME); +#else + struct timeval tv; + gettimeofday(&tv, NULL); + TIME.tv_sec = tv.tv_sec; + TIME.tv_nsec = tv.tv_usec * 1000; +#endif } int InspIRCd::Run()