From aeff467a360f3a8e50ebaa656f297f0529bc3050 Mon Sep 17 00:00:00 2001 From: codemastr Date: Fri, 9 Jan 2004 00:56:15 +0000 Subject: [PATCH] Made extbans use the module objects system --- Changes | 2 ++ include/modules.h | 12 +++++++++++- src/channel.c | 2 +- src/extbans.c | 36 +++++++++++++++++++++++++++++------- src/modules.c | 9 +++++++++ 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/Changes b/Changes index 6097c4c6d..eb5fa873f 100644 --- a/Changes +++ b/Changes @@ -2701,3 +2701,5 @@ seen. gmtime warning still there - Fixed a bug with the dynamic umode and cmode systems - Made CmodeAdd return MODERR_EXISTS if the mode already exists - Fixes for TRE under win32 +- Made Extbans use the module object system + diff --git a/include/modules.h b/include/modules.h index f5f7a2a54..88f2ccd83 100644 --- a/include/modules.h +++ b/include/modules.h @@ -95,6 +95,7 @@ typedef struct { #define MOBJ_SNOMASK 0x0020 #define MOBJ_UMODE 0x0040 #define MOBJ_CMDOVERRIDE 0x0080 +#define MOBJ_EXTBAN 0x0100 typedef struct { long mode; @@ -226,6 +227,8 @@ typedef struct { #define EXTBANTABLESZ 32 typedef struct { + /** extbans module */ + Module *owner; /** extended ban character */ char flag; @@ -259,8 +262,14 @@ typedef struct { * int: a value of BANCHK_* (see struct.h) */ int (*is_banned)(aClient *, aChannel *, char *, int); +} Extban; + +typedef struct { + char flag; + int (*is_ok)(aClient *, aChannel *, char *para, int, int, int); + char * (*conv_param)(char *); + int (*is_banned)(aClient *, aChannel *, char *, int); } ExtbanInfo; -typedef ExtbanInfo Extban; /* Just to be consistent */ typedef struct _command { @@ -286,6 +295,7 @@ typedef struct _ModuleObject { Snomask *snomask; Umode *umode; Cmdoverride *cmdoverride; + Extban *extban; } object; } ModuleObject; diff --git a/src/channel.c b/src/channel.c index 0af0b8344..088c678e3 100644 --- a/src/channel.c +++ b/src/channel.c @@ -579,7 +579,7 @@ Ban *is_banned(aClient *sptr, aChannel *chptr, int type) static char virthost[NICKLEN + USERLEN + HOSTLEN + 6]; static char nuip[NICKLEN + USERLEN + HOSTLEN + 6]; int dovirt = 0, mine = 0; - ExtbanInfo *extban; + Extban *extban; if (!IsPerson(sptr)) return NULL; diff --git a/src/extbans.c b/src/extbans.c index b91a6667f..d76c20e01 100644 --- a/src/extbans.c +++ b/src/extbans.c @@ -72,15 +72,15 @@ int i; return NULL; } -Extban *ExtbanAdd(Module *reserved, ExtbanInfo req) +Extban *ExtbanAdd(Module *module, ExtbanInfo req) { Extban *tmp; int slot; if (findmod_by_bantype(req.flag)) { - if (reserved) - reserved->errorcode = MODERR_EXISTS; + if (module) + module->errorcode = MODERR_EXISTS; return NULL; } @@ -90,15 +90,23 @@ int slot; break; if (slot == EXTBANTABLESZ - 1) { - if (reserved) - reserved->errorcode = MODERR_NOSPACE; + if (module) + module->errorcode = MODERR_NOSPACE; return NULL; } ExtBan_Table[slot].flag = req.flag; ExtBan_Table[slot].is_ok = req.is_ok; ExtBan_Table[slot].conv_param = req.conv_param; ExtBan_Table[slot].is_banned = req.is_banned; - + ExtBan_Table[slot].owner = module; + if (module) + { + ModuleObject *banobj = MyMallocEx(sizeof(ModuleObject)); + banobj->object.extban = banobj; + banobj->type = MOBJ_EXTBAN; + AddListItem(banobj, module->objects); + module->errorcode = MODERR_NOERROR; + } ExtBan_highest = slot; make_extbanstr(); return &ExtBan_Table[slot]; @@ -107,6 +115,20 @@ int slot; void ExtbanDel(Extban *eb) { /* Just zero it all away.. */ + + if (eb->owner) + { + ModuleObject *banobj; + for (banobj = eb->owner->objects; banobj; banobj = banobj->next) + { + if (banobj->type == MOBJ_EXTBAN && banobj->object.extban == eb) + { + DelListItem(banobj, eb->owner->objects); + MyFree(banobj); + break; + } + } + } memset(eb, 0, sizeof(Extban)); make_extbanstr(); /* Hmm do we want to go trough all chans and remove the bans? @@ -223,7 +245,7 @@ char *ban = banin+3; void extban_init(void) { -Extban req; + ExtbanInfo req; memset(&req, 0, sizeof(ExtbanInfo)); req.flag = 'c'; diff --git a/src/modules.c b/src/modules.c index 5188c595c..2a99219c2 100644 --- a/src/modules.c +++ b/src/modules.c @@ -392,6 +392,9 @@ void Unload_all_loaded_modules(void) else if (objs->type == MOBJ_CMDOVERRIDE) { CmdoverrideDel(objs->object.cmdoverride); } + else if (objs->type == MOBJ_EXTBAN) { + ExtbanDel(objs->object.extban); + } } for (child = mi->children; child; child = childnext) { @@ -446,6 +449,9 @@ void Unload_all_testing_modules(void) else if (objs->type == MOBJ_CMDOVERRIDE) { CmdoverrideDel(objs->object.cmdoverride); } + else if (objs->type == MOBJ_EXTBAN) { + ExtbanDel(objs->object.extban); + } } for (child = mi->children; child; child = childnext) { @@ -506,6 +512,9 @@ int Module_free(Module *mod) else if (objs->type == MOBJ_CMDOVERRIDE) { CmdoverrideDel(objs->object.cmdoverride); } + else if (objs->type == MOBJ_EXTBAN) { + ExtbanDel(objs->object.extban); + } } for (p = Modules; p; p = p->next) {