diff --git a/src/storage/zone.cr b/src/storage/zone.cr index f38dffd..07c52bc 100644 --- a/src/storage/zone.cr +++ b/src/storage/zone.cr @@ -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