Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion press/api/selfhosted.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def check_dns(domain, ip):
try:
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
domain_ip = resolver.resolve(domain.strip(), "A")[0].to_text()
domain_ip = resolver.query(domain.strip(), "A")[0].to_text()
if domain_ip == ip:
return True
except Exception:
Expand Down
2 changes: 1 addition & 1 deletion press/scripts/audit_wildcard_dns.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def expected_proxy_ip(domain):


def resolved_wildcard(domain):
return [r.to_text() for r in resolver.resolve(f"*.{domain}", "A")]
return [r.to_text() for r in resolver.query(f"*.{domain}", "A")]


def fix(domain):
Expand Down
12 changes: 6 additions & 6 deletions press/utils/dns.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ def get_dns_provider_mname_rname(domain):
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
try:
answer = resolver.resolve(domain, SOA)
answer = resolver.query(domain, SOA)
if len(answer) > 0:
mname = answer[0].mname.to_text()
rname = answer[0].rname.to_text()
Expand Down Expand Up @@ -177,7 +177,7 @@ def throw_for_caa_record(domain):
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
try:
answer = resolver.resolve(domain, CAA)
answer = resolver.query(domain, CAA)
for rdata in answer:
if "letsencrypt.org" in rdata.to_text():
return True
Expand Down Expand Up @@ -208,7 +208,7 @@ def check_dns_cname(name, domain):
try:
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
answer = resolver.resolve(domain, CNAME)
answer = resolver.query(domain, CNAME)
if len(answer) > 1:
raise MultipleCNAMERecords
mapped_domain = answer[0].to_text().rsplit(".", 1)[0]
Expand Down Expand Up @@ -262,11 +262,11 @@ def check_dns_a(name, domain):
try:
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
answer = resolver.resolve(domain, A)
answer = resolver.query(domain, A)
if len(answer) > 1:
raise MultipleARecords
domain_ip = answer[0].to_text()
site_ip = resolver.resolve(name, A)[0].to_text()
site_ip = resolver.query(name, A)[0].to_text()
result["answer"] = answer.rrset.to_text()
result["matched"] = check_for_ip_match(name, site_ip, domain_ip)
except MultipleARecords:
Expand Down Expand Up @@ -296,7 +296,7 @@ def ensure_dns_aaaa_record_doesnt_exist(domain: str):
try:
resolver = Resolver(configure=False)
resolver.nameservers = NAMESERVERS
answer = resolver.resolve(domain, AAAA)
answer = resolver.query(domain, AAAA)
if answer:
frappe.throw(
f"Domain {domain} has an AAAA record. This causes issues with https certificate generation. Please remove the same{get_dns_provider_link_substr(domain)}.",
Expand Down
2 changes: 1 addition & 1 deletion press/utils/email_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def get_mx_ip(mx_host):
try:
resolver = Resolver(configure=False)
resolver.nameservers = ["1.1.1.1", "1.0.0.1", "8.8.8.8", "8.8.4.4"]
answers = resolver.resolve(mx_host, "MX")
answers = resolver.query(mx_host, "MX")

mx_lookup_result = []

Expand Down
15 changes: 13 additions & 2 deletions press/utils/test_dns.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# Copyright (c) 2026, Frappe and Contributors
# See license.txt

from unittest.mock import Mock, patch
from unittest.mock import MagicMock, Mock, patch

from dns.resolver import Resolver
from frappe.tests.utils import FrappeTestCase

from press.utils.dns import _change_dns_record
from press.utils.dns import _change_dns_record, check_dns_cname


def route53_client(existing_records=()):
Expand Down Expand Up @@ -53,3 +54,13 @@ def test_dns_record_delete_does_not_take_a_record_pointing_at_another_proxy(self
self.change(client, "DELETE", "n1.fc.dev")
self.assertEqual(sent_record(client)["ResourceRecords"], [{"Value": "n1.fc.dev"}])
self.assertEqual(sent_record(client)["TTL"], 600)


class TestCheckDNS(FrappeTestCase):
def test_cname_check_matches_with_the_installed_dnspython_resolver(self):
answer = MagicMock()
answer.__len__.return_value = 1
answer[0].to_text.return_value = "site.fc.dev."
with patch.object(Resolver, "query", return_value=answer): # patch the real class, no mock attributes
result = check_dns_cname("site.fc.dev", "custom.example.com")
self.assertTrue(result["matched"], result["answer"])
Loading