File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / contrib / 3.0b1-lease-convert
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:06:54 2012 UTC (11 years, 8 months ago) by misho
Branches: dhcp, MAIN
CVS tags: v4_1_R7p0, v4_1_R7, v4_1_R4, HEAD
dhcp 4.1 r7

    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.1.1 2012/10/09 09:06:54 misho 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.1.1 2012/10/09 09:06:54 misho 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>