]> jfr.im git - solanum.git/blobdiff - extensions/extb_oper.c
Merge pull request #288 from edk0/umode-o-split
[solanum.git] / extensions / extb_oper.c
index ff859aa4035a7c29aac6e5119cc3099ac3fdd553..0400e724ca3a8e8644948bd02a49a24f143ae0b8 100644 (file)
@@ -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;
 }