summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-02-13 13:14:22 -0500
committerAdam <Adam@anope.org>2013-02-13 13:14:22 -0500
commit20d40fdc758734d715c80cc8a69052b2e10baa9c (patch)
tree9e23e28516f4aa74c87d809dfc3df6c07f48d7f5 /src
parent9650a3ffa578469bf1fa96c1cd7e6fe08d1a980f (diff)
Do not allow invalid nicknames to be forbidden in ns_forbid
Diffstat (limited to 'src')
-rw-r--r--src/core/ns_forbid.c16
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)) {