#!/usr/bin/perl -w # # (c) Marc MERLIN 2000/10/10 # GPL v2 # use strict; my $file; my $filename; my $sernum; my $sernumdate; my $newsernum; # Centralize on MTV time so that the serial number is correct if run in remote # offices, like on ins0.eur $ENV{'TZ'}='PST8PDT'; my ($sec, $min, $hour, $day, $month, $year, $foo1, $foo2, $foo3 ) = localtime; my $rev; $hour="0$hour" if ( $hour < 10 ); $min="0$min" if ( $min < 10 ); $month++; $month="0$month" if ( $month < 10 ); $day="0$day" if ( $day < 10 ); $year+=1900; die "$0 zonefile" if ($#ARGV != 0); $filename=$ARGV[0]; open (ZONE, $filename) or die "Can't open $filename: $!"; $file=join("", ); close (ZONE); ($file =~ /\s(\d{10})\t; Serial Number \(YYYYMMDDvv\)/) or die "Can't locate serial number in $filename\n"; $sernum = $1; $sernum =~ /^(\d{8})/; $sernumdate = $1; $newsernum = "$year$month$day"; # $sernum could be larger than newsernumdate if we had more than 100 revisions if ( $newsernum <= $sernumdate ) { # make $newsernum as big as sernum if needed $newsernum=$sernumdate; $sernum =~ /(\d\d)$/; $rev = $1; #print "Old serial number for the zone is $sernum (was already edited today - rev $rev)\n"; $rev++; if ( $rev eq 100 ) { # This could create some fake days (like the 32nd day of the # month), but that's ok, we only want the number to be larger $newsernum++; $rev = "00"; } } else { # newsernum is larger, first revision of the day #print "Old serial number for the zone is $sernum\n"; $rev = "00"; } $newsernum .= $rev; print "New serial number for $filename is $newsernum\n"; $file =~ s/(\d{10})\t; Serial Number \(YYYYMMDDvv\).*/$newsernum\t; Serial Number (YYYYMMDDvv) $hour:$min/ or die "Can't substitute serial number\n"; open (ZONE, ">$filename") or die "Can't open $filename: $!"; print ZONE $file; close (ZONE);