]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Tweaks to closed socket detection
[user/henk/code/inspircd.git] / src / users.cpp
index 15663a7d108abfec64e812c638177641922a5869..3acc8f2a0cc2bc1c8009b21f9d3a5b28ee5f5d48 100644 (file)
@@ -397,6 +397,7 @@ void kill_link(userrec *user,const char* r)
         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);
         }
@@ -409,7 +410,14 @@ void kill_link(userrec *user,const char* r)
         {
                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();
@@ -418,7 +426,6 @@ void kill_link(userrec *user,const char* r)
         // 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);
@@ -472,7 +479,14 @@ void kill_link_silent(userrec *user,const char* r)
         {
                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();
@@ -505,7 +519,7 @@ void AddWhoWas(userrec* u)
 {
         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);
@@ -594,7 +608,7 @@ void AddClient(int socket, int port, bool iscached, in_addr ip4)
         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.
         */