From 89b5bba2fe0e78f717cae41b2cb82b25a7cfe539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 19 Apr 2005 18:44:56 +0000 Subject: [PATCH] check address truncation git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14854 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/test_addr.c | 62 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/lib/krb5/test_addr.c b/lib/krb5/test_addr.c index 80fb26c1b..b6caee428 100644 --- a/lib/krb5/test_addr.c +++ b/lib/krb5/test_addr.c @@ -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);