+2005-05-07 Michael Poole <mdpoole@troilus.org>
+
+ * ircd/numnicks.c (base64toip): Fix bugs in parsing IPv6
+ addresses.
+ * ircd/test/ircd_in_addr_t.c (test_addrs): Add new entry.
+ (test_address): Test base64toip() as well.
+
2005-05-05 Michael Poole <mdpoole@troilus.org>
* ircd/s_user.c (umode_str): Only clear the operator flag when not
do {
if (*input == '_') {
unsigned int left;
- for (left = (25 - strlen(input)) / 3; left; left--)
+ for (left = (25 - strlen(input)) / 3 - pos; left; left--)
addr->in6_16[pos++] = 0;
input++;
} else {
accum = (accum << NUMNICKLOG) | convert2n[(unsigned char)*input++];
accum = (accum << NUMNICKLOG) | convert2n[(unsigned char)*input++];
addr->in6_16[pos++] = ntohs(accum);
- input += 3;
}
} while (pos < 8);
}
{ "8352:0344:0:0:0:0:2001:1204", "8352:344::2001:1204",
{{ 0x8352, 0x344, 0, 0, 0, 0, 0x2001, 0x1204 }},
"AAAAAA", "INSANE_CABBIE", 1, 0, 0 },
+ { "1:2:3:4:5:6:7:8", "1:2:3:4:5:6:7:8",
+ {{ 1, 2, 3, 4, 5, 6, 7, 8 }},
+ "AAAAAA", "AABAACAADAAEAAFAAGAAHAAI", 1, 0, 0 },
{ 0 },
};
assert(!!val == addr->is_ipv4);
val = irc_in_addr_is_loopback(&parsed);
assert(!!val == addr->is_loopback);
+ /* Check base64-to-IP conversion. */
+ if (addr->is_ipv4) {
+ base64toip(addr->base64_v4, &parsed);
+ assert(!memcmp(parsed.in6_16+6, addr->expected.in6_16+6, 4));
+ } else {
+ base64toip(addr->base64_v6, &parsed);
+ assert(!memcmp(&parsed, &addr->expected, sizeof(parsed)));
+ }
+ /* Tests completed. */
printf("Passed: %s (%s/%s)\n", addr->text, base64_v4, base64_v6);
}