diff options
Diffstat (limited to 'bin/hrancid.in')
-rwxr-xr-x | bin/hrancid.in | 515 |
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); |