Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / client.c
index 88cb0f9c77bc6d58ad0177ad003a1f2473c539cc..dac2e39ba211b28b8ca271399190f16766c402f9 100644 (file)
@@ -18,6 +18,8 @@
  *
  * $Id$
  */
+#include "config.h"
+
 #include "client.h"
 #include "class.h"
 #include "ircd.h"
@@ -100,10 +102,11 @@ static struct {
   enum Feature feat;
   unsigned int flag;
 } feattab[] = {
-  { (PRIV_WHOX | PRIV_DISPLAY), FEAT_LAST_F, (FLAGS_OPER | FLAGS_LOCOP) },
+  { PRIV_WHOX, FEAT_LAST_F, (FLAGS_OPER | FLAGS_LOCOP) },
+  { PRIV_DISPLAY, FEAT_LAST_F, (FLAGS_OPER | FLAGS_LOCOP) },
   { PRIV_CHAN_LIMIT, FEAT_OPER_NO_CHAN_LIMIT, (FLAGS_OPER | FLAGS_LOCOP) },
-  { (PRIV_MODE_LCHAN | PRIV_LOCAL_OPMODE), FEAT_OPER_MODE_LCHAN,
-    (FLAGS_OPER | FLAGS_LOCOP) },
+  { PRIV_MODE_LCHAN, FEAT_OPER_MODE_LCHAN, (FLAGS_OPER | FLAGS_LOCOP) },
+  { PRIV_LOCAL_OPMODE, FEAT_OPER_MODE_LCHAN, (FLAGS_OPER | FLAGS_LOCOP) },
   { PRIV_WALK_LCHAN, FEAT_OPER_WALK_THROUGH_LMODES,
     (FLAGS_OPER | FLAGS_LOCOP) },
   { PRIV_DEOP_LCHAN, FEAT_NO_OPER_DEOP_LCHAN, (FLAGS_OPER | FLAGS_LOCOP) },
@@ -113,11 +116,15 @@ static struct {
   { PRIV_UNLIMIT_QUERY, FEAT_UNLIMIT_OPER_QUERY, (FLAGS_OPER | FLAGS_LOCOP) },
 
   { PRIV_KILL, FEAT_LOCAL_KILL_ONLY, 0 },
-  { (PRIV_GLINE | PRIV_JUPE | PRIV_OPMODE | PRIV_BADCHAN),
-    FEAT_CONFIG_OPERCMDS, ~0 },
-
-  { (PRIV_PROPAGATE | PRIV_SEE_OPERS), FEAT_LAST_F, FLAGS_OPER },
-  { (PRIV_KILL | PRIV_LOCAL_KILL), FEAT_OPER_KILL, FLAGS_OPER },
+  { PRIV_GLINE, FEAT_CONFIG_OPERCMDS, ~0 },
+  { PRIV_JUPE, FEAT_CONFIG_OPERCMDS, ~0 },
+  { PRIV_OPMODE, FEAT_CONFIG_OPERCMDS, ~0 },
+  { PRIV_BADCHAN, FEAT_CONFIG_OPERCMDS, ~0 },
+
+  { PRIV_PROPAGATE, FEAT_LAST_F, FLAGS_OPER },
+  { PRIV_SEE_OPERS, FEAT_LAST_F, FLAGS_OPER },
+  { PRIV_KILL, FEAT_OPER_KILL, FLAGS_OPER },
+  { PRIV_LOCAL_KILL, FEAT_OPER_KILL, FLAGS_OPER },
   { PRIV_REHASH, FEAT_OPER_REHASH, FLAGS_OPER },
   { PRIV_RESTART, FEAT_OPER_RESTART, FLAGS_OPER },
   { PRIV_DIE, FEAT_OPER_DIE, FLAGS_OPER },
@@ -131,6 +138,7 @@ static struct {
   { PRIV_LOCAL_BADCHAN, FEAT_OPER_LBADCHAN, FLAGS_OPER },
   { PRIV_SET, FEAT_OPER_SET, FLAGS_OPER },
   { PRIV_SEE_CHAN, FEAT_OPERS_SEE_IN_SECRET_CHANNELS, FLAGS_OPER },
+  { PRIV_WIDE_GLINE, FEAT_OPER_WIDE_GLINE, FLAGS_OPER },
 
   { PRIV_LOCAL_KILL, FEAT_LOCOP_KILL, FLAGS_LOCOP },
   { PRIV_REHASH, FEAT_LOCOP_REHASH, FLAGS_LOCOP },
@@ -142,6 +150,7 @@ static struct {
   { PRIV_LOCAL_BADCHAN, FEAT_LOCOP_LBADCHAN, FLAGS_LOCOP },
   { PRIV_SET, FEAT_LOCOP_SET, FLAGS_LOCOP },
   { PRIV_SEE_CHAN, FEAT_LOCOP_SEE_IN_SECRET_CHANNELS, FLAGS_LOCOP },
+  { PRIV_WIDE_GLINE, FEAT_LOCOP_WIDE_GLINE, FLAGS_LOCOP },
   { 0, FEAT_LAST_F, 0 }
 };
 
@@ -196,7 +205,7 @@ client_set_privs(struct Client* client)
     PrivSet(&antiprivs, PRIV_BADCHAN);
   }
 
-  for (i = 0; i < _PRIV_IDX(PRIV_LAST_PRIV); i++)
+  for (i = 0; i <= _PRIV_IDX(PRIV_LAST_PRIV); i++)
     privs.priv_mask[i] &= ~antiprivs.priv_mask[i];
 
   cli_privs(client) = privs;
@@ -213,7 +222,7 @@ static struct {
   P(GLINE),          P(LOCAL_GLINE),    P(JUPE),          P(LOCAL_JUPE),
   P(OPMODE),         P(LOCAL_OPMODE),   P(SET),           P(WHOX),
   P(BADCHAN),        P(LOCAL_BADCHAN),  P(SEE_CHAN),      P(PROPAGATE),
-  P(DISPLAY),        P(SEE_OPERS),
+  P(DISPLAY),        P(SEE_OPERS),      P(WIDE_GLINE),
 #undef P
   { 0, 0 }
 };