diff options
author | Tar Committer <tar@ocjtech.us> | 2000-11-19 22:01:05 +0000 |
---|---|---|
committer | Tar Committer <tar@ocjtech.us> | 2000-11-19 22:01:05 +0000 |
commit | 1651adc35224e149715bd85af4ba108c5ee184bc (patch) | |
tree | f83b6af44ffb10f2c042b822b2f3469582a129ca /bin/erancid | |
parent | 3861ba4cf180eb01fd98a16f4502702ab217e56f (diff) | |
download | rancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.gz rancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.xz rancid-1651adc35224e149715bd85af4ba108c5ee184bc.zip |
Imported from rancid-2.0.tar.gz.rancid-2.0
Diffstat (limited to 'bin/erancid')
-rwxr-xr-x | bin/erancid | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/bin/erancid b/bin/erancid deleted file mode 100755 index 2adba78..0000000 --- a/bin/erancid +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/local/bin/perl -## -## Hacked version of rancid for ADC EZT3 series muxes. Only tested -## with switch software 1.50 so far - terry@tmk.com -## -## -## Copyright (C) 1997 by Henry Kilmer. -## All rights reserved. -## -## This software may be freely copied, modified and redistributed without -## fee for non-commerical purposes provided that this copyright notice is -## preserved intact on all copies and modified copies. -## -## There is no warranty or other guarantee of fitness of this software. -## It is provided solely "as is". The author(s) disclaim(s) all -## responsibility and liability with respect to this software's usage -## or its effect upon hardware, computer systems, other software, or -## anything else. -## -## -# -# RANCID - Really Awesome New Cisco confIg Differ -# -# usage: rancid [-d] [-l] [-f filename | $host] -# -use Getopt::Std; -getopts('dflm'); -$log = $opt_l; -$debug = $opt_d; -$file = $opt_f; -$host = $ARGV[0]; -$clean_run = 0; -$found_end = 0; -$timeo = 90; # clogin timeout in seconds - -# This routine is used to print out the router configuration -sub ProcessHistory { - my($new_hist_tag,$new_command,$command_string,@string)=(@_); - if((($new_hist_tag ne $hist_tag) || ($new_command ne $command)) - && defined %history) { - print eval "$command \%history"; - undef %history; - } - if (($new_hist_tag) && ($new_command) && ($command_string)) { - if ($history{$command_string}) { - $history{$command_string} = "$history{$command_string}@string"; - } else { - $history{$command_string} = "@string"; - } - } elsif (($new_hist_tag) && ($new_command)) { - $history{++$#history} = "@string"; - } else { - print "@string"; - } - $hist_tag = $new_hist_tag; - $command = $new_command; - 1; -} - -sub numerically { $a <=> $b; } - -# This is a sort routing that will sort numerically on the -# keys of a hash as if it were a normal array. -sub keynsort { - local(%lines)=@_; - local($i) = 0; - local(@sorted_lines); - foreach $key (sort numerically keys(%lines)) { - $sorted_lines[$i] = $lines{$key}; - $i++; - } - @sorted_lines; -} - -# This is a sort routing that will sort on the -# keys of a hash as if it were a normal array. -sub keysort { - local(%lines)=@_; - local($i) = 0; - local(@sorted_lines); - foreach $key (sort keys(%lines)) { - $sorted_lines[$i] = $lines{$key}; - $i++; - } - @sorted_lines; -} - -# This is a sort routing that will sort on the -# values of a hash as if it were a normal array. -sub valsort{ - local(%lines)=@_; - local($i) = 0; - local(@sorted_lines); - foreach $key (sort values %lines) { - $sorted_lines[$i] = $key; - $i++; - } - @sorted_lines; -} - -# This is a numerical sort routing (ascending). -sub numsort { - local(%lines)=@_; - local($i) = 0; - local(@sorted_lines); - foreach $num (sort {$a <=> $b} keys %lines) { - $sorted_lines[$i] = $lines{$num}; - $i++; - } - @sorted_lines; -} - -# This is a sort routine that will sort on the -# ip address when the ip address is anywhere in -# the strings. -sub ipsort { - local(%lines)=@_; - local($i) = 0; - local(@sorted_lines); - foreach $addr (sort sortbyipaddr keys %lines) { - $sorted_lines[$i] = $lines{$addr}; - $i++; - } - @sorted_lines; -} - -# These two routines will sort based upon IP addresses -sub ipaddrval { - my(@a) = ($_[0] =~ m#^(\d+)\.(\d+)\.(\d+)\.(\d+)$#); - $a[3]+256*($a[2]+256*($a[1]+256*$a[0])); -} -sub sortbyipaddr { - &ipaddrval($a) <=> &ipaddrval($b); -} - -# This routine parses "show version" -sub ShowVersion { - print STDERR " In ShowVersion: $_" if ($debug); - - ProcessHistory("COMMENTS","keysort","A1", - "- Chassis type:EZT3 - an ADC EZT3 M13 multiplexor\n"); - - while (<INPUT>) { - tr/\015//d; - last if(/Active\) >/); - next if(/^(\s*|\s*$cmd\s*)$/); - - /Boot Version (\S*)/ && - ProcessHistory("COMMENTS","keysort","G1", - "- ROM Bootstrap: $1\n") && next; - /Software Version (\S*)/ && - ProcessHistory("COMMENTS","keysort","F1", - "- Software: $1\n") && next; - } - return(0); -} - -# This routine parses "show module" -sub ShowModule { - print STDERR " In ShowModule: $_" if ($debug); - - # eat the header line - $junk = <INPUT>; - - ProcessHistory("SLOT","","","-\n"); - - # now just copy it verbatim to the history file - while (<INPUT>) { - tr/\015//d; - last if(/Active\) >/); - last if(/^$/); - chop; - ProcessHistory("SLOT","","","-$_\n"); - } - ProcessHistory("SLOT","","","-\n"); -} - -# This routine processes a "write term" -sub WriteTerm { - print STDERR " In WriteTerm: $_" if ($debug); - - # eat the header line - $junk = <INPUT>; - - # now just copy it verbatim to the history file - while (<INPUT>) { - tr/\015//d; - last if(/Active\) >/); - chop; - if (/^\s*snmp/ && defined($ENV{'NOCOMMSTR'})) { - /snmp (getcomm|setcomm|trapcomm)(\s+)(\S*)/ && - ProcessHistory("","","","- snmp $1$2\"<removed>\"\n") && next; - } - # believe it or not, "-" is the "whole line is comment" command - ProcessHistory("","","","$_\n"); - } - $found_end = 1; - return(1); -} - -# dummy function -sub DoNothing {print STDOUT;} - -# Main -%commands=( - 'version' => "ShowVersion", - 'equipment' => "ShowModule", - 'config' => "WriteTerm", -); -# keys() doesnt return things in the order entered and the order of the -# cmds is important (show version first and write term last). pita -@commands=( - "version", - "equipment", - "config", -); -$cisco_cmds=join(";",@commands); -$cmds_regexp=join("|",@commands); - -open(OUTPUT,">$host.new") || die "Can't open $host.new for writing: $!\n"; -select(OUTPUT); -# make OUTPUT unbuffered if debugging -if ($debug) { $| = 1; } - -if ($file) { - print STDERR "opening file $host\n" if ($debug); - print STDOUT "opening file $host\n" if ($log); - open(INPUT,"<$host") || die "open failed for $host: $!\n"; -} else { - print STDERR "executing elogin -t $timeo -c\"$cisco_cmds\" $host\n" if ($debug); - print STDOUT "executing elogin -t $timeo -c\"$cisco_cmds\" $host\n" if ($log); - if (defined($ENV{NOPIPE})) { - system "elogin -t $timeo -c \"$cisco_cmds\" $host </dev/null > $host.raw 2>&1" || die "elogin failed for $host: $!\n"; - open(INPUT, "< $host.raw") || die "elogin failed for $host: $!\n"; - } else { - open(INPUT,"elogin -t $timeo -c \"$cisco_cmds\" $host </dev/null |") || die "elogin failed for $host: $!\n"; - } -} - -ProcessHistory("COMMENTS","keysort","B0","-\n"); -ProcessHistory("COMMENTS","keysort","F0","-\n"); -ProcessHistory("COMMENTS","keysort","G0","-\n"); -while(<INPUT>) { - tr/\015//d; - if (/Logging out$/) { - $clean_run=1; - last; - } - if (/Error:/) { - s/^.*Error:/Error:/; - print STDOUT ("$host elogin error: $_"); - print STDERR ("$host elogin error: $_") if ($debug); - $clean_run=0; - last; - } - while (/Active\) >\s*($cmds_regexp)\s*$/) { - $cmd = $1; - if (!defined($prompt)) {$prompt = ($_ =~ /^([^#]+#)/)[0]; } - print STDERR ("HIT COMMAND:$_") if ($debug); - if (! defined($commands{$cmd})) { - print STDERR "found unexpected command - \"$cmd\"\n"; - $clean_run = 0; - last; - } - $rval = &{$commands{$cmd}}; - delete($commands{$cmd}); - if ($rval == -1) { - $clean_run = 0; - last; - } - } -} -print STDOUT "Done $logincmd: $_\n" if ($log); -# Flush History -ProcessHistory("","","",""); -# Cleanup -close(INPUT); -close(OUTPUT); - -if (defined($ENV{NOPIPE})) { - unlink("$host.raw") if (! $debug); -} - -# check for completeness -if (scalar(%commands) || !$clean_run || !$found_end) { - if (scalar(%commands)) { - printf(STDOUT "missed cmd(s): %s\n", join(',', keys(%commands))); - printf(STDERR "missed cmd(s): %s\n", join(',', keys(%commands))) if ($debug); - } - if (!$clean_run || !$found_end) { - print STDOUT "End of run not found\n"; - print STDERR "End of run not found\n" if ($debug); - system("/usr/bin/tail -1 $host.new"); - } - unlink "$host.new" if (! $debug); -} |