commit f8405b1a4f032a125372b03711f6bed1ecac2bd6 from: Alexander Barton date: Fri Jan 06 19:05:07 2012 UTC 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. commit - fdfc27265ef27e445de89217d08f9a57219355df commit + f8405b1a4f032a125372b03711f6bed1ecac2bd6 blob - 7a871379a422543c416a111e6d2eeaafdd661dc5 blob + 10e3e45656bdb1cc996ef0d92ad2c0a1cd8fab2f --- src/ngircd/irc.c +++ 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,7 +45,36 @@ static bool Send_Message_Mask PARAMS((CLIENT *from, ch 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 ) { assert( Client != NULL ); blob - cdeb74580984c2fee70198d83cb81e6e05c67649 blob + c2f9b66244eba0c3fc84db90f1104cd60b4d3758 --- src/ngircd/irc.h +++ 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));