extern int openSockfd[MAXSOCKS];
extern time_t TIME;
+extern int MODCOUNT;
+extern std::vector<Module*> modules;
+extern std::vector<ircd_module*> factory;
ServerConfig::ServerConfig()
{
return false;
}
+bool ServerConfig::CheckOnce(char* tag, bool bail, userrec* user)
+{
+ int count = ConfValueEnum(tag,&Config->config_f);
+ if (count > 1)
+ {
+ if (bail)
+ {
+ printf("There were errors in your configuration:\nYou have more than one <%s> tag, this is not permitted.\n",tag);
+ Exit(0);
+ }
+ else
+ {
+ if (user)
+ {
+ WriteServ(user->fd,"There were errors in your configuration:");
+ WriteServ(user->fd,"You have more than one <%s> tag, this is not permitted.\n",tag);
+ }
+ else
+ {
+ WriteOpers("There were errors in the configuration file:");
+ WriteOpers("You have more than one <%s> tag, this is not permitted.\n",tag);
+ }
+ }
+ return false;
+ }
+ if (count < 1)
+ {
+ if (bail)
+ {
+ printf("There were errors in your configuration:\nYou have not defined a <%s> tag, this is required.",tag);
+ Exit(0);
+ }
+ else
+ {
+ if (user)
+ {
+ WriteServ(user->fd,"There were errors in your configuration:");
+ WriteServ(user->fd,"You have not defined a <%s> tag, this is required.",tag);
+ }
+ else
+ {
+ WriteOpers("There were errors in the configuration file:");
+ WriteOpers("You have not defined a <%s> tag, this is required.",tag);
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
void ServerConfig::Read(bool bail, userrec* user)
{
char dbg[MAXBUF],pauseval[MAXBUF],Value[MAXBUF],timeout[MAXBUF],NB[MAXBUF],flood[MAXBUF],MW[MAXBUF],MCON[MAXBUF];
}
}
+ /* Check we dont have more than one of singular tags
+ */
+ if (!CheckOnce("server",bail,user) || !CheckOnce("admin",bail,user) || !CheckOnce("files",bail,user)
+ || !CheckOnce("power",bail,user) || !CheckOnce("options",bail,user)
+ || !CheckOnce("dns",bail,user) || !CheckOnce("pid",bail,user))
+ {
+ return;
+ }
+
ConfValue("server","name",0,Config->ServerName,&Config->config_f);
ConfValue("server","description",0,Config->ServerDesc,&Config->config_f);
ConfValue("server","network",0,Config->Network,&Config->config_f);
exit(status);
}
+char* CleanFilename(char* name)
+{
+ char* p = name + strlen(name);
+ while ((p != name) && (*p != '/')) p--;
+ return (p != name ? ++p : p);
+}
+
+
void Rehash(int status)
{
- WriteOpers("Rehashing config file %s due to SIGHUP",CONFIG_FILE);
+ WriteOpers("Rehashing config file %s due to SIGHUP",CleanFilename(CONFIG_FILE));
fclose(Config->log_file);
OpenLog(NULL,0);
Config->Read(false,NULL);
+ FOREACH_MOD(I_OnRehash,OnRehash(""));
}