diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/nickserv.c | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/config.c b/src/config.c index 10c817668..8bbbd077d 100644 --- a/src/config.c +++ b/src/config.c @@ -225,6 +225,7 @@ int BSCaseSensitive; int HideStatsO; int GlobalOnCycle; int AnonymousGlobal; +int RestrictOperNicks; char *GlobalOnCycleMessage; char *GlobalOnCycleUP; char *ServicesRoot; @@ -590,6 +591,7 @@ Directive directives[] = { {PARAM_PORT, 0, &RemotePort3}, {PARAM_STRING, 0, &RemotePassword3}}}, {"RestrictMail", {{PARAM_SET, PARAM_RELOAD, &RestrictMail}}}, + {"RestrictOperNicks", {{PARAM_SET, PARAM_RELOAD, &RestrictOperNicks}}}, {"SendMailPath", {{PARAM_STRING, PARAM_RELOAD, &SendMailPath}}}, {"SendFrom", {{PARAM_STRING, PARAM_RELOAD, &SendFrom}}}, {"ServerDesc", {{PARAM_STRING, 0, &ServerDesc}}}, diff --git a/src/nickserv.c b/src/nickserv.c index 1ca4a90e7..932a1b82f 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -1930,12 +1930,13 @@ static int do_help(User * u) static int do_register(User * u) { NickRequest *nr = NULL, *anr = NULL; + NickCore *nc = NULL; int prefixlen = strlen(NSGuestNickPrefix); int nicklen = strlen(u->nick); char *pass = strtok(NULL, " "); char *email = strtok(NULL, " "); char passcode[11]; - int idx, min = 1, max = 62; + int idx, min = 1, max = 62, i = 0; int chars[] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', @@ -1976,6 +1977,27 @@ static int do_register(User * u) return MOD_CONT; } + if (RestrictOperNicks) { + for (i = 0; i < RootNumber; i++) { + if (strstr(u->nick, ServicesRoots[i]) && !is_oper(u)) { + notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick); + return MOD_CONT; + } + } + for (i = 0; i < servadmins.count && (nc = servadmins.list[i]);i++) { + if (strstr(u->nick, nc->display) && !is_oper(u)) { + notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick); + return MOD_CONT; + } + } + for (i = 0; i < servopers.count && (nc = servopers.list[i]);i++) { + if (strstr(u->nick, nc->display) && !is_oper(u)) { + notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick); + return MOD_CONT; + } + } + } + if (!pass || (NSForceEmail && !email)) { syntax_error(s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX_EMAIL); |