diff options
author | Adam <Adam@anope.org> | 2013-02-13 13:14:22 -0500 |
---|---|---|
committer | AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp> | 2013-02-17 14:08:34 +0900 |
commit | f7bac0839b21707273d48bb656f66b0d3e25f34e (patch) | |
tree | 786c52785050061859209b0784dc2d649b736697 /src | |
parent | 862b101935a9573543090699cc7569910ec78feb (diff) |
Do not allow invalid nicknames to be forbidden in ns_forbid
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ns_forbid.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/ns_forbid.c b/src/core/ns_forbid.c index 094c819c4..28bff3f55 100644 --- a/src/core/ns_forbid.c +++ b/src/core/ns_forbid.c @@ -73,6 +73,7 @@ static int do_forbid(User * u) NickAlias *na; char *nick = strtok(NULL, " "); char *reason = strtok(NULL, ""); + char *ch; /* Assumes that permission checking has already been done. */ if (!nick || (ForceForbidReason && !reason)) { @@ -88,6 +89,21 @@ static int do_forbid(User * u) notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); return MOD_CONT; } + + if (isdigit(nick[0]) || nick[0] == '-' || strlen(nick) > NICKMAX - 1) + { + notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); + return MOD_CONT; + } + for (ch = nick; *ch; ch++) + { + if (!isvalidnick(*ch)) + { + notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick); + return MOD_CONT; + } + } + if ((na = findnick(nick)) != NULL) { if (NSSecureAdmins && nick_is_services_admin(na->nc) && !is_services_root(u)) { |