* Write a line of text `text' to the logfile (and stdout, if in nofork) if the level `level'
* is greater than the configured loglevel.
*/
-void log(int level, char *text, ...)
+void do_log(int level, const char *text, ...)
{
va_list argsPtr;
char textbuffer[MAXBUF];
va_end(argsPtr);
if (Config->writelog)
+ {
fprintf(Config->log_file,"%s %s\n",TIMESTR,textbuffer);
+ fflush(Config->log_file);
+ }
}
if (Config->nofork)
if ((sock < 0) || (!text) || (sock > MAX_DESCRIPTORS))
return;
- bytes = snprintf(tb,MAXBUF,"%s\r\n",text);
- chop(tb);
-
if (fd_ref_table[sock])
{
+ bytes = snprintf(tb,MAXBUF,"%s\r\n",text);
+ chop(tb);
+
if (Config->GetIOHook(fd_ref_table[sock]->port))
{
try
return;
}
- va_start(argsPtr, text);
- vsnprintf(textbuffer, MAXBUF, text, argsPtr);
- va_end(argsPtr);
- bytes = snprintf(tb,MAXBUF,"%s\r\n",textbuffer);
- chop(tb);
-
if (fd_ref_table[sock])
{
+
+ va_start(argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+ bytes = snprintf(tb,MAXBUF,"%s\r\n",textbuffer);
+ chop(tb);
+
if (Config->GetIOHook(fd_ref_table[sock]->port))
{
try
if ((sock < 0) || (!text) || (sock > MAX_DESCRIPTORS))
return;
- bytes = snprintf(tb,MAXBUF,":%s %s\r\n",Config->ServerName,text);
- chop(tb);
-
if (fd_ref_table[sock])
{
+ bytes = snprintf(tb,MAXBUF,":%s %s\r\n",Config->ServerName,text);
+ chop(tb);
+
if (Config->GetIOHook(fd_ref_table[sock]->port))
{
try
return;
}
+ if (!fd_ref_table[sock])
+ return;
+
va_start(argsPtr, text);
vsnprintf(textbuffer, MAXBUF, text, argsPtr);
va_end(argsPtr);
if ((sock < 0) || (!text) || (!user) || (sock > MAX_DESCRIPTORS))
return;
- bytes = snprintf(tb,MAXBUF,":%s %s\r\n",user->GetFullHost(),text);
- chop(tb);
-
if (fd_ref_table[sock])
{
+ bytes = snprintf(tb,MAXBUF,":%s %s\r\n",user->GetFullHost(),text);
+ chop(tb);
+
if (Config->GetIOHook(fd_ref_table[sock]->port))
{
try
return;
}
- va_start(argsPtr, text);
- vsnprintf(textbuffer, MAXBUF, text, argsPtr);
- va_end(argsPtr);
- bytes = snprintf(tb,MAXBUF,":%s %s\r\n",user->GetFullHost(),textbuffer);
- chop(tb);
-
if (fd_ref_table[sock])
{
+
+ va_start(argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+ bytes = snprintf(tb,MAXBUF,":%s %s\r\n",user->GetFullHost(),textbuffer);
+ chop(tb);
+
if (Config->GetIOHook(fd_ref_table[sock]->port))
{
try
-void WriteChannelWithServ(char* ServName, chanrec* Ptr, char* text, ...)
+void WriteChannelWithServ(const char* ServName, chanrec* Ptr, const char* text, ...)
{
char textbuffer[MAXBUF];
va_list argsPtr;
}
}
-void WriteChannelWithServ_NoFormat(char* ServName, chanrec* Ptr, const char* text)
+void WriteChannelWithServ_NoFormat(const char* ServName, chanrec* Ptr, const char* text)
{
CUList *ulist;
}
}
-std::string GetServerDescription(char* servername)
+std::string GetServerDescription(const char* servername)
{
std::string description = "";
/* Null terminate scratch */
*offset = '\0';
- strlcat(scratch,sparam,MAXMODES);
+ strlcat(scratch,sparam,MAXBUF);
return scratch;
}
}
-/* looks up a users password for their connection class (<ALLOW>/<DENY> tags) */
+/* looks up a users password for their connection class (<ALLOW>/<DENY> tags)
+ * NOTE: If the <ALLOW> or <DENY> tag specifies an ip, and this user resolves,
+ * then their ip will be taken as 'priority' anyway, so for example,
+ * <connect allow="127.0.0.1"> will match joe!bloggs@localhost
+ */
ConnectClass GetClass(userrec *user)
{
for (ClassVector::iterator i = Config->Classes.begin(); i != Config->Classes.end(); i++)
{
- if (match(user->host,i->host.c_str()))
+ if ((match(inet_ntoa(user->ip4),i->host.c_str())) || (match(user->host,i->host.c_str())))
{
return *i;
}
log(DEFAULT,"You do not have execinfo.h so i could not backtrace -- on FreeBSD, please install the libexecinfo port.");
#endif
send_error("Somebody screwed up... Whoops. IRC Server terminating.");
+ signal(SIGSEGV, SIG_DFL);
+ if (raise(SIGSEGV) == -1)
+ {
+ log(DEFAULT,"What the hell, i couldnt re-raise SIGSEGV! Error: %s",strerror(errno));
+ }
Exit(status);
}