]> jfr.im git - irc/quakenet/newserv.git/commitdiff
CHANSERV: require user to have QPRIV_VIEWWALLMESSAGE to see walls (i.e. must be opere...
authorChris Porter <redacted>
Sun, 15 Feb 2009 20:45:49 +0000 (20:45 +0000)
committerChris Porter <redacted>
Sun, 15 Feb 2009 20:45:49 +0000 (20:45 +0000)
chanserv/chanserv.h
chanserv/chanservprivs.c
chanserv/chanservuser.c

index 3e4e0c26d997bfe2113d11f35eff4c1a2af5bc27..745356dda1c7bc4cde02fa7230bac6590eb7d09f 100644 (file)
 #define   QPRIV_VIEWEMAIL           109
 #define   QPRIV_VIEWCHANSUSPENSION  110
 #define   QPRIV_VIEWSUSPENDEDBY     111
+#define   QPRIV_VIEWWALLMESSAGE     112
 
 #define   QPRIV_CHANGECHANFLAGS     200
 #define   QPRIV_CHANGECHANLEV       201
index fd38ff2f66b7c43c11231106827bca4454840100..63c5e21d40a261a926fb1041cc97c9c214b896d0 100644 (file)
@@ -33,6 +33,7 @@ int cs_privcheck(int privnum, nick *np) {
   case QPRIV_CHANGEBANTIMER:
   case QPRIV_CHANGEUSERFLAGS:
   case QPRIV_VIEWSUSPENDEDBY:
+  case QPRIV_VIEWWALLMESSAGE: /* if you change VIEWWALLMESSAGE alter chanservwallmessage too */
     return (np && rup && IsOper(np) && UHasOperPriv(rup));
     
   default: /* By default opers can override anything */
index 57e94bfc633f73df63d9897ebde2b01fce04db63..fb05bce2a4e13b982567ed8ed7ad9e9efde0a0b9 100644 (file)
@@ -467,16 +467,23 @@ void chanservwallmessage(char *message, ... ) {
   va_list va;
   nick *np;
   unsigned int i=0;
-  
+
   va_start(va,message);
   vsnprintf(buf,5000,message,va);
   va_end(va);
   
   /* Scan for users */
-  for (i=0;i<NICKHASHSIZE;i++)
-    for (np=nicktable[i];np;np=np->next)
-      if (IsOper(np))
-        chanservsendmessage(np, "%s", buf);
+  for (i=0;i<NICKHASHSIZE;i++) {
+    for (np=nicktable[i];np;np=np->next) {
+      if (!IsOper(np)) /* optimisation, if VIEWWALLMESSAGE changes change this */
+        continue;
+
+      if (!cs_privcheck(QPRIV_VIEWWALLMESSAGE, np))
+        continue;
+
+      chanservsendmessage(np, "%s", buf);
+    }
+  }
 }
 
 void chanservkillstdmessage(nick *target, int messageid, ... ) {