diff options
author | Reyk Floeter <reyk@cvs.openbsd.org> | 2010-06-10 09:14:39 +0000 |
---|---|---|
committer | Reyk Floeter <reyk@cvs.openbsd.org> | 2010-06-10 09:14:39 +0000 |
commit | 30c75a29a8b4fafd3ce69e4cea53a8541150a2b7 (patch) | |
tree | df59ce385a3ab95d9ca114debdb663497baeec63 | |
parent | 1095eddd2a53e9f41244cc8a1662196d39bbb806 (diff) |
small fix for sockaddr_cmp()
-rw-r--r-- | sbin/iked/util.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sbin/iked/util.c b/sbin/iked/util.c index 7644d9f5004..d7c31128f7d 100644 --- a/sbin/iked/util.c +++ b/sbin/iked/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.1 2010/06/03 16:41:12 reyk Exp $ */ +/* $OpenBSD: util.c,v 1.2 2010/06/10 09:14:38 reyk Exp $ */ /* $vantronix: util.c,v 1.39 2010/06/02 12:22:58 reyk Exp $ */ /* @@ -303,6 +303,9 @@ sockaddr_cmp(struct sockaddr *a, struct sockaddr *b, int prefixlen) if (b->sa_family != AF_UNSPEC && (a->sa_family < b->sa_family)) return (-1); + if (prefixlen == -1) + memset(&mv, 0xff, sizeof(mv)); + switch (a->sa_family) { case AF_INET: a4 = (struct sockaddr_in *)a; @@ -310,11 +313,12 @@ sockaddr_cmp(struct sockaddr *a, struct sockaddr *b, int prefixlen) av[0] = a4->sin_addr.s_addr; bv[0] = b4->sin_addr.s_addr; - mv[0] = prefixlen2mask(prefixlen); + if (prefixlen != -1) + mv[0] = prefixlen2mask(prefixlen); if ((av[0] & mv[0]) > (bv[0] & mv[0])) return (1); - if ((bv[0] & mv[0]) < (bv[0] & mv[0])) + if ((av[0] & mv[0]) < (bv[0] & mv[0])) return (-1); break; case AF_INET6: @@ -323,7 +327,8 @@ sockaddr_cmp(struct sockaddr *a, struct sockaddr *b, int prefixlen) memcpy(&av, &a6->sin6_addr.s6_addr, 16); memcpy(&bv, &b6->sin6_addr.s6_addr, 16); - prefixlen2mask6(prefixlen, mv); + if (prefixlen != -1) + prefixlen2mask6(prefixlen, mv); if ((av[3] & mv[3]) > (bv[3] & mv[3])) return (1); |