]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc.c
Don't #include client.h when conn.h/conn-func.h is already included
[ngircd-alex.git] / src / ngircd / irc.c
index a0dc0ea9b8ed2b3722b736af9cf80575eab85627..a1d073c1468dccc6a8a5410c6e733f2978581683 100644 (file)
@@ -22,10 +22,8 @@ static char UNUSED id[] = "$Id: irc.c,v 1.132 2008/01/15 22:28:14 fw Exp $";
 #include <string.h>
 
 #include "ngircd.h"
-#include "resolve.h"
 #include "conn-func.h"
 #include "conf.h"
-#include "client.h"
 #include "channel.h"
 #include "defines.h"
 #include "irc-write.h"
@@ -53,8 +51,12 @@ IRC_ERROR( CLIENT *Client, REQUEST *Req )
        assert( Client != NULL );
        assert( Req != NULL );
 
-       if( Req->argc < 1 ) Log( LOG_NOTICE, "Got ERROR from \"%s\"!", Client_Mask( Client ));
-       else Log( LOG_NOTICE, "Got ERROR from \"%s\": %s!", Client_Mask( Client ), Req->argv[0] );
+       if (Req->argc < 1)
+               Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
+                   Client_Mask(Client));
+       else
+               Log(LOG_NOTICE, "Got ERROR from \"%s\": \"%s\"!",
+                   Client_Mask(Client), Req->argv[0]);
 
        return CONNECTED;
 } /* IRC_ERROR */
@@ -66,7 +68,7 @@ IRC_ERROR( CLIENT *Client, REQUEST *Req )
  * disconnect clients. It can be used by IRC operators and servers, for example
  * to "solve" nick collisions after netsplits.
  * Please note that this function is also called internally, without a real
- * KILL command beeing received over the network! Client is Client_ThisServer()
+ * KILL command being received over the network! Client is Client_ThisServer()
  * in this case. */
 GLOBAL bool
 IRC_KILL( CLIENT *Client, REQUEST *Req )
@@ -156,11 +158,15 @@ IRC_KILL( CLIENT *Client, REQUEST *Req )
                             Client_Type( c ), Req->argv[0] );
                }
 
-               /* Kill client NOW! */
+               /* Kill the client NOW:
+                *  - Close the local connection (if there is one),
+                *  - Destroy the CLIENT structure for remote clients.
+                * Note: Conn_Close() removes the CLIENT structure as well. */
                conn = Client_Conn( c );
-               Client_Destroy( c, NULL, reason, false );
-               if( conn > NONE )
-                       Conn_Close( conn, NULL, reason, true );
+               if(conn > NONE)
+                       Conn_Close(conn, NULL, reason, true);
+               else
+                       Client_Destroy(c, NULL, reason, false);
        }
        else
                Log( LOG_NOTICE, "Client with nick \"%s\" is unknown here.", Req->argv[0] );
@@ -516,7 +522,7 @@ Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
         * RFC 2812, sec. 3.3.1 requires that targetMask have at least one
         * dot (".") and no wildcards ("*", "?") following the last one.
         */
-       check_wildcards = strchr(targetMask, '.');
+       check_wildcards = strrchr(targetMask, '.');
        assert(check_wildcards != NULL);
        if (check_wildcards &&
                check_wildcards[strcspn(check_wildcards, "*?")])