summaryrefslogtreecommitdiffstats
path: root/bin/hrancid.in
diff options
context:
space:
mode:
Diffstat (limited to 'bin/hrancid.in')
-rwxr-xr-xbin/hrancid.in515
1 files changed, 167 insertions, 348 deletions
diff --git a/bin/hrancid.in b/bin/hrancid.in
index a02ab81..d0bcc55 100755
--- a/bin/hrancid.in
+++ b/bin/hrancid.in
@@ -1,7 +1,7 @@
#!@PERLV_PATH@
##
## Amazingly hacked version of Hank's rancid - this one tries to
-## deal with HPs.
+## deal with HP procurves.
##
## Copyright (C) 1997-2001 by Henry Kilmer.
## All rights reserved.
@@ -29,9 +29,11 @@ $debug = $opt_d;
$file = $opt_f;
$host = $ARGV[0];
$clean_run = 0;
-$found_end = 0;
+$found_end = 0; # unused - hp lacks an end-of-config tag.
$timeo = 90; # clogin timeout in seconds
+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)=(@_);
@@ -141,142 +143,12 @@ sub ShowVersion {
last if(/^$prompt/);
next if(/^(\s*|\s*$cmd\s*)$/);
return(-1) if (/command authorization failed/i);
- if (/^Slave in slot (\d+) is running/) {
- $slave = " Slave:";
- next;
- }
- /^Cisco Secure PIX /i &&
- ProcessHistory("COMMENTS","keysort","F1", "!Image: $_") && next;
- /^IOS .* Software \(([A-Za-z-0-9]*)\), .*Version\s+(.*)$/ &&
- ProcessHistory("COMMENTS","keysort","F1",
- "!Image:$slave Software: $1, $2\n") && next;
- /^([A-Za-z-0-9_]*) Synced to mainline version: (.*)$/ &&
- ProcessHistory("COMMENTS","keysort","F2",
- "!Image:$slave $1 Synced to mainline version: $2\n") && next;
- /^Compiled (.*)$/ &&
- ProcessHistory("COMMENTS","keysort","F3",
- "!Image:$slave Compiled: $1\n") && next;
- /^ROM: (System )?Bootstrap.*(Version.*)$/ &&
- ProcessHistory("COMMENTS","keysort","G1",
- "!ROM Bootstrap: $2\n") && next;
- if (/^Hardware:\s+(.*), (.* RAM), CPU (.*)$/) {
- ProcessHistory("COMMENTS","keysort","A1",
- "!Chassis type: $1 - a PIX\n");
- ProcessHistory("COMMENTS","keysort","A2",
- "!CPU: $3\n");
- ProcessHistory("COMMENTS","keysort","B1", "!Memory: $2\n");
- }
- /^Serial Number:\s+(.*)$/ &&
- ProcessHistory("COMMENTS","keysort","C1", "!$_") && next;
- /^Activation Key:\s+(.*)$/ &&
- ProcessHistory("COMMENTS","keysort","C2", "!$_") && next;
- /^ROM: \d+ Bootstrap .*(Version.*)$/ &&
- ProcessHistory("COMMENTS","keysort","G2",
- "!ROM Image: Bootstrap $1\n!\n") && next;
- /^ROM: .*(Version.*)$/ &&
- ProcessHistory("COMMENTS","keysort","G3","!ROM Image: $1\n") && next;
- /^BOOTFLASH: .*(Version.*)$/ &&
- ProcessHistory("COMMENTS","keysort","G4","!BOOTFLASH: $1\n") && next;
- /^System image file is "([^\"]*)", booted via (\S*)/ &&
-# removed the booted source due to
-# CSCdk28131: cycling info in 'sh ver'
-# ProcessHistory("COMMENTS","keysort","F4","!Image: booted via $2, $1\n") &&
- ProcessHistory("COMMENTS","keysort","F4","!Image: booted $1\n") &&
- next;
- /^System image file is "([^\"]*)"$/ &&
- ProcessHistory("COMMENTS","keysort","F5","!Image: $1\n") && next;
- if (/(\S+)\s+\((\S+)\)\s+processor.*with (\S+K) bytes/) {
- my($proc) = $1;
- my($cpu) = $2;
- my($mem) = $3;
- my($device) = "router";
- if ( $1 eq "CSC") {
- $type = "AGS";
- } elsif ( $1 eq "CSC4") {
- $type = "AGS+";
- } elsif ( $1 eq "2511" || $1 eq "2524" || $1 eq "AS2511-RJ") {
- $type = "2500";
- } elsif ( $1 =~ /261[01]/ || $1 =~ /262[01]/ ) {
- $type = "2600";
- } elsif ( $1 eq "3620" || $1 eq "3640") {
- $type = "3600";
- } elsif ( $1 eq "RSP7000") {
- $type = "7500";
- } elsif ( $1 =~ /RSP\d/) {
- $type = "7500";
- } elsif ( $1 eq "RP1") {
- $type = "7000";
- } elsif ( $1 eq "RP") {
- $type = "7000";
- } elsif ( $1 =~ /720[246]/) {
- $type = "7200";
- } elsif ( $1 =~ /1200[48]\/GRP/ || $1 =~ /1201[26]\/GRP/) {
- $type = "12000";
- } elsif ( $1 =~ /1201[26]-8R\/GRP/) {
- $type = "12000";
- } elsif ( $1 =~ /WS-C29/) {
- $type = "2900XL";
- $device = "switch";
- } elsif ( $1 =~ /WS-C35/) {
- $type = "3500XL";
- $device = "switch";
- } elsif ( $1 =~ /6000/) {
- $type = "6000";
- $device = "switch";
- } else {
- $type = $1;
- }
- print STDERR "TYPE = $type\n" if ($debug);
- ProcessHistory("COMMENTS","keysort","A1",
- "!Chassis type:$slave $proc - a $type $device\n");
- ProcessHistory("COMMENTS","keysort","B1",
- "!Memory:$slave main $mem\n");
- ProcessHistory("COMMENTS","keysort","A3","!CPU:$slave $cpu\n");
- next;
- }
- if (/(\S+) Silicon\s*Switch Processor/) {
- if (!defined($C0)) {
- $C0=1; ProcessHistory("COMMENTS","keysort","C0","!\n");
- }
- ProcessHistory("COMMENTS","keysort","C2","!SSP: $1\n");
- $ssp = 1;
- $sspmem = $1;
- next;
- }
- /^(\d+K) bytes of multibus/ &&
- ProcessHistory("COMMENTS","keysort","B2",
- "!Memory: multibus $1\n") && next;
- /^(\d+K) bytes of non-volatile/ &&
- ProcessHistory("COMMENTS","keysort","B3",
- "!Memory: nvram $1\n") && next;
- /^(\d+K) bytes of flash memory/ &&
- ProcessHistory("COMMENTS","keysort","B5","!Memory: flash $1\n") &&
- next;
- /^(\d+K) bytes of .*flash partition/ &&
- ProcessHistory("COMMENTS","keysort","B6",
- "!Memory: flash partition $1\n") && next;
- /^(\d+K) bytes of Flash internal/ &&
- ProcessHistory("COMMENTS","keysort","B4",
- "!Memory: bootflash $1\n") && next;
- if(/^(\d+K) bytes of (Flash|ATA)?.*PCMCIA .*slot ?(\d)/i) {
- ProcessHistory("COMMENTS","keysort","B7",
- "!Memory: pcmcia $2 slot$3 $1\n");
- next;
- }
- if(/^WARNING/) {
- if (!defined($I0)) {
- $I0=1;
- ProcessHistory("COMMENTS","keysort","I0","!\n");
- }
- ProcessHistory("COMMENTS","keysort","I1","! $_");
- # The line after the WARNING is what to do about it.
- $_ = <INPUT>; tr/\015//d;
- ProcessHistory("COMMENTS","keysort","I1","! $_");
- }
- if (/^Configuration register is (.*)$/) {
- $config_register=$1;
- next;
- }
+ return(-1) if /^(Invalid|Ambiguous) input:/i;
+
+ s/^image//i;
+ s/^\s*//g;
+
+ ProcessHistory("COMMENTS","keysort","C1", ";Image: $_") && next;
}
return(0);
}
@@ -291,13 +163,13 @@ sub ShowFlash {
tr/\015//d;
last if (/^$prompt/);
next if (/^(\s*|\s*$cmd\s*)$/);
- return(1) if ($type =~ /^(12[40]|7)/);
return(-1) if (/command authorization failed/i);
+ return(1) if /^(Invalid|Ambiguous) input:/i;
return(1) if /^\s*\^\s*$/;
- return(1) if /(Invalid input detected|Type help or )/;
- ProcessHistory("FLASH","","","!Flash: $_");
+
+ ProcessHistory("COMMENTS","keysort","D0",";Flash: $_");
}
- ProcessHistory("","","","!\n");
+
return;
}
@@ -309,50 +181,17 @@ sub ShowSystem {
tr/\015//d;
last if (/^$prompt/);
next if (/^(\s*|\s*$cmd\s*)$/);
- # return(1) if ($type =~ /^(12[40]|7[05])/);
return(-1) if (/command authorization failed/i);
- if (/^Interface ([^ \n(]*)/) { $INT = "$1, "; next; }
- /^(BRI unit \d)/ &&
- ProcessHistory("INT","","","!Interface: $1\n") && next;
- /^LANCE unit \d, NIM/ &&
- ProcessHistory("INT","","","!Interface: $_") && next;
- /^(LANCE unit \d)/ &&
- ProcessHistory("INT","","","!Interface: $1\n") && next;
- /(Media Type is \S+),/ &&
- ProcessHistory("INT","","","!\t$1\n");
- if (/(M\dT[^ :]*:) show controller:$/) {
- my($ctlr) = $1;
- $_ = <INPUT>; tr/\015//d; s/ subunit \d,//;
- ProcessHistory("INT","","","!Interface: $ctlr $_");
- }
- if (/^(\S+) : show controller:$/) {
- my($ctlr) = $1;
- $_ = <INPUT>; tr/\015//d; s/ subunit \d,//;
- ProcessHistory("INT","","","!Interface: $ctlr: $_");
- }
- /^(HD unit \d), idb/ &&
- ProcessHistory("INT","","","!Interface: $1\n") && next;
- /^HD unit \d, NIM/ &&
- ProcessHistory("INT","","","!Interface: $_") && next;
- /^buffer size \d+ HD unit \d, (.*)/ &&
- ProcessHistory("INT","","","!\t$1\n") && next;
- /^AM79970 / && ProcessHistory("INT","","","!Interface: $_") && next;
- /^buffer size \d+ (Universal Serial: .*)/ &&
- ProcessHistory("INT","","","!\t$1\n") && next;
- /^Hardware is (.*)/ &&
- ProcessHistory("INT","","","!Interface: $INT$1\n") && next;
- /^(QUICC Serial unit \d),/ &&
- ProcessHistory("INT","","","!$1\n") && next;
- /^QUICC Ethernet .*/ &&
- ProcessHistory("INT","","","!$_") && next;
- /^DTE .*\.$/ &&
- ProcessHistory("INT","","","!\t$_") && next;
- /^(cable type :.*),/ &&
- ProcessHistory("INT","","","!\t$1\n") && next;
- /^(.* cable.*), received clockrate \d+$/ &&
- ProcessHistory("INT","","","!\t$1\n") && next;
- /^.* cable.*$/ &&
- ProcessHistory("INT","","","!\t$_") && next;
+ return(-1) if /^(Invalid|Ambiguous) input:/i;
+
+ /memory\s+-\s+total\s+:\s+(\S+)/i &&
+ ProcessHistory("COMMENTS","keysort","B0",";Memory: $1\n");
+ /serial\s+number\s+:\s+(\S+)/i &&
+ ProcessHistory("COMMENTS","keysort","A1",";Serial Number: $1\n");
+ /firmware\s+revision\s+:\s+(\S+)/i &&
+ ProcessHistory("COMMENTS","keysort","C0",";Image: Firmware $1\n");
+ /rom\s+version\s+:\s+(\S+)/i &&
+ ProcessHistory("COMMENTS","keysort","C1",";Image: ROM $1\n");
}
return(0);
}
@@ -370,22 +209,9 @@ sub ShowModule {
last if (/^$prompt/);
next if (/^(\s*|\s*$cmd\s*)$/);
return(-1) if (/command authorization failed/i);
+ return(1) if /^(Invalid|Ambiguous) input:/i;
- # match slot/card info line
- if (/^ *(\d+)\s+(\d+)\s+(.*)\s+(\S+)\s+(\S+)\s*$/) {
- $lines[$1] .= "!Slot $1: type $3, $2 ports\n!Slot $1: part $4, serial $5\n";
- $lines[$1] =~ s/\s+,/,/g;
- }
- # now match the Revs in the second paragraph of o/p and stick it in
- # the array with the previous bits...grumble.
- if (/^ *(\d+)\s+\S+\s+to\s+\S+\s+(\S+)\s+(.*)\s+(\S+)\s*$/) {
- $lines[$1] .= "!Slot $1: hvers $2, firmware $3, sw $4\n";
- $lines[$1] =~ s/\s+,/,/g;
- }
- }
- foreach $slot (@lines) {
- next if ($slot =~ /^\s*$/);
- ProcessHistory("Module","","","$slot!\n");
+ ProcessHistory("COMMENTS","keysort","E0","; $_") && next;
}
return(0);
@@ -400,25 +226,14 @@ sub ShowStack {
last if (/^$prompt/);
next if (/^(\s*|\s*$cmd\s*)$/);
return(-1) if (/command authorization failed/i);
- /^$/ && next;
- if (/C7200 Midplane EEPROM:/) {
- $_ = <INPUT>;
- /revision\s+(\S+).*revision\s+(\S+)/;
- ProcessHistory("SLOT","","","!Slot Midplane: hvers $1 rev $2\n");
- $_ = <INPUT>;
- /number\s+(\S+)\s+Part number\s+(\S+)/;
- ProcessHistory("SLOT","","","!Slot Midplane: part $2, serial $1\n!\n");
- next;
- }
- if (/C720\d(VXR)? CPU EEPROM:/) {
- $_ = <INPUT>;
- /revision\s+(\S+).*revision\s+(\S+)/ &&
- ProcessHistory("SLOT","","","!Slot CPU: hvers $1 rev $2\n");
- $_ = <INPUT>;
- /number\s+(\S+)\s+Part number\s+(\S+)/ &&
- ProcessHistory("SLOT","","","!Slot CPU: part $2, serial $1\n!\n");
- next;
- }
+ return(-1) if /^(Invalid|Ambiguous) input:/i;
+
+ s/stacking - (Stacking Status).*/$1/i;
+ s/\s*members unreachable .*$//i;
+
+ ProcessHistory("COMMENTS","keysort","F0",";$_");
+
+ /auto grab/i && last;
}
return(0);
}
@@ -433,65 +248,120 @@ sub WriteTerm {
return(-1) if (/command authorization failed/i);
# the pager can not be disabled per-session on the PIX
s/^<-+ More -+>\s*//;
- /Non-Volatile memory is in use/ && return(-1); # NvRAM is locked
+ s/^$/;/;
+
# skip the crap
- if (/^(##+$|Building configuration...)/i) {
- while (<INPUT>) {
- next if (/^Current configuration\s*:/i);
- next if (/^:/);
- next if (/^([%!].*|\s*)$/);
- next if (/^ip add.*ipv4:/); # band-aid for 3620 12.0S
- last;
+ /^running configuration:/i && next;
+
+ # filter out any RCS/CVS tags to avoid confusing local CVS storage
+ s/\$(Revision|Id):/ $1:/;
+ /^; (\S+) configuration editor;/i &&
+ ProcessHistory("COMMENTS","keysort","A0",";Chassis type: $1\n") &&
+ next;
+
+ # order logging statements - doesnt appear to do syslog as of right now
+ /^logging (\d+\.\d+\.\d+\.\d+)/ &&
+ ProcessHistory("LOGGING","ipsort","$1","$_") && next;
+
+ # no so sure this match is correct. show running doesnt seem to
+ # actually o/p anything after "password (manager|operator)"
+ if (/^(\s*)password (manager|operator)?/ && $filter_pwds >= 1) {
+ ProcessHistory("LINE-PASS","","",";$1password $2 <removed>\n");
+ next;
+ }
+
+ if (/^(snmp-server community) (\S+)/) {
+ if (defined($ENV{'NOCOMMSTR'})) {
+ ProcessHistory("SNMPSERVERCOMM","keysort","$_",
+ ";$1 <removed>$'") && next;
+ } else {
+ ProcessHistory("SNMPSERVERCOMM","keysort","$_","$_") && next;
}
- if (defined($config_register)) {
- ProcessHistory("","","","!\nconfig-register $config_register\n");
+ }
+ # order/prune snmp-server host statements - it actually appears to do
+ # the sortting for us, but just in case it changes ...
+ # we only prune lines of the form
+ # snmp-server host a.b.c.d <community>
+ if (/^snmp-server host (\d+\.\d+\.\d+\.\d+) /) {
+ if (defined($ENV{'NOCOMMSTR'})) {
+ my($ip) = $1;
+ my($line) = "snmp-server host $ip";
+ my(@tokens) = split(' ', $');
+ my($token);
+ while ($token = shift(@tokens)) {
+ if ($token eq 'version') {
+ $line .= " " . join(' ', ($token, shift(@tokens)));
+ } elsif ($token =~ /^(informs?|traps?|(no)?auth)$/) {
+ $line .= " " . $token;
+ } else {
+ $line = ";$line " . join(' ', ("<removed>", join(' ',@tokens)));
+ last;
+ }
+ }
+ ProcessHistory("SNMPSERVERHOST","ipsort","$ip","$line\n");
+ } else {
+ ProcessHistory("SNMPSERVERHOST","ipsort","$1","$_");
}
- tr/\015//d;
+ next;
}
- # some versions have other crap mixed in with the bits in the
- # block above
- /^! (Last configuration|NVRAM config last)/ && next;
- # Dog gone Cool matches to process the rest of the config
+ # order/prune tacacs/radius server statements
+ if (/^(tacacs-server|radius-server) key / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 key <removed>\n");
+ next;
+ }
+ if (/^(tacacs-server host \d+\.\S+) key / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 key <removed>\n");
+ next;
+ }
+
+ # prune passwords from stack member statements
+ if (/^(stack member .* password )\S+/ && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1<removed>$'");
+ next;
+ }
+
+ # order arp lists
+ /^ip arp\s+(\d+\.\d+\.\d+\.\d+)/ &&
+ ProcessHistory("ARP","ipsort","$1","$_") && next;
+
+ /^ip prefix-list\s+(\S+)\s+seq\s+(\d+)\s+(permit|deny)\s+(\d\S+)(\/.*)$/ &&
+ ProcessHistory("PACL $1 $3","ipsort","$4","ip prefix-list $1 $3 $4$5\n")
+ && next;
+
+ # blech!!!!
+ /^auto-tftp / &&
+ ProcessHistory("","","",";$_") && next;
+
+
+ # the rest are from rancid (ie: cisco), but suspect they will someday
+ # be applicable or close to it.
+
/^tftp-server flash / && next; # kill any tftp remains
/^ntp clock-period / && next; # kill ntp clock-period
/^ length / && next; # kill length on serial lines
/^ width / && next; # kill width on serial lines
- /^ clockrate / && next; # kill clockrate on serial interfaces
- /^(enable )?(password|passwd) / &&
- ProcessHistory("ENABLE","","","!$1$2 <removed>\n") &&
+ if (/^(enable )?(password|passwd) / && $filter_pwds >= 1) {
+ ProcessHistory("ENABLE","","",";$1$2 <removed>\n");
next;
- /^username (\S+)(\s.*)? password /&&
- ProcessHistory("USER","keysort","$1","!username $1$2 password <removed>\n") && next;
- /^\s*password / &&
- ProcessHistory("LINE-PASS","","","! password <removed>\n") && next;
- /^\s*neighbor (\S*) password / &&
- ProcessHistory("","","","! neighbor $1 password <removed>\n") &&
- next;
- /^(ip ftp password) / &&
- ProcessHistory("","","","!$1 <removed>\n") && next;
- /^( ip ospf authentication-key) / &&
- ProcessHistory("","","","!$1 <removed>\n") && next;
- /^( ip ospf message-digest-key \d+ md5) / &&
- ProcessHistory("","","","!$1 <removed>\n") && next;
- /fair-queue individual-limit/ && next;
- # sort ip explicit-paths.
- if (/^ip explicit-path name (\S+)/) {
- my($key) = $1;
- my($expath) = $_;
- while (<INPUT>) {
- tr/\015//d;
- last if (/^$prompt/);
- last if (/^$prompt/ || ! /^(ip explicit-path name |[ !])/);
- if (/^ip explicit-path name (\S+)/) {
- ProcessHistory("EXPATH","keysort","$key","$expath");
- $key = $1;
- $expath = $_;
- } else {
- $expath .= $_;
- }
+ }
+ if (/^username (\S+)(\s.*)? password /) {
+ if ($filter_pwds >= 1) {
+ ProcessHistory("USER","keysort","$1",";username $1$2 password <removed>\n");
+ } else {
+ ProcessHistory("USER","keysort","$1","$_");
}
- ProcessHistory("EXPATH","keysort","$key","$expath");
+ next;
+ }
+
+ if (/^(ip ftp password) / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 <removed>\n"); next;
+ }
+ if (/^( ip ospf authentication-key) / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 <removed>\n"); next;
+ }
+ if (/^( ip ospf message-digest-key \d+ md5) / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 <removed>\n"); next;
}
# sort route-maps
if (/^route-map (\S+)/) {
@@ -510,8 +380,6 @@ sub WriteTerm {
}
ProcessHistory("ROUTEMAP","keysort","$key","$routemap");
}
- # filter out any RCS/CVS tags to avoid confusing local CVS storage
- s/\$(Revision|Id):/ $1:/;
# order access-lists
/^access-list\s+(\d\d?)\s+(\S+)\s+(\S+)/ &&
ProcessHistory("ACL $1 $2","ipsort","$3","$_") && next;
@@ -522,58 +390,13 @@ sub WriteTerm {
ProcessHistory("EACL $1 $2","ipsort","$3","$_") && next;
/^access-list\s+(\d\d\d)\s+(\S+)\s+ip\s+any/ &&
ProcessHistory("EACL $1 $2","ipsort","0.0.0.0","$_") && next;
- # order arp lists
- /^arp\s+(\d+\.\d+\.\d+\.\d+)\s+/ &&
- ProcessHistory("ARP","ipsort","$1","$_") && next;
- /^ip prefix-list\s+(\S+)\s+seq\s+(\d+)\s+(permit|deny)\s+(\d\S+)(\/.*)$/ &&
- ProcessHistory("PACL $1 $3","ipsort","$4","ip prefix-list $1 $3 $4$5\n")
- && next;
- # order logging statements
- /^logging (\d+\.\d+\.\d+\.\d+)/ &&
- ProcessHistory("LOGGING","ipsort","$1","$_") && 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+) /) {
- if (defined($ENV{'NOCOMMSTR'})) {
- my($ip) = $1;
- my($line) = "snmp-server host $ip";
- my(@tokens) = split(' ', $');
- my($token);
- while ($token = shift(@tokens)) {
- if ($token eq 'version') {
- $line .= " " . join(' ', ($token, shift(@tokens)));
- } elsif ($token =~ /^(informs?|traps?|(no)?auth)$/) {
- $line .= " " . $token;
- } else {
- $line = "!$line " . join(' ', ("<removed>", join(' ',@tokens)));
- last;
- }
- }
- ProcessHistory("SNMPSERVERHOST","ipsort","$ip","$line\n");
- } else {
- ProcessHistory("SNMPSERVERHOST","ipsort","$1","$_");
- }
- next;
- }
- if (/^(snmp-server community) (\S+)/) {
- if (defined($ENV{'NOCOMMSTR'})) {
- ProcessHistory("SNMPSERVERCOMM","keysort","$_","!$1 <removed>$'") && next;
- } else {
- ProcessHistory("SNMPSERVERCOMM","keysort","$_","$_") && next;
- }
- }
- # order/prune tacacs/radius server statements
- /^(tacacs-server|radius-server) key / &&
- ProcessHistory("","","","!$1 key <removed>\n") && next;
- # order clns host statements
- /^clns host \S+ (\S+)/ &&
- ProcessHistory("CLNS","keysort","$1","$_") && next;
+
# order alias statements
/^alias / && ProcessHistory("ALIAS","keysort","$_","$_") && next;
# delete ntp auth password
- /^(ntp authentication-key \d+ md5) / &&
- ProcessHistory("","","","!$1 <removed>\n") && next;
+ if (/^(ntp authentication-key \d+ md5) / && $filter_pwds >= 1) {
+ ProcessHistory("","","",";$1 <removed>\n"); next;
+ }
# order ntp peers/servers
if (/^ntp (server|peer) (\d+)\.(\d+)\.(\d+)\.(\d+)/) {
$sortkey = sprintf("$1 %03d%03d%03d%03d",$2,$3,$4,$5);
@@ -586,28 +409,11 @@ sub WriteTerm {
# order ip nat source static statements
/^ip nat (\S+) source static (\S+)/ &&
ProcessHistory("IP NAT $1","ipsort","$2","$_") && next;
- # order atm map-list statements
- /^\s+ip\s+(\d+\.\d+\.\d+\.\d+)\s+atm-vc/ &&
- ProcessHistory("ATM map-list","ipsort","$1","$_") && next;
# order ip rcmd lines
/^ip rcmd/ && ProcessHistory("RCMD","keysort","$_","$_") && next;
- # system controller
- /^syscon address (\S*) (\S*)/ &&
- ProcessHistory("","","","!syscon address $1 <removed>\n") &&
- next;
- /^syscon password (\S*)/ &&
- ProcessHistory("","","","!syscon password <removed>\n") &&
- next;
-
# catch anything that wasnt match above.
ProcessHistory("","","","$_");
- # end of config
- #if (/^end(\n\[OK])?$/) {
- if (/^(: )?end$/) {
- $found_end = 1;
- return(1);
- }
}
return(0);
}
@@ -657,13 +463,25 @@ if ($file) {
}
}
-ProcessHistory("","","","!RANCID-CONTENT-TYPE: hp\n!\n");
-ProcessHistory("COMMENTS","keysort","B0","!\n");
-ProcessHistory("COMMENTS","keysort","F0","!\n");
-ProcessHistory("COMMENTS","keysort","G0","!\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: hp-procurve\n;\n");
+ProcessHistory("COMMENTS","keysort","B0",";\n"); # memory info
+ProcessHistory("COMMENTS","keysort","C0",";\n"); # showversion
+ProcessHistory("COMMENTS","keysort","D0",";\n"); # showflash
+ProcessHistory("COMMENTS","keysort","E0",";\n"); # showmodule
+ProcessHistory("COMMENTS","keysort","F0",";\n"); # showstack
+ProcessHistory("COMMENTS","keysort","G0",";\n");
TOP: while(<INPUT>) {
tr/\015//d;
- if (/\#\s?exit$/) {
+ if (/$prompt\s*exit\s*$/i) {
$clean_run=1;
last;
}
@@ -675,10 +493,11 @@ TOP: while(<INPUT>) {
}
while (/#\s*($cmds_regexp)\s*$/) {
$cmd = $1;
- if (!defined($prompt)) {$prompt = ($_ =~ /^([^#]+#)/)[0]; }
+ if (!defined($prompt)) {$prompt = ($_ =~ /^([^#]+)/)[0];
+ $prompt .= "[#>]"; }
print STDERR ("HIT COMMAND:$_") if ($debug);
if (! defined($commands{$cmd})) {
- print STDERR "found unexpected command - \"$cmd\"\n";
+ print STDERR "$host: found unexpected command - \"$cmd\"\n";
$clean_run = 0;
last TOP;
}
@@ -702,14 +521,14 @@ if (defined($ENV{NOPIPE})) {
}
# check for completeness
-if (scalar(%commands) || !$clean_run || !$found_end) {
+if (scalar(%commands) || !$clean_run) {
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);
+ 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 (!$clean_run || !$found_end) {
- print STDOUT "End of run not found\n";
- print STDERR "End of run not found\n" if ($debug);
+ if (!$clean_run) {
+ 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);