X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/adb3f9d000d3938304d82e4dbb6a0f51d34bd3d5..9dd128b4da6e54ca9f97cfcd48e345a57790ffbe:/extensions/extb_oper.c diff --git a/extensions/extb_oper.c b/extensions/extb_oper.c index ff859aa4..0400e724 100644 --- a/extensions/extb_oper.c +++ b/extensions/extb_oper.c @@ -1,20 +1,22 @@ /* * Oper extban type: matches opers * -- jilles - * - * $Id: extb_oper.c 1299 2006-05-11 15:43:03Z jilles $ */ #include "stdinc.h" #include "modules.h" #include "client.h" +#include "privilege.h" +#include "s_newconf.h" #include "ircd.h" +static const char extb_desc[] = "Oper ($o) extban type"; + static int _modinit(void); static void _moddeinit(void); static int eb_oper(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type); -DECLARE_MODULE_AV1(extb_oper, _modinit, _moddeinit, NULL, NULL, NULL, "$Revision: 1299 $"); +DECLARE_MODULE_AV2(extb_oper, _modinit, _moddeinit, NULL, NULL, NULL, NULL, NULL, extb_desc); static int _modinit(void) @@ -36,9 +38,16 @@ static int eb_oper(const char *data, struct Client *client_p, (void)chptr; (void)mode_type; - /* perhaps use data somehow? (opernick/flags?) */ - /* so deny any bans with data for now */ + if (data != NULL) - return EXTBAN_INVALID; + { + struct PrivilegeSet *set = privilegeset_get(data); + if (set != NULL && client_p->user->privset == set) + return EXTBAN_MATCH; + + /* $o:admin or whatever */ + return HasPrivilege(client_p, data) ? EXTBAN_MATCH : EXTBAN_NOMATCH; + } + return IsOper(client_p) ? EXTBAN_MATCH : EXTBAN_NOMATCH; }