From d13c7b5efd15eec19cbd08d00a3f65da03049868 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sun, 8 Nov 2015 01:59:46 +0100 Subject: [PATCH] add unlimited flood priv --- include/client.h | 1 + ircd/ircd_lexer.l | 1 + ircd/ircd_parser.y | 7 ++++--- ircd/s_bsd.c | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/client.h b/include/client.h index 4fb584c..32a559a 100644 --- a/include/client.h +++ b/include/client.h @@ -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 */ }; diff --git a/ircd/ircd_lexer.l b/ircd/ircd_lexer.l index 78818e8..eee4c75 100644 --- a/ircd/ircd_lexer.l +++ b/ircd/ircd_lexer.l @@ -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 }, diff --git a/ircd/ircd_parser.y b/ircd/ircd_parser.y index 64a112c..ae9bfdb 100644 --- a/ircd/ircd_parser.y +++ b/ircd/ircd_parser.y @@ -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 sizespec %type 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; } | diff --git a/ircd/s_bsd.c b/ircd/s_bsd.c index 7e3205a..cc77c7b 100644 --- a/ircd/s_bsd.c +++ b/ircd/s_bsd.c @@ -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); /* -- 2.20.1