noip.c (acl_allows_p): Check that the ACL node address family is right.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 6 Jun 2018 19:11:56 +0000 (20:11 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 6 Jun 2018 19:13:04 +0000 (20:13 +0100)
Oops.  `sockaddr_in_range_p' can't check this, because it can only see
one address family.

noip.c

diff --git a/noip.c b/noip.c
index b10f6bb..0fab12e 100644 (file)
--- a/noip.c
+++ b/noip.c
@@ -597,7 +597,8 @@ static int acl_allows_p(const aclnode *a, const struct sockaddr *sa)
              present_sockaddr(sa, 0, buf, sizeof(buf))); })
   for (; a; a = a->next) {
     D( dump_aclnode(a); )
-    if (sockaddr_in_range_p(sa, &a->minaddr, &a->maxaddr) &&
+    if (a->af == sa->sa_family &&
+       sockaddr_in_range_p(sa, &a->minaddr, &a->maxaddr) &&
        a->minport <= port && port <= a->maxport) {
       D( fprintf(stderr, "noip(%d): aha!  %s\n", pid,
                 a->act ? "ALLOW" : "DENY"); )