summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2020-05-25 23:43:29 +0200
committerAlexander Barton <alex@barton.de>2020-05-25 23:51:00 +0200
commit02cf31c0e267a4c9a7656d43ad3ad4eeb37fc9c5 (patch)
tree956df4b2e5d9f6e83766d0f7daf1f16851637fdc /src
parent430bb223765281487e5c6d415a8efb91e2bf3320 (diff)
downloadngircd-02cf31c0e267a4c9a7656d43ad3ad4eeb37fc9c5.tar.gz
ngircd-02cf31c0e267a4c9a7656d43ad3ad4eeb37fc9c5.zip
IRC_SERVER: Make sure that the client sent a prefix
The SERVER command is only valid with a prefix when received from other
servers, so make sure that there is one and disconnect the peer if not
(instead of crashing ...).

This obsoletes PR #275.

Thanks Hilko Bengen (hillu) for finding & reporting this as well for the
patch & pull request! But I think this is the "more correct" fix.
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/irc-server.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c
index 317a3e1a..10f1ef69 100644
--- a/src/ngircd/irc-server.c
+++ b/src/ngircd/irc-server.c
@@ -186,6 +186,15 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
 		if (!Client_CheckID(Client, Req->argv[0]))
 			return DISCONNECTED;
 
+		if (!Req->prefix) {
+			/* We definitely need a prefix here! */
+			Log(LOG_ALERT, "Got SERVER command without prefix! (on connection %d)",
+			    Client_Conn(Client));
+			Conn_Close(Client_Conn(Client), NULL,
+				   "SERVER command without prefix", true);
+			return DISCONNECTED;
+		}
+
 		from = Client_Search( Req->prefix );
 		if (! from) {
 			/* Uh, Server, that introduced the new server is unknown?! */