Annotation of embedaddon/dhcp/contrib/3.0b1-lease-convert, revision 1.1

1.1     ! misho       1: #!/usr/bin/perl
        !             2: #
        !             3: # Start Date:   Mon, 26 Mar 2001 14:24:09 +0200
        !             4: # Time-stamp:   <Monday, 26 March 2001 16:09:44 by brister>
        !             5: # File:         leaseconvertor.pl
        !             6: # RCSId:        $Id: 3.0b1-lease-convert,v 1.1 2001-04-18 19:17:34 mellon Exp $
        !             7: #
        !             8: # Description:  Convert 3.0b1 to 3.0b2/final lease file format
        !             9: #
        !            10: 
        !            11: require 5.004;
        !            12: 
        !            13: my $rcsID =<<'EOM';
        !            14: $Id: 3.0b1-lease-convert,v 1.1 2001-04-18 19:17:34 mellon Exp $
        !            15: EOM
        !            16: 
        !            17: use strict;
        !            18: 
        !            19: my $revstatement =<<'EOS';
        !            20:          switch (ns-update (delete (1, 12, ddns-rev-name, null))) {
        !            21:            case 0:
        !            22:              unset ddns-rev-name;
        !            23:              break;
        !            24:          }
        !            25: EOS
        !            26: 
        !            27: my $fwdstatement =<<'EOS';
        !            28:          switch (ns-update (delete (1, 1, ddns-fwd-name, leased-address))) {
        !            29:            case 0:
        !            30:              unset ddns-fwd-name;
        !            31:              break;
        !            32:          }
        !            33: EOS
        !            34: 
        !            35: 
        !            36: if (@ARGV && $ARGV[0] =~ m!^-!) {
        !            37:     usage();
        !            38: }
        !            39: 
        !            40: 
        !            41: 
        !            42: # read stdin and write stdout.
        !            43: while (<>) {
        !            44:     if (! /^lease\s/) {
        !            45:        print;
        !            46:     } else {
        !            47:        my $lease = $_;
        !            48:        while (<>) {
        !            49:            $lease .= $_;
        !            50:            # in a b1 file we should only see a left curly brace on a lease
        !            51:            # lines. Seening it anywhere else means the user is probably
        !            52:            # running a b2 or later file through this.
        !            53:            # Ditto for a 'set' statement.
        !            54:            if (m!\{! || m!^\s*set\s!) {
        !            55:                warn "this doesn't look like a 3.0b1 file. Ignoring rest.\n";
        !            56:                print $lease;
        !            57:                dumpRestAndExit();
        !            58:            }
        !            59: 
        !            60:            last if m!^\}\s*$!;
        !            61:        }
        !            62: 
        !            63:        # $lease contains all the lines for the lease entry.
        !            64:        $lease = makeNewLease($lease);
        !            65:        print $lease;
        !            66:     }
        !            67: }
        !            68: 
        !            69: 
        !            70: 
        !            71: sub usage {
        !            72:     my $prog = $0;
        !            73:     $prog =~ s!.*/!!;
        !            74: 
        !            75:     print STDERR <<EOM;
        !            76: usage: $prog [ file ]
        !            77: 
        !            78: Reads from the lease file listed on the command line (or stdin if not filename
        !            79: given) and writes to stdout.  Converts a 3.0b1-style leases file to a 3.0b2
        !            80: style (for ad-hoc ddns updates).
        !            81: EOM
        !            82: 
        !            83:     exit (0);
        !            84: }
        !            85: 
        !            86: 
        !            87: 
        !            88: # takes a string that's the lines of a lease entry and converts it, if
        !            89: # necessary to a b2 style lease entry. Returns the new lease in printable form.
        !            90: sub makeNewLease {
        !            91:     my ($lease) = @_;
        !            92: 
        !            93:     my $convertedfwd;
        !            94:     my $convertedrev;
        !            95:     my $newlease = "";
        !            96:     foreach (split "\n", $lease) {
        !            97:        if (m!^(\s+)(ddns-fwd-name|ddns-rev-name)\s+(\"[^\"]+\"\s*;)!) {
        !            98:            $newlease .= $1 . "set " . $2 . " = " . $3 . "\n";
        !            99: 
        !           100:            # If there's one of them, then it will always be the -fwd-. There
        !           101:            # may not always be a -rev-.
        !           102:            $convertedfwd++;
        !           103:            $convertedrev++ if ($2 eq "ddns-rev-name");
        !           104:        } elsif (m!^\s*\}!) {
        !           105:            if ($convertedfwd) {
        !           106:                $newlease .= "\ton expiry or release {\n";
        !           107:                $newlease .= $revstatement if $convertedrev;
        !           108:                $newlease .= $fwdstatement;
        !           109:                $newlease .= "\t  on expiry or release;\n\t}\n";
        !           110:            }
        !           111:            $newlease .= "}\n";
        !           112:        } else {
        !           113:            $newlease .= $_ . "\n";
        !           114:        }
        !           115:     }
        !           116: 
        !           117:     return $newlease;
        !           118: }
        !           119: 
        !           120: 
        !           121: sub dumpRestAndExit {
        !           122:     while (<>) {
        !           123:        print;
        !           124:     }
        !           125:     exit (0);
        !           126: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>