From: Jilles Tjoelker Date: Wed, 21 Jan 2009 23:27:27 +0000 (+0100) Subject: Only kill unknown prefix UIDs that start with a valid SID X-Git-Tag: charybdis-3.1.0~31 X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/commitdiff_plain/8d03179e4f2c05a11abdf6e532131b6ae518468b Only kill unknown prefix UIDs that start with a valid SID (existing and behind the link that sent the prefix). Also require them to be exactly 9 characters long. --- diff --git a/src/parse.c b/src/parse.c index 37d0c88..138f102 100644 --- a/src/parse.c +++ b/src/parse.c @@ -532,6 +532,8 @@ static void remove_unknown(struct Client *client_p, char *lsender, char *lbuffer) { int slen = strlen(lsender); + char sid[4]; + struct Client *server; /* meepfoo is a nickname (ignore) * #XXXXXXXX is a UID (KILL) @@ -550,9 +552,21 @@ remove_unknown(struct Client *client_p, char *lsender, char *lbuffer) get_id(&me, client_p), lsender, lbuffer, client_p->name); } - else if(IsDigit(lsender[0])) - sendto_one(client_p, ":%s KILL %s :%s (Unknown Client)", - get_id(&me, client_p), lsender, me.name); + else if(!IsDigit(lsender[0])) + ; + else if(slen != 9) + sendto_realops_snomask(SNO_DEBUG, L_ALL, + "Invalid prefix (%s) from %s", + lbuffer, client_p->name); + else + { + memcpy(sid, lsender, 3); + sid[3] = '\0'; + server = find_server(NULL, sid); + if (server != NULL && server->from == client_p) + sendto_one(client_p, ":%s KILL %s :%s (Unknown Client)", + get_id(&me, client_p), lsender, me.name); + } }