From f8405b1a4f032a125372b03711f6bed1ecac2bd6 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Fri, 6 Jan 2012 20:05:07 +0100 Subject: [PATCH] New function IRC_CheckListTooBig() to check size of list replies It the limit is reached, a NOTICE is sent to the client and list processing should stop. --- src/ngircd/irc.c | 31 ++++++++++++++++++++++++++++++- src/ngircd/irc.h | 5 ++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 7a871379..10e3e456 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2004 Alexander Barton + * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,6 +45,35 @@ static bool Send_Message_Mask PARAMS((CLIENT *from, char *command, bool SendErrors)); +/** + * Check if a list limit is reached and inform client accordingly. + * + * @param From The client. + * @param Count Reply item count. + * @param Limit Reply limit. + * @param Name Name of the list. + * @return true if list limit has been reached; false otherwise. + */ +GLOBAL bool +IRC_CheckListTooBig(CLIENT *From, const int Count, const int Limit, + const char *Name) +{ + assert(From != NULL); + assert(Count >= 0); + assert(Limit > 0); + assert(Name != NULL); + + if (Count < Limit) + return false; + + (void)IRC_WriteStrClient(From, + "NOTICE %s :%s list limit (%d) reached!", + Client_ID(From), Name, Limit); + IRC_SetPenalty(From, 2); + return true; +} + + GLOBAL bool IRC_ERROR( CLIENT *Client, REQUEST *Req ) { diff --git a/src/ngircd/irc.h b/src/ngircd/irc.h index cdeb7458..c2f9b662 100644 --- a/src/ngircd/irc.h +++ b/src/ngircd/irc.h @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2008 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,6 +17,9 @@ * IRC commands (header) */ +GLOBAL bool IRC_CheckListTooBig PARAMS((CLIENT *From, const int Count, + const int Limit, const char *Name)); + GLOBAL bool IRC_ERROR PARAMS((CLIENT *Client, REQUEST *Req)); GLOBAL bool IRC_KILL PARAMS((CLIENT *Client, REQUEST *Req)); GLOBAL bool IRC_NOTICE PARAMS((CLIENT *Client, REQUEST *Req)); -- 2.39.2