repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 6cbe13085d3c8767a70d2394840a0a03ac6f290a:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 6cbe13085d3c8767a70d2394840a0a03ac6f290a
Author: Alexander Barton 
Date:   Tue Jul 19 16:00:55 2011 +0200

    Spoofed prefixes: close connection on non-server links only

    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:
    

diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
index 72e3430998b301d4011b9b55175e1a91d41875a6..
index ..be3c864dc26f0683e5d39a6a6254ba4f84bdeab8 100644
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -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;

-----END OF PAGE-----