summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules/ns_maxemail.c82
1 files changed, 68 insertions, 14 deletions
diff --git a/src/modules/ns_maxemail.c b/src/modules/ns_maxemail.c
index 557a214f7..fb540872e 100644
--- a/src/modules/ns_maxemail.c
+++ b/src/modules/ns_maxemail.c
@@ -23,8 +23,11 @@ void my_add_languages(void);
int my_ns_register(User * u);
int my_ns_set(User * u);
int my_event_reload(int argc, char **argv);
+int my_event_addcommand(int argc, char **argv);
+int my_event_delcommand(int argc, char **argv);
int NSEmailMax = 0;
+int added_register = 0;
#define LNG_NUM_STRINGS 2
#define LNG_NSEMAILMAX_REACHED 0
@@ -40,12 +43,18 @@ int AnopeInit(int argc, char **argv)
moduleAddVersion(VERSION);
moduleSetType(SUPPORTED);
- c = createCommand("REGISTER", my_ns_register, NULL, -1, -1, -1, -1,
- -1);
- if ((status = moduleAddCommand(NICKSERV, c, MOD_HEAD))) {
- alog("[ns_maxemail] Unable to create REGISTER command: %d",
- status);
- return MOD_STOP;
+ /* Only add the command if REGISTER is actually available.
+ * If it s not available, hooking to it will suppress anopes
+ * "Unknown Command" response.. ~ Viper */
+ if (findCommand(NICKSERV, "REGISTER")) {
+ c = createCommand("REGISTER", my_ns_register, NULL, -1, -1, -1, -1,
+ -1);
+ if ((status = moduleAddCommand(NICKSERV, c, MOD_HEAD))) {
+ alog("[ns_maxemail] Unable to create REGISTER command: %d",
+ status);
+ return MOD_STOP;
+ }
+ added_register = 1;
}
c = createCommand("SET", my_ns_set, NULL, -1, -1, -1, -1, -1);
@@ -60,6 +69,20 @@ int AnopeInit(int argc, char **argv)
return MOD_STOP;
}
+ /* If the REGISTER command is added after initial load, provide hooks.. */
+ evt = createEventHook(EVENT_ADDCOMMAND, my_event_addcommand);
+ if ((status = moduleAddEventHook(evt))) {
+ alog("[ns_maxemail] Unable to hook to EVENT_ADDCOMMAND: %d", status);
+ return MOD_STOP;
+ }
+
+ /* If the REGISTER command is deleted after initial load, remove hooks.. */
+ evt = createEventHook(EVENT_DELCOMMAND, my_event_delcommand);
+ if ((status = moduleAddEventHook(evt))) {
+ alog("[ns_maxemail] Unable to hook to EVENT_DELCOMMAND: %d", status);
+ return MOD_STOP;
+ }
+
my_load_config();
my_add_languages();
@@ -115,8 +138,8 @@ int my_ns_register(User * u)
cur_buffer = moduleGetLastBuffer();
email = myStrGetToken(cur_buffer, ' ', 1);
- if (!email)
- return MOD_CONT;
+ if (!email)
+ return MOD_CONT;
ret = check_email_limit_reached(email, u);
free(email);
@@ -133,10 +156,10 @@ int my_ns_set(User * u)
cur_buffer = moduleGetLastBuffer();
set = myStrGetToken(cur_buffer, ' ', 0);
-
- if (!set)
- return MOD_CONT;
-
+
+ if (!set)
+ return MOD_CONT;
+
if (stricmp(set, "email") != 0) {
free(set);
return MOD_CONT;
@@ -144,8 +167,8 @@ int my_ns_set(User * u)
free(set);
email = myStrGetToken(cur_buffer, ' ', 1);
- if (!email)
- return MOD_CONT;
+ if (!email)
+ return MOD_CONT;
ret = check_email_limit_reached(email, u);
free(email);
@@ -161,6 +184,37 @@ int my_event_reload(int argc, char **argv)
return MOD_CONT;
}
+int my_event_addcommand(int argc, char **argv)
+{
+ Command *c;
+ int status;
+
+ if (argc == 2 && stricmp(argv[0], "ns_maxemail")
+ && !stricmp(argv[1], "REGISTER") && !added_register) {
+ c = createCommand("REGISTER", my_ns_register, NULL, -1, -1, -1, -1,
+ -1);
+ if ((status = moduleAddCommand(NICKSERV, c, MOD_HEAD))) {
+ alog("[ns_maxemail] Unable to create REGISTER command: %d",
+ status);
+ return MOD_CONT;
+ }
+ added_register = 1;
+ }
+
+ return MOD_CONT;
+}
+
+int my_event_delcommand(int argc, char **argv)
+{
+ if (argc == 2 && stricmp(argv[0], "ns_maxemail")
+ && !stricmp(argv[1], "REGISTER") && added_register) {
+ moduleDelCommand(NICKSERV, "REGISTER");
+ added_register = 0;
+ }
+
+ return MOD_CONT;
+}
+
void my_load_config(void)
{
Directive confvalues[] = {