diff options
author | ume <ume@FreeBSD.org> | 2000-07-14 17:15:34 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2000-07-14 17:15:34 +0000 |
commit | 70f27cd4dd7e1d1d852cba36b094d6dc066d927d (patch) | |
tree | f2ea77bde85e774d904c6d9e876c7f0783fca721 /contrib/tcp_wrappers/tcpdchk.c | |
parent | 55485e0103d7b63665f16e41d400e306498c92a8 (diff) | |
download | FreeBSD-src-70f27cd4dd7e1d1d852cba36b094d6dc066d927d.zip FreeBSD-src-70f27cd4dd7e1d1d852cba36b094d6dc066d927d.tar.gz |
Add IPv6 scoped address support.
It enables us to control link-local connections by interface like
this:
ALL : [fe80::%ed0]/10 : allow
ALL : [fe80::]/10 : deny
Diffstat (limited to 'contrib/tcp_wrappers/tcpdchk.c')
-rw-r--r-- | contrib/tcp_wrappers/tcpdchk.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/contrib/tcp_wrappers/tcpdchk.c b/contrib/tcp_wrappers/tcpdchk.c index a2804a2..99ec495 100644 --- a/contrib/tcp_wrappers/tcpdchk.c +++ b/contrib/tcp_wrappers/tcpdchk.c @@ -410,7 +410,7 @@ char *pat; static int is_inet6_addr(pat) char *pat; { - struct in6_addr addr; + struct addrinfo hints, *res; int len, ret; char ch; @@ -420,9 +420,14 @@ static int is_inet6_addr(pat) if ((ch = pat[len - 1]) != ']') return (0); pat[len - 1] = '\0'; - ret = inet_pton(AF_INET6, pat + 1, &addr); + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET6; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + if ((ret = getaddrinfo(pat + 1, NULL, &hints, &res)) == 0) + freeaddrinfo(res); pat[len - 1] = ch; - return (ret == 1); + return (ret == 0); } #endif |