$| = 1;
my %opt;
-getopts('?fFhHiIqrRstT:x', \%opt);
+getopts('?fFhHiIqrRstT:', \%opt);
my $FILESUFFIXREGEXP = '('.join('|', qw/
,v ~ .bak .log .old .swp .tmp
/).')$';
+# Validation errors
my $verrs_total = 0;
+
+# "Permission" errors with respect to what record types are allowed
my $perrs_total = 0;
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
'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)
{
valtz $VERSION, $COPYRIGHT
validates tinydns-data zone files
Usage:
- $0 [-hfFqrRiItTx] <file(s)>
+ $0 [-hfFqrRiItT] <file(s)>
-h shows this help.
A commandline way to explicitly set the allowed recordtypes.
This is _concatenated_ to the allowtype-allowed recordtypes.
- -x Exit with non-null exit code on errors; i.e. make errors detectable by
- e.g. shell scripts; 1 = validation error, 2 = permission error,
- 3 = combination of 1 and 2.
-
All errors in the zonefiles are sent to STDERR.
}
}
-if ($opt{x} && ($verrs_total + $perrs_total))
+if ($verrs_total + $perrs_total)
{
my $exitcode = $verrs_total > 0 ? 1 : 0;
$exitcode += $perrs_total > 0 ? 2 : 0;