summaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2015-01-05 16:31:09 -0500
committerAdam <Adam@anope.org>2015-01-05 19:00:51 -0500
commitd79d8e2608e304760c42bdf87502e3bc51781b88 (patch)
tree179913b8b328f88d52d84c3453fceb28a2d63422 /src/init.cpp
parent8ab1c71d7dc7a0d47e5711dc72e3fc9c3ee850bb (diff)
parentc46ec39e5088119cd21f5f7e16e64e61a876ca20 (diff)
Merge branch '2.0' into 2.1
Conflicts: CMakeLists.txt include/modules.h include/serialize.h modules/commands/bs_assign.cpp modules/commands/bs_badwords.cpp modules/commands/bs_bot.cpp modules/commands/bs_control.cpp modules/commands/bs_kick.cpp modules/commands/cs_access.cpp modules/commands/cs_akick.cpp modules/commands/cs_drop.cpp modules/commands/cs_entrymsg.cpp modules/commands/cs_flags.cpp modules/commands/cs_info.cpp modules/commands/cs_invite.cpp modules/commands/cs_kick.cpp modules/commands/cs_mode.cpp modules/commands/cs_register.cpp modules/commands/cs_seen.cpp modules/commands/cs_set.cpp modules/commands/cs_suspend.cpp modules/commands/cs_topic.cpp modules/commands/cs_unban.cpp modules/commands/cs_xop.cpp modules/commands/hs_del.cpp modules/commands/hs_list.cpp modules/commands/hs_request.cpp modules/commands/ms_ignore.cpp modules/commands/ms_send.cpp modules/commands/ns_recover.cpp modules/commands/ns_register.cpp modules/commands/ns_suspend.cpp modules/commands/os_dns.cpp modules/commands/os_noop.cpp modules/commands/os_oper.cpp modules/commands/os_session.cpp modules/database/db_sql_live.cpp modules/encryption/enc_bcrypt.cpp modules/extra/m_ldap_authentication.cpp modules/extra/m_ldap_oper.cpp modules/fantasy.cpp modules/m_dnsbl.cpp modules/m_sasl.cpp modules/protocol/hybrid.cpp modules/protocol/inspircd20.cpp modules/protocol/unreal.cpp modules/pseudoclients/chanserv.cpp modules/pseudoclients/nickserv.cpp modules/webcpanel/pages/chanserv/access.cpp modules/webcpanel/webcpanel.cpp modules/webcpanel/webcpanel.h src/command.cpp src/messages.cpp src/modulemanager.cpp src/regchannel.cpp src/serialize.cpp
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 0b381cbf6..7e29b43b0 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -102,6 +102,8 @@ bool Anope::AtTerm()
return isatty(fileno(stdout)) && isatty(fileno(stdin)) && isatty(fileno(stderr));
}
+static void setuidgid();
+
void Anope::Fork()
{
#ifndef _WIN32
@@ -112,6 +114,8 @@ void Anope::Fork()
freopen("/dev/null", "w", stderr);
setpgid(0, 0);
+
+ setuidgid();
#else
FreeConsole();
#endif
@@ -418,10 +422,15 @@ void Anope::Init(int ac, char **av)
/* If we're root, issue a warning now */
if (!getuid() && !getgid())
{
- std::cerr << "WARNING: You are currently running Anope as the root superuser. Anope does not" << std::endl;
- std::cerr << " require root privileges to run, and it is discouraged that you run Anope" << std::endl;
- std::cerr << " as the root superuser." << std::endl;
- sleep(3);
+ /* If we are configured to setuid later, don't issue a warning */
+ Configuration::Block *options = Config->GetBlock("options");
+ if (options->Get<Anope::string>("user").empty())
+ {
+ std::cerr << "WARNING: You are currently running Anope as the root superuser. Anope does not" << std::endl;
+ std::cerr << " require root privileges to run, and it is discouraged that you run Anope" << std::endl;
+ std::cerr << " as the root superuser." << std::endl;
+ sleep(3);
+ }
}
#endif
@@ -431,7 +440,7 @@ void Anope::Init(int ac, char **av)
Log(LOG_TERMINAL) << "Using configuration file " << Anope::ConfigDir << "/" << ServicesConf.GetName();
/* Fork to background */
- if (!Anope::NoFork && Anope::AtTerm())
+ if (!Anope::NoFork)
{
/* Install these before fork() - it is possible for the child to
* connect and kill() the parent before it is able to install the
@@ -522,7 +531,11 @@ void Anope::Init(int ac, char **av)
for (int i = 0; i < Config->CountBlock("module"); ++i)
ModuleManager::LoadModule(Config->GetBlock("module", i)->Get<Anope::string>("name"), NULL);
- setuidgid();
+#ifndef _WIN32
+ /* We won't background later, so we should setuid now */
+ if (Anope::NoFork)
+ setuidgid();
+#endif
Module *protocol = ModuleManager::FindFirstOf(PROTOCOL);
if (protocol == NULL)