#!/usr/bin/perl # # Start Date: Mon, 26 Mar 2001 14:24:09 +0200 # Time-stamp: <Monday, 26 March 2001 16:09:44 by brister> # File: leaseconvertor.pl # RCSId: $Id: 3.0b1-lease-convert,v 1.1 2001-04-18 19:17:34 mellon Exp $ # # Description: Convert 3.0b1 to 3.0b2/final lease file format # require 5.004; my $rcsID =<<'EOM'; $Id: 3.0b1-lease-convert,v 1.1 2001-04-18 19:17:34 mellon Exp $ EOM use strict; my $revstatement =<<'EOS'; switch (ns-update (delete (1, 12, ddns-rev-name, null))) { case 0: unset ddns-rev-name; break; } EOS my $fwdstatement =<<'EOS'; switch (ns-update (delete (1, 1, ddns-fwd-name, leased-address))) { case 0: unset ddns-fwd-name; break; } EOS if (@ARGV && $ARGV[0] =~ m!^-!) { usage(); } # read stdin and write stdout. while (<>) { if (! /^lease\s/) { print; } else { my $lease = $_; while (<>) { $lease .= $_; # in a b1 file we should only see a left curly brace on a lease # lines. Seening it anywhere else means the user is probably # running a b2 or later file through this. # Ditto for a 'set' statement. if (m!\{! || m!^\s*set\s!) { warn "this doesn't look like a 3.0b1 file. Ignoring rest.\n"; print $lease; dumpRestAndExit(); } last if m!^\}\s*$!; } # $lease contains all the lines for the lease entry. $lease = makeNewLease($lease); print $lease; } } sub usage { my $prog = $0; $prog =~ s!.*/!!; print STDERR <<EOM; usage: $prog [ file ] Reads from the lease file listed on the command line (or stdin if not filename given) and writes to stdout. Converts a 3.0b1-style leases file to a 3.0b2 style (for ad-hoc ddns updates). EOM exit (0); } # takes a string that's the lines of a lease entry and converts it, if # necessary to a b2 style lease entry. Returns the new lease in printable form. sub makeNewLease { my ($lease) = @_; my $convertedfwd; my $convertedrev; my $newlease = ""; foreach (split "\n", $lease) { if (m!^(\s+)(ddns-fwd-name|ddns-rev-name)\s+(\"[^\"]+\"\s*;)!) { $newlease .= $1 . "set " . $2 . " = " . $3 . "\n"; # If there's one of them, then it will always be the -fwd-. There # may not always be a -rev-. $convertedfwd++; $convertedrev++ if ($2 eq "ddns-rev-name"); } elsif (m!^\s*\}!) { if ($convertedfwd) { $newlease .= "\ton expiry or release {\n"; $newlease .= $revstatement if $convertedrev; $newlease .= $fwdstatement; $newlease .= "\t on expiry or release;\n\t}\n"; } $newlease .= "}\n"; } else { $newlease .= $_ . "\n"; } } return $newlease; } sub dumpRestAndExit { while (<>) { print; } exit (0); }