#!/usr/bin/perl -w use strict; use File::stat; $^I = ""; @ARGV = (); push @ARGV, glob "*.{net,org,fr,com,in-addr.arpa,local}"; push @ARGV, ("private", "public"); my @file = @ARGV; foreach (@file) { my $name = $_; my $sb = stat($name); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($sb->mtime); $year += 1900; $mon += 1; my $serial = sprintf("%d%02d%02d%02d", $year, $mon, $mday, 1); @ARGV = (); push @ARGV, $name; if ($sb->ctime == $sb->mtime) { while (<>) { if ($_ =~ m/;.*serial/i) { my $last = $_; $last =~ s/^([[:space:]]+)([[:digit:]]+)([[:space:]]*;.*serial.*)/$2/ix; chomp $last; ($serial = $last + 1) if (substr($last,0,8) eq substr($serial,0,8)); s/$last/$serial/; } print; } close STDIN; utime $sb->atime, $sb->mtime-1, $name; printf ";; SOA of $name\n"; printf "; serial: %s.\n", $serial; } else { printf ";; serial/modification time of $_ differ, skipping...\n"; } }