check address truncation
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14854 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user