X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigreader.cpp;h=cce362ed2553e03eabd03ad61bafc57cbf5cd444;hb=9183ebd28c79b12ddf29b3847f59679e480af70a;hp=117546f0938bffe9cfe4187ba308526dd3cf1537;hpb=ca781714c1651a9e7042eb930c6b117449f8e1fc;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 117546f09..cce362ed2 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -11,7 +11,7 @@ * --------------------------------------------------- */ -/* $Core: libIRCDconfigreader */ +/* $Core */ /* $CopyInstall: conf/inspircd.quotes.example $(CONPATH) */ /* $CopyInstall: conf/inspircd.rules.example $(CONPATH) */ /* $CopyInstall: conf/inspircd.motd.example $(CONPATH) */ @@ -44,7 +44,7 @@ ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance) WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0; log_file = NULL; NoUserDns = forcedebug = OperSpyWhois = nofork = HideBans = HideSplits = UndernetMsgPrefix = false; - CycleHosts = writelog = AllowHalfop = true; + CycleHosts = writelog = AllowHalfop = InvBypassModes = true; dns_timeout = DieDelay = 5; MaxTargets = 20; NetBufferSize = 10240; @@ -65,38 +65,6 @@ void ServerConfig::ClearStack() include_stack.clear(); } -Module* ServerConfig::GetIOHook(BufferedSocket* is) -{ - std::map::iterator x = SocketIOHookModule.find(is); - return (x != SocketIOHookModule.end() ? x->second : NULL); -} - -bool ServerConfig::AddIOHook(Module* iomod, BufferedSocket* is) -{ - if (!GetIOHook(is)) - { - SocketIOHookModule[is] = iomod; - is->IsIOHooked = true; - return true; - } - else - { - throw ModuleException("BufferedSocket derived class already hooked by another module"); - return false; - } -} - -bool ServerConfig::DelIOHook(BufferedSocket* is) -{ - std::map::iterator x = SocketIOHookModule.find(is); - if (x != SocketIOHookModule.end()) - { - SocketIOHookModule.erase(x); - return true; - } - return false; -} - void ServerConfig::Update005() { std::stringstream out(data005); @@ -136,15 +104,9 @@ bool ServerConfig::CheckOnce(const char* tag, ConfigDataHash &newconf) int count = ConfValueEnum(newconf, tag); if (count > 1) - { throw CoreException("You have more than one <"+std::string(tag)+"> tag, this is not permitted."); - return false; - } if (count < 1) - { throw CoreException("You have not defined a <"+std::string(tag)+"> tag, this is required."); - return false; - } return true; } @@ -375,7 +337,8 @@ bool ValidateServerName(ServerConfig* conf, const char*, const char*, ValueItem bool ValidateNetBufferSize(ServerConfig* conf, const char*, const char*, ValueItem &data) { - if ((!data.GetInteger()) || (data.GetInteger() > 65535) || (data.GetInteger() < 1024)) + // 65534 not 65535 because of null terminator + if ((!data.GetInteger()) || (data.GetInteger() > 65534) || (data.GetInteger() < 1024)) { conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"No NetBufferSize specified or size out of range, setting to default of 10240."); data.Set(10240); @@ -849,6 +812,7 @@ void ServerConfig::Read(bool bail, User* user) {"disabled", "commands", "", new ValueContainerChar (this->DisabledCommands), DT_CHARPTR, NoValidation}, {"disabled", "usermodes", "", new ValueContainerChar (disabledumodes), DT_CHARPTR, ValidateDisabledUModes}, {"disabled", "chanmodes", "", new ValueContainerChar (disabledcmodes), DT_CHARPTR, ValidateDisabledCModes}, + {"disabled", "fakenonexistant", "0", new ValueContainerBool (&this->DisabledDontExist), DT_BOOLEAN, NoValidation}, {"security", "userstats", "", new ValueContainerChar (this->UserStats), DT_CHARPTR, NoValidation}, {"security", "customversion","", new ValueContainerChar (this->CustomVersion), DT_CHARPTR, NoValidation}, {"security", "hidesplits", "0", new ValueContainerBool (&this->HideSplits), DT_BOOLEAN, NoValidation}, @@ -884,6 +848,7 @@ void ServerConfig::Read(bool bail, User* user) {"limits", "maxkick", "255", new ValueContainerST (&this->Limits.MaxKick), DT_INTEGER, NoValidation}, {"limits", "maxgecos", "128", new ValueContainerST (&this->Limits.MaxGecos), DT_INTEGER, NoValidation}, {"limits", "maxaway", "200", new ValueContainerST (&this->Limits.MaxAway), DT_INTEGER, NoValidation}, + {"options", "invitebypassmodes", "1", new ValueContainerBool (&this->InvBypassModes), DT_BOOLEAN, NoValidation}, {NULL, NULL, NULL, NULL, DT_NOTHING, NoValidation} }; @@ -1023,7 +988,7 @@ void ServerConfig::Read(bool bail, User* user) if (!Values[Index].validation_function(this, Values[Index].tag, Values[Index].value, vi)) throw CoreException("One or more values in your configuration file failed to validate. Please see your ircd.log for more information."); - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); switch (dt) { case DT_NOSPACES: @@ -1052,7 +1017,7 @@ void ServerConfig::Read(bool bail, User* user) ValueContainerChar* vcc = (ValueContainerChar*)Values[Index].val; if (*(vi.GetString()) && !ServerInstance->IsChannel(vi.GetString(), MAXBUF)) { - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); throw CoreException("The value of <"+std::string(Values[Index].tag)+":"+Values[Index].value+"> is not a valid channel name"); } vcc->Set(vi.GetString(), strlen(vi.GetString()) + 1); @@ -1085,7 +1050,7 @@ void ServerConfig::Read(bool bail, User* user) } /* We're done with this now */ delete Values[Index].val; - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); } /* Read the multiple-tag items (class tags, connect tags, etc) @@ -1094,9 +1059,9 @@ void ServerConfig::Read(bool bail, User* user) */ for (int Index = 0; MultiValues[Index].tag; ++Index) { - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); MultiValues[Index].init_function(this, MultiValues[Index].tag); - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); int number_of_tags = ConfValueEnum(newconfig, MultiValues[Index].tag); @@ -1111,7 +1076,7 @@ void ServerConfig::Read(bool bail, User* user) dt &= ~DT_ALLOW_NEWLINE; dt &= ~DT_ALLOW_WILD; - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); /* We catch and rethrow any exception here just so we can free our mutex */ try @@ -1190,10 +1155,10 @@ void ServerConfig::Read(bool bail, User* user) } catch (CoreException &e) { - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); throw e; } - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); } MultiValues[Index].validation_function(this, MultiValues[Index].tag, (char**)MultiValues[Index].items, vl, MultiValues[Index].datatype); } @@ -1213,7 +1178,7 @@ void ServerConfig::Read(bool bail, User* user) return; } - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); for (int i = 0; i < ConfValueEnum(newconfig, "type"); ++i) { char item[MAXBUF], classn[MAXBUF], classes[MAXBUF]; @@ -1252,7 +1217,7 @@ void ServerConfig::Read(bool bail, User* user) /* If we succeeded, set the ircd config to the new one */ this->config_data = newconfig; - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); // write once here, to try it out and make sure its ok ServerInstance->WritePID(this->PID); @@ -1273,7 +1238,7 @@ void ServerConfig::Read(bool bail, User* user) if (pl.size() && user) { - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); user->WriteServ("NOTICE %s :*** Not all your client ports could be bound.", user->nick.c_str()); user->WriteServ("NOTICE %s :*** The following port(s) failed to bind:", user->nick.c_str()); int j = 1; @@ -1281,10 +1246,10 @@ void ServerConfig::Read(bool bail, User* user) { user->WriteServ("NOTICE %s :*** %d. Address: %s Reason: %s", user->nick.c_str(), j, i->first.empty() ? "" : i->first.c_str(), i->second.c_str()); } - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); } - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); if (!removed_modules.empty()) { for (std::vector::iterator removing = removed_modules.begin(); removing != removed_modules.end(); removing++) @@ -1329,16 +1294,16 @@ void ServerConfig::Read(bool bail, User* user) ServerInstance->Logs->Log("CONFIG", DEFAULT, "Successfully unloaded %lu of %lu modules and loaded %lu of %lu modules.",(unsigned long)rem,(unsigned long)removed_modules.size(),(unsigned long)add,(unsigned long)added_modules.size()); - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); } if (bail) { /** Note: This is safe, the method checks for user == NULL */ - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); ServerInstance->Parser->SetupCommandTable(user); - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); } else { @@ -2367,8 +2332,8 @@ void ConfigReaderThread::Run() { /* TODO: TheUser may be invalid by the time we get here! Check its validity, or pass a UID would be better */ ServerInstance->Config->Read(do_bail, TheUser); - ServerInstance->Threads->Mutex(true); + ServerInstance->Threads->Lock(); this->SetExitFlag(); - ServerInstance->Threads->Mutex(false); + ServerInstance->Threads->Unlock(); }