From 832942858cbc9d9f3d34caa7ea3be26d89360ee6 Mon Sep 17 00:00:00 2001 From: jilles Date: Wed, 7 Nov 2007 15:45:14 -0800 Subject: [PATCH] [svn] Fix desyncs with very long extbans. Bans can now be upto 195 chars long. --- ChangeLog | 10 ++++++++++ include/channel.h | 4 ++-- include/serno.h | 2 +- src/channel.c | 6 +++--- src/chmode.c | 11 +++++++---- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 71b8507..fef5b90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +jilles 2007/11/07 21:45:14 UTC (20071107-3578) + Log: + allocate_channel(): no need to truncate name, its only caller already does it + furthermore, truncating here causes an inconsistent channel name + + + Changes: Modified: + +1 -1 trunk/src/channel.c (File Modified) + + jilles 2007/10/27 21:56:53 UTC (20071027-3574) Log: Fix a memory leak. diff --git a/include/channel.h b/include/channel.h index ce9ef00..c743c55 100644 --- a/include/channel.h +++ b/include/channel.h @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel.h 2727 2006-11-09 23:48:45Z jilles $ + * $Id: channel.h 3580 2007-11-07 23:45:14Z jilles $ */ #ifndef INCLUDED_channel_h @@ -93,7 +93,7 @@ struct membership unsigned long bants; }; -#define BANLEN NICKLEN+USERLEN+HOSTLEN+6 +#define BANLEN 195 struct Ban { char *banstr; diff --git a/include/serno.h b/include/serno.h index 06bfb6b..f8c0d9c 100644 --- a/include/serno.h +++ b/include/serno.h @@ -1 +1 @@ -#define SERNO "20071027-3574" +#define SERNO "20071107-3578" diff --git a/src/channel.c b/src/channel.c index 709eb2d..c0fdcc3 100644 --- a/src/channel.c +++ b/src/channel.c @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel.c 3578 2007-11-07 21:45:14Z jilles $ + * $Id: channel.c 3580 2007-11-07 23:45:14Z jilles $ */ #include "stdinc.h" @@ -109,8 +109,8 @@ allocate_ban(const char *banstr, const char *who) { struct Ban *bptr; bptr = BlockHeapAlloc(ban_heap); - DupNString(bptr->banstr, banstr, BANLEN); - DupNString(bptr->who, who, BANLEN); + DupString(bptr->banstr, banstr); + DupString(bptr->who, who); return (bptr); } diff --git a/src/chmode.c b/src/chmode.c index e7bd9bc..3f42a6f 100644 --- a/src/chmode.c +++ b/src/chmode.c @@ -22,7 +22,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: chmode.c 3534 2007-07-14 13:34:50Z jilles $ + * $Id: chmode.c 3580 2007-11-07 23:45:14Z jilles $ */ #include "stdinc.h" @@ -92,7 +92,7 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, dlink_list * list, long mode_type) { struct Ban *actualBan; - static char who[BANLEN]; + static char who[USERHOST_REPLYLEN]; char *realban = LOCAL_COPY(banid); dlink_node *ptr; @@ -615,8 +615,11 @@ chm_ban(struct Client *source_p, struct Channel *chptr, else mask = pretty_mask(raw_mask); - /* we'd have problems parsing this, hyb6 does it too */ - if(strlen(mask) > (MODEBUFLEN - 2)) + /* we'd have problems parsing this, hyb6 does it too + * also make sure it will always fit on a line with channel + * name etc. + */ + if(strlen(mask) > IRCD_MIN(BANLEN, MODEBUFLEN - 5)) return; /* if we're adding a NEW id */