#include "helperfuncs.h"
#include "hashcomp.h"
#include "typedefs.h"
+#include "configreader.h"
#include "cull_list.h"
-extern ServerConfig *Config;
+extern InspIRCd* ServerInstance;
extern int MODCOUNT;
extern std::vector<Module*> modules;
extern std::vector<ircd_module*> factory;
-extern ServerConfig* Config;
-extern user_hash clientlist;
-extern std::vector<userrec*> local_users;
/* Version two, now with optimized expiry!
*
* very efficient. I have improved the efficiency of the algorithm in two ways:
*
* (1) There are now two lists of items for each linetype. One list holds temporary
- * items, and the other list holds permenant items (ones which will expire).
- * Items which are on the permenant list are NEVER checked at all by the
+ * items, and the other list holds permanent items (ones which will expire).
+ * Items which are on the permanent list are NEVER checked at all by the
* expire_lines() function.
* (2) The temporary xline lists are always kept in strict numerical order, keyed by
* current time + duration. This means that the line which is due to expire the
// this way these days, such as qlines against
// services nicks, etc.
-bool InitXLine(const char* tag)
+bool InitXLine(ServerConfig* conf, const char* tag)
{
return true;
}
-bool DoneXLine(const char* tag)
+bool DoneXLine(ServerConfig* conf, const char* tag)
{
apply_lines(APPLY_ALL);
return true;
}
-bool DoZLine(const char* tag, char** entries, void** values, int* types)
+bool DoZLine(ServerConfig* conf, const char* tag, char** entries, void** values, int* types)
{
char* reason = (char*)values[0];
char* ipmask = (char*)values[1];
return true;
}
-bool DoQLine(const char* tag, char** entries, void** values, int* types)
+bool DoQLine(ServerConfig* conf, const char* tag, char** entries, void** values, int* types)
{
char* reason = (char*)values[0];
char* nick = (char*)values[1];
return true;
}
-bool DoKLine(const char* tag, char** entries, void** values, int* types)
+bool DoKLine(ServerConfig* conf, const char* tag, char** entries, void** values, int* types)
{
char* reason = (char*)values[0];
char* host = (char*)values[1];
return true;
}
-bool DoELine(const char* tag, char** entries, void** values, int* types)
+bool DoELine(ServerConfig* conf, const char* tag, char** entries, void** values, int* types)
{
char* reason = (char*)values[0];
char* host = (char*)values[1];
if ((glines.empty()) && (pglines.empty()))
return NULL;
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
for (std::vector<GLine>::iterator i = pglines.begin(); i != pglines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
return NULL;
}
char host2[MAXBUF];
snprintf(host2,MAXBUF,"*@%s",host);
for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++)
- if ((match(host,i->hostmask)) || (match(host2,i->hostmask)))
+ if ((match(host,i->hostmask)) || (match(host2,i->hostmask, true)))
return i->reason;
for (std::vector<ELine>::iterator i = pelines.begin(); i != pelines.end(); i++)
- if ((match(host,i->hostmask)) || (match(host2,i->hostmask)))
+ if ((match(host,i->hostmask)) || (match(host2,i->hostmask, true)))
return i->reason;
return NULL;
}
if ((zlines.empty()) && (pzlines.empty()))
return NULL;
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
- if (match(ipaddr,i->ipaddr))
+ if (match(ipaddr,i->ipaddr, true))
return i->reason;
for (std::vector<ZLine>::iterator i = pzlines.begin(); i != pzlines.end(); i++)
- if (match(ipaddr,i->ipaddr))
+ if (match(ipaddr,i->ipaddr, true))
return i->reason;
return NULL;
}
if ((klines.empty()) && (pklines.empty()))
return NULL;
for (std::vector<KLine>::iterator i = klines.begin(); i != klines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
for (std::vector<KLine>::iterator i = pklines.begin(); i != pklines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
return NULL;
}
CullList* Goners = new CullList();
char* check = NULL;
- for (std::vector<userrec*>::const_iterator u2 = local_users.begin(); u2 != local_users.end(); u2++)
+ for (std::vector<userrec*>::const_iterator u2 = ServerInstance->local_users.begin(); u2 != ServerInstance->local_users.end(); u2++)
{
userrec* u = (userrec*)(*u2);
u->MakeHost(host);
}
if ((What & APPLY_ZLINES) && (zlines.size() || pzlines.size()))
{
- if ((check = matches_zline((char*)inet_ntoa(u->ip4))))
+ if ((check = matches_zline(u->GetIPString())))
{
snprintf(reason,MAXBUF,"Z-Lined: %s",check);
Goners->AddItem(u,reason);
DELETE(Goners);
}
-void stats_k(userrec* user)
+void stats_k(userrec* user, string_list &results)
{
+ std::string sn = ServerInstance->Config->ServerName;
for (std::vector<KLine>::iterator i = klines.begin(); i != klines.end(); i++)
- WriteServ(user->fd,"216 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 216 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<KLine>::iterator i = pklines.begin(); i != pklines.end(); i++)
- WriteServ(user->fd,"216 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 216 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_g(userrec* user)
+void stats_g(userrec* user, string_list &results)
{
+ std::string sn = ServerInstance->Config->ServerName;
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<GLine>::iterator i = pglines.begin(); i != pglines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_q(userrec* user)
+void stats_q(userrec* user, string_list &results)
{
+ std::string sn = ServerInstance->Config->ServerName;
for (std::vector<QLine>::iterator i = qlines.begin(); i != qlines.end(); i++)
- WriteServ(user->fd,"217 %s :%s %d %d %s :%s",user->nick,i->nick,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 217 "+user->nick+" :"+i->nick+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<QLine>::iterator i = pqlines.begin(); i != pqlines.end(); i++)
- WriteServ(user->fd,"217 %s :%s %d %d %s :%s",user->nick,i->nick,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 217 "+user->nick+" :"+i->nick+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_z(userrec* user)
+void stats_z(userrec* user, string_list &results)
{
+ std::string sn = ServerInstance->Config->ServerName;
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->ipaddr,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->ipaddr+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<ZLine>::iterator i = pzlines.begin(); i != pzlines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->ipaddr,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->ipaddr+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_e(userrec* user)
+void stats_e(userrec* user, string_list &results)
{
+ std::string sn = ServerInstance->Config->ServerName;
for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<ELine>::iterator i = pelines.begin(); i != pelines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}