-/* +------------------------------------+
- * | 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 <nenolod@dereferenced.org>
+ * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2003-2008 Craig Edwards <craigedwards@brainbox.cc>
+ * Copyright (C) 2008 Uli Schlachter <psychon@znc.in>
+ * Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
+ * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2007 Burlex <???@???>
+ * Copyright (C) 2003 Craig McLure <craig@chatspike.net>
+ * 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 <http://www.gnu.org/licenses/>.
*/
+
/* $Core */
#include "inspircd.h"
#include "inspircd_version.h"
for (std::vector<LocalUser*>::const_iterator i = Users->local_users.begin(); i != Users->local_users.end(); i++)
{
(**i).already_sent = 0;
+ (**i).RemoveExpiredInvites();
}
}
}
}
- 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;