--- a/lib/DNS/Vi.pm Wed Jan 21 21:20:20 2015 +0100
+++ b/lib/DNS/Vi.pm Wed Jan 21 21:50:27 2015 +0100
@@ -17,6 +17,8 @@
# the sort order for the records of the same label
my %ORDER = map { state $n = 0; $_ => ++$n } qw(SOA NS TXT MX A AAAA SSHFP);
+sub h2ttl(_);
+
# input $arg - hash with options
# $data - a long string with the zone data
sub parse {
@@ -69,7 +71,6 @@
if ($rrset{rrtype} eq 'SOA') {
next if $soa_seen++;
- $rrset{data} =~ s/\s+/ /g; # squeeze spaces
}
# label ergänzen, wenn nicht FQDN
@@ -81,12 +82,14 @@
# origin steht im SOA
when ('SOA') {
$origin = $rrset{label};
+ my ($primary, $hostmaster, $serial, $refresh, $retry, $expire, $minttl)
+ = split ' ', $rrset{data};
- # fix the nameserver name
- $rrset{data} =~ s{^(\S+[^.])(?=\s)}{$1.$origin};
+ $_ .= ".$origin"
+ foreach grep !/\.$/ => $primary, $hostmaster;
- # fix the hostmaster address
- $rrset{data} =~ s{^\S+\s+\K(\S+[^.])(?=\s)}{$1.$origin};
+ $rrset{data} = join ' ',
+ $primary, $hostmaster, $serial, map { h2ttl } $refresh, $retry, $expire, $minttl;
}
# bei einigen RRs müssen wir die Daten korrigieren
@@ -124,7 +127,7 @@
return join '', @out;
}
-sub h2ttl {
+sub h2ttl(_) {
my $ttl = shift;
my $out;
my %factor = (