]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
This file *BROKEN AGAIN* in windows builds (VC9) - uint_16t and uint_32t do not exist...
[user/henk/code/inspircd.git] / src / configreader.cpp
index 0c951055338ffee7f30816998497367128ffef69..51045ef5859a8dba15f215e3666849a43f7e9b64 100644 (file)
@@ -3,7 +3,7 @@
  *       +------------------------------------+
  *
  *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
  *         the file COPYING for details.
@@ -739,10 +739,10 @@ void ServerConfig::ReportConfigError(const std::string &errormessage, bool bail,
                }
                else
                {
-                       ServerInstance->SNO->WriteToSnoMask('A', "There were errors in the configuration file:");
+                       ServerInstance->SNO->WriteToSnoMask('a', "There were errors in the configuration file:");
                        while (start < errors.length())
                        {
-                               ServerInstance->SNO->WriteToSnoMask('A', errors.substr(start, 360));
+                               ServerInstance->SNO->WriteToSnoMask('a', errors.substr(start, 360));
                                start += 360;
                        }
                }
@@ -823,7 +823,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                {"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},
+               {"disabled",    "fakenonexistant",      "0",            new ValueContainerBool (&this->DisabledDontExist),              DT_BOOLEAN,  NoValidation},
 
                {"security",            "runasuser",    "",             new ValueContainerChar(this->SetUser),                          DT_CHARPTR, NoValidation},
                {"security",            "runasgroup",   "",             new ValueContainerChar(this->SetGroup),                         DT_CHARPTR, NoValidation},
@@ -834,7 +834,8 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                {"security",    "hidewhois",    "",                     new ValueContainerChar (this->HideWhoisServer),         DT_NOSPACES, NoValidation},
                {"security",    "hidekills",    "",                     new ValueContainerChar (this->HideKillsServer),         DT_NOSPACES,  NoValidation},
                {"security",    "operspywhois", "0",                    new ValueContainerBool (&this->OperSpyWhois),           DT_BOOLEAN,  NoValidation},
-               {"security",    "restrictbannedusers",  "1",                    new ValueContainerBool (&this->RestrictBannedUsers),            DT_BOOLEAN,  NoValidation},
+               {"security",    "restrictbannedusers",  "1",            new ValueContainerBool (&this->RestrictBannedUsers),            DT_BOOLEAN,  NoValidation},
+               {"security",    "genericoper",  "0",                    new ValueContainerBool (&this->GenericOper),            DT_BOOLEAN,  NoValidation},
                {"performance", "nouserdns",    "0",                    new ValueContainerBool (&this->NoUserDns),              DT_BOOLEAN,  NoValidation},
                {"options",     "syntaxhints",  "0",                    new ValueContainerBool (&this->SyntaxHints),            DT_BOOLEAN,  NoValidation},
                {"options",     "cyclehosts",   "0",                    new ValueContainerBool (&this->CycleHosts),             DT_BOOLEAN,  NoValidation},
@@ -1005,7 +1006,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                        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->Lock();
+                       // XXX: ServerInstance->Threads->Lock();
                        switch (dt)
                        {
                                case DT_NOSPACES:
@@ -1034,7 +1035,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                        ValueContainerChar* vcc = (ValueContainerChar*)Values[Index].val;
                                        if (*(vi.GetString()) && !ServerInstance->IsChannel(vi.GetString(), MAXBUF))
                                        {
-                                               ServerInstance->Threads->Unlock();
+                                               // XXX: 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);
@@ -1067,7 +1068,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                        }
                        /* We're done with this now */
                        delete Values[Index].val;
-                       ServerInstance->Threads->Unlock();
+                       // XXX: ServerInstance->Threads->Unlock();
                }
 
                /* Read the multiple-tag items (class tags, connect tags, etc)
@@ -1076,9 +1077,9 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                 */
                for (int Index = 0; MultiValues[Index].tag; ++Index)
                {
-                       ServerInstance->Threads->Lock();
+                       // XXX: ServerInstance->Threads->Lock();
                        MultiValues[Index].init_function(this, MultiValues[Index].tag);
-                       ServerInstance->Threads->Unlock();
+                       // XXX: ServerInstance->Threads->Unlock();
 
                        int number_of_tags = ConfValueEnum(newconfig, MultiValues[Index].tag);
 
@@ -1093,7 +1094,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                        dt &= ~DT_ALLOW_NEWLINE;
                                        dt &= ~DT_ALLOW_WILD;
 
-                                       ServerInstance->Threads->Lock();
+                                       // XXX: ServerInstance->Threads->Lock();
                                        /* We catch and rethrow any exception here just so we can free our mutex
                                         */
                                        try
@@ -1172,10 +1173,10 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                        }
                                        catch (CoreException &e)
                                        {
-                                               ServerInstance->Threads->Unlock();
+                                               // XXX: ServerInstance->Threads->Unlock();
                                                throw e;
                                        }
-                                       ServerInstance->Threads->Unlock();
+                                       // XXX: ServerInstance->Threads->Unlock();
                                }
                                MultiValues[Index].validation_function(this, MultiValues[Index].tag, (char**)MultiValues[Index].items, vl, MultiValues[Index].datatype);
                        }
