diff options
author | Tar Committer <tar@ocjtech.us> | 2007-01-14 05:39:54 +0000 |
---|---|---|
committer | Tar Committer <tar@ocjtech.us> | 2007-01-14 05:39:54 +0000 |
commit | ac54243f382e817c08c1f895ccfdc05dcacdb044 (patch) | |
tree | 1c9b224e2714d9a6fd0ba8a7b211e287d3f8c9b9 /bin | |
parent | 1a7c45398738cdb4eaafdc9e0962272f19d54816 (diff) | |
download | rancid-ac54243f382e817c08c1f895ccfdc05dcacdb044.tar.gz rancid-ac54243f382e817c08c1f895ccfdc05dcacdb044.tar.xz rancid-ac54243f382e817c08c1f895ccfdc05dcacdb044.zip |
Imported from rancid-2.3.2a7.tar.gz.rancid-2.3.2a7
Diffstat (limited to 'bin')
-rw-r--r-- | bin/Makefile.am | 4 | ||||
-rw-r--r-- | bin/Makefile.in | 14 | ||||
-rw-r--r-- | bin/agmrancid.in | 5 | ||||
-rw-r--r-- | bin/blogin.in | 7 | ||||
-rw-r--r-- | bin/clogin.in | 9 | ||||
-rw-r--r-- | bin/control_rancid.in | 5 | ||||
-rw-r--r-- | bin/flogin.in | 7 | ||||
-rw-r--r-- | bin/hlogin.in | 7 | ||||
-rw-r--r-- | bin/jrancid.in | 30 | ||||
-rw-r--r-- | bin/nlogin.in | 5 | ||||
-rw-r--r-- | bin/nslogin.in | 5 | ||||
-rw-r--r-- | bin/rancid-fe.in | 3 | ||||
-rw-r--r-- | bin/rivlogin.in | 5 | ||||
-rwxr-xr-x | bin/srancid.in | 404 |
14 files changed, 472 insertions, 38 deletions
diff --git a/bin/Makefile.am b/bin/Makefile.am index 8490805..b7fc75f 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in ## A Makefile.in is supplied, in case you do not have automake. -## $Id: Makefile.am,v 1.35 2006/11/23 20:26:47 heas Exp $ +## $Id: Makefile.am,v 1.36 2007/01/13 22:01:53 heas Exp $ ## ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. ## All rights reserved. @@ -30,7 +30,7 @@ bin_SCRIPTS = cat5rancid control_rancid \ hlogin hrancid htlogin htrancid \ jerancid jlogin jrancid \ mrancid nlogin nrancid nslogin nsrancid par prancid \ - rancid rancid-fe rivlogin rivrancid rrancid \ + rancid rancid-fe rivlogin rivrancid rrancid srancid \ tntlogin tntrancid xrancid zrancid bin_SCRIPTS += lg.cgi lgform.cgi rancid-cvs rancid-run diff --git a/bin/Makefile.in b/bin/Makefile.in index ba3d44e..ca80b2a 100644 --- a/bin/Makefile.in +++ b/bin/Makefile.in @@ -48,9 +48,9 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/nsrancid.in $(srcdir)/par.in $(srcdir)/prancid.in \ $(srcdir)/rancid-fe.in $(srcdir)/rancid.in \ $(srcdir)/rivlogin.in $(srcdir)/rivrancid.in \ - $(srcdir)/rrancid.in $(srcdir)/tntlogin.in \ - $(srcdir)/tntrancid.in $(srcdir)/xrancid.in \ - $(srcdir)/zrancid.in + $(srcdir)/rrancid.in $(srcdir)/srancid.in \ + $(srcdir)/tntlogin.in $(srcdir)/tntrancid.in \ + $(srcdir)/xrancid.in $(srcdir)/zrancid.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in @@ -63,7 +63,7 @@ CONFIG_CLEAN_FILES = control_rancid par rancid-fe agmrancid alogin \ elogin erancid f10rancid flogin francid fnrancid jlogin \ jrancid jerancid hlogin hrancid htlogin htrancid mrancid \ nlogin nrancid nslogin nsrancid prancid rivlogin rivrancid \ - rrancid tntlogin tntrancid xrancid zrancid + rrancid srancid tntlogin tntrancid xrancid zrancid am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) @@ -209,8 +209,8 @@ bin_SCRIPTS = cat5rancid control_rancid agmrancid alogin arancid \ flogin francid fnrancid hlogin hrancid htlogin htrancid \ jerancid jlogin jrancid mrancid nlogin nrancid nslogin \ nsrancid par prancid rancid rancid-fe rivlogin rivrancid \ - rrancid tntlogin tntrancid xrancid zrancid lg.cgi lgform.cgi \ - rancid-cvs rancid-run + rrancid srancid tntlogin tntrancid xrancid zrancid lg.cgi \ + lgform.cgi rancid-cvs rancid-run EXTRA_DIST = lg.cgi.in lgform.cgi.in rancid-cvs.in rancid-run.in #dist_bin_SCRIPTS= $(bin_SCRIPTS:%=%.in) CLEANFILES = lg.cgi lgform.cgi rancid-cvs rancid-run @@ -345,6 +345,8 @@ rivrancid: $(top_builddir)/config.status $(srcdir)/rivrancid.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ rrancid: $(top_builddir)/config.status $(srcdir)/rrancid.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +srancid: $(top_builddir)/config.status $(srcdir)/srancid.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tntlogin: $(top_builddir)/config.status $(srcdir)/tntlogin.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tntrancid: $(top_builddir)/config.status $(srcdir)/tntrancid.in diff --git a/bin/agmrancid.in b/bin/agmrancid.in index 9f3166d..0542bd2 100644 --- a/bin/agmrancid.in +++ b/bin/agmrancid.in @@ -1,6 +1,6 @@ #! @PERLV_PATH@ ## -## $Id: agmrancid.in,v 1.1 2006/11/23 20:20:16 heas Exp $ +## $Id: agmrancid.in,v 1.2 2006/12/06 00:40:54 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -43,6 +43,9 @@ $found_env = 0; $found_diag = 0; $timeo = 90; # clogin timeout in seconds +# the AGM kicks us off if it does not know our terminal type +$ENV{'TERM'} = "dumb"; + my(@commandtable, %commands, @commands);# command lists my(%filter_pwds); # password filtering mode diff --git a/bin/blogin.in b/bin/blogin.in index 9c19de9..37c28e8 100644 --- a/bin/blogin.in +++ b/bin/blogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: blogin.in,v 1.33 2006/12/05 16:50:52 heas Exp $ +## $Id: blogin.in,v 1.36 2006/12/08 21:28:25 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -532,6 +532,9 @@ foreach router [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username @@ -605,7 +608,7 @@ foreach router [lrange $argv $i end] { if { $enable } { if {[do_enable $enauser $enapasswd]} { if { $do_command || $do_script } { - close; wait + catch {close}; catch {wait} continue } } diff --git a/bin/clogin.in b/bin/clogin.in index 81c654e..99a0874 100644 --- a/bin/clogin.in +++ b/bin/clogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: clogin.in,v 1.103 2006/12/05 16:50:52 heas Exp $ +## $Id: clogin.in,v 1.107 2006/12/08 21:28:25 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -754,6 +754,9 @@ foreach router [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username @@ -822,13 +825,13 @@ foreach router [lrange $argv $i end] { # Login to the router if {[login $router $ruser $userpswd $passwd $enapasswd $cmethod $cyphertype]} { - # if login failed or rsh was successful, move on to the next device + # if login failed or rsh was unsuccessful, move on to the next device continue } if { $enable } { if {[do_enable $enauser $enapasswd]} { if { $do_command || $do_script } { - close; wait + catch {close}; catch {wait} continue } } diff --git a/bin/control_rancid.in b/bin/control_rancid.in index 69ff911..388bbf4 100644 --- a/bin/control_rancid.in +++ b/bin/control_rancid.in @@ -1,6 +1,6 @@ #! /bin/sh ## -## $Id: control_rancid.in,v 1.79 2006/10/05 04:27:42 heas Exp $ +## $Id: control_rancid.in,v 1.80 2006/12/07 21:14:06 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -87,6 +87,9 @@ DIR=$BASEDIR/$GROUP TMP=${TMPDIR:=/tmp}/rancid.$GROUP.$$ trap 'rm -fr $TMP;' 1 2 15 +# disable noclobber +unset noclobber > /dev/null 2>&1 + # RCS system RCSSYS=${RCSSYS:=cvs}; if [ $RCSSYS != "cvs" -a $RCSSYS != "svn" ] ; then diff --git a/bin/flogin.in b/bin/flogin.in index 4e93e35..5c8813d 100644 --- a/bin/flogin.in +++ b/bin/flogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: flogin.in,v 1.44 2006/12/05 16:50:52 heas Exp $ +## $Id: flogin.in,v 1.47 2006/12/08 21:28:26 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -564,6 +564,9 @@ foreach router [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username @@ -637,7 +640,7 @@ foreach router [lrange $argv $i end] { if { $enable } { if {[do_enable $enauser $enapasswd]} { if { $do_command || $do_script } { - close; wait + catch {close}; catch {wait} continue } } diff --git a/bin/hlogin.in b/bin/hlogin.in index 1eabd5c..8777021 100644 --- a/bin/hlogin.in +++ b/bin/hlogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: hlogin.in,v 1.37 2006/12/05 16:50:52 heas Exp $ +## $Id: hlogin.in,v 1.40 2006/12/08 21:28:26 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -623,6 +623,9 @@ foreach router [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username @@ -702,7 +705,7 @@ foreach router [lrange $argv $i end] { if { $enable } { if {[do_enable $enauser $enapasswd]} { if { $do_command || $do_script } { - close; wait + catch {close}; catch {wait} continue } } diff --git a/bin/jrancid.in b/bin/jrancid.in index 73dc5fa..252b1a3 100644 --- a/bin/jrancid.in +++ b/bin/jrancid.in @@ -1,6 +1,6 @@ #! @PERLV_PATH@ ## -## $Id: jrancid.in,v 1.79 2006/10/05 04:27:43 heas Exp $ +## $Id: jrancid.in,v 1.80 2006/12/05 17:14:27 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -183,7 +183,7 @@ sub ShowChassisClocks { } ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show chassis environment" @@ -216,7 +216,7 @@ sub ShowChassisEnvironment { ProcessHistory("","","","# $1\n") && next; ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show chassis firmware" @@ -240,7 +240,7 @@ sub ShowChassisFirmware { ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show chassis fpc detail" @@ -267,7 +267,7 @@ sub ShowChassisFpcDetail { / Uptime/ && next; ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show chassis hardware" @@ -291,7 +291,7 @@ sub ShowChassisHardware { ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show chassis routing-engine" @@ -323,7 +323,7 @@ sub ShowChassisRoutingEngine { / Serial ID/ && ProcessHistory("","","","# $_") && next; /^\s*$/ && ProcessHistory("","","","# $_") && next; } - return; + return(0); } # This routine parses "show chassis cfeb", "show chassis feb", "show @@ -358,7 +358,7 @@ sub ShowChassisSCB { ProcessHistory("","","","# $_"); } $ShowChassisSCB = 1; - return; + return(0); } # This routine parses "show chassis alarms" @@ -380,7 +380,7 @@ sub ShowChassisAlarms { ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show system autoinstallation status" @@ -402,7 +402,7 @@ sub ShowSystemAutoinstall { ProcessHistory("","","","# $_"); } - return; + return(0); } sub ShowSystemCoreDumps { @@ -444,7 +444,7 @@ sub ShowSystemLicense { ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show system license keys" @@ -466,7 +466,7 @@ sub ShowSystemLicenseKeys { ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show system boot-messages" @@ -493,7 +493,7 @@ sub ShowSystemBootMessages { /^\/dev\// && next; ProcessHistory("","","","# $_"); } - return; + return(0); } # This routine parses "show version" @@ -514,7 +514,7 @@ sub ShowVersion { } ProcessHistory("","","","#\n"); - return; + return(0); } # This routine parses "show configuration" @@ -588,7 +588,7 @@ sub ShowConfiguration { return(-1); } - return; + return(0); } ### diff --git a/bin/nlogin.in b/bin/nlogin.in index 153d0ba..53e8812 100644 --- a/bin/nlogin.in +++ b/bin/nlogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: nlogin.in,v 1.32 2006/12/05 16:50:52 heas Exp $ +## $Id: nlogin.in,v 1.33 2006/12/08 21:28:26 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -453,6 +453,9 @@ foreach firewall [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username diff --git a/bin/nslogin.in b/bin/nslogin.in index 10be62b..6cf4188 100644 --- a/bin/nslogin.in +++ b/bin/nslogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: nslogin.in,v 1.21 2006/12/05 16:50:53 heas Exp $ +## $Id: nslogin.in,v 1.22 2006/12/08 21:28:26 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -546,6 +546,9 @@ foreach router [lrange $argv $i end] { } set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out username diff --git a/bin/rancid-fe.in b/bin/rancid-fe.in index 3e60783..bed4129 100644 --- a/bin/rancid-fe.in +++ b/bin/rancid-fe.in @@ -1,6 +1,6 @@ #! @PERLV_PATH@ ## -## $Id: rancid-fe.in,v 1.44 2006/11/23 20:26:47 heas Exp $ +## $Id: rancid-fe.in,v 1.45 2007/01/13 22:01:53 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -52,6 +52,7 @@ $vendor =~ tr/[A-Z]/[a-z]/; 'procket' => 'prancid', 'redback' => 'rrancid', 'riverstone' => 'rivrancid', + 'smc' => 'srancid', 'tnt' => 'tntrancid', 'zebra' => 'zrancid' ); diff --git a/bin/rivlogin.in b/bin/rivlogin.in index 6dc6afb..2d80217 100644 --- a/bin/rivlogin.in +++ b/bin/rivlogin.in @@ -1,6 +1,6 @@ #! @EXPECT_PATH@ -- ## -## $Id: rivlogin.in,v 1.25 2006/12/05 16:50:53 heas Exp $ +## $Id: rivlogin.in,v 1.26 2006/12/08 21:28:26 heas Exp $ ## ## @PACKAGE@ @VERSION@ ## Copyright (C) 1997-2006 by Terrapin Communications, Inc. @@ -906,6 +906,9 @@ set router [string tolower $router] set passwd [join [lindex $pswd 0] ""] set enapasswd [join [lindex $pswd 1] ""] + } else { + set passwd $userpasswd + set enapasswd $enapasswd } # Figure out user to login with if necessary diff --git a/bin/srancid.in b/bin/srancid.in new file mode 100755 index 0000000..63c2e92 --- /dev/null +++ b/bin/srancid.in @@ -0,0 +1,404 @@ +#! @PERLV_PATH@ +## +## Pretty huge hack to take care of Dell Switch configs +## d_pfleger@juniper.net +## +## @PACKAGE@ @VERSION@ +## Copyright (C) 1997-2006 by Henry Kilmer. +## All rights reserved. +## +## This software may be freely copied, modified and redistributed +## fee for non-commerical purposes provided that this copyright notice +## 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 [-dV] [-l] [-f filename | hostname] +# +use Getopt::Std; +getopts('dflV'); +if ($opt_V) { + print "@PACKAGE@ @VERSION@\n"; + exit(0); +} +$log = $opt_l; +$debug = $opt_d; +$file = $opt_f; +$host = $ARGV[0]; +$found_end = 0; +$timeo = 90; # hlogin timeout in seconds + +my(@commandtable, %commands, @commands);# command lists +my(%filter_pwds); # password filtering mode + +# 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 routine 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 routine 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 routine 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 routine (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 "dir" +sub Dir { + print STDERR " In Dir: $_" if ($debug); + + while (<INPUT>) { + s/^\s+\015//g; + tr/\015//d; + next if /^\s*$/; + last if(/$prompt/); + # pager remnants like: ^H^H^H ^H^H^H content + s/[\b]+\s*[\b]*//g; + + ProcessHistory("COMMENTS","keysort","D1","! $_"); + } + return(0); +} + + +sub ShowVer { + print STDERR " In ShowVer: $_" if ($debug); + + while (<INPUT>) { + tr/\015//d; + next if /^\s*$/; + last if(/$prompt/); + # pager remnants like: ^H^H^H ^H^H^H content + s/[\b]+\s*[\b]*//g; + + ProcessHistory("COMMENTS","keysort","B1","! $_"); + } + return(0); +} + +sub ShowSys { + print STDERR " In ShowSys: $_" if ($debug); + + while (<INPUT>) { + s/^\s+\015//g; + tr/\015//d; + next if /^\s*$/; + last if(/$prompt/); + # pager remnants like: ^H^H^H ^H^H^H content + s/[\b]+\s*[\b]*//g; + + # Remove Uptime + / Up time/ && next; + + /system description: (.*)/i && + ProcessHistory("COMMENTS","keysort","A1", "!Chassis type: $1\n") && + next; + + ProcessHistory("COMMENTS","keysort","C1","! $_"); + } + return(0); +} + +sub ShowVlan { + print STDERR " In ShowVlan: $_" if ($debug); + + while (<INPUT>) { + s/^\s+\015//g; + tr/\015//d; + next if /^\s*$/; + last if(/$prompt/); + # pager remnants like: ^H^H^H ^H^H^H content + s/[\b]+\s*[\b]*//g; + + # Remove Uptime + / Up time/ && next; + ProcessHistory("COMMENTS","keysort","D1","! $_"); + } + return(0); +} + +# This routine processes a "write term" (aka show running-configuration) +sub WriteTerm { + my($comment) = (0); + print STDERR " In ShowRun: $_" if ($debug); + + while (<INPUT>) { + tr/\015//d; + next if /^\s*$/; + last if(/$prompt/); + # pager remnants like: ^H^H^H ^H^H^H content + s/[\b]+\s*[\b]*//g; + + # skip consecutive comment lines + if (/^!/) { + next if ($comment); + ProcessHistory("","","",$_); + $comment++; + next; + } + $comment = 0; + + /^building running-config/ && next; + /^------+/ && ProcessHistory("","","","!$_") && next; + /^router configuration/i && ProcessHistory("","","","!$_") && next; + /^oob host config/i && ProcessHistory("","","","!$_") && next; + /^empty configuration/i && ProcessHistory("","","","!$_") && next; + + if (/^password (\S+) encrypted/ && $filter_pwds > 1) { + ProcessHistory("","","","!password <removed> encrypted\n"); + next; + } + if (/^password (\S+)$/ && $filter_pwds >= 1) { + ProcessHistory("","","","!password <removed>\n"); + next; + } + + if (/^(enable password level \d+) (\S+) encrypted/ && $filter_pwds > 1){ + ProcessHistory("","","","!$1 <removed> encrypted\n"); + next; + } + if (/^(enable password level \d+) (\S+)$/ && $filter_pwds >= 1) { + ProcessHistory("","","","!$1 <removed> $'\n"); + next; + } + + # order/prune snmp-server host statements + # we only prune lines of the form + # snmp-server host a.b.c.d <community> + if (/^(snmp-server host) (\d+\.\d+\.\d+\.\d+) (\S+)/) { + if (defined($ENV{'NOCOMMSTR'})) { + ProcessHistory("SNMPSERVERHOST","ipsort", + "$2","!$1 $2 <removed>$'"); + } else { + ProcessHistory("SNMPSERVERHOST","ipsort","$2","$_"); + } + next; + } + if (/^(snmp-server community) (\S+)/) { + if (defined($ENV{'NOCOMMSTR'})) { + ProcessHistory("SNMPSERVERCOMM","keysort", + "$_","!$1 <removed>$'") && next; + } else { + ProcessHistory("SNMPSERVERCOMM","keysort","$2","$_") && next; + } + } + + # prune tacacs/radius server keys + if (/^(tacacs-server|radius-server) key \w+/ && $filter_pwds >= 1) { + ProcessHistory("","","","!$1 <removed>$'"); next; + } + + ProcessHistory("","","","$_"); + } + $found_end = 1; + return(1); +} + +# dummy function +sub DoNothing {print STDOUT;} + +# Main +@commandtable = ( + {'show system' => 'ShowSys'}, + {'show version' => 'ShowVer'}, + {'dir' => 'Dir'}, + {'show vlan' => 'ShowVlan'}, + {'show running-config' => 'WriteTerm'} +); +# Use an array to preserve the order of the commands and a hash for mapping +# commands to the subroutine and track commands that have been completed. +@commands = map(keys(%$_), @commandtable); +%commands = map(%$_, @commandtable); + +$cisco_cmds=join(";",@commands); +$cmds_regexp=join("|",@commands); + +if (length($host) == 0) { + if ($file) { + print(STDERR "Too few arguments: file name required\n"); + exit(1); + } else { + print(STDERR "Too few arguments: host name required\n"); + exit(1); + } +} +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 hlogin -t $timeo -c\"$cisco_cmds\" $host\n" if ($debug); + print STDOUT "executing hlogin -t $timeo -c\"$cisco_cmds\" $host\n" if ($log); + if (defined($ENV{NOPIPE})) { + system "hlogin -t $timeo -c \"$cisco_cmds\" $host </dev/null > $host.raw 2>&1" || die "hlogin failed for $host: $!\n"; + open(INPUT, "< $host.raw") || die "hlogin failed for $host: $!\n"; + } else { + open(INPUT,"hlogin -t $timeo -c \"$cisco_cmds\" $host </dev/null |") || die "hlogin failed for $host: $!\n"; + } +} + +# determine password filtering mode +if ($ENV{"FILTER_PWDS"} =~ /no/i) { + $filter_pwds = 0; +} elsif ($ENV{"FILTER_PWDS"} =~ /all/i) { + $filter_pwds = 2; +} else { + $filter_pwds = 1; +} + +ProcessHistory("","","","!RANCID-CONTENT-TYPE: dell\n!\n"); +ProcessHistory("COMMENTS","keysort","A0","!\n"); +ProcessHistory("COMMENTS","keysort","B0","!\n"); +ProcessHistory("COMMENTS","keysort","C0","!\n"); +ProcessHistory("COMMENTS","keysort","D0","!\n"); +TOP: while(<INPUT>) { + tr/\015//d; + if (/^Error:/) { + print STDOUT ("$host dlogin error: $_"); + print STDERR ("$host dlogin error: $_") if ($debug); + last; + } + while (/#\s*($cmds_regexp)\s*$/) { + $cmd = $1; + if (!defined($prompt)) { + $prompt = ($_ =~ /^([^#]+#)/)[0]; + $prompt =~ s/([][}{)(\\])/\\$1/g; + print STDERR ("PROMPT MATCH: $prompt\n") if ($debug); + } + print STDERR ("HIT COMMAND:$_") if ($debug); + if (!defined($commands{$cmd})) { + print STDERR "$host: found unexpected command - \"$cmd\"\n"; + last TOP; + } + $rval = &{$commands{$cmd}}; + delete($commands{$cmd}); + if ($rval == -1) { + last TOP; + } + } +} +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) || !$found_end) { + if (scalar(%commands)) { + printf(STDOUT "$host: missed cmd(s): %s\n", join(',', keys(%commands))); + printf(STDERR "$host: missed cmd(s): %s\n", join(',', keys(%commands))) if ($debug); + } + if (!$found_end) { + print STDOUT "$found_end: found end\n"; + print STDOUT "$host: End of run not found\n"; + print STDERR "$host: End of run not found\n" if ($debug); + system("/usr/bin/tail -1 $host.new"); + } + unlink "$host.new" if (! $debug); +} |