check address truncation

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14854 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2005-04-19 18:44:56 +00:00
parent a76ce26d04
commit 89b5bba2fe

View File

@@ -70,6 +70,59 @@ print_addr(krb5_context context, const char *addr)
}
static void
truncated_addr(krb5_context context, const char *addr,
size_t truncate_len, size_t outlen)
{
krb5_addresses addresses;
krb5_error_code ret;
char *buf;
size_t len;
buf = ecalloc(1, outlen + 1);
ret = krb5_parse_address(context, addr, &addresses);
if (ret)
krb5_err(context, 1, ret, "krb5_parse_address");
if (addresses.len != 1)
krb5_err(context, 1, ret, "addresses should be one");
krb5_print_address(&addresses.val[0], buf, truncate_len, &len);
#if 0
printf("addr %s (%d/%d)\n", buf, (int)len, (int)strlen(buf));
#endif
if (truncate_len > strlen(buf) + 1)
abort();
if (outlen != len)
abort();
krb5_print_address(&addresses.val[0], buf, outlen + 1, &len);
#if 0
printf("addr %s (%d/%d)\n", buf, (int)len, (int)strlen(buf));
#endif
if (len != outlen)
abort();
if (strlen(buf) != len)
abort();
krb5_free_addresses(context, &addresses);
free(buf);
}
static void
check_truncation(krb5_context context, const char *addr)
{
int i, len = strlen(addr);
for (i = 0; i < len; i++)
truncated_addr(context, addr, i, len);
}
static void
match_addr(krb5_context context, const char *range_addr,
const char *one_addr, int match)
@@ -103,8 +156,6 @@ match_addr(krb5_context context, const char *range_addr,
krb5_free_addresses(context, &one);
}
int
main(int argc, char **argv)
{
@@ -128,6 +179,13 @@ main(int argc, char **argv)
print_addr(context, "RANGE:fe80::-fe80::ffff:ffff:ffff:ffff");
#endif
check_truncation(context, "IPv4:127.0.0.0");
check_truncation(context, "RANGE:IPv4:127.0.0.0-IPv4:127.0.0.255");
#ifdef HAVE_IPV6
check_truncation(context, "IPv6:::1");
check_truncation(context, "IPv6:fe80::ffff:ffff:ffff:ffff");
#endif
match_addr(context, "RANGE:127.0.0.0/8", "inet:127.0.0.0", 1);
match_addr(context, "RANGE:127.0.0.0/8", "inet:127.255.255.255", 1);
match_addr(context, "RANGE:127.0.0.0/8", "inet:128.0.0.0", 0);