@@ -1195,7 +1196,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                return;
        }
 
-       ServerInstance->Threads->Lock();
+       // XXX: ServerInstance->Threads->Lock();
        for (int i = 0; i < ConfValueEnum(newconfig, "type"); ++i)
        {
                char item[MAXBUF], classn[MAXBUF], classes[MAXBUF];
@@ -1229,7 +1230,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                        if (bail)
                                                printf("Warning: Oper type '%s' has a missing class named '%s', this does nothing!\n", item, classname.c_str());
                                        else
-                                               ServerInstance->SNO->WriteToSnoMask('A', "Warning: Oper type '%s' has a missing class named '%s', this does nothing!", item, classname.c_str());
+                                               ServerInstance->SNO->WriteToSnoMask('a', "Warning: Oper type '%s' has a missing class named '%s', this does nothing!", item, classname.c_str());
                                }
                        }
                }
@@ -1238,7 +1239,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
        /* If we succeeded, set the ircd config to the new one */
        this->config_data = newconfig;
 
-       ServerInstance->Threads->Unlock();
+       // XXX: ServerInstance->Threads->Unlock();
 
        // write once here, to try it out and make sure its ok
        ServerInstance->WritePID(this->PID);
@@ -1253,7 +1254,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
 
                if (pl.size() && !useruid.empty())
                {
-                       ServerInstance->Threads->Lock();
+                       // XXX: ServerInstance->Threads->Lock();
                        User* user = ServerInstance->FindNick(useruid);
                        if (user)
                        {
@@ -1265,17 +1266,17 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                        user->WriteServ("NOTICE %s :*** %d.   Address: %s        Reason: %s", user->nick.c_str(), j, i->first.empty() ? "<all>" : i->first.c_str(), i->second.c_str());
                                }
                        }
-                       ServerInstance->Threads->Unlock();
+                       // XXX: ServerInstance->Threads->Unlock();
                }
 
-               ServerInstance->Threads->Lock();
+               // XXX: ServerInstance->Threads->Lock();
                if (!removed_modules.empty())
                {
                        for (std::vector<std::string>::iterator removing = removed_modules.begin(); removing != removed_modules.end(); removing++)
                        {
                                if (ServerInstance->Modules->Unload(removing->c_str()))
                                {
-                                       ServerInstance->SNO->WriteToSnoMask('A', "*** REHASH UNLOADED MODULE: %s",removing->c_str());
+                                       ServerInstance->SNO->WriteToSnoMask('a', "*** REHASH UNLOADED MODULE: %s",removing->c_str());
 
                                        if (!useruid.empty())
                                        {
@@ -1284,7 +1285,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                                        user->WriteNumeric(RPL_UNLOADEDMODULE, "%s %s :Module %s successfully unloaded.",user->nick.c_str(), removing->c_str(), removing->c_str());
                                        }
                                        else
-                                               ServerInstance->SNO->WriteToSnoMask('A', "Module %s successfully unloaded.", removing->c_str());
+                                               ServerInstance->SNO->WriteToSnoMask('a', "Module %s successfully unloaded.", removing->c_str());
 
                                        rem++;
                                }
@@ -1297,7 +1298,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                                        user->WriteNumeric(ERR_CANTUNLOADMODULE, "%s %s :Failed to unload module %s: %s",user->nick.c_str(), removing->c_str(), removing->c_str(), ServerInstance->Modules->LastError().c_str());
                                        }
                                        else
-                                                ServerInstance->SNO->WriteToSnoMask('A', "Failed to unload module %s: %s", removing->c_str(), ServerInstance->Modules->LastError().c_str());
+                                                ServerInstance->SNO->WriteToSnoMask('a', "Failed to unload module %s: %s", removing->c_str(), ServerInstance->Modules->LastError().c_str());
                                }
                        }
                }
