userrec::userrec()
{
// the PROPER way to do it, AVOID bzero at *ALL* costs
- *nick = *ident = *host = *dhost = *fullname = *modes = *awaymsg = *oper = 0;
+ *password = *nick = *ident = *host = *dhost = *fullname = *modes = *awaymsg = *oper = 0;
server = (char*)FindServerNamePtr(Config->ServerName);
reset_due = TIME;
lines_in = fd = lastping = signon = idle_lastmsg = nping = registered = 0;
return true;
// are they even an oper at all?
- if (strchr(this->modes,'o'))
+ if (*this->oper)
{
for (int j =0; j < Config->ConfValueEnum("type",&Config->config_f); j++)
{
bool userrec::BufferIsReady()
{
- for (unsigned int i = 0; i < recvq.length(); i++)
+ unsigned int t = recvq.length();
+ for (unsigned int i = 0; i < t; i++)
if (recvq[i] == '\n')
return true;
return false;
return "";
char* line = (char*)recvq.c_str();
std::string ret = "";
- while ((*line != '\n') && (strlen(line)))
+ while ((*line != '\n') && (*line))
{
ret = ret + *line;
line++;
log(DEBUG,"closing fd %lu",(unsigned long)user->fd);
if (user->registered == 7) {
+ purge_empty_chans(user);
FOREACH_MOD(I_OnUserQuit,OnUserQuit(user,reason));
WriteCommonExcept(user,"QUIT :%s",reason);
}
{
if (Config->GetIOHook(user->port))
{
- Config->GetIOHook(user->port)->OnRawSocketClose(user->fd);
+ try
+ {
+ Config->GetIOHook(user->port)->OnRawSocketClose(user->fd);
+ }
+ catch (ModuleException& modexcept)
+ {
+ log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+ }
}
ServerInstance->SE->DelFd(user->fd);
user->CloseSocket();
// this must come before the WriteOpers so that it doesnt try to fill their buffer with anything
// if they were an oper with +s.
if (user->registered == 7) {
- purge_empty_chans(user);
// fix by brain: only show local quits because we only show local connects (it just makes SENSE)
if (user->fd > -1)
WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason);
{
if (Config->GetIOHook(user->port))
{
- Config->GetIOHook(user->port)->OnRawSocketClose(user->fd);
+ try
+ {
+ Config->GetIOHook(user->port)->OnRawSocketClose(user->fd);
+ }
+ catch (ModuleException& modexcept)
+ {
+ log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+ }
}
ServerInstance->SE->DelFd(user->fd);
user->CloseSocket();
{
whowas_hash::iterator iter = whowas.find(u->nick);
WhoWasUser *a = new WhoWasUser();
- strlcpy(a->nick,u->nick,NICKMAX);
+ strlcpy(a->nick,u->nick,NICKMAX-1);
strlcpy(a->ident,u->ident,IDENTMAX);
strlcpy(a->dhost,u->dhost,160);
strlcpy(a->host,u->host,160);
log(DEBUG,"AddClient: %d %d %s",socket,port,ipaddr);
clientlist[tempnick]->fd = socket;
- strlcpy(clientlist[tempnick]->nick, tn2,NICKMAX);
+ strlcpy(clientlist[tempnick]->nick, tn2,NICKMAX-1);
/* We don't know the host yet, dns lookup could still be going on,
* so instead we just put the ip address here, for now.
*/
if (FindMatchingLocal(user) > a.maxlocal)
{
Goners->AddItem(user,"No more connections allowed from your host via this connect class (local)");
+ WriteOpers("*** WARNING: maximum LOCAL connections (%ld) exceeded for IP %s",a.maxlocal,(char*)inet_ntoa(user->ip4));
return;
}
- if (FindMatchingGlobal(user) > a.maxglobal)
+ else if (FindMatchingGlobal(user) > a.maxglobal)
{
Goners->AddItem(user,"No more connections allowed from your host via this connect class (global)");
+ WriteOpers("*** WARNING: maximum GLOBAL connections (%ld) exceeded for IP %s",a.maxglobal,(char*)inet_ntoa(user->ip4));
return;
}