#ifdef USE_EPOLL
#include <sys/epoll.h>
-#define EP_DELAY 50
+#define EP_DELAY 5
#endif
#include <time.h>
int statsAccept = 0, statsRefused = 0, statsUnknown = 0, statsCollisions = 0, statsDns = 0, statsDnsGood = 0, statsDnsBad = 0, statsConnects = 0, statsSent= 0, statsRecv = 0;
-
+Server* MyServer = new Server;
FILE *log_file;
if (!FindChan(cname))
{
- MOD_RESULT = 0;
- FOREACH_RESULT(OnUserPreJoin(user,NULL,cname));
- if (MOD_RESULT == 1) {
- return NULL;
+ if (!strcasecmp(ServerName,user->server))
+ {
+ MOD_RESULT = 0;
+ FOREACH_RESULT(OnUserPreJoin(user,NULL,cname));
+ if (MOD_RESULT == 1) {
+ return NULL;
+ }
}
/* create a new one */
{
log(DEBUG,"add_channel: joining to: %s",Ptr->name);
- // the override flag allows us to bypass channel modes
+ // remote users are allowed us to bypass channel modes
// and bans (used by servers)
- if ((!override) || (!strcasecmp(user->server,ServerName)))
+ if (!strcasecmp(ServerName,user->server))
{
log(DEBUG,"Not overriding...");
MOD_RESULT = 0;
int MOD_RESULT = 0;
FOREACH_RESULT(OnAccessCheck(src,user,Ptr,AC_KICK));
- if (MOD_RESULT == ACR_DENY)
+ if ((MOD_RESULT == ACR_DENY) && (!is_uline(src->server)))
return;
- if (MOD_RESULT == ACR_DEFAULT)
+ if ((MOD_RESULT == ACR_DEFAULT) || (!is_uline(src->server)))
{
- if (((cstatus(src,Ptr) < STATUS_HOP) || (cstatus(src,Ptr) < cstatus(user,Ptr))) && (!is_uline(src->server)))
+ if ((cstatus(src,Ptr) < STATUS_HOP) || (cstatus(src,Ptr) < cstatus(user,Ptr)))
{
if (cstatus(src,Ptr) == STATUS_HOP)
{
}
}
- MOD_RESULT = 0;
- FOREACH_RESULT(OnUserPreKick(src,user,Ptr,reason));
- if (MOD_RESULT)
- return;
+ if (!is_uline(src->server))
+ {
+ MOD_RESULT = 0;
+ FOREACH_RESULT(OnUserPreKick(src,user,Ptr,reason));
+ if (MOD_RESULT)
+ return;
+ }
FOREACH_MOD OnUserKick(src,user,Ptr,reason);
}
}
- // fix by brain: move this below the xline checks to prevent spurious quits going onto the net that dont belong
- user->registered = 7;
WriteServ(user->fd,"NOTICE Auth :Welcome to \002%s\002!",Network);
WriteServ(user->fd,"001 %s :Welcome to the %s IRC Network %s!%s@%s",user->nick,Network,user->nick,user->ident,user->host);
WriteServ(user->fd,"004 %s %s %s iowghraAsORVSxNCWqBzvdHtGI lvhopsmntikrRcaqOALQbSeKVfHGCuzN",user->nick,ServerName,VERSION);
// the neatest way to construct the initial 005 numeric, considering the number of configure constants to go in it...
std::stringstream v;
- v << "MESHED WALLCHOPS MODES=13 CHANTYPES=# PREFIX=(ohv)@%+ MAP SAFELIST MAXCHANNELS=" << MAXCHANS;
+ v << "WALLCHOPS MODES=13 CHANTYPES=# PREFIX=(ohv)@%+ MAP SAFELIST MAXCHANNELS=" << MAXCHANS;
v << " MAXBANS=60 NICKLEN=" << NICKMAX;
v << " TOPICLEN=" << MAXTOPIC << " KICKLEN=" << MAXKICK << " MAXTARGETS=20 AWAYLEN=" << MAXAWAY << " CHANMODES=ohvb,k,l,psmnti NETWORK=";
v << Network;
}
ShowMOTD(user);
- // fix by brain: these should be AFTER the N token, so other servers know what the HELL we're on about... :)
+ // fix 3 by brain, move registered = 7 below these so that spurious modes and host changes dont go out
+ // onto the network and produce 'fake direction'
FOREACH_MOD OnUserConnect(user);
FOREACH_MOD OnGlobalConnect(user);
+ user->registered = 7;
WriteOpers("*** Client connecting on port %lu: %s!%s@%s [%s]",(unsigned long)user->port,user->nick,user->ident,user->host,user->ip);
}
{
if (cmdlist[i].flags_needed)
{
- if (user->HasPermission((char*)commandname))
+ if ((user->HasPermission((char*)commandname)) || (is_uline(user->server)))
{
return true;
}
{
if (cmdlist[i].flags_needed)
{
- if (user->HasPermission((char*)commandname))
+ if ((user->HasPermission((char*)commandname)) || (is_uline(user->server)))
{
cmdlist[i].handler_function(parameters,pcnt,user);
}
snprintf(MODERR,MAXBUF,"Module not unloadable (marked static)");
return false;
}
+ /* Give the module a chance to tidy out all its metadata */
+ for (chan_hash::iterator c = chanlist.begin(); c != chanlist.end(); c++)
+ {
+ modules[j]->OnCleanup(TYPE_CHANNEL,c->second);
+ }
+ for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++)
+ {
+ modules[j]->OnCleanup(TYPE_USER,u->second);
+ }
FOREACH_MOD OnUnloadModule(modules[j],module_names[j]);
// found the module
log(DEBUG,"Deleting module...");
}
if (factory[MODCOUNT+1]->factory)
{
- Module* m = factory[MODCOUNT+1]->factory->CreateModule();
+ Module* m = factory[MODCOUNT+1]->factory->CreateModule(MyServer);
modules[MODCOUNT+1] = m;
/* save the module and the module's classfactory, if
* this isnt done, random crashes can occur :/ */