@@ -1308,7 +1309,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                        {
                                if (ServerInstance->Modules->Load(adding->c_str()))
                                {
-                                       ServerInstance->SNO->WriteToSnoMask('A', "*** REHASH LOADED MODULE: %s",adding->c_str());
+                                       ServerInstance->SNO->WriteToSnoMask('a', "*** REHASH LOADED MODULE: %s",adding->c_str());
                                        if (!useruid.empty())
                                        {
                                                User* user = ServerInstance->FindNick(useruid);
@@ -1316,7 +1317,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                                        user->WriteNumeric(RPL_LOADEDMODULE, "%s %s :Module %s successfully loaded.",user->nick.c_str(), adding->c_str(), adding->c_str());
                                        }
                                        else
-                                               ServerInstance->SNO->WriteToSnoMask('A', "Module %s successfully loaded.", adding->c_str());
+                                               ServerInstance->SNO->WriteToSnoMask('a', "Module %s successfully loaded.", adding->c_str());
 
                                        add++;
                                }
@@ -1329,11 +1330,11 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                                        user->WriteNumeric(ERR_CANTLOADMODULE, "%s %s :Failed to load module %s: %s",user->nick.c_str(), adding->c_str(), adding->c_str(), ServerInstance->Modules->LastError().c_str());
                                        }
                                        else
-                                               ServerInstance->SNO->WriteToSnoMask('A', "Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str());
+                                               ServerInstance->SNO->WriteToSnoMask('a', "Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str());
                                }
                        }
                }
-               ServerInstance->Threads->Unlock();
+               // XXX: ServerInstance->Threads->Unlock();
 
        }
 
@@ -1346,7 +1347,7 @@ void ServerConfig::Read(bool bail, const std::string &useruid)
                                user->WriteServ("NOTICE %s :*** Successfully rehashed server.", user->nick.c_str());
                }
                else
-                       ServerInstance->SNO->WriteToSnoMask('A', "*** Successfully rehashed server.");
+                       ServerInstance->SNO->WriteToSnoMask('a', "*** Successfully rehashed server.");
        }
 
 }
@@ -2045,64 +2046,6 @@ char* ServerConfig::CleanFilename(char* name)
 }
 
 
-bool ServerConfig::DirValid(const char* dirandfile)
-{
-#ifdef WINDOWS
-       return true;
-#else
-
-       char work[1024];
-       char buffer[1024];
-       char otherdir[1024];
-       int p;
-
-       strlcpy(work, dirandfile, 1024);
-       p = strlen(work);
-
-       // we just want the dir
-       while (*work)
-       {
-               if (work[p] == '/')
-               {
-                       work[p] = '\0';
-                       break;
-               }
-
-               work[p--] = '\0';
-       }
-
-       // Get the current working directory
-       if (getcwd(buffer, 1024 ) == NULL )
-               return false;
-
-       if (chdir(work) == -1)
-               return false;
-
-       if (getcwd(otherdir, 1024 ) == NULL )
-               return false;
-
-       if (chdir(buffer) == -1)
-               return false;
-
-       size_t t = strlen(work);
-
-       if (strlen(otherdir) >= t)
-       {
-               otherdir[t] = '\0';
-               if (!strcmp(otherdir,work))
-               {
-                       return true;
-               }
-
-               return false;
-       }
-       else
-       {
-               return false;
-       }
-#endif
-}
-
 std::string ServerConfig::GetFullProgDir()
 {
        char buffer[PATH_MAX];
@@ -2204,15 +2147,6 @@ bool ValueItem::GetBool()
  */
 bool InitTypes(ServerConfig* conf, const char*)
 {
-       if (conf->opertypes.size())
-       {
-               for (opertype_t::iterator n = conf->opertypes.begin(); n != conf->opertypes.end(); n++)
-               {
-                       if (n->second)
-                               delete[] n->second;
-               }
-       }
-
        conf->opertypes.clear();
        return true;
 }
@@ -2249,7 +2183,7 @@ bool DoType(ServerConfig* conf, const char*, char**, ValueList &values, int*)
        const char* TypeName = values[0].GetString();
        const char* Classes = values[1].GetString();
 
-       conf->opertypes[TypeName] = strnewdup(Classes);
+       conf->opertypes[TypeName] = std::string(Classes);
        return true;
 }
 
@@ -2371,7 +2305,5 @@ bool DoneELine(ServerConfig* conf, const char* tag)
 void ConfigReaderThread::Run()
 {
        ServerInstance->Config->Read(do_bail, TheUserUID);
-       ServerInstance->Threads->Lock();
-       this->SetExitFlag();
-       ServerInstance->Threads->Unlock();
+       done = true;
 }