Warn about IP addresses in hostname fields.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 20 Oct 2020 22:00:52 +0000 (18:00 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 20 Oct 2020 22:00:52 +0000 (18:00 -0400)
A common error is to specify an IP address as the result of an MX
lookup. The RFCs (974, 1035, 2181...) state that the result should be
a "domain name," which in this context, means "host name." This commit
adds a check on "hostname" fields that rejects a dotted-quad contained
therein. In particular, it catches the aforementioned MX record error.

valtz

diff --git a/valtz b/valtz
index 26d516db4a8350b2b4ccb4173eb8cd6ce5196865..0ca0e6af003eacb7c5150c3dfb765488b84cb6ce 100755 (executable)
--- a/valtz
+++ b/valtz
@@ -76,6 +76,7 @@ my %validation_msg = (
     1008 => 'integer out of bounds',
     1009 => 'must have at least three labels to be valid as mail address',
     1010 => 'must not be 2(NS), 5(CNAME), 6(SOA), 12(PTR), 15(MX) or 252(AXFR)',
+    1011 => 'IP address found where hostname expected'
 );
 
 # NOTE : ONLY translate the right-hand part
@@ -238,6 +239,13 @@ my %token_validator = (
     'x' => [ 5, sub {
         my ($type, $s) = @_;
         my $result = 0;
+
+       # Check to see if someone put an IP address in a hostname
+       # field. The motivation for this was MX records where many
+       # people expect an IP address to be a valid response, but I
+       # see no harm in enforcing it elsewhere.
+       return 1011 if $s =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.?$/;
+
         # check all parts
         for (split /\./, $s)
         {