]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Spoofed prefixes: close connection on non-server links only
authorAlexander Barton <alex@barton.de>
Tue, 19 Jul 2011 14:00:55 +0000 (16:00 +0200)
committerAlexander Barton <alex@barton.de>
Tue, 19 Jul 2011 14:07:34 +0000 (16:07 +0200)
On server-links, spoofed prefixes can happen because of the asynchronous
nature of the IRC protocol. So don't break server-links, only log a message
and ignore the command.

This fixes bug 113, see:
<https://arthur.barton.de/bugzilla/show_bug.cgi?id=113>

src/ngircd/parse.c

index 72e3430998b301d4011b9b55175e1a91d41875a6..be3c864dc26f0683e5d39a6a6254ba4f84bdeab8 100644 (file)
@@ -325,13 +325,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;