Accept wildcards in RR's name.

This commit is contained in:
Philippe Pittoli 2025-04-28 02:32:43 +02:00
parent a13d9e8e84
commit 7a1e3d4755

View file

@ -183,7 +183,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "A invalid subdomain: #{@name}"
end
@ -205,7 +205,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "AAAA invalid subdomain: #{@name}"
end
@ -227,7 +227,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "TXT invalid subdomain: #{@name}"
end
@ -284,7 +284,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "NS invalid subdomain: #{@name}"
end
@ -302,7 +302,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "CNAME invalid subdomain: #{@name}"
end
@ -452,7 +452,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "SPF invalid subdomain: #{@name}"
end
@ -558,7 +558,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "DKIM invalid subdomain: #{@name}"
end
@ -716,7 +716,7 @@ class DNSManager::Storage::Zone
errors = [] of Error
# TODO: label can (and is expected to) start with an underscore.
#unless Zone.is_subdomain_valid? @name
#unless Zone.is_valid_name? @name
# errors << "DMARC invalid subdomain: #{@name}"
#end
@ -780,7 +780,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "CAA invalid subdomain: #{@name}"
end
@ -818,7 +818,7 @@ class DNSManager::Storage::Zone
def get_errors : Array(Error)
errors = [] of Error
unless Zone.is_subdomain_valid? @name
unless Zone.is_valid_name? @name
errors << "MX invalid subdomain: #{@name}"
end
@ -983,6 +983,22 @@ class DNSManager::Storage::Zone
false
end
# Valid names: valid subdomains, wildcards alone or followed by a subdomain.
def self.is_valid_name?(subdomain) : Bool
if subdomain =~ subdomain_pattern
true
elsif subdomain =~ /^[*]$/
true
elsif subdomain[0..1] =~ /^[*][.]$/ && subdomain[2..] =~ subdomain_pattern
true
else
false
end
rescue e
Baguette::Log.error "invalid zone subdomain #{subdomain}: #{e}"
false
end
# This regex only is "good enough for now".
def self.is_subdomain_valid?(subdomain) : Bool
if subdomain =~ subdomain_pattern