add unlimited flood priv
authorpk910 <philipp@zoelle1.de>
Sun, 8 Nov 2015 00:59:46 +0000 (01:59 +0100)
committerpk910 <philipp@zoelle1.de>
Sun, 8 Nov 2015 00:59:46 +0000 (01:59 +0100)
include/client.h
ircd/ircd_lexer.l
ircd/ircd_parser.y
ircd/s_bsd.c

index 4fb584c3cb827defe72c2c6d464baf1943e5514a..32a559acf3fd9a6e021f0a917c518043dc0c9a03 100644 (file)
@@ -126,6 +126,7 @@ enum Priv
     PRIV_FORCE_OPMODE, /**< can hack modes on quarantined channels */
     PRIV_FORCE_LOCAL_OPMODE, /**< can hack modes on quarantined local channels */
     PRIV_APASS_OPMODE, /**< can hack modes +A/-A/+U/-U */
+       PRIV_UNLIMIT_FLOOD, /**< user won't get excess flooded */
     PRIV_LAST_PRIV /**< number of privileges */
   };
 
index 78818e81b1d555625c588f0437a5c7f4615178e8..eee4c75061b2d052c808126fbc5c6132976d3839 100644 (file)
@@ -149,6 +149,7 @@ static struct lexer_token {
   { "tb", TBYTES },
   { "terabytes", TBYTES },
   { "unlimit_query", TPRIV_UNLIMIT_QUERY },
+  { "unlimit_flood", TPRIV_UNLIMIT_FLOOD },
   { "walk_lchan", TPRIV_WALK_LCHAN },
   { "wide_gline", TPRIV_WIDE_GLINE },
   { "whox", TPRIV_WHOX },
index 64a112cb9e54000097c2ef1df176debd3c6b7db9..ae9bfdb146de53beba86fd606a0b28978567233d 100644 (file)
@@ -181,9 +181,9 @@ static void free_slist(struct SLink **link) {
 %token TPRIV_GLINE TPRIV_LOCAL_GLINE TPRIV_LOCAL_JUPE TPRIV_LOCAL_BADCHAN
 %token TPRIV_LOCAL_OPMODE TPRIV_OPMODE TPRIV_SET TPRIV_WHOX TPRIV_BADCHAN
 %token TPRIV_SEE_CHAN TPRIV_SHOW_INVIS TPRIV_SHOW_ALL_INVIS TPRIV_PROPAGATE
-%token TPRIV_UNLIMIT_QUERY TPRIV_DISPLAY TPRIV_SEE_OPERS TPRIV_WIDE_GLINE
-%token TPRIV_FORCE_OPMODE TPRIV_FORCE_LOCAL_OPMODE TPRIV_APASS_OPMODE
-%token TPRIV_LIST_CHAN
+%token TPRIV_UNLIMIT_QUERY TPRIV_UNLIMIT_FLOOD TPRIV_DISPLAY TPRIV_SEE_OPERS
+%token TPRIV_WIDE_GLINE TPRIV_FORCE_OPMODE TPRIV_FORCE_LOCAL_OPMODE
+%token TPRIV_APASS_OPMODE TPRIV_LIST_CHAN
 /* and some types... */
 %type <num> sizespec
 %type <num> timespec timefactor factoredtimes factoredtime
@@ -674,6 +674,7 @@ privtype: TPRIV_CHAN_LIMIT { $$ = PRIV_CHAN_LIMIT; } |
           TPRIV_SHOW_ALL_INVIS { $$ = PRIV_SHOW_ALL_INVIS; } |
           TPRIV_PROPAGATE { $$ = PRIV_PROPAGATE; } |
           TPRIV_UNLIMIT_QUERY { $$ = PRIV_UNLIMIT_QUERY; } |
+          TPRIV_UNLIMIT_FLOOD { $$ = PRIV_UNLIMIT_FLOOD; } |
           TPRIV_DISPLAY { $$ = PRIV_DISPLAY; } |
           TPRIV_SEE_OPERS { $$ = PRIV_SEE_OPERS; } |
           TPRIV_WIDE_GLINE { $$ = PRIV_WIDE_GLINE; } |
index 7e3205af764cf2f3d72694d4d54363cb3b262f0f..cc77c7bc87f3dc68a340022234c2b2128bf18fc6 100644 (file)
@@ -615,11 +615,13 @@ static int read_packet(struct Client *cptr, int socket_ready)
     if (length > 0 && dbuf_put(&(cli_recvQ(cptr)), readbuf, length) == 0)
       return exit_client(cptr, cptr, &me, "dbuf_put fail");
 
-    if (DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD))
+       int HasUnlimitFlood = HasPriv(cptr, PRIV_UNLIMIT_FLOOD);
+  
+    if (DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD) && !HasUnlimitFlood)
       return exit_client(cptr, cptr, &me, "Excess Flood");
 
     while (DBufLength(&(cli_recvQ(cptr))) && !NoNewLine(cptr) && 
-           (IsTrusted(cptr) || cli_since(cptr) - CurrentTime < 10))
+           (IsTrusted(cptr) || cli_since(cptr) - CurrentTime < 10 || HasUnlimitFlood))
     {
       dolen = dbuf_getmsg(&(cli_recvQ(cptr)), cli_buffer(cptr), BUFSIZE);
       /*