# HG changeset patch # Parent 6c1e0a6d0283dbbc3aeef7884308bd4223611c0d diff -r 6c1e0a6d0283 ircd/parse.c --- a/ircd/parse.c Sat Jul 13 23:24:56 2013 +0100 +++ b/ircd/parse.c Sat Jul 13 23:26:11 2013 +0100 @@ -882,8 +882,14 @@ paramcount = mptr->parameters; i = bufend - ((s) ? s : ch); mptr->bytes += i; - if ((mptr->flags & MFLG_SLOW) || !IsAnOper(cptr)) - cli_since(cptr) += (2 + i / 120); + if ((mptr->flags & MFLG_SLOW) || !IsAnOper(cptr)) { + if (IsAnOper(cptr)) { + cli_since(cptr) += 1; + } else { + cli_since(cptr) += (2 + i / 120); + } + } + /* * Allow only 1 msg per 2 seconds * (on average) to prevent dumping. diff -r 6c1e0a6d0283 ircd/s_bsd.c --- a/ircd/s_bsd.c Sat Jul 13 23:24:56 2013 +0100 +++ b/ircd/s_bsd.c Sat Jul 13 23:26:11 2013 +0100 @@ -575,7 +575,7 @@ unsigned int length = 0; if (socket_ready && - !(IsUser(cptr) && + !(IsUser(cptr) && !IsOper(cptr) && DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD))) { switch (os_recv_nonb(cli_fd(cptr), readbuf, sizeof(readbuf), &length)) { case IO_SUCCESS: @@ -615,8 +615,11 @@ 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)) + if (IsUser(cptr)) { + if (DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD) + && !IsOper(cptr)) return exit_client(cptr, cptr, &me, "Excess Flood"); + } while (DBufLength(&(cli_recvQ(cptr))) && !NoNewLine(cptr) && (IsTrusted(cptr) || cli_since(cptr) - CurrentTime < 10))