diff options
-rw-r--r-- | conf/opers.conf.example | 22 | ||||
-rw-r--r-- | include/configreader.h | 2 | ||||
-rw-r--r-- | include/inspircd.h | 7 | ||||
-rw-r--r-- | src/commands/cmd_oper.cpp | 9 | ||||
-rw-r--r-- | src/configreader.cpp | 4 | ||||
-rw-r--r-- | src/listensocket.cpp | 4 | ||||
-rw-r--r-- | src/modules/m_httpd_config.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 22 |
8 files changed, 43 insertions, 29 deletions
diff --git a/conf/opers.conf.example b/conf/opers.conf.example index d0953d320..2b75fa808 100644 --- a/conf/opers.conf.example +++ b/conf/opers.conf.example @@ -12,10 +12,10 @@ # # <class - name="Shutdown" + name="Shutdown" # commands: oper commands that users of this class can run. - commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD GUNLOADMODULE GRELOADMODULE SAJOIN SAPART SANICK SAQUIT SATOPIC" + commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD GUNLOADMODULE GRELOADMODULE SAJOIN SAPART SANICK SAQUIT SATOPIC" # privs: special privileges that users with this class may utilise. # VIEWING: @@ -34,7 +34,7 @@ privs="users/auspex channels/auspex servers/auspex users/mass-message channels/high-join-limit channels/set-permanent users/flood/no-throttle users/flood/increased-buffers" # usermodes: Oper-only usermodes that opers with this class can use. - usermodes="*" + usermodes="*" # chanmodes: Oper-only channel modes that opers with this class can use. chanmodes="*"> @@ -61,16 +61,16 @@ # classes: classes (above blocks) that this type belongs to. classes="OperChat BanControl HostCloak Shutdown ServerLink" - # host: host oper gets on oper-up. This is optional. - host="netadmin.omega.org.za" + # vhost: host oper gets on oper-up. This is optional. + vhost="netadmin.omega.org.za" # modes: usermodes besides +o that are set on a oper of this type # when they oper up. Used for snomasks and other things. # Requires that m_opermodes.so be loaded. modes="+s +cCqQ"> -<type name="GlobalOp" classes="OperChat BanControl HostCloak ServerLink" host="ircop.omega.org.za"> -<type name="Helper" classes="HostCloak" host="helper.omega.org.za"> +<type name="GlobalOp" classes="OperChat BanControl HostCloak ServerLink" vhost="ircop.omega.org.za"> +<type name="Helper" classes="HostCloak" vhost="helper.omega.org.za"> #-#-#-#-#-#-#-#-#-#-#- OPERATOR CONFIGURATION -#-#-#-#-#-#-#-#-#-#-# @@ -80,7 +80,7 @@ # # # oline with plain-text password -<oper +<oper # name: oper login that is used to oper up (/oper name password). # Remember: This is case sensitive name="Brain" @@ -111,6 +111,10 @@ # are loaded. #sslonly="yes" + # vhost: overrides the vhost in the type block. Class and modes may also + # be overridden + vhost="brain.netadmin.omega" + # type: What oper type this oline is. See the block above for list # of types. NOTE: This is case-sensitive as well. type="NetAdmin"> @@ -124,7 +128,7 @@ type="NetAdmin"> # oline with hashed password. It is highly recommended to use hashed passwords. -<oper +<oper # name: oper login that is used to oper up (/oper name password). # Remember: This is case sensitive name="Brain" diff --git a/include/configreader.h b/include/configreader.h index 54d9f7053..70e09e6c3 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -65,6 +65,8 @@ class CoreExport ConfigTag : public refcountbase std::string getTagLocation(); + inline const std::vector<KeyVal>& getItems() const { return items; } + /** Create a new ConfigTag, giving access to the private KeyVal item list */ static ConfigTag* create(const std::string& Tag, const std::string& file, int line, std::vector<KeyVal>*&items); diff --git a/include/inspircd.h b/include/inspircd.h index 9156d3444..292fbd488 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -256,16 +256,17 @@ class BanCacheManager; class CoreExport ConfigReaderThread : public Thread { ServerConfig* Config; - bool done; + volatile bool done; public: - std::string TheUserUID; + const std::string TheUserUID; ConfigReaderThread(const std::string &useruid) - : Thread(), done(false), TheUserUID(useruid) + : Config(new ServerConfig), done(false), TheUserUID(useruid) { } virtual ~ConfigReaderThread() { + delete Config; } void Run(); diff --git a/src/commands/cmd_oper.cpp b/src/commands/cmd_oper.cpp index b2db8c95c..42ea0c07d 100644 --- a/src/commands/cmd_oper.cpp +++ b/src/commands/cmd_oper.cpp @@ -73,15 +73,6 @@ CmdResult CommandOper::HandleLocal(const std::vector<std::string>& parameters, L if (match_pass && match_hosts) { /* found this oper's opertype */ - std::string host = ifo->getConfig("host"); - if (!host.empty()) - user->ChangeDisplayedHost(host.c_str()); - std::string opClass = ifo->getConfig("class"); - if (!opClass.empty()) - { - user->SetClass(opClass); - user->CheckClass(); - } user->Oper(ifo); return CMD_SUCCESS; } diff --git a/src/configreader.cpp b/src/configreader.cpp index 5fa56ba8f..3785e066c 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -925,7 +925,6 @@ std::string ServerConfig::GetSID() void ConfigReaderThread::Run() { - Config = new ServerConfig; Config->Read(); done = true; } @@ -957,7 +956,7 @@ void ConfigReaderThread::Finish() FOREACH_MOD(I_OnRehash, OnRehash(user)); ServerInstance->BuildISupport(); - delete old; + Config = old; } else { @@ -965,6 +964,5 @@ void ConfigReaderThread::Finish() ServerInstance->Logs->CloseLogs(); ServerInstance->Config = old; ServerInstance->Logs->OpenFileLogs(); - delete this->Config; } } diff --git a/src/listensocket.cpp b/src/listensocket.cpp index 0d6bf89b6..038c665be 100644 --- a/src/listensocket.cpp +++ b/src/listensocket.cpp @@ -155,7 +155,11 @@ void ListenSocket::AcceptInternal() } } if (res != MOD_RES_ALLOW) + { + ServerInstance->Logs->Log("SOCKET",DEFAULT,"Refusing connection on %s - %s", + bind_desc.c_str(), res == MOD_RES_DENY ? "Connection refused by module" : "Module for this port not found"); ServerInstance->SE->Close(incomingSockfd); + } } void ListenSocket::HandleEvent(EventType e, int err) diff --git a/src/modules/m_httpd_config.cpp b/src/modules/m_httpd_config.cpp index 44013b429..0763ad11d 100644 --- a/src/modules/m_httpd_config.cpp +++ b/src/modules/m_httpd_config.cpp @@ -91,7 +91,7 @@ class ModuleHttpStats : public Module { data << "<" << x->first << " "; ConfigTag* tag = x->second; - for (std::vector<KeyVal>::iterator j = tag->items.begin(); j != tag->items.end(); j++) + for (std::vector<KeyVal>::const_iterator j = tag->getItems().begin(); j != tag->getItems().end(); j++) { data << Sanitize(j->first) << "="" << Sanitize(j->second) << "" "; } diff --git a/src/users.cpp b/src/users.cpp index d1a4b2528..170b0c7ec 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -628,18 +628,32 @@ void User::Oper(OperInfo* info) if (info->oper_block) opername = info->oper_block->getString("name"); + if (IS_LOCAL(this)) + { + LocalUser* l = IS_LOCAL(this); + std::string vhost = oper->getConfig("vhost"); + if (!vhost.empty()) + l->ChangeDisplayedHost(vhost.c_str()); + std::string opClass = oper->getConfig("class"); + if (!opClass.empty()) + { + l->SetClass(opClass); + l->CheckClass(); + } + } + ServerInstance->SNO->WriteToSnoMask('o',"%s (%s@%s) is now an IRC operator of type %s (using oper '%s')", - nick.c_str(), ident.c_str(), host.c_str(), info->NameStr(), opername.c_str()); - this->WriteNumeric(381, "%s :You are now %s %s", nick.c_str(), strchr("aeiouAEIOU", info->name[0]) ? "an" : "a", info->NameStr()); + nick.c_str(), ident.c_str(), host.c_str(), oper->NameStr(), opername.c_str()); + this->WriteNumeric(381, "%s :You are now %s %s", nick.c_str(), strchr("aeiouAEIOU", oper->name[0]) ? "an" : "a", oper->NameStr()); - ServerInstance->Logs->Log("OPER", DEFAULT, "%s!%s@%s opered as type: %s", this->nick.c_str(), this->ident.c_str(), this->host.c_str(), info->NameStr()); + ServerInstance->Logs->Log("OPER", DEFAULT, "%s!%s@%s opered as type: %s", this->nick.c_str(), this->ident.c_str(), this->host.c_str(), oper->NameStr()); ServerInstance->Users->all_opers.push_back(this); // Expand permissions from config for faster lookup if (IS_LOCAL(this)) oper->init(); - FOREACH_MOD(I_OnPostOper,OnPostOper(this, info->name, opername)); + FOREACH_MOD(I_OnPostOper,OnPostOper(this, oper->name, opername)); } void OperInfo::init() |