summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.c2
-rw-r--r--src/nickserv.c24
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);