Committer : entrope
CVSROOT : /cvsroot/undernet-ircu
Module : ircu2.10
Commit time: 2005-03-08 12:56:26 UTC
Modified files:
ChangeLog ircd/match.c
Log message:
Fix buglet in yesterday's handling of "*" as an IP mask.
---------------------- diff included ----------------------
Index: ircu2.10/ChangeLog
diff -u ircu2.10/ChangeLog:1.562 ircu2.10/ChangeLog:1.563
--- ircu2.10/ChangeLog:1.562 Mon Mar 7 13:11:49 2005
+++ ircu2.10/ChangeLog Tue Mar 8 04:56:14 2005
@@ -1,3 +1,9 @@
+2005-03-08 Michael Poole <[EMAIL PROTECTED]>
+
+ * ircd/match.c (ipmask_parse): Explicitly zero-initialize the mask
+ and bit count for "*".
+ (ipmask_check): Make more robust to similar errors.
+
2005-03-07 Michael Poole <[EMAIL PROTECTED]>
* configure.in: Consistently use a constant in AC_DEFINE().
Index: ircu2.10/ircd/match.c
diff -u ircu2.10/ircd/match.c:1.13 ircu2.10/ircd/match.c:1.14
--- ircu2.10/ircd/match.c:1.13 Mon Mar 7 13:12:37 2005
+++ ircu2.10/ircd/match.c Tue Mar 8 04:56:16 2005
@@ -18,7 +18,7 @@
*/
/** @file
* @brief Functions to match strings against IRC mask strings.
- * @version $Id: match.c,v 1.13 2005/03/07 21:12:37 entrope Exp $
+ * @version $Id: match.c,v 1.14 2005/03/08 12:56:16 entrope Exp $
*/
#include "config.h"
@@ -907,6 +907,8 @@
bits += 96;
} else if (in[0] == '*' && in[1] == '\0') {
/* accept as a 0-bit mask */
+ memset(&mask->in6_16, 0, sizeof(mask->in6_16));
+ bits = 0;
} else {
if (!(p = strchr(in, '/')))
bits = 128;
@@ -941,7 +943,7 @@
for (k = 0; k < 8; k++) {
if (bits < 16)
- return (addr->in6_16[k] & htons(0xffff << (16-bits))) == mask->in6_16[k];
+ return !(htons(addr->in6_16[k] ^ mask->in6_16[k]) >> (16-bits));
if (addr->in6_16[k] != mask->in6_16[k])
return 0;
if (!(bits -= 16))
----------------------- End of diff -----------------------