From df2516e6d801e4180f979c4ca7e35036bbd99839 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 2 Feb 2013 00:50:03 +0100 Subject: [PATCH] whowas: Abort listing if 90% of sendq is in use. --- modules/m_whowas.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/m_whowas.c b/modules/m_whowas.c index 336a6af4..eb32ede2 100644 --- a/modules/m_whowas.c +++ b/modules/m_whowas.c @@ -64,6 +64,7 @@ m_whowas(struct Client *client_p, struct Client *source_p, int parc, const char char *p; const char *nick; char tbuf[26]; + long sendq_limit; static time_t last_used = 0L; @@ -96,12 +97,20 @@ m_whowas(struct Client *client_p, struct Client *source_p, int parc, const char nick = parv[1]; + sendq_limit = get_sendq(client_p) * 9 / 10; + temp = WHOWASHASH[hash_whowas_name(nick)]; found = 0; for (; temp; temp = temp->next) { if(!irccmp(nick, temp->name)) { + if(cur > 0 && rb_linebuf_len(&client_p->localClient->buf_sendq) > sendq_limit) + { + sendto_one(source_p, form_str(ERR_TOOMANYMATCHES), + me.name, source_p->name, "WHOWAS"); + break; + } sendto_one(source_p, form_str(RPL_WHOWASUSER), me.name, source_p->name, temp->name, temp->username, temp->hostname, temp->realname);