X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fspamserv.c;fp=src%2Fspamserv.c;h=38ffc0eddfb0c8320b7ff587462f1d4d00362847;hb=a3aa0947adf47898e9012ee55e79d3d369c6da6e;hp=0b867301107952b7a267f69787afa4a5ef70a5c9;hpb=32a25c8bd8051e70ea3206bfb5b94a67533f9d1c;p=srvx.git diff --git a/src/spamserv.c b/src/spamserv.c index 0b86730..38ffc0e 100644 --- a/src/spamserv.c +++ b/src/spamserv.c @@ -34,8 +34,8 @@ #define KEY_INFO "info" #define KEY_EXCEPTLEVEL "exceptlevel" #define KEY_EXPIRY "expiry" -#define KEY_LASTBADWORDID "last_badword_id"\r -#define KEY_BADWORDS "badwords"\r +#define KEY_LASTBADWORDID "last_badword_id" +#define KEY_BADWORDS "badwords" #define KEY_BADWORD_MASK "mask" #define KEY_BADWORD_TRIGGERED "count" @@ -1893,6 +1893,45 @@ spamserv_punish(struct chanNode *channel, struct userNode *user, time_t expires, KickChannelUser(user, channel, spamserv, reason); } +static void +spamserv_detected_badword(struct userNode *user, struct chanNode *chan, struct badword *badword) +{ + char *hostmask; + char *reason = SSMSG_BADWORD_DETECTED; + char mask[IRC_NTOP_MAX_SIZE+3] = { '*', '@', '\0' }; + switch(badword->action) { + case BADACTION_BAN: + hostmask = generate_hostmask(user, GENMASK_STRICT_HOST | GENMASK_ANY_IDENT); + sanitize_ircmask(hostmask); + if(chan->channel_info) { + //registered channel + add_channel_ban(chan->channel_info, hostmask, spamserv->nick, now, now, now + spamserv_conf.long_ban_duration, reason); + } + struct mod_chanmode change; + mod_chanmode_init(&change); + change.argc = 1; + change.args[0].mode = MODE_BAN; + change.args[0].u.hostmask = hostmask; + mod_chanmode_announce(spamserv, chan, &change); + free(hostmask); + break; + case BADACTION_KICK: + if(GetUserMode(chan, user)) + KickChannelUser(user, chan, spamserv, reason); + break; + case BADACTION_KILL: + DelUser(user, spamserv, 1, reason); + break; + case BADACTION_GLINE: + irc_ntop(mask + 2, sizeof(mask) - 2, &user->ip); + gline_add(spamserv->nick, mask, spamserv_conf.gline_duration, reason, now, now, 0, 1); + break; + default: + //error? + break; + } +} + void spamserv_channel_message(struct chanNode *channel, struct userNode *user, char *text) { @@ -2402,6 +2441,10 @@ init_spamserv(const char *nick) modcmd_register(spamserv_module, "ADDEXCEPTION", cmd_addexception, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); modcmd_register(spamserv_module, "DELEXCEPTION", cmd_delexception, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); modcmd_register(spamserv_module, "STATUS", cmd_status, 1, 0, NULL); + modcmd_register(spamserv_module, "ADDBAD", cmd_addbad, 2, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); + modcmd_register(spamserv_module, "DELBAD", cmd_delbad, 2, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); + modcmd_register(spamserv_module, "SETBAD", cmd_setbad, 2, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); + modcmd_register(spamserv_module, "LISTBAD", cmd_listbad, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); modcmd_register(spamserv_module, "SET", cmd_set, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); modcmd_register(spamserv_module, "SET SPAMLIMIT", opt_spamlimit, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL); modcmd_register(spamserv_module, "SET ADVREACTION", opt_advreaction, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_CHANNEL, NULL);