From fda19cbb5b57de40cde7823a0072188e8e18ff38 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Sun, 8 Mar 2009 00:23:16 +0000 Subject: [PATCH] add update_dns_serial command --- update_dns_serial | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 update_dns_serial diff --git a/update_dns_serial b/update_dns_serial new file mode 100755 index 0000000..72edce2 --- /dev/null +++ b/update_dns_serial @@ -0,0 +1,28 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +use IO::File; +use POSIX qw(strftime); + +for my $file (@ARGV) { + my $fh = IO::File->new($file,'r'); + my $fh_new = IO::File->new($file.".new",'w'); + local $/; + my $fh_contents = <$fh>; + # rip out old serial + my ($old_serial) = $fh_contents =~ /IN\s+SOA\s+\S+\s+\S+\s*(?:\s*\;.+\n)*\((?:\s*\;.+\n)*\s*(\d+)/; + my ($ymd,$iter) = $old_serial =~ /(\d{4}\d{2}\d{2})(\d{2})/; + my $new_serial = strftime("%Y%m%d",gmtime)."01" + if ($ymd == strftime("%Y%m%d",gmtime)) { + $new_serial = $ymd.($iter+1); + } + $fh_contents =~ s/(IN\s+SOA\s+\S+\s+\S+\s*(?:\s*\;.+\n)*\((?:\s*\;.+\n)*\s*)(\d+)/${1}${new_serial}/; + print {$fh_new} $fh_contents; + close $fh_new; + close $fh; + rename($file,"${file}.bak") or die "Unable to rename $file to ${file}.bak: $!"; + rename("${file}.new",$file) or die "Unable to rename ${file}.new to ${file}: $!"; + unlink("${file}.bak") or die "Unable to unlink ${file}.bak: $!"; +} -- 2.39.2