summaryrefslogtreecommitdiffstats
path: root/bin/jrancid
diff options
context:
space:
mode:
authorTar Committer <tar@ocjtech.us>2000-11-19 22:01:05 +0000
committerTar Committer <tar@ocjtech.us>2000-11-19 22:01:05 +0000
commit1651adc35224e149715bd85af4ba108c5ee184bc (patch)
treef83b6af44ffb10f2c042b822b2f3469582a129ca /bin/jrancid
parent3861ba4cf180eb01fd98a16f4502702ab217e56f (diff)
downloadrancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.gz
rancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.xz
rancid-1651adc35224e149715bd85af4ba108c5ee184bc.zip
Imported from rancid-2.0.tar.gz.rancid-2.0
Diffstat (limited to 'bin/jrancid')
-rwxr-xr-xbin/jrancid498
1 files changed, 0 insertions, 498 deletions
diff --git a/bin/jrancid b/bin/jrancid
deleted file mode 100755
index ea158bf..0000000
--- a/bin/jrancid
+++ /dev/null
@@ -1,498 +0,0 @@
-#!/usr/local/bin/perl
-##
-## Amazingly hacked version of Hank's rancid - this one tries to
-## deal with Junipers.
-##
-## Original Rancid: Copyright (C) 1997 by Henry Kilmer.
-## All rights reserved.
-##
-## This software may be freely copied, modified and redistributed without
-## fee for non-commerical purposes provided that this copyright notice is
-## 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: jrancid [-d] [-l] [-f filename | $host]
-#
-use Getopt::Std;
-getopts('dfl');
-$debug = $opt_d;
-$log = $opt_l;
-$file = $opt_f;
-$host = $ARGV[0];
-
-$clean_run = 0;
-
-# 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 routing 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 routing 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 routing 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 routing (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);
-}
-
-###
-### Start of real work
-###
-
-# This routine parses "show chassis clocks"
-sub ShowChassisClocks {
- print STDERR " In ShowChassisClocks: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show chassis environment"
-sub ShowChassisEnvironment {
- print STDERR " In ShowChassisEnvironment: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- / backplane temperature/ && next;
- /(\s*Power supply.*), temperature/ &&
- ProcessHistory("","","","# $1\n") && next;
- /(\s*.+) +\d+ degrees C.*$/ &&
- ProcessHistory("","","","# $1\n") && next;
- /(^.*\S)\s+ Spinning at .*$/ &&
- ProcessHistory("","","","# $1\n") && next;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show chassis firmware"
-sub ShowChassisFirmware {
- print STDERR " In ShowChassisFirmware: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show chassis fpc detail"
-sub ShowChassisFpcDetail {
- print STDERR " In ShowChassisFpcDetail: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- / Temperature/ && next;
- / Start time/ && next;
- / Uptime/ && next;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show chassis hardware"
-sub ShowChassisHardware {
- print STDERR " In ShowChassisHardware: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show chassis routing-engine"
-# Most output is ignored.
-sub ShowChassisRoutingEngine {
- print STDERR " In ShowChassisRoutingEngine: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- /^Routing Engine status:/ && ProcessHistory("","","","# $_") && next;
- / Slot / && ProcessHistory("","","","# $_") && next;
- / Current state/ && ProcessHistory("","","","# $_") && next;
- / Election priority/ && ProcessHistory("","","","# $_") && next;
- / DRAM/ && ProcessHistory("","","","# $_") && next;
- / Serial ID/ && ProcessHistory("","","","# $_") && next;
- /^\s*$/ && ProcessHistory("","","","# $_") && next;
- }
- return;
-}
-
-# This routine parses "show chassis scb", "show chassis ssb", and
-# "show chassis feb".
-# Only do this routine once.
-sub ShowChassisSCB {
- print STDERR " In ShowChassisSCB: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- return if ($ShowChassisSCB);
- /error: the chassis subsystem is not running/ && return;
- /Couldn\'t initiate connection/ && return;
- /Unrecognized command/ && return;
- /command is not valid/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- / Temperature/ && next;
- / utilization/ && next;
- / Start time/ && next;
- / Uptime/ && next;
- / (IP|MLPS) routes:/ && next;
- / used:/ && next;
- ProcessHistory("","","","# $_");
- }
- $ShowChassisSCB = 1;
- return;
-}
-
-# This routine parses "show system boot-messages"
-sub ShowSystemBootMessages {
- print STDERR " In ShowSystemBootMessages: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /Unrecognized command/ && return;
- /^\s+\^/ && return;
- /syntax error/ && return;
- /^JUNOS / && <INPUT> && next;
- /^real memory / && next;
- /^avail memory / && next;
- /^\/dev\// && next;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show version"
-sub ShowVersion {
- print STDERR " In ShowVersion: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
-
- /^Juniper Networks is:/ && ProcessHistory("","","","# \n# $_") && next;
- ProcessHistory("","","","# $_");
- }
- return;
-}
-
-# This routine parses "show configuration"
-sub ShowConfiguration {
- print STDERR " In ShowConfiguration: $_" if ($debug);
-
- s/^[a-z]+@//;
- ProcessHistory("","","","# $_");
- while (<INPUT>) {
- tr/\015//d;
- last if(/^$prompt/);
- next if (/^\s*$/);
-
- /^database header mismatch: / && return(-1);
- /^version .*;\d+$/ && return(-1);
- if (/^(\s*)(community |trap-group )[^ ;]+(\s?[;{])$/) {
- if (defined($ENV{'NOCOMMSTR'})) {
- $_ = "$1$2\"<removed>\"$3\n";
- }
- }
- s/(\s*authentication-key ).*$/#$1<removed>;/;
- s/^(.*\ssecret \")\$9\$.*(\".*)$/#$1<removed>$2/;
- s/ # SECRET-DATA$//;
- ProcessHistory("","","","$_");
- }
- return;
-}
-
-###
-### End of real work
-###
-
-# dummy function
-sub DoNothing {print STDOUT;}
-
-# Main
-%commands=(
- "show chassis clocks" => "ShowChassisClocks",
- "show chassis environment" => "ShowChassisEnvironment",
- "show chassis firmware" => "ShowChassisFirmware",
- "show chassis fpc detail" => "ShowChassisFpcDetail",
- "show chassis hardware" => "ShowChassisHardware",
- "show chassis routing-engine" => "ShowChassisRoutingEngine",
- "show chassis scb" => "ShowChassisSCB",
- "show chassis ssb" => "ShowChassisSCB",
- "show chassis feb" => "ShowChassisSCB",
- "show system boot-messages" => "ShowSystemBootMessages",
- "show version" => "ShowVersion",
- "show configuration" => "ShowConfiguration"
-);
-@commands=(
- "show chassis clocks",
- "show chassis environment",
- "show chassis firmware",
- "show chassis fpc detail",
- "show chassis hardware",
- "show chassis routing-engine",
- "show chassis scb",
- "show chassis ssb",
- "show chassis feb",
- "show system boot-messages",
- "show version",
- "show configuration"
-);
-
-$jnx_commands=join(";",@commands);
-$cmds_regexp=join("|",@commands);
-
-open(OUTPUT,">$host.new") || die "Can't open $host.new for writing: $!\n";
-select(OUTPUT);
-# make OUTPUT unbuffered
-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 echo jlogin -c\"$jnx_commands\" $host\n") if ($debug);
- print(STDOUT "executing echo jlogin -c\"$jnx_commands\" $host\n") if ($debug);
-
- if (defined($ENV{NOPIPE})) {
- system "jlogin -c \"$jnx_commands\" $host </dev/null > $host.raw" || die "jlogin failed for $host: $!\n";
- open(INPUT, "< $host.raw") || die "jlogin failed for $host: $!\n";
- } else {
- open(INPUT,"jlogin -c \"$jnx_commands\" $host </dev/null |") || die "jlogin failed for $host: $!\n";
- }
-
-}
-
-TOP: while(<INPUT>) {
- tr/\015//d;
- if (/^Error:/) {
- s/^.*Error:/Error:/;
- print STDOUT ("$host jlogin error: $_");
- print STDERR ("$host jlogin error: $_") if ($debug);
- $clean_run=0;
- last;
- }
- if (/System shutdown message/) {
- print STDOUT ("$host shutdown msg: $_");
- print STDERR ("$host shutdown msg: $_") if ($debug);
- $clean_run = 0;
- last;
- }
- while (/>\s*($cmds_regexp)\s*$/) {
- $cmd = $1;
- if (!defined($prompt)) {$prompt = ($_ =~ /^([^>]+>)/)[0]; }
- print STDERR ("HIT COMMAND:$_") if ($debug);
- if (! defined($commands{$cmd})) {
- print STDERR "found unexpected command - \"$cmd\"\n";
- $clean_run = 0;
- last TOP;
- }
- $rval = &{$commands{$cmd}};
- delete($commands{$cmd});
- if ($rval == -1) {
- $clean_run = 0;
- last TOP;
- }
- }
- if (/>\s*quit/) {
- $clean_run=1;
- last;
- }
-}
-print STDOUT "Done jlogin: $_\n" if ($log);
-# Flush History
-ProcessHistory("","","","");
-# Cleanup
-close(INPUT);
-close(OUTPUT);
-
-if (defined($ENV{NOPIPE})) {
- unlink("$host.raw") if (! $debug);
-}
-
-# check for completeness
-$commands = join(", ", keys(%commands));
-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);
- }
- if (!$clean_run) {
- print STDOUT "End of run not found\n";
- print STDERR "End of run not found\n" if ($debug);
- system("/usr/bin/tail -1 $host.new");
- }
- unlink "$host.new" if (! $debug);
-}