diff options
Diffstat (limited to 'bin/xrancid.in')
-rw-r--r-- | bin/xrancid.in | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/bin/xrancid.in b/bin/xrancid.in index 96b99ef..4a34fca 100644 --- a/bin/xrancid.in +++ b/bin/xrancid.in @@ -279,9 +279,10 @@ sub WriteTerm { while (<INPUT>) { tr/\015//d; - last if(/^$prompt/); + tr/\007//d; next if(/^\s*$/); return(0) if(/^syntax error at token /i); + return(0) if(/^%% Invalid input detected at /i); # the pager can not be disabled per-session on the PIX s/^<-+ More -+>\s*//; return(0) if ($found_end); @@ -317,14 +318,28 @@ sub WriteTerm { ProcessHistory("COMMENTS","keysort","H0","# $1 <key removed>\n"); next; } - if (/configure ssh2 key/ && $filter_pwds >= 1) { + # XOS (at least version 11.3.3.7) is buggy and sometimees outputs only + # the last 702 octets of the SSH key... make sure to strip it anyway + print STDERR "D \"$_\" D\n"; + if (/^(configure ssh2 key pregenerated|[a-f\d]{2}(:[a-f\d]{2}){700,}\s*$)/ && $filter_pwds >= 1) { + ProcessHistory("COMMENTS","keysort","H0","# configure ssh2 key <key removed>\n"); + # Only EW has a multiline key (terminated by a blank line) + # XOS has only one line so jump to the next iteration immediately + # to make sure we don't lose the next config statement + next unless /^configure ssh2 key pregenerated$/; + while (<INPUT>) { + last if (/^\s*\r?$/); + } + next; + } + # This changes each time the configuration is shown, so remove it + # unconditionally as it is documented in rancid.conf(5). + if (/configure ssl privkey/) { ProcessHistory("COMMENTS","keysort","H0","# $_# <key removed>\n"); while (<INPUT>) { - if (/^(#|enable|conf|disable|unconf)/) { - tr/\015//d; - last; - } + last if (/^\.\r?$/); } + next; } # filter out any RCS/CVS tags to avoid confusing local CVS storage @@ -366,7 +381,7 @@ sub WriteTerm { # catch anything that wasnt match above. ProcessHistory("COMMENTS","keysort","H0","$_"); # end of config - if (/^# End of configuration file/i) { + if (/^($prompt|# End of configuration file)/i) { printf STDERR " End WriteTerm: $_" if ($debug); $found_end = 1; return(0); @@ -462,7 +477,7 @@ TOP: while(<INPUT>) { if (!defined($prompt)) { $prompt = ($_ =~ /^([^#]+#)/)[0]; $prompt =~ s/([][}{)(\\])/\\$1/g; - $prompt =~ s/[:.](\d+ ?)#/:\\d+ ?#/; + $prompt =~ s/[:.](\d+ ?)#/[:.]\\d+ ?#/; $prompt =~ s/\*/\\\*/; print STDERR ("PROMPT MATCH: $prompt\n") if ($debug); } |