delete[] n->second;
}
- opertypes.clear();
+ conf->opertypes.clear();
return true;
}
delete[] n->second;
}
- operclass.clear();
+ conf->operclass.clear();
return true;
}
for (unsigned int n = 0; n < MAXCHANS; n++)
{
- ucrec* x = new ucrec();
- chans[n] = x;
- x->channel = NULL;
- x->uc_modes = 0;
+ chans[n] = new ucrec();
+ chans[n]->channel = NULL;
+ chans[n]->uc_modes = 0;
}
}
// are they even an oper at all?
if (*this->oper)
{
- opertype_t::iterator iter_opertype = opertypes.find(this->oper);
- if (iter_opertype != opertypes.end())
+ opertype_t::iterator iter_opertype = ServerInstance->Config->opertypes.find(this->oper);
+ if (iter_opertype != ServerInstance->Config->opertypes.end())
{
char* Classes = strdup(iter_opertype->second);
char* myclass = strtok_r(Classes," ",&savept);
while (myclass)
{
- operclass_t::iterator iter_operclass = operclass.find(myclass);
- if (iter_operclass != operclass.end())
+ operclass_t::iterator iter_operclass = ServerInstance->Config->operclass.find(myclass);
+ if (iter_operclass != ServerInstance->Config->operclass.end())
{
char* CommandList = strdup(iter_operclass->second);
mycmd = strtok_r(CommandList," ",&savept2);
for (const char* temp = New->GetIPString(); *temp && j < 64; temp++, j++)
New->dhost[j] = New->host[j] = *temp;
New->dhost[j] = New->host[j] = 0;
-
+
+ Instance->Log(DEBUG,"Hosts set.");
+
// set the registration timeout for this user
unsigned long class_regtimeout = 90;
int class_flood = 0;
long class_sqmax = 262144; // 256kb
long class_rqmax = 4096; // 4k
+ Instance->Log(DEBUG,"Class stuff set.");
+
for (ClassVector::iterator i = Instance->Config->Classes.begin(); i != Instance->Config->Classes.end(); i++)
{
if ((i->type == CC_ALLOW) && (match(ipaddr,i->host.c_str(),true)))
}
}
+ Instance->Log(DEBUG,"nping etc set.");
+
New->nping = Instance->Time() + New->pingmax + Instance->Config->dns_timeout;
New->timeout = Instance->Time() + class_regtimeout;
New->flood = class_flood;
New->sendqmax = class_sqmax;
New->recvqmax = class_rqmax;
+ Instance->Log(DEBUG,"Push back to local users.");
Instance->local_users.push_back(New);
+ Instance->Log(DEBUG,"Check softlimit: %d %d %d",Instance->local_users.size(), Instance->Config->SoftLimit, MAXCLIENTS);
if ((Instance->local_users.size() > Instance->Config->SoftLimit) || (Instance->local_users.size() >= MAXCLIENTS))
{
+ Instance->Log(DEBUG,"Check softlimit failed");
+ Instance->WriteOpers("*** Warning: softlimit value has been reached: %d clients", Instance->Config->SoftLimit);
userrec::QuitUser(Instance, New,"No more connections allowed");
return;
}
+ Instance->Log(DEBUG,"Softlimit passed.");
+
/*
* XXX -
* this is done as a safety check to keep the file descriptors within range of fd_ref_table.
* which for the time being is a physical impossibility (even the largest networks dont have more
* than about 10,000 users on ONE server!)
*/
- if ((unsigned)socket >= MAX_DESCRIPTORS)
+ if ((unsigned int)socket >= MAX_DESCRIPTORS)
{
userrec::QuitUser(Instance, New, "Server is full");
return;
}
+ Instance->Log(DEBUG,"socket < MAX_DESCRIPTORS passed.");
+
ELine* e = Instance->XLines->matches_exception(New);
if (!e)
{
+ Instance->Log(DEBUG,"Doesnt match eline.");
ZLine* r = Instance->XLines->matches_zline(ipaddr);
if (r)
{
+ Instance->Log(DEBUG,"Matches zline.");
char reason[MAXBUF];
snprintf(reason,MAXBUF,"Z-Lined: %s",r->reason);
userrec::QuitUser(Instance, New, reason);
return;
}
+ Instance->Log(DEBUG,"Doesnt match zline.");
}
+ Instance->Log(DEBUG,"Check before AddFd.");
+
if (socket > -1)
{
+ Instance->Log(DEBUG,"Adding fd.");
if (!Instance->SE->AddFd(New))
{
+ Instance->Log(DEBUG,"Oops, fd already exists");
userrec::QuitUser(Instance, New, "Internal error handling connection");
return;
}
long userrec::GlobalCloneCount()
{
- char u1[128];
char u2[128];
long x = 0;
+ strlcpy(u2, this->GetIPString(), 64);
for (user_hash::const_iterator a = ServerInstance->clientlist.begin(); a != ServerInstance->clientlist.end(); a++)
{
/* We have to match ip's as strings - we don't know what protocol
* a remote user may be using
*/
- if (strcmp(a->second->GetIPString(u1), this->GetIPString(u2)) == 0)
+ ServerInstance->Log(DEBUG,"Match %s against %s", a->second->GetIPString(), u2);
+ if (strcasecmp(a->second->GetIPString(), u2) == 0)
x++;
}
-
+
return x;
}
* changes dont go out onto the network and produce 'fake direction'.
*/
FOREACH_MOD(I_OnUserConnect,OnUserConnect(this));
- FOREACH_MOD(I_OnPostConnect,OnPostConnect(this));
+
this->registered = REG_ALL;
+
+ FOREACH_MOD(I_OnPostConnect,OnPostConnect(this));
+
ServerInstance->SNO->WriteToSnoMask('c',"Client connecting on port %d: %s!%s@%s [%s]", this->GetPort(), this->nick, this->ident, this->host, this->GetIPString());
}