summaryrefslogtreecommitdiffstats
path: root/bin/xrancid.in
diff options
context:
space:
mode:
Diffstat (limited to 'bin/xrancid.in')
-rw-r--r--bin/xrancid.in31
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);
}