From 46363f4129c727468520c4c73a049b7fcb1c0e32 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 25 Aug 2015 11:06:18 +0000 Subject: [PATCH 1/2] Make reverse dns lookups honor tombstones. --- nameserver/nameserver.go | 2 +- test/265_dns_reverse_test.sh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100755 test/265_dns_reverse_test.sh diff --git a/nameserver/nameserver.go b/nameserver/nameserver.go index 20331a7f..b3de9c3f 100644 --- a/nameserver/nameserver.go +++ b/nameserver/nameserver.go @@ -121,7 +121,7 @@ func (n *Nameserver) ReverseLookup(ip address.Address) (string, error) { defer n.RUnlock() match, err := n.entries.first(func(e *Entry) bool { - return e.Addr == ip + return e.Tombstone == 0 && e.Addr == ip }) if err != nil { return "", err diff --git a/test/265_dns_reverse_test.sh b/test/265_dns_reverse_test.sh new file mode 100755 index 00000000..5a9e94fe --- /dev/null +++ b/test/265_dns_reverse_test.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +. ./config.sh + +IP=10.2.0.67 + +start_suite "Reverse DNS test" + +weave_on $HOST1 launch +start_container_with_dns $HOST1 --name=c1 + +for name in bar bar black sheep have you any wool; do + start_container $HOST1 $IP/24 --name=$name + assert "exec_on $HOST1 c1 dig +short -x $IP" $name.weave.local. + rm_containers $HOST1 $name +done + +end_suite From 914c88454dbb63f6c6b0941bc946a4784a1d4f31 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 25 Aug 2015 16:53:21 +0000 Subject: [PATCH 2/2] Review feedback --- test/265_dns_reverse_test.sh | 9 +++++++-- test/config.sh | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/test/265_dns_reverse_test.sh b/test/265_dns_reverse_test.sh index 5a9e94fe..0f7c8804 100755 --- a/test/265_dns_reverse_test.sh +++ b/test/265_dns_reverse_test.sh @@ -9,9 +9,14 @@ start_suite "Reverse DNS test" weave_on $HOST1 launch start_container_with_dns $HOST1 --name=c1 -for name in bar bar black sheep have you any wool; do +# We try names in alphabetical order; this is because the +# nameserver keeps entries sorted by hostname then address, +# so by starting with acontainer then trying bcontainer, +# we're guaranteed to have to ignore a tombstone to get the +# right result. +for name in acontainer bcontainer ccontainer; do start_container $HOST1 $IP/24 --name=$name - assert "exec_on $HOST1 c1 dig +short -x $IP" $name.weave.local. + assert_dns_record $HOST1 c1 $name.weave.local $IP rm_containers $HOST1 $name done diff --git a/test/config.sh b/test/config.sh index 0189e62f..1ab62c3d 100644 --- a/test/config.sh +++ b/test/config.sh @@ -167,9 +167,9 @@ container_ip() { # assert_dns_record [ ...] assert_dns_record() { - host=$1 - container=$2 - name=$3 + local host=$1 + local container=$2 + local name=$3 shift 3 exp_ips_regex=$(echo "$@" | sed -e 's/ /\\\|/g')