#!/usr/bin/perl -w use strict; # The format of a tinydns SOA record is: # Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo # This program acts as a filter, changing the ser field in all Z records. # It will set ser to be the current timestamp in YYYYMMDDnn format, and # update the nn section if it is already the correct format. # If nn is already 99 it will exit with an error. my ($basedate,$line,$updatenum,@fields); @fields=localtime; $basedate=sprintf "%04u%02u%02u",1900+$fields[5],1+$fields[4],$fields[3]; while(defined($line=<>)) { if("Z" eq substr($line,0,1)) { @fields=split /:/,$line,-1; if(10==length $fields[3] and $basedate eq substr($fields[3],0,8)) { $updatenum=substr($fields[3],8); die "invalid updatenum $updatenum" if($updatenum =~ /\D/s); die "updatenum already 99" if(99==$updatenum); $fields[3]=sprintf "%s%02u",$basedate,1+$updatenum; } else { $fields[3]=$basedate."00"; } $line=join(":",@fields); } print $line; } 0;