mirror of
https://github.com/matrix-construct/construct
synced 2024-12-26 15:33:54 +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:
parent
94a84cdd98
commit
6c77f1f74f
1 changed files with 14 additions and 82 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue