extern user_hash clientlist;
extern chan_hash chanlist;
+char LOG_FILE[MAXBUF];
+
extern std::vector<userrec*> local_users;
static char TIMESTR[26];
* uses the oper list, which means if you have 2000 users but only 5 opers,
* it iterates 5 times.
*/
-void WriteOpers(char* text, ...)
+void WriteOpers(const char* text, ...)
{
char textbuffer[MAXBUF];
va_list argsPtr;
vsnprintf(textbuffer, MAXBUF, text, argsPtr);
va_end(argsPtr);
+ WriteOpers_NoFormat(textbuffer);
+}
+
+void WriteOpers_NoFormat(const char* text)
+{
+ if (!text)
+ {
+ log(DEFAULT,"*** BUG *** WriteOpers_NoFormat was given an invalid parameter");
+ return;
+ }
+
for (std::vector<userrec*>::iterator i = all_opers.begin(); i != all_opers.end(); i++)
{
userrec* a = *i;
if (a->modebits & UM_SERVERNOTICE)
{
// send server notices to all with +s
- WriteServ(a->fd,"NOTICE %s :%s",a->nick,textbuffer);
+ WriteServ(a->fd,"NOTICE %s :%s",a->nick,text);
}
}
}
vsnprintf(textbuffer, MAXBUF, text, argsPtr);
va_end(argsPtr);
- snprintf(formatbuffer,MAXBUF,"NOTICE $%s :%s",Config->ServerName,textbuffer);
+ snprintf(formatbuffer,MAXBUF,"PRIVMSG $%s :%s",Config->ServerName,textbuffer);
for (std::vector<userrec*>::const_iterator i = local_users.begin(); i != local_users.end(); i++)
{
if (n)
{
for (char* t = n; *t; t++)
- *t = lowermap[(unsigned)*t];
+ *t = lowermap[(unsigned char)*t];
}
}
for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
{
- if (i->second->oper)
+ if (*(i->second->oper))
c++;
}
return c;
return shift_down;
}
+
+void OpenLog(char** argv, int argc)
+{
+ if (!*LOG_FILE)
+ {
+ if (Config->logpath == "")
+ {
+ Config->logpath = GetFullProgDir(argv,argc) + "/ircd.log";
+ }
+ }
+ else
+ {
+ Config->log_file = fopen(LOG_FILE,"a+");
+
+ if (!Config->log_file)
+ {
+ printf("ERROR: Could not write to logfile %s, bailing!\n\n",Config->logpath.c_str());
+ Exit(ERROR);
+ }
+
+ return;
+ }
+
+ Config->log_file = fopen(Config->logpath.c_str(),"a+");
+
+ if (!Config->log_file)
+ {
+ printf("ERROR: Could not write to logfile %s, bailing!\n\n",Config->logpath.c_str());
+ Exit(ERROR);
+ }
+}
+
+void CheckRoot()
+{
+ if (geteuid() == 0)
+ {
+ printf("WARNING!!! You are running an irc server as ROOT!!! DO NOT DO THIS!!!\n\n");
+ log(DEFAULT,"InspIRCd: startup: not starting with UID 0!");
+ Exit(ERROR);
+ }
+}
+
+void CheckDie()
+{
+ if (*Config->DieValue)
+ {
+ printf("WARNING: %s\n\n",Config->DieValue);
+ log(DEFAULT,"Uh-Oh, somebody didn't read their config file: '%s'",Config->DieValue);
+ Exit(ERROR);
+ }
+}
+
+/* We must load the modules AFTER initializing the socket engine, now */
+void LoadAllModules(InspIRCd* ServerInstance)
+{
+ char configToken[MAXBUF];
+ Config->module_names.clear();
+ MODCOUNT = -1;
+
+ for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "module"); count++)
+ {
+ Config->ConfValue(Config->config_data, "module","name",count,configToken,MAXBUF);
+ printf("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",configToken);
+
+ if (!ServerInstance->LoadModule(configToken))
+ {
+ log(DEFAULT,"Exiting due to a module loader error.");
+ printf("\nThere was an error loading a module: %s\n\n",ServerInstance->ModuleError());
+ Exit(0);
+ }
+ }
+
+ log(DEFAULT,"Total loaded modules: %lu",(unsigned long)MODCOUNT+1);
+}