]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
/who tidyup - needs QA'ing
[user/henk/code/inspircd.git] / src / configreader.cpp
index 64641805ca39a0c01b32327486dfb52aa2222ec9..1d4908f7acad9c7f87ae81fc5bf78e7059cc942b 100644 (file)
@@ -39,6 +39,8 @@ ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance)
        MaxConn = SOMAXCONN;
        MaxWhoResults = 100;
        debugging = 0;
+       MaxChans = 20;
+       OperMaxChans = 30;
        LogLevel = DEFAULT;
        maxbans.clear();
 }
@@ -588,11 +590,15 @@ void ServerConfig::Read(bool bail, userrec* user)
                {"options",     "syntaxhints",  "0",                    new ValueContainerBool (&this->SyntaxHints),            DT_BOOLEAN, NoValidation},
                {"options",     "cyclehosts",   "0",                    new ValueContainerBool (&this->CycleHosts),             DT_BOOLEAN, NoValidation},
                {"options",     "ircumsgprefix","0",                    new ValueContainerBool (&this->UndernetMsgPrefix),      DT_BOOLEAN, NoValidation},
+               {"options",     "announceinvites", "1",                 new ValueContainerBool (&this->AnnounceInvites),        DT_BOOLEAN, NoValidation},
+               {"options",     "hostintopic",  "1",                    new ValueContainerBool (&this->FullHostInTopic),        DT_BOOLEAN, NoValidation},
                {"pid",         "file",         "",                     new ValueContainerChar (this->PID),                     DT_CHARPTR, NoValidation},
                {"whowas",      "groupsize",    "10",                   new ValueContainerInt  (&this->WhoWasGroupSize),        DT_INTEGER, NoValidation},
                {"whowas",      "maxgroups",    "10240",                new ValueContainerInt  (&this->WhoWasMaxGroups),        DT_INTEGER, NoValidation},
                {"whowas",      "maxkeep",      "3600",                 new ValueContainerChar (maxkeep),                       DT_CHARPTR, ValidateWhoWas},
                {"die",         "value",        "",                     new ValueContainerChar (this->DieValue),                DT_CHARPTR, NoValidation},
+               {"channels",    "users",        "20",                   new ValueContainerUInt (&this->MaxChans),               DT_INTEGER, NoValidation},
+               {"channels",    "opers",        "60",                   new ValueContainerUInt (&this->OperMaxChans),           DT_INTEGER, NoValidation},
                {NULL}
        };
 
@@ -873,6 +879,11 @@ void ServerConfig::Read(bool bail, userrec* user)
 
                ServerInstance->Log(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());
        }
+
+       if (user)
+               user->WriteServ("NOTICE %s :*** Successfully rehashed server.", user->nick);
+       else
+               ServerInstance->WriteOpers("*** Successfully rehashed server.");
 }
 
 bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::ostringstream &errorstream)
@@ -1428,12 +1439,18 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
                {
                        /* Leaves us with just the path */
                        std::string newfile = confpath.substr(0, pos) + std::string("/") + fname;
+                       if (!FileExists(newfile.c_str()))
+                               return false;
                        file =  fopen(newfile.c_str(), "r");
 
                }
        }
        else
+       {
+               if (!FileExists(fname))
+                       return false;
                file =  fopen(fname, "r");
+       }
 
        if (file)
        {
@@ -1460,11 +1477,16 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
 
 bool ServerConfig::FileExists(const char* file)
 {
+       struct stat sb;
+       if (stat(file, &sb) == -1)
+               return false;
+
+       if ((sb.st_mode & S_IFDIR) > 0)
+               return false;
+            
        FILE *input;
        if ((input = fopen (file, "r")) == NULL)
-       {
                return false;
-       }
        else
        {
                fclose(input);
@@ -1482,12 +1504,12 @@ char* ServerConfig::CleanFilename(char* name)
 
 bool ServerConfig::DirValid(const char* dirandfile)
 {
-       char work[MAXBUF];
-       char buffer[MAXBUF];
-       char otherdir[MAXBUF];
+       char work[1024];
+       char buffer[1024];
+       char otherdir[1024];
        int p;
 
-       strlcpy(work, dirandfile, MAXBUF);
+       strlcpy(work, dirandfile, 1024);
        p = strlen(work);
 
        // we just want the dir
@@ -1503,13 +1525,13 @@ bool ServerConfig::DirValid(const char* dirandfile)
        }
 
        // Get the current working directory
-       if (getcwd(buffer, MAXBUF ) == NULL )
+       if (getcwd(buffer, 1024 ) == NULL )
                return false;
 
        if (chdir(work) == -1)
                return false;
 
-       if (getcwd(otherdir, MAXBUF ) == NULL )
+       if (getcwd(otherdir, 1024 ) == NULL )
                return false;
 
        if (chdir(buffer) == -1)
@@ -1536,12 +1558,12 @@ bool ServerConfig::DirValid(const char* dirandfile)
 
 std::string ServerConfig::GetFullProgDir(char** argv, int argc)
 {
-       char work[MAXBUF];
-       char buffer[MAXBUF];
-       char otherdir[MAXBUF];
+       char work[1024];
+       char buffer[1024];
+       char otherdir[1024];
        int p;
 
-       strlcpy(work,argv[0],MAXBUF);
+       strlcpy(work,argv[0],1024);
        p = strlen(work);
 
        // we just want the dir
@@ -1557,13 +1579,13 @@ std::string ServerConfig::GetFullProgDir(char** argv, int argc)
        }
 
        // Get the current working directory
-       if (getcwd(buffer, MAXBUF) == NULL)
+       if (getcwd(buffer, 1024) == NULL)
                return "";
 
        if (chdir(work) == -1)
                return "";
 
-       if (getcwd(otherdir, MAXBUF) == NULL)
+       if (getcwd(otherdir, 1024) == NULL)
                return "";
 
        if (chdir(buffer) == -1)