0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-12-27 07:54:05 +01:00

Close the local link that sends a TS5 NICK introduction.

This is no longer supported and was already broken,
sending out a UID message without UID parameter to
other servers.
This commit is contained in:
Jilles Tjoelker 2009-01-16 23:08:05 +01:00
parent 94a84cdd98
commit 6c77f1f74f

View file

@ -68,7 +68,7 @@ static void bad_nickname(struct Client *, const char *);
struct Message nick_msgtab = {
"NICK", 0, 0, 0, MFLG_SLOW,
{{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 8}, mg_ignore, {m_nick, 0}}
{{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 0}, mg_ignore, {m_nick, 0}}
};
struct Message uid_msgtab = {
"UID", 0, 0, 0, MFLG_SLOW,
@ -255,23 +255,12 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p
return 0;
}
/* ms_nick()
/* mc_nick()
*
* server -> server nick change
* parv[0] = sender prefix
* parv[1] = nickname
* parv[2] = TS when nick change
*
* server introducing new nick
* parv[0] = sender prefix
* parv[1] = nickname
* parv[2] = hop count
* parv[3] = TS
* parv[4] = umode
* parv[5] = username
* parv[6] = hostname
* parv[7] = server
* parv[8] = ircname
*/
static int
mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
@ -316,78 +305,21 @@ mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *
static int
ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Client *target_p;
time_t newts = 0;
char squitreason[100];
const char *nick, *server;
if(parc != 9)
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Dropping server %s due to (invalid) command 'NICK' "
"with %d arguments (expecting 9)", client_p->name, parc);
ilog(L_SERVER, "Excess parameters (%d) for command 'NICK' from %s.",
parc, client_p->name);
rb_snprintf(squitreason, sizeof squitreason,
"Excess parameters (%d) to %s command, expecting %d",
parc, "NICK", 9);
exit_client(client_p, client_p, client_p, squitreason);
return 0;
}
nick = parc > 1 ? parv[1] : "?";
server = parc > 7 ? parv[7] : "?";
/* if nicks empty, erroneous, or too long, kill */
if(!clean_nick(parv[1], 0))
{
bad_nickname(client_p, parv[1]);
return 0;
}
sendto_wallops_flags(UMODE_WALLOP, &me,
"Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
client_p->name, nick, server);
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,
":%s WALLOPS :Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
me.id, client_p->name, nick, server);
ilog(L_SERVER, "Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
client_p->name, nick, server);
/* invalid username or host? */
if(!clean_username(parv[5]) || !clean_host(parv[6]))
{
ServerStats.is_kill++;
sendto_realops_snomask(SNO_DEBUG, L_ALL,
"Bad user@host: %s@%s From: %s(via %s)",
parv[5], parv[6], parv[7], client_p->name);
sendto_one(client_p, ":%s KILL %s :%s (Bad user@host)", me.name, parv[1], me.name);
return 0;
}
/* check the length of the clients gecos */
if(strlen(parv[8]) > REALLEN)
{
char *s = LOCAL_COPY(parv[8]);
/* why exactly do we care? --fl */
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Long realname from server %s for %s", parv[7], parv[1]);
s[REALLEN] = '\0';
parv[8] = s;
}
newts = atol(parv[3]);
target_p = find_named_client(parv[1]);
/* if the nick doesnt exist, allow it and process like normal */
if(target_p == NULL)
{
register_client(client_p, NULL, parv[1], newts, parc, parv);
}
else if(IsUnknown(target_p))
{
exit_client(NULL, target_p, &me, "Overridden");
register_client(client_p, NULL, parv[1], newts, parc, parv);
}
else if(target_p == source_p)
{
/* client changing case of nick */
if(strcmp(target_p->name, parv[1]))
register_client(client_p, NULL, parv[1], newts, parc, parv);
}
/* we've got a collision! */
else
perform_nick_collides(source_p, client_p, target_p, parc, parv,
newts, parv[1], NULL);
exit_client(client_p, client_p, &me, "TS5 nickname introduced");
return 0;
}