mirror of
https://github.com/matrix-construct/construct
synced 2024-11-30 02:32:43 +01:00
If we see an invalid nick, close the local link instead of killing it.
This avoids annoying users when someone links a test server with the wrong nicklen and is more likely to lead to the inconsistency being fixed than a kill.
This commit is contained in:
parent
6484936e51
commit
ad35b2cd1f
1 changed files with 24 additions and 27 deletions
|
@ -64,6 +64,7 @@ static int ms_euid(struct Client *, struct Client *, int, const char **);
|
||||||
static int ms_save(struct Client *, struct Client *, int, const char **);
|
static int ms_save(struct Client *, struct Client *, int, const char **);
|
||||||
static int can_save(struct Client *);
|
static int can_save(struct Client *);
|
||||||
static void save_user(struct Client *, struct Client *, struct Client *);
|
static void save_user(struct Client *, struct Client *, struct Client *);
|
||||||
|
static void bad_nickname(struct Client *, const char *);
|
||||||
|
|
||||||
struct Message nick_msgtab = {
|
struct Message nick_msgtab = {
|
||||||
"NICK", 0, 0, 0, MFLG_SLOW,
|
"NICK", 0, 0, 0, MFLG_SLOW,
|
||||||
|
@ -281,18 +282,7 @@ mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
/* if nicks erroneous, or too long, kill */
|
/* if nicks erroneous, or too long, kill */
|
||||||
if(!clean_nick(parv[1], 0))
|
if(!clean_nick(parv[1], 0))
|
||||||
{
|
{
|
||||||
ServerStats.is_kill++;
|
bad_nickname(client_p, parv[1]);
|
||||||
sendto_realops_snomask(SNO_DEBUG, L_ALL,
|
|
||||||
"Bad Nick: %s From: %s(via %s)",
|
|
||||||
parv[1], source_p->servptr->name, client_p->name);
|
|
||||||
sendto_one(client_p, ":%s KILL %s :%s (Bad Nickname)", me.name, parv[1], me.name);
|
|
||||||
|
|
||||||
/* bad nick change, issue kill for the old nick to the rest
|
|
||||||
* of the network.
|
|
||||||
*/
|
|
||||||
kill_client_serv_butone(client_p, source_p, "%s (Bad Nickname)", me.name);
|
|
||||||
source_p->flags |= FLAGS_KILLED;
|
|
||||||
exit_client(client_p, source_p, &me, "Bad Nickname");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,11 +333,7 @@ ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
/* if nicks empty, erroneous, or too long, kill */
|
/* if nicks empty, erroneous, or too long, kill */
|
||||||
if(!clean_nick(parv[1], 0))
|
if(!clean_nick(parv[1], 0))
|
||||||
{
|
{
|
||||||
ServerStats.is_kill++;
|
bad_nickname(client_p, parv[1]);
|
||||||
sendto_realops_snomask(SNO_DEBUG, L_ALL,
|
|
||||||
"Bad Nick: %s From: %s(via %s)",
|
|
||||||
parv[1], parv[7], client_p->name);
|
|
||||||
sendto_one(client_p, ":%s KILL %s :%s (Bad Nickname)", me.name, parv[1], me.name);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,11 +421,7 @@ ms_uid(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
||||||
/* if nicks erroneous, or too long, kill */
|
/* if nicks erroneous, or too long, kill */
|
||||||
if(!clean_nick(parv[1], 0))
|
if(!clean_nick(parv[1], 0))
|
||||||
{
|
{
|
||||||
ServerStats.is_kill++;
|
bad_nickname(client_p, parv[1]);
|
||||||
sendto_realops_snomask(SNO_DEBUG, L_ALL,
|
|
||||||
"Bad Nick: %s From: %s(via %s)",
|
|
||||||
parv[1], source_p->name, client_p->name);
|
|
||||||
sendto_one(client_p, ":%s KILL %s :%s (Bad Nickname)", me.id, parv[8], me.name);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,11 +509,7 @@ ms_euid(struct Client *client_p, struct Client *source_p, int parc, const char *
|
||||||
/* if nicks erroneous, or too long, kill */
|
/* if nicks erroneous, or too long, kill */
|
||||||
if(!clean_nick(parv[1], 0))
|
if(!clean_nick(parv[1], 0))
|
||||||
{
|
{
|
||||||
ServerStats.is_kill++;
|
bad_nickname(client_p, parv[1]);
|
||||||
sendto_realops_snomask(SNO_DEBUG, L_ALL,
|
|
||||||
"Bad Nick: %s From: %s(via %s)",
|
|
||||||
parv[1], source_p->name, client_p->name);
|
|
||||||
sendto_one(client_p, ":%s KILL %s :%s (Bad Nickname)", me.id, parv[8], me.name);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1365,3 +1343,22 @@ save_user(struct Client *client_p, struct Client *source_p,
|
||||||
else
|
else
|
||||||
change_remote_nick(target_p, target_p, SAVE_NICKTS, target_p->id, 0);
|
change_remote_nick(target_p, target_p, SAVE_NICKTS, target_p->id, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void bad_nickname(struct Client *client_p, const char *nick)
|
||||||
|
{
|
||||||
|
char squitreason[100];
|
||||||
|
|
||||||
|
sendto_wallops_flags(UMODE_WALLOP, &me,
|
||||||
|
"Squitting %s because of bad nickname %s (NICKLEN mismatch?)",
|
||||||
|
client_p->name, nick);
|
||||||
|
sendto_server(NULL, NULL, CAP_TS6, NOCAPS,
|
||||||
|
":%s WALLOPS :Squitting %s because of bad nickname %s (NICKLEN mismatch?)",
|
||||||
|
me.id, client_p->name, nick);
|
||||||
|
sendto_server(NULL, NULL, NOCAPS, CAP_TS6,
|
||||||
|
":%s WALLOPS :Squitting %s because of bad nickname %s (NICKLEN mismatch?)",
|
||||||
|
me.name, client_p->name, nick);
|
||||||
|
|
||||||
|
rb_snprintf(squitreason, sizeof squitreason,
|
||||||
|
"Bad nickname introduced [%s]", nick);
|
||||||
|
exit_client(client_p, client_p, &me, squitreason);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue