From 9884b09b9eca9738f7a25d31c4ec9d7ae5a8c8b5 Mon Sep 17 00:00:00 2001 From: Benjamin Simon Date: Fri, 20 Dec 2024 16:39:43 +0100 Subject: [PATCH 1/3] filter DNS answer to only include A records --- localstack-core/localstack/aws/connect.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/localstack-core/localstack/aws/connect.py b/localstack-core/localstack/aws/connect.py index 402bafffc6265..09422dea3bee1 100644 --- a/localstack-core/localstack/aws/connect.py +++ b/localstack-core/localstack/aws/connect.py @@ -660,7 +660,11 @@ def resolve_dns_from_upstream(hostname: str) -> str: if len(response.answer) == 0: raise ValueError(f"No DNS response found for hostname '{hostname}'") - ip_addresses = list(response.answer[0].items.keys()) + ip_addresses = [] + for answer in response.answer: + if answer.match(dns.rdataclass.IN, dns.rdatatype.A, dns.rdatatype.TYPE0): + ip_addresses.extend(answer.items.keys()) + return choice(ip_addresses).address From b898b8c697d71d0b20e9ac323b570d08ce7850cd Mon Sep 17 00:00:00 2001 From: Benjamin Simon Date: Fri, 20 Dec 2024 18:02:43 +0100 Subject: [PATCH 2/3] add better exception handling if no A record is found --- localstack-core/localstack/aws/connect.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/localstack-core/localstack/aws/connect.py b/localstack-core/localstack/aws/connect.py index 09422dea3bee1..7fca288d91cf1 100644 --- a/localstack-core/localstack/aws/connect.py +++ b/localstack-core/localstack/aws/connect.py @@ -665,6 +665,9 @@ def resolve_dns_from_upstream(hostname: str) -> str: if answer.match(dns.rdataclass.IN, dns.rdatatype.A, dns.rdatatype.TYPE0): ip_addresses.extend(answer.items.keys()) + if not ip_addresses: + raise ValueError(f"No DNS records of type 'A' found for hostname '{hostname}'") + return choice(ip_addresses).address From 5037582728f1744bf076e755bd306cda96f20a86 Mon Sep 17 00:00:00 2001 From: Benjamin Simon Date: Fri, 20 Dec 2024 18:07:38 +0100 Subject: [PATCH 3/3] replace `TYPE0` by `NONE --- localstack-core/localstack/aws/connect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localstack-core/localstack/aws/connect.py b/localstack-core/localstack/aws/connect.py index 7fca288d91cf1..6a04285e021a2 100644 --- a/localstack-core/localstack/aws/connect.py +++ b/localstack-core/localstack/aws/connect.py @@ -662,7 +662,7 @@ def resolve_dns_from_upstream(hostname: str) -> str: ip_addresses = [] for answer in response.answer: - if answer.match(dns.rdataclass.IN, dns.rdatatype.A, dns.rdatatype.TYPE0): + if answer.match(dns.rdataclass.IN, dns.rdatatype.A, dns.rdatatype.NONE): ip_addresses.extend(answer.items.keys()) if not ip_addresses: