lib/DNS/Vi.pm
changeset 64 b61e5e1cc7ad
parent 63 df6ce1a4c43b
child 65 0f7e871c4672
--- 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 = (