]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/parse.c
Implement IRC_xLINE(): handler for "GLINE" and "KLINE" commands
[ngircd-alex.git] / src / ngircd / parse.c
index 72e3430998b301d4011b9b55175e1a91d41875a6..02ab8935d6ca465d33c70ac29f8e731f1f46307b 100644 (file)
@@ -63,6 +63,7 @@ static COMMAND My_Commands[] =
        { "DIE", IRC_DIE, CLIENT_USER, 0, 0, 0 },
        { "DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 0, 0, 0 },
        { "ERROR", IRC_ERROR, 0xFFFF, 0, 0, 0 },
+       { "GLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "HELP", IRC_HELP, CLIENT_USER, 0, 0, 0 },
        { "INFO", IRC_INFO, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "INVITE", IRC_INVITE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
@@ -70,6 +71,7 @@ static COMMAND My_Commands[] =
        { "JOIN", IRC_JOIN, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "KICK", IRC_KICK, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "KILL", IRC_KILL, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
+       { "KLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "LINKS", IRC_LINKS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "LIST", IRC_LIST, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
        { "LUSERS", IRC_LUSERS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
@@ -325,13 +327,21 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, bool *Closed )
        /* check if the client named in the prefix is expected
         * to come from that direction */
        if (Client_NextHop(c) != client) {
-               Log(LOG_ERR,
-                   "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
-                   Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
-                   Req->command);
-               Conn_Close(Idx, NULL, "Spoofed prefix", true);
-               *Closed = true;
+               if (Client_Type(c) != CLIENT_SERVER) {
+                       Log(LOG_ERR,
+                           "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
+                           Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
+                           Req->command);
+                       Conn_Close(Idx, NULL, "Spoofed prefix", true);
+                       *Closed = true;
+               } else {
+                       Log(LOG_INFO,
+                           "Ignoring spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\").",
+                           Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
+                           Req->command);
+               }
                return false;
+
        }
 
        return true;