diff options
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | Makefile.in | 6 | ||||
-rw-r--r-- | Todo | 5 | ||||
-rw-r--r-- | bin/Makefile.in | 4 | ||||
-rwxr-xr-x | bin/clogin.in | 5 | ||||
-rwxr-xr-x | bin/configure | 349 | ||||
-rw-r--r-- | bin/configure.in | 25 | ||||
-rwxr-xr-x | bin/elogin.in | 5 | ||||
-rw-r--r-- | bin/env.in | 1 | ||||
-rwxr-xr-x | bin/flogin.in | 5 | ||||
-rwxr-xr-x | bin/jlogin.in | 5 | ||||
-rwxr-xr-x | bin/rancid.in | 11 | ||||
-rwxr-xr-x | configure | 417 | ||||
-rw-r--r-- | configure.in | 61 | ||||
-rw-r--r-- | util/Makefile.in | 10 | ||||
-rw-r--r-- | util/README | 5 | ||||
-rwxr-xr-x | util/configure | 107 | ||||
-rw-r--r-- | util/configure.in | 2 | ||||
-rw-r--r-- | util/lg/Makefile.in | 43 | ||||
-rw-r--r-- | util/lg/README | 64 | ||||
-rwxr-xr-x | util/lg/configure | 991 | ||||
-rw-r--r-- | util/lg/configure.in | 27 | ||||
-rw-r--r-- | util/lg/index.html | 9 | ||||
-rwxr-xr-x | util/lg/lg.cgi.in | 449 | ||||
-rw-r--r-- | util/lg/lg.conf.in | 79 | ||||
-rwxr-xr-x | util/lg/lgform.cgi.in | 200 | ||||
-rw-r--r-- | util/lg/lgnotes.html | 52 |
28 files changed, 2547 insertions, 399 deletions
@@ -1,3 +1,10 @@ +2.1b + add looking glass utility based on Ed Kern's original source. Thanks + to Ed for permission to include it with rancid. this is only partially + tested. + + fixed expect foo in *login when .cloginrc is unreadable. + 2.0 Better formatting for cisco catalyst [non-ios] switches. diff --git a/Makefile.am b/Makefile.am index efcd8b0..d75decf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -15,7 +15,7 @@ SUBDIRS = . bin util all: install-exec-local: - $(mkinstalldirs) $(prefix) $(prefix)/bin $(prefix)/util + $(mkinstalldirs) $(prefix) $(prefix)/bin $(prefix)/util $(prefix)/util/lg install: for file in CHANGES README cloginrc.sample ; do \ diff --git a/Makefile.in b/Makefile.in index 35ba7ee..c79ec4f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,16 +62,20 @@ COMM = @COMM@ CVS = @CVS@ DIFF = @DIFF@ DIRNAME = @DIRNAME@ +ENV_PATH = @ENV_PATH@ EXPECT_PATH = @EXPECT_PATH@ INST_PROGS = @INST_PROGS@ +LG_PING_CMD = @LG_PING_CMD@ MAINT = @MAINT@ MAKE = @MAKE@ MAKEINFO = @MAKEINFO@ MKDIR = @MKDIR@ PACKAGE = @PACKAGE@ PERLV_PATH = @PERLV_PATH@ +PING_PATH = @PING_PATH@ RD_BIN_DATAS = @RD_BIN_DATAS@ RD_BIN_PROGS = @RD_BIN_PROGS@ +RD_UTIL_LG_PROGS = @RD_UTIL_LG_PROGS@ RD_UTIL_PROGS = @RD_UTIL_PROGS@ SENDMAIL = @SENDMAIL@ SORT = @SORT@ @@ -340,7 +344,7 @@ mostlyclean distclean maintainer-clean all: install-exec-local: - $(mkinstalldirs) $(prefix) $(prefix)/bin $(prefix)/util + $(mkinstalldirs) $(prefix) $(prefix)/bin $(prefix)/util $(prefix)/util/lg install: for file in CHANGES README cloginrc.sample ; do \ @@ -1,7 +1,10 @@ +- better error loggin in the looking glass +- why do 'make distclean' & 'make dist' fail on fbsd 3.3? +- handle foundry and reback in the looking glass +- implement the bits marked unimplemented in lg.conf - need to strip community strings from foundry, redback - detect 'same' vty configs - ignoring length/width/passwd is a start, but need more -- add .cloginrc var to say to use ssh or telnet - merge clogin and jlogin into one. possible? - rancid needs to treat the 3600s like the 7Ks and 12Ks... - Also, need to allow 12012s, and force 700s to not be treated like 7Ks. diff --git a/bin/Makefile.in b/bin/Makefile.in index ca5616b..8a97def 100644 --- a/bin/Makefile.in +++ b/bin/Makefile.in @@ -3,8 +3,8 @@ PREFIX = @prefix@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -BIN_PROGS = @RD_BIN_PROGS@ -BIN_DATAS = @RD_BIN_DATAS@ +BIN_PROGS=@RD_BIN_PROGS@ +BIN_DATAS=@RD_BIN_DATAS@ all: diff --git a/bin/clogin.in b/bin/clogin.in index bfe3ae1..e239d50 100755 --- a/bin/clogin.in +++ b/bin/clogin.in @@ -248,7 +248,10 @@ proc source_password_file { } { send_user "Error: $password_file must not be world readable/writable\n" exit 1 } - source $password_file + if [ catch {source $password_file} reason ] { + send_user "Error: $reason\n" + exit 1 + } } # Log into the router. diff --git a/bin/configure b/bin/configure index b586b8d..b0770e7 100755 --- a/bin/configure +++ b/bin/configure @@ -619,345 +619,7 @@ PERLV_PATH=$ac_cv_path_PERLV_PATH EXPECT_PATH=$ac_cv_path_EXPECT_PATH -# locate tools to build $PATH for env. order is significant. want to be -# sure that we pick up the the proper diff and ucbmail in bin/env. -unset ENV_PATH -# Extract the first word of "diff", so it can be a program name with args. -set dummy diff; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:629: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_DIFF'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$DIFF" in - /*) - ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_DIFF="$DIFF" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_DIFF="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_DIFF" && ac_cv_path_DIFF="no" - ;; -esac -fi -DIFF="$ac_cv_path_DIFF" -if test -n "$DIFF"; then - echo "$ac_t""$DIFF" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH=`dirname $ac_cv_path_DIFF` -# Extract the first word of "Mail", so it can be a program name with args. -set dummy Mail; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:666: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_UCBMAIL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$UCBMAIL" in - /*) - ac_cv_path_UCBMAIL="$UCBMAIL" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_UCBMAIL="$UCBMAIL" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_UCBMAIL="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_UCBMAIL" && ac_cv_path_UCBMAIL="no" - ;; -esac -fi -UCBMAIL="$ac_cv_path_UCBMAIL" -if test -n "$UCBMAIL"; then - echo "$ac_t""$UCBMAIL" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_UCBMAIL`" -# Extract the first word of "cvs", so it can be a program name with args. -set dummy cvs; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:703: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$CVS" in - /*) - ac_cv_path_CVS="$CVS" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_CVS="$CVS" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_CVS="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_CVS" && ac_cv_path_CVS="no" - ;; -esac -fi -CVS="$ac_cv_path_CVS" -if test -n "$CVS"; then - echo "$ac_t""$CVS" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_CVS`" -# Extract the first word of "comm", so it can be a program name with args. -set dummy comm; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:740: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_COMM'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$COMM" in - /*) - ac_cv_path_COMM="$COMM" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_COMM="$COMM" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_COMM="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_COMM" && ac_cv_path_COMM="no" - ;; -esac -fi -COMM="$ac_cv_path_COMM" -if test -n "$COMM"; then - echo "$ac_t""$COMM" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_COMM`" -# Extract the first word of "mkdir", so it can be a program name with args. -set dummy mkdir; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:777: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$MKDIR" in - /*) - ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_MKDIR="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_MKDIR" && ac_cv_path_MKDIR="no" - ;; -esac -fi -MKDIR="$ac_cv_path_MKDIR" -if test -n "$MKDIR"; then - echo "$ac_t""$MKDIR" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_MKDIR`" -# Extract the first word of "dirname", so it can be a program name with args. -set dummy dirname; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:814: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_DIRNAME'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$DIRNAME" in - /*) - ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_DIRNAME="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_DIRNAME" && ac_cv_path_DIRNAME="no" - ;; -esac -fi -DIRNAME="$ac_cv_path_DIRNAME" -if test -n "$DIRNAME"; then - echo "$ac_t""$DIRNAME" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_DIRNAME`" -# Extract the first word of "touch", so it can be a program name with args. -set dummy touch; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:851: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_TOUCH'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$TOUCH" in - /*) - ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_TOUCH="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_TOUCH" && ac_cv_path_TOUCH="no" - ;; -esac -fi -TOUCH="$ac_cv_path_TOUCH" -if test -n "$TOUCH"; then - echo "$ac_t""$TOUCH" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_TOUCH`" -# Extract the first word of "sendmail", so it can be a program name with args. -set dummy sendmail; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:888: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$SENDMAIL" in - /*) - ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_SENDMAIL="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="no" - ;; -esac -fi -SENDMAIL="$ac_cv_path_SENDMAIL" -if test -n "$SENDMAIL"; then - echo "$ac_t""$SENDMAIL" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SENDMAIL`" -# Extract the first word of "sort", so it can be a program name with args. -set dummy sort; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:925: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_SORT'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$SORT" in - /*) - ac_cv_path_SORT="$SORT" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_SORT="$SORT" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_SORT="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_SORT" && ac_cv_path_SORT="no" - ;; -esac -fi -SORT="$ac_cv_path_SORT" -if test -n "$SORT"; then - echo "$ac_t""$SORT" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SORT`" -ENV_PATH="$ENV_PATH:/usr/local/bin:/usr/bin" - -ENV_PATH=`echo $ENV_PATH | $PERLV_PATH -e 'foreach $x(split(":",<>)){next unless (length($x));push(@F, $x),$seen{$x}=1 unless (defined $seen{$x});}print join(":",@F);'` +ENV_PATH=$ac_cv_env_path trap '' 1 2 15 @@ -1112,15 +774,6 @@ s%@RD_BIN_DATAS@%$RD_BIN_DATAS%g s%@RD_BIN_PROGS@%$RD_BIN_PROGS%g s%@PERLV_PATH@%$PERLV_PATH%g s%@EXPECT_PATH@%$EXPECT_PATH%g -s%@DIFF@%$DIFF%g -s%@UCBMAIL@%$UCBMAIL%g -s%@CVS@%$CVS%g -s%@COMM@%$COMM%g -s%@MKDIR@%$MKDIR%g -s%@DIRNAME@%$DIRNAME%g -s%@TOUCH@%$TOUCH%g -s%@SENDMAIL@%$SENDMAIL%g -s%@SORT@%$SORT%g s%@ENV_PATH@%$ENV_PATH%g CEOF diff --git a/bin/configure.in b/bin/configure.in index cdade86..02b7d71 100644 --- a/bin/configure.in +++ b/bin/configure.in @@ -17,30 +17,7 @@ AC_SUBST(PERLV_PATH) EXPECT_PATH=$ac_cv_path_EXPECT_PATH AC_SUBST(EXPECT_PATH) -# locate tools to build $PATH for env. order is significant. want to be -# sure that we pick up the the proper diff and ucbmail in bin/env. -unset ENV_PATH -AC_PATH_PROG(DIFF,diff,no) -ENV_PATH=`dirname $ac_cv_path_DIFF` -AC_PATH_PROG(UCBMAIL,Mail,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_UCBMAIL`" -AC_PATH_PROG(CVS,cvs,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_CVS`" -AC_PATH_PROG(COMM,comm,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_COMM`" -AC_PATH_PROG(MKDIR,mkdir,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_MKDIR`" -AC_PATH_PROG(DIRNAME,dirname,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_DIRNAME`" -AC_PATH_PROG(TOUCH,touch,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_TOUCH`" -AC_PATH_PROG(SENDMAIL,sendmail,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SENDMAIL`" -AC_PATH_PROG(SORT,sort,no) -ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SORT`" -ENV_PATH="$ENV_PATH:/usr/local/bin:/usr/bin" - -ENV_PATH=`echo $ENV_PATH | $PERLV_PATH -e 'foreach $x(split(":",<>)){next unless (length($x));push(@F, $x),$seen{$x}=1 unless (defined $seen{$x});}print join(":",@F);'` +ENV_PATH=$ac_cv_env_path AC_SUBST(ENV_PATH) AC_OUTPUT(Makefile env $RD_BIN_DATAS $RD_BIN_PROGS) diff --git a/bin/elogin.in b/bin/elogin.in index e75efed..5ef908b 100755 --- a/bin/elogin.in +++ b/bin/elogin.in @@ -234,7 +234,10 @@ proc source_password_file { } { send_user "Error: $password_file must not be world readable/writable\n" exit 1 } - source $password_file + if [ catch {source $password_file} reason ] { + send_user "Error: $reason\n" + exit 1 + } } # Log into the router. @@ -15,7 +15,6 @@ TERM=network;export TERM TMPDIR=/tmp; export TMPDIR BASEDIR=@prefix@; export BASEDIR PATH=$BASEDIR/bin:@ENV_PATH@; export PATH -#PATH=$BASEDIR/bin:/usr/local/bin:/usr/ucb:/usr/bin:/bin:/usr/lib:/usr/sbin;export PATH CVSROOT=$BASEDIR/CVS; export CVSROOT # # if NOPIPE is set, temp files will be used instead of a cmd pipe during diff --git a/bin/flogin.in b/bin/flogin.in index 0419bb6..a43ddda 100755 --- a/bin/flogin.in +++ b/bin/flogin.in @@ -242,7 +242,10 @@ proc source_password_file { } { send_user "Error: $password_file must not be world readable/writable\n" exit 1 } - source $password_file + if [ catch {source $password_file} reason ] { + send_user "Error: $reason\n" + exit 1 + } } # Log into the router. diff --git a/bin/jlogin.in b/bin/jlogin.in index 0718321..28e773b 100755 --- a/bin/jlogin.in +++ b/bin/jlogin.in @@ -221,7 +221,10 @@ proc source_password_file { } { send_user "Error: $password_file must not be world readable/writable\n" exit 1 } - source $password_file + if [ catch {source $password_file} reason ] { + send_user "Error: $reason\n" + exit 1 + } } # Log into the router. diff --git a/bin/rancid.in b/bin/rancid.in index d7b5fbf..24b9d14 100755 --- a/bin/rancid.in +++ b/bin/rancid.in @@ -210,6 +210,9 @@ sub ShowVersion { } elsif ( $1 =~ /WS-C29/) { $type = "2900XL"; $device = "switch"; + } elsif ( $1 =~ /WS-C35/) { + $type = "3500XL"; + $device = "switch"; } else { $type = $1; } @@ -352,7 +355,7 @@ sub ShowGSR { # This routine parses "show boot" sub ShowBoot { - # Pick up boot variables if 7000/7200/7500/12000/2900; + # Pick up boot variables if 7000/7200/7500/12000/2900/3500; # otherwise pick up bootflash. print STDERR " In ShowBoot: $_" if ($debug); @@ -369,7 +372,7 @@ sub ShowBoot { $H0=1; ProcessHistory("COMMENTS","keysort","H0","!\n"); } if ($type !~ /^(120|7)/) { - if ($type !~ /^2900/) { + if ($type !~ /^(29|35)00/) { ProcessHistory("COMMENTS","keysort","H2","!BootFlash: $_"); } else { ProcessHistory("COMMENTS","keysort","H1","!Variable: $_"); @@ -825,8 +828,8 @@ sub WriteTerm { /^(enable )?(password|passwd) / && ProcessHistory("ENABLE","","","!$1$2 <removed>\n") && next; - /^username (\S+) password /&& - ProcessHistory("USER","keysort","$1","!username $1 password <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 / && @@ -790,9 +790,9 @@ subdirs="bin util" PACKAGE=rancid # VERSION needs to be updated such that 'make dist' uses the correct -# filename for the direcotyr name and tarball. +# filename for the directory name and tarball. -VERSION=2.0 +VERSION=2.1b echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 echo "configure:799: checking whether to enable maintainer-specific portions of Makefiles" >&5 @@ -1576,6 +1576,66 @@ if test $EXPECT_PATH = no; then fi +# locate ping and it's syntax +# Extract the first word of "ping", so it can be a program name with args. +set dummy ping; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1584: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PING_PATH'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$PING_PATH" in + /*) + ac_cv_path_PING_PATH="$PING_PATH" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_PING_PATH="$PING_PATH" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_PING_PATH="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_PING_PATH" && ac_cv_path_PING_PATH="no" + ;; +esac +fi +PING_PATH="$ac_cv_path_PING_PATH" +if test -n "$PING_PATH"; then + echo "$ac_t""$PING_PATH" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test $PING_PATH = no; then + { echo "configure: error: can't locate ping." 1>&2; exit 1; } + exit 1 +fi +# ping seems to take one of two formats for count (N) +# BSD: ping -c N host +# SVR: ping host N +$PING_PATH -c 1 -v 127.0.0.1 > /dev/null 2>&1 +if test $? -ne 0 ; then + $PING_PATH 127.0.0.1 56 1 > /dev/null 2>&1 + if test $? -ne 0 ; then + { echo "configure: error: can't figure out how to pass count == 1 to $PING_PATH." 1>&2; exit 1; } + exit 1 + else + LG_PING_CMD="$PING_PATH" + + fi +else + LG_PING_CMD="$PING_PATH -c 1" + +fi +rd_cv_lg_ping_cmd=$LG_PING_CMD + # RD_BIN_DATAS are bin/ .in's that need to be installed without execute # perms. RD_BIN_DATAS="" @@ -1590,14 +1650,361 @@ rancid rename rrancid" rd_cv_rd_bin_progs=$RD_BIN_PROGS -# RD_BIN_PROGS are util/ .in's that need to be installed with execute perms. +# RD_UTIL_PROGS are util/ .in's that need to be installed with execute perms. RD_UTIL_PROGS="rtrfilter" rd_cv_rd_util_progs=$RD_UTIL_PROGS +# RD_UTIL_LG_PROGS are util/lg .in's that need to be installed with execute +# perms. +RD_UTIL_LG_PROGS="lg.cgi lgform.cgi" + +rd_cv_rd_util_lg_progs=$RD_UTIL_LG_PROGS + INST_PROGS=$progs +# locate tools to build $PATH for env. order is significant. want to be +# sure that we pick up the the proper diff and ucbmail in bin/env. +unset ENV_PATH +# Extract the first word of "diff", so it can be a program name with args. +set dummy diff; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1674: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_DIFF'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$DIFF" in + /*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_DIFF="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_DIFF" && ac_cv_path_DIFF="no" + ;; +esac +fi +DIFF="$ac_cv_path_DIFF" +if test -n "$DIFF"; then + echo "$ac_t""$DIFF" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH=`dirname $ac_cv_path_DIFF` +# Extract the first word of "Mail", so it can be a program name with args. +set dummy Mail; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1711: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_UCBMAIL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$UCBMAIL" in + /*) + ac_cv_path_UCBMAIL="$UCBMAIL" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_UCBMAIL="$UCBMAIL" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_UCBMAIL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_UCBMAIL" && ac_cv_path_UCBMAIL="no" + ;; +esac +fi +UCBMAIL="$ac_cv_path_UCBMAIL" +if test -n "$UCBMAIL"; then + echo "$ac_t""$UCBMAIL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_UCBMAIL`" +# Extract the first word of "cvs", so it can be a program name with args. +set dummy cvs; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1748: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$CVS" in + /*) + ac_cv_path_CVS="$CVS" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_CVS="$CVS" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_CVS="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_CVS" && ac_cv_path_CVS="no" + ;; +esac +fi +CVS="$ac_cv_path_CVS" +if test -n "$CVS"; then + echo "$ac_t""$CVS" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_CVS`" +# Extract the first word of "comm", so it can be a program name with args. +set dummy comm; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1785: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_COMM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$COMM" in + /*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_COMM="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_COMM" && ac_cv_path_COMM="no" + ;; +esac +fi +COMM="$ac_cv_path_COMM" +if test -n "$COMM"; then + echo "$ac_t""$COMM" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_COMM`" +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1822: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MKDIR" in + /*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_MKDIR="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MKDIR" && ac_cv_path_MKDIR="no" + ;; +esac +fi +MKDIR="$ac_cv_path_MKDIR" +if test -n "$MKDIR"; then + echo "$ac_t""$MKDIR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_MKDIR`" +# Extract the first word of "dirname", so it can be a program name with args. +set dummy dirname; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1859: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_DIRNAME'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$DIRNAME" in + /*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_DIRNAME="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_DIRNAME" && ac_cv_path_DIRNAME="no" + ;; +esac +fi +DIRNAME="$ac_cv_path_DIRNAME" +if test -n "$DIRNAME"; then + echo "$ac_t""$DIRNAME" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_DIRNAME`" +# Extract the first word of "touch", so it can be a program name with args. +set dummy touch; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1896: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_TOUCH'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$TOUCH" in + /*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_TOUCH="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_TOUCH" && ac_cv_path_TOUCH="no" + ;; +esac +fi +TOUCH="$ac_cv_path_TOUCH" +if test -n "$TOUCH"; then + echo "$ac_t""$TOUCH" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_TOUCH`" +# Extract the first word of "sendmail", so it can be a program name with args. +set dummy sendmail; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1933: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$SENDMAIL" in + /*) + ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_SENDMAIL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="no" + ;; +esac +fi +SENDMAIL="$ac_cv_path_SENDMAIL" +if test -n "$SENDMAIL"; then + echo "$ac_t""$SENDMAIL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SENDMAIL`" +# Extract the first word of "sort", so it can be a program name with args. +set dummy sort; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1970: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_SORT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$SORT" in + /*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_SORT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_SORT" && ac_cv_path_SORT="no" + ;; +esac +fi +SORT="$ac_cv_path_SORT" +if test -n "$SORT"; then + echo "$ac_t""$SORT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SORT`" +ENV_PATH="$ENV_PATH:/usr/local/bin:/usr/bin" + +ENV_PATH=`echo $ENV_PATH | $PERLV_PATH -e 'foreach $x(split(":",<>)){next unless (length($x));push(@F, $x),$seen{$x}=1 unless (defined $seen{$x});}print join(":",@F);'` +ac_cv_env_path=$ENV_PATH + trap '' 1 2 15 cat > confcache <<\EOF @@ -1772,10 +2179,14 @@ s%@MAKE@%$MAKE%g s%@TAR@%$TAR%g s%@PERLV_PATH@%$PERLV_PATH%g s%@EXPECT_PATH@%$EXPECT_PATH%g +s%@PING_PATH@%$PING_PATH%g +s%@LG_PING_CMD@%$LG_PING_CMD%g s%@RD_BIN_DATAS@%$RD_BIN_DATAS%g s%@RD_BIN_PROGS@%$RD_BIN_PROGS%g s%@RD_UTIL_PROGS@%$RD_UTIL_PROGS%g +s%@RD_UTIL_LG_PROGS@%$RD_UTIL_LG_PROGS%g s%@INST_PROGS@%$INST_PROGS%g +s%@ENV_PATH@%$ENV_PATH%g CEOF EOF diff --git a/configure.in b/configure.in index fde93cd..039662f 100644 --- a/configure.in +++ b/configure.in @@ -14,7 +14,7 @@ PACKAGE=rancid # VERSION needs to be updated such that 'make dist' uses the correct # filename for the directory name and tarball. AC_SUBST(VERSION) -VERSION=2.0 +VERSION=2.1b AM_MAINTAINER_MODE() @@ -92,6 +92,31 @@ if test $EXPECT_PATH = no; then fi AC_SUBST(EXPECT_PATH) +# locate ping and it's syntax +AC_PATH_PROG(PING_PATH,ping,no) +if test $PING_PATH = no; then + AC_MSG_ERROR([can't locate ping.]) + exit 1 +fi +# ping seems to take one of two formats for count (N) +# BSD: ping -c N host +# SVR: ping host N +$PING_PATH -c 1 -v 127.0.0.1 > /dev/null 2>&1 +if test $? -ne 0 ; then + $PING_PATH 127.0.0.1 56 1 > /dev/null 2>&1 + if test $? -ne 0 ; then + AC_MSG_ERROR([can't figure out how to pass count == 1 to $PING_PATH.]) + exit 1 + else + LG_PING_CMD="$PING_PATH" + AC_SUBST(LG_PING_CMD) + fi +else + LG_PING_CMD="$PING_PATH -c 1" + AC_SUBST(LG_PING_CMD) +fi +rd_cv_lg_ping_cmd=$LG_PING_CMD + # RD_BIN_DATAS are bin/ .in's that need to be installed without execute # perms. RD_BIN_DATAS="" @@ -106,14 +131,46 @@ rancid rename rrancid" AC_SUBST(RD_BIN_PROGS) rd_cv_rd_bin_progs=$RD_BIN_PROGS -# RD_BIN_PROGS are util/ .in's that need to be installed with execute perms. +# RD_UTIL_PROGS are util/ .in's that need to be installed with execute perms. RD_UTIL_PROGS="rtrfilter" AC_SUBST(RD_UTIL_PROGS) rd_cv_rd_util_progs=$RD_UTIL_PROGS +# RD_UTIL_LG_PROGS are util/lg .in's that need to be installed with execute +# perms. +RD_UTIL_LG_PROGS="lg.cgi lgform.cgi" +AC_SUBST(RD_UTIL_LG_PROGS) +rd_cv_rd_util_lg_progs=$RD_UTIL_LG_PROGS + AC_SUBST(INST_PROGS) INST_PROGS=$progs +# locate tools to build $PATH for env. order is significant. want to be +# sure that we pick up the the proper diff and ucbmail in bin/env. +unset ENV_PATH +AC_PATH_PROG(DIFF,diff,no) +ENV_PATH=`dirname $ac_cv_path_DIFF` +AC_PATH_PROG(UCBMAIL,Mail,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_UCBMAIL`" +AC_PATH_PROG(CVS,cvs,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_CVS`" +AC_PATH_PROG(COMM,comm,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_COMM`" +AC_PATH_PROG(MKDIR,mkdir,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_MKDIR`" +AC_PATH_PROG(DIRNAME,dirname,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_DIRNAME`" +AC_PATH_PROG(TOUCH,touch,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_TOUCH`" +AC_PATH_PROG(SENDMAIL,sendmail,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SENDMAIL`" +AC_PATH_PROG(SORT,sort,no) +ENV_PATH="$ENV_PATH:`dirname $ac_cv_path_SORT`" +ENV_PATH="$ENV_PATH:/usr/local/bin:/usr/bin" + +ENV_PATH=`echo $ENV_PATH | $PERLV_PATH -e 'foreach $x(split(":",<>)){next unless (length($x));push(@F, $x),$seen{$x}=1 unless (defined $seen{$x});}print join(":",@F);'` +ac_cv_env_path=$ENV_PATH +AC_SUBST(ENV_PATH) AC_OUTPUT(Makefile) diff --git a/util/Makefile.in b/util/Makefile.in index bf41c54..2432c26 100644 --- a/util/Makefile.in +++ b/util/Makefile.in @@ -11,14 +11,17 @@ install: all for file in $(UTIL_PROGS) ; do \ $(INSTALL) $$file $(PREFIX)/util; \ done; \ - for file in *README* ; do \ + for file in *README*; do \ $(INSTALL_DATA) $$file $(PREFIX)/util; \ - done + done; \ + cd lg; $(MAKE) -e install clean: + cd lg; $(MAKE) -e clean; \ rm -f Makefile $(UTIL_PROGS) distclean: clean + cd lg; $(MAKE) -e distclean; \ rm -f config.log config.status distdir: @@ -27,4 +30,5 @@ distdir: done; \ for file in configure $(UTIL_PROGS:=.in) ; do \ $(INSTALL) $$file $(distdir); \ - done + done; \ + cd lg; $(MAKE) -e distdir diff --git a/util/README b/util/README index 5a4005c..cecb9df 100644 --- a/util/README +++ b/util/README @@ -2,5 +2,6 @@ rancid/util includes some utilities that either don't seem to belong in rancid/bin (ie: not part of the core pkg), contributed sources, or sources included for convenience. -README - This file. -rtrfilter - mail filter for diffs +README This file. +lg looking glass pkg +rtrfilter mail filter for diffs diff --git a/util/configure b/util/configure index 598f74f..8d59fa6 100755 --- a/util/configure +++ b/util/configure @@ -523,8 +523,6 @@ fi - - ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then @@ -544,6 +542,11 @@ ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. +subdirs="lg" + + + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -556,7 +559,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:560: checking for a BSD compatible install" >&5 +echo "configure:563: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -762,6 +765,7 @@ s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g +s%@subdirs@%$subdirs%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g @@ -880,6 +884,103 @@ chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 +if test "$no_recursion" != yes; then + + # Remove --cache-file and --srcdir arguments so they do not pile up. + ac_sub_configure_args= + ac_prev= + for ac_arg in $ac_configure_args; do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case "$ac_arg" in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; + esac + done + + for ac_config_dir in lg; do + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + if test ! -d $srcdir/$ac_config_dir; then + continue + fi + + echo configuring in $ac_config_dir + + case "$srcdir" in + .) ;; + *) + if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :; + else + { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; } + fi + ;; + esac + + ac_popdir=`pwd` + cd $ac_config_dir + + # A "../" for each directory in /$ac_config_dir. + ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` + + case "$srcdir" in + .) # No --srcdir option. We are building in place. + ac_sub_srcdir=$srcdir ;; + /*) # Absolute path. + ac_sub_srcdir=$srcdir/$ac_config_dir ;; + *) # Relative path. + ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;; + esac + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_sub_srcdir/configure; then + ac_sub_configure=$ac_sub_srcdir/configure + elif test -f $ac_sub_srcdir/configure.in; then + ac_sub_configure=$ac_configure + else + echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2 + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + + # Make the cache file name correct relative to the subdirectory. + case "$cache_file" in + /*) ac_sub_cache_file=$cache_file ;; + *) # Relative path. + ac_sub_cache_file="$ac_dots$cache_file" ;; + esac + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir" + # The eval makes quoting arguments work. + if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir + then : + else + { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; } + fi + fi + + cd $ac_popdir + done +fi + # fix permissions on scripts. for file in $RD_UTIL_PROGS; do chmod a+x $file; done diff --git a/util/configure.in b/util/configure.in index 4861771..17f7b4e 100644 --- a/util/configure.in +++ b/util/configure.in @@ -1,6 +1,8 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT() +AC_CONFIG_SUBDIRS(lg) + dnl default install location AC_PREFIX_DEFAULT(/usr/local/rancid) diff --git a/util/lg/Makefile.in b/util/lg/Makefile.in new file mode 100644 index 0000000..274fa5a --- /dev/null +++ b/util/lg/Makefile.in @@ -0,0 +1,43 @@ +PREFIX = @prefix@ + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +UTIL_LG_PROGS = @RD_UTIL_LG_PROGS@ + +DISTDIR=../$(distdir)/lg + +all: + +install: all + for file in $(UTIL_LG_PROGS) ; do \ + $(INSTALL) $$file $(PREFIX)/util/lg; \ + done; \ + if test -f $(PREFIX)/util/lg/lg.conf ; then \ + echo "WARNING: *** $(PREFIX)/util/lg/lg.conf exists: installing as lg.conf.new."; \ + echo " *** review lg.conf.new for new/deprecated switches"; \ + $(INSTALL_DATA) lg.conf $(PREFIX)/util/lg/lg.conf.new; \ + else \ + $(INSTALL_DATA) lg.conf $(PREFIX)/util/lg; \ + fi; \ + for file in *README* *.html; do \ + $(INSTALL_DATA) $$file $(PREFIX)/util/lg; \ + done + +clean: + rm -f Makefile $(UTIL_LG_PROGS) lg.conf + +distclean: clean + rm -f config.log config.status + +distdir: + test -d $(DISTDIR) \ + || mkdir $(DISTDIR) \ + || exit 1; \ + chmod 777 $(DISTDIR); \ + for file in Makefile.in configure.in *README* *.html lg.conf.in ; do \ + $(INSTALL_DATA) $$file $(DISTDIR); \ + done; \ + for file in configure $(UTIL_LG_PROGS:=.in) ; do \ + $(INSTALL) $$file $(DISTDIR); \ + done diff --git a/util/lg/README b/util/lg/README new file mode 100644 index 0000000..f574278 --- /dev/null +++ b/util/lg/README @@ -0,0 +1,64 @@ +This is a looking glass based on Ed Kern's which can be found on +http://nitrous.digex.net/. This version supports cisco and +juniper, uses rancid's [cj]login to login (so rcmd is not necessary, +it can use telnet, ssh, or rsh), and has some additional commands +implemented. There are a few cisco commands where either no juniper +exists or we have not had time to implement yet. + +packing list: +README This file. +index.html often the default document the server will load, contains + an html redirect to load lgform.cgi +lg.conf looking glass configuration file +lg.cgi work horse of the looking glass +lgform.cgi front-end form for the looking glass engine +lgnotes.html manual for the looking glass + +the looking glass requires the CGI and LockFile-Simple perl modules. +these can be retrieved from CPAN, http://www.cpan.org/. CGI's home is +ftp://ftp-genome.wi.mit.edu/pub/software/WWW/. it also requires +the POSIX module (for strftime) and Sys::Syslog, which i believe come +with perl5. + +basic installation instructions: + +The configure and make install process will make variable substitutions +and install bits in /usr/local/rancid/util/lg (or <prefix>/util/lg). + +1) make the scripts/html available to your server (httpd) by + creating a directory in your server's document root directory + (apache's httpd.conf "DocumentRoot" variable). + eg: assuming the default in freebsd's apache pkg + mkdir /usr/local/www/data/lg + + then either: + - copy the files {lgnotes.html, lg.cgi, lgform.cgi} to + /usr/local/www/data/lg + OR + - create symlinks from /usr/local/www/data/lg to each of {lgnotes.html, + lg.cgi, lgform.cgi} in /usr/local/rancid/util/lg + + note on links: if you use symlinks, you have to configure apache to + allow following symlinks. eg: + % cat /usr/local/www/data/lg/.htaccess + Options FollowSymLinks ExecCGI + +2) the LG needs to be able to find and read lg.conf. by default this + is installed as <PREFIX>/util/lg/lg.conf and the LG will look there. + however, LG_CONF environment variable can be used to move it elsewhere. + + to get LG_CONF into the enviroment, you can SetEnvIf in apache's + httpd.conf like this for example: + SetEnvIf Request_URI "\/lg/.*.cgi" LG_CONF=/usr/local/util/lg/lg.conf + +3) edit <PREFIX>/util/lg/lg.conf. + +4) set-up cron jobs to rotate the log file and clean out old cache files. + see LG_CACHE_DIR & LG_LOG in lg.conf. something like (YMMV): + + # rotate lookingglass log + #0 0 * * * cd /usr/local/www/data/lg/tmp; /usr/local/etc/savelog -m 666 -c14 lg.log + 0 0 * * * cd /usr/local/www/data/lg/tmp; /bin/mv lg.log lg.log.0 + # clean out the lookingglass cache + 0 0 * * * cd /usr/local/www/data/lg/tmp; /usr/local/bin/find . -type f -maxdepth 1 \( \! -name lg.log\* \) -mtime +1 -exec rm -f {} \; + diff --git a/util/lg/configure b/util/lg/configure new file mode 100755 index 0000000..e41f619 --- /dev/null +++ b/util/lg/configure @@ -0,0 +1,991 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_default_prefix=/usr/local/rancid + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file= + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +subdirs="lg" + + + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:563: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +RD_UTIL_LG_PROGS=$rd_cv_rd_util_lg_progs + + +PERLV_PATH=$ac_cv_path_PERLV_PATH + + +LG_PING_CMD=$rd_cv_lg_ping_cmd + + +ENV_PATH=$ac_cv_env_path + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS <<EOF +#! /bin/sh +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# This directory was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile lg.conf $RD_UTIL_LG_PROGS" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS <<EOF + +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; + s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@subdirs@%$subdirs%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@RD_UTIL_LG_PROGS@%$RD_UTIL_LG_PROGS%g +s%@PERLV_PATH@%$PERLV_PATH%g +s%@LG_PING_CMD@%$LG_PING_CMD%g +s%@ENV_PATH@%$ENV_PATH%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <<EOF + +CONFIG_FILES=\${CONFIG_FILES-"Makefile lg.conf $RD_UTIL_LG_PROGS"} +EOF +cat >> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <<EOF + +EOF +cat >> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + +if test "$no_recursion" != yes; then + + # Remove --cache-file and --srcdir arguments so they do not pile up. + ac_sub_configure_args= + ac_prev= + for ac_arg in $ac_configure_args; do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case "$ac_arg" in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; + esac + done + + for ac_config_dir in lg; do + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + if test ! -d $srcdir/$ac_config_dir; then + continue + fi + + echo configuring in $ac_config_dir + + case "$srcdir" in + .) ;; + *) + if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :; + else + { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; } + fi + ;; + esac + + ac_popdir=`pwd` + cd $ac_config_dir + + # A "../" for each directory in /$ac_config_dir. + ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` + + case "$srcdir" in + .) # No --srcdir option. We are building in place. + ac_sub_srcdir=$srcdir ;; + /*) # Absolute path. + ac_sub_srcdir=$srcdir/$ac_config_dir ;; + *) # Relative path. + ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;; + esac + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_sub_srcdir/configure; then + ac_sub_configure=$ac_sub_srcdir/configure + elif test -f $ac_sub_srcdir/configure.in; then + ac_sub_configure=$ac_configure + else + echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2 + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + + # Make the cache file name correct relative to the subdirectory. + case "$cache_file" in + /*) ac_sub_cache_file=$cache_file ;; + *) # Relative path. + ac_sub_cache_file="$ac_dots$cache_file" ;; + esac + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir" + # The eval makes quoting arguments work. + if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir + then : + else + { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; } + fi + fi + + cd $ac_popdir + done +fi + + +# fix permissions on scripts. +for file in $RD_UTIL_LG_PROGS; do chmod a+x $file; done diff --git a/util/lg/configure.in b/util/lg/configure.in new file mode 100644 index 0000000..445b74d --- /dev/null +++ b/util/lg/configure.in @@ -0,0 +1,27 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT() + +AC_CONFIG_SUBDIRS(lg) + +dnl default install location +AC_PREFIX_DEFAULT(/usr/local/rancid) + +dnl install program(s) +AC_PROG_INSTALL + +RD_UTIL_LG_PROGS=$rd_cv_rd_util_lg_progs +AC_SUBST(RD_UTIL_LG_PROGS) + +PERLV_PATH=$ac_cv_path_PERLV_PATH +AC_SUBST(PERLV_PATH) + +LG_PING_CMD=$rd_cv_lg_ping_cmd +AC_SUBST(LG_PING_CMD) + +ENV_PATH=$ac_cv_env_path +AC_SUBST(ENV_PATH) + +AC_OUTPUT(Makefile lg.conf $RD_UTIL_LG_PROGS) + +# fix permissions on scripts. +for file in $RD_UTIL_LG_PROGS; do chmod a+x $file; done diff --git a/util/lg/index.html b/util/lg/index.html new file mode 100644 index 0000000..0087a90 --- /dev/null +++ b/util/lg/index.html @@ -0,0 +1,9 @@ +<!-- + this is just a redirection page to load lg.cgi - is there a way to + make the server load a .cgi as it's default document? + this can also be done with a redirect (which is supposedly more universally + supported. something like <redirect URL=lgform.cgi>. not sure...i'm not + a web person. but this works for netscape. +--> + +<meta http-equiv=Refresh content="0; URL=lgform.cgi"> diff --git a/util/lg/lg.cgi.in b/util/lg/lg.cgi.in new file mode 100755 index 0000000..0320b7d --- /dev/null +++ b/util/lg/lg.cgi.in @@ -0,0 +1,449 @@ +#!@PERLV_PATH@ +# Looking glass +# vars: query, router, args + +BEGIN { +$me = $0; +$me =~ s/.*\/(\S+)$/$1/; +} + +use CGI qw/:standard/; +use POSIX qw(strftime); +use Sys::Syslog; +use LockFile::Simple qw(lock trylock unlock); + +my($BASEDIR) = "@prefix@"; +my($pingcmd) = "@LG_PING_CMD@"; + +my($query, $max_time_diff, $cache_dir, $cloginrc, @results); +my($type, $router_param, $remote_user, $arg, $router, $mfg); + +if (!defined($ENV{HOME})) { $ENV{HOME} = "."; } + +# read LG configuration file +sub readconf +{ + my($conffile, $cmds); + local(*CONF); + if (defined($env{LG_CONF})) { + $conffile = $env{LG_CONF}; + } else { + $conffile = "$BASEDIR/util/lg/lg.conf"; + } + + if (! -f $conffile) { + return; + } + + if (open(CONF, "< $conffile")) { + while (<CONF>) { + next if (/^\s*(#|$)/); + $cmds .= $_; + } + close(CONF); + eval $cmds; + } else { + printf(STDERR "ERROR: couldn\'t open the configuration file: $conffile: $!\n"); + exit(255); + } + + return; +} +# logging +sub dolog +{ + my($level, $msg) = @_; + + if (defined($LG_LOG) && $LG_LOG !~ /\//) { + openlog($me, "pid", $LG_LOG); + syslog($level, "%s", $msg); + closelog; + } else { + local(*LOG); + my($file); + if (defined($LG_LOG)) { + $file = $LG_LOG; + } else { + $file = "$cache_dir/lg.log"; + } + # log date, hostname, query, addr + open(LOG,">>$file") ; + printf(LOG "$msg"); + close(LOG); + } + return; +} +# run commands on the router +sub DoRsh +{ + my ($router, $mfg, $type, $arg) = @_; + my($ctime) = time(); + + my($lckobj) = LockFile::Simple->make(-delay => $lock_int, + -max => $max_lock_wait, -hold => $max_lock_hold); + + if ($pingcmd =~ /\d$/) { + `$pingcmd $router`; + } else { + `$pingcmd $router 56 1`; + } + if ($?) { + return ("$router is unreachable. Try again later.\n"); + } + if (! $lckobj->lock("$cache_dir/$router")) { + return ("$router is busy. Try again later.\n"); + } + @results = &DoCmd($router, $mfg, $type, $arg); + $lckobj->unlock("$cache_dir/$router"); + return (@results); +} +sub DoCmd +{ + my($rtr, $mfg, $type, $arg) = @_; + local(*CMD); + + if ($mfg =~ /juniper/i) { + open(CMD, "jlogin -f $cloginrc -c \'$juniperCmd{$type} $arg\' $rtr |"); + $cmd = $juniperCmd{$type}; + } else { + open(CMD, "clogin -noenable -f $cloginrc -c \'$ciscoCmd{$type} $arg\' $rtr |"); + $cmd = $ciscoCmd{$type}; + } + while (<CMD>) { + tr/\015//d; + if (/^error:/i) { + dolog(LOG_ERR, $_); + return ($_); + } +# push(@results, $_); + if (/$cmd/) { + ($prompt) = /^(\S*)[\#>]/; +# push(@results, "prompt = $prompt\n\n"); + last; + } + } + while (<CMD>) { + last if /^$prompt[\#>]/; + tr/\015//d; + push(@results, $_); + } + while (<CMD>) {} + close(CMD); + return @results; +} +# convert a ipv4 address mask to prefix length +sub mask2len { + my($mask) = shift; + my($a, $b, $c, $d) = split('\.', $mask); + my($p, $len); + + $p = ~ (($a << 24) + ($b << 16) + ($c << 8) + $d); + for ($len = 32; $p > 0; $len --) { + $p = $p >> 1; + } + + return($len); +} +# create the page and log the transaction... +sub print_results { + + my($timestr) = strftime("%a %b %e %H:%M:%S %Y %Z", gmtime); + dolog(LOG_INFO, sprintf("%s %s %s %s\n", + $ENV{REMOTE_HOST}, $ENV{REMOTE_ADDR}, $ENV{REMOTE_USER}, + "- - [$timestr] $type $router $arg")); + print $query->header; + print $query->start_html("Looking Glass Results - $router"); + + $timestr = strftime("%a %b %e %H:%M:%S %Y %Z", gmtime); + + # add the company image, LG_IMAGE + print $LG_IMAGE; + + print <<HEAD ; + </b></font> + <font size=+3><b><h1>Looking Glass Results - $router + </b></h1></font> + <hr> + + <center> + <b>Date:</b> $timestr + <p> + <b>Query:</b> $cmdDisp{$type} + <br> +HEAD + + if ($arg) { print "<b>Argument(s):</b> $arg\n"; } + print "</center>\n"; + + print <<END ; + <!--$cached--> + </center> + <p> + <pre> +END + + if ($seconds) { print "<b>From cache (number of seconds old (max $max_time_diff)):</b> $seconds\n\n" ; } + + print @results; + + print <<END ; + </pre> + <!--- end page content ---> + </body> +END + + print $query->end_html; + exit; + +} #end sub print_results + + +# read the configuration file if it exists. +readconf(); + +## The script will now cache the results as simple files in the $cache_dir, +## named after the type of query (queries must, of course, be one word no +## spaces). Modify $max_time_diff to set the lifetime for each cache. +## Currently, cache lifetime is the same for all queries. +# for most web servers, cache_dir must be writable by uid nobody +if (defined($LG_CACHE_DIR)) { + $cache_dir = $LG_CACHE_DIR; +} else { + $cache_dir = "./tmp"; +} + +# when to display cache? max time difference (in seconds) +if (defined($LG_CACHE_TIME)) { + $max_time_diff = $LG_CACHE_TIME; +} else { + $max_time_diff = "600" ; +} + +# max seconds to wait for a 'router' lock to free up +$max_lock_wait = 30; +$lock_int = 5; +$max_lock_hold = 300; + +# clogin setup +if (defined($LG_CLOGINRC)) { + $cloginrc = $LG_CLOGINRC; +} else { + $cloginrc = "$BASEDIR/.cloginrc"; +} + +$query = new CGI; + +# get form data and validate +$type = ($query->param('query'))[0]; +$router_param = ($query->param('router'))[0]; +$remote_user = $ENV{REMOTE_USER}; +$arg = ($query->param('args'))[0]; +# handle multiple args +@arg = split(' ', $arg); + +# verify commands, arguments, etc. +($router, $mfg) = split(':', $router_param); +if (!defined($type) || !defined($router)) { + $results[0] = "You must at least choose a Query and a router. Try buying a clue.\n"; + &print_results; +} + +# conversion of command "type" passed from lgform.cgi to the vendor's syntax. +%ciscoCmd = ( + #acl => "sh access-list", + #aspath => "sh ip as-path-access-list", + #communitylist => "sh ip community-list", + damp => "sh ip bgp dampened-paths", + framerelay => "sh frame-relay pvc", + interface => "sh interface", + intbrief => "sh ip interface", + log => "sh logging", + mbgp => "sh ip mbgp", + mbgpsum => "sh ip mbgp summary", + regex => "sh ip bgp regex", + route => "sh ip route", + #routemap => "sh route-map", + ping => "ping", + prefix => "sh ip bgp", + prefixlist => "sh ip prefix-list", + summary => "sh ip bgp summary", + trace => "traceroute" + ); +%juniperCmd = ( + #acl => "sh access-list", + #aspath => "sh ip as-path-access-list", + #communitylist => "sh ip community-list", + damp => "show route damping suppressed terse table inet.0", + interface => "sh interface", + log => "show log messages", + mbgp => "sh route table inet.2 terse", + mbgpsum => "sh bgp summary", + #regex => "sh route table inet.0 aspath-regex", + route => "sh route table inet.0", + #routemap => "sh route-map", + ping => "ping rapid count 5", + prefix => "sh route table inet.0", + #prefixlist => "sh ip prefix-list", + summary => "sh bgp summary", + trace => "traceroute" + ); +%cmdDisp = ( + #acl => "show access-list", + #aspath => "show ip as-path-access-list", + #communitylist => "show ip community-list", + damp => "show ip bgp dampened-paths", + log => "show logging", + mbgp => "show ip mbgp", + mbgpsum => "show ip mbgp summary", + regex => "show ip bgp regex", + route => "show ip route", + #routemap => "show route-map", + ping => "ping", + prefix => "show ip bgp", + prefixlist => "show ip prefix-list", + summary => "show ip bgp summary", + trace => "traceroute" + ); + +# not all cmds/queries are implemented for junipers +if ($mfg =~ /juniper/ && ! defined($juniperCmd{$type})) { + $results[0] = "$cmdDisp{$type} not implemented for junipers. sorry.\n"; + &print_results; +} + + +if ($type eq "prefix" || $type eq "mbgp" || $type eq "route" ) { + if ($arg[0] !~ /^\d+\.\d+\.\d+\.\d+$/) { + $results[0] = "The IP address \"$arg[0]\" is not valid and lacking an address would over-burden our router.\n"; + &print_results; + } elsif (defined($arg[1]) && $arg[1] !~ /^\d+\.\d+\.\d+\.\d+$/) { + $results[0] = "The IP netmask \"$arg[1]\" is not valid.\n"; + &print_results; + } + if ($mfg =~ /juniper/i && defined($arg[1])) { + $arg = $arg[0] . "/" . mask2len($arg[1]); + } +} elsif ($type eq "framerelay") { + if ($arg[0] > 15 && $arg[0] < 1024) { + $arg = $arg[0]; + } else { + undef($arg); + } +} elsif ($type eq "interface") { + if ($arg[1] =~ /[-\/0-9:.]+/) { + $arg = $arg[0] . " " . $arg[1]; + } else { + if ($arg[0] =~ /^b/i && $mfg =~ /cisco/i) { + $type = "intbrief"; + $arg = "brief"; + } else { + $arg = $arg[0]; + } + } +} elsif ($type eq "log") { + $arg[0] =~ s/^\s*|//; + if ($arg[0] =~ /^\s*$/) { + shift(@arg); + } + if ($arg[0] !~ /^\s*$/) { + if ($mfg =~ /cisco/i) { + $arg = " | include " . join(' ', @arg); + } elsif ($mfg =~ /juniper/i) { + $arg = " | match \"" . join(' ', @arg) . "\""; + } + } else { + undef($arg); + } +} elsif ($type eq "ping" || $type eq "trace") { + if ($arg[0] !~ /^\d+\.\d+\.\d+\.\d+$/) { + if ($arg[0] !~ /([A-Za-z0-9-]*.)*[A-Za-z0-9-]*.(com|edu|net|org)/) { + $results[0] = "That argument ($arg[0]) is not valid.\n"; + &print_results; + } + } + $arg = $arg[0]; +} elsif ($type eq "aspath" || $type eq "communitylist") { + if ($arg[0] !~ /^\d+$/ || ($arg[0] < 1 && $arg[0] > 199)) { + $results[0] = "That argument ($arg[0]) is not valid.\n"; + &print_results; + } + $arg = $arg[0]; +} elsif ($type eq "acl") { + if ($arg[0] !~ /^\d+$/ || ($arg[0] < 100 && $arg[0] > 199) || + ($arg[0] < 1300 && $arg[0] > 2699)) { + $results[0] = "That argument ($arg[0]) is not valid.\n"; + &print_results; + } + $arg = $arg[0]; + # don't show the jewels + &print_results if ($arg == 98 || $arg == 99); +} elsif ($type eq "prefixlist" || $type eq "routemap") { + if ($arg[0] !~ /^[A-Za-z][^\s\"]*$/) { + $results[0] = "That argument ($arg[0]) is not valid.\n"; + &print_results; + } + $arg = $arg[0]; +} elsif ($type eq "regex") { + $arg = $arg[0]; + if ($#arg > 1) { + for ($n = 1; $n <= $#arg - 1; $n++) { $arg .= " " . $arg[$n]; } + } + if ($arg !~ /^[0-9_ ^.*+?[\])\(-]*\$?$/ || $arg =~ /^\s*$/) { + $results[0] = "That argument ($arg[0]) is not valid.\n"; + &print_results; + } + # pathetic excuses for lookups + if ($arg =~ /^[_.* ^]*(\*|1|701|1239|1280|1740|3561|5462|10303)+[_\$]*$/ || + $arg =~ /^[_.* ^]*(1|701|1239|1280|1740|3561|5462|10303)+[_ .]*[\[*.]/) { + $results[0] = "Get real. Such a query has potential to over-burden our router.\nLook that up on your own router.\n"; + &print_results; + } + # escape any () + $arg =~ s/([\(\)])/\\$1/g; +} elsif ($type eq "damp" || $type eq "summary" || $type eq "mbgpsum") { + undef($arg); +} + +# cache the following +if ($type eq "summary" || $type eq "mbgpsu" || $type eq "damp" || $type eq "log") { + if (!$arg) { + # cache requests with no addr/argument + local(*CACHE); + + my($file) = "$cache_dir/$type" ; + $file =~ s/\s+/_/g; + $file .= "_$router"; + + if (-e $file) { + # see if cache exists + @stat = stat($file); + $ftime = $stat[9] ; + $dtime = time - $stat[9] ; + + # see if we are within cache time + if ($dtime <= $max_time_diff) { + open(CACHE,"$file") ; + while (<CACHE>) { push(@results, $_); } + close CACHE ; + $seconds = $dtime; + &print_results ; + } + } + + # else, execute command and save to a new cache file + open(CACHE,">$file") || die "couldnt create cache file $file" ; + + @results = &DoRsh($router, $mfg, $type, $arg); + + print CACHE "@results"; + close CACHE ; + } else { + @results = &DoRsh($router, $mfg, $type, $arg); + } + &print_results ; +} # end dampened-paths/flap-statistics + +@results = &DoRsh($router, $mfg, $type, $arg); +&print_results ; + +exit ; diff --git a/util/lg/lg.conf.in b/util/lg/lg.conf.in new file mode 100644 index 0000000..7e8a96f --- /dev/null +++ b/util/lg/lg.conf.in @@ -0,0 +1,79 @@ +# configuration file for the looking glass +# +# note: these are perl statements! mind the syntax +# +# adjust the path to find [cj]login, telnet, ssh, rsh, etc. +# +$ENV{PATH}="@prefix@/bin:@ENV_PATH@"; +# +# +# LG_IMAGE is the filename of an image you wish to appear at the top +# of the LG pages. it can also be other html goo, like +# the first example. this is just handed to print, so \n and +# the like will work. +# +#$LG_IMAGE="<img src=/icons/rancid.gif hspace=0>\n <font size=+2>FOO</font>"; +#$LG_IMAGE="<img src=rancid.gif hspace=0>\n"; +# +# +# LG_ROUTERDB is the router.db in rancid's router.db format, listing +# the routers and their platform that should be available to +# the looking glass. if defined, the LG will use this variable +# to find the router.db. if not defined, it will look for it +# at <prefix>/util/lg/router.db. if it does not exist, it will +# build the list from <prefix>/*/router.db (ie: the router.db's +# from all your groups). note that if you choose this last +# option; the group directories and router.db files' modes may +# have to be changed, depending upon the UID/GID of the user +# your server (httpd) runs under, since rancid's default mask +# is 007 (see bin/env). routers marked 'down' are skipped. +# +#$LG_ROUTERDB="@prefix@/util/lg/router.db"; +# +# +# LG_CLOGINRC is the .cloginrc that the LG should use. it defaults to +# <prefix>/.cloginrc. note that the .cloginrc must readable +# by the user or group (UID / GID) that will be running the CGI +# and the clogin (and friends) will not allow a world readable +# .cloginrc. this is normally the user the server (httpd) runs +# under. +# +#$LG_CLOGINRC="@prefix@/.cloginrc"; +# +# +# LG_SINGLE *** not implemented. +#$LG_SINGLE=0; +# +# +# LG_CACHE_DIR is the location of the cache directory. the LG uses this +# to hold lock files, lg.log log file, and o/p from commands +# that can be very verbose. it defaults to "tmp", ie: relative +# to the directory where lg.cgi runs in your server's (httpd's) +# DocumentRoot (eg: /usr/local/www/data/lg/tmp). +# +#$LG_CACHE_DIR="./tmp"; +# +# +# LG_CACHE_TIME is the number of seconds the LG should cache o/p from certain +# commands; those that tend to produce a lot of o/p, such as +# 'show ip bgp dampened-paths'. it defaults to 600 seconds +# (10 minutes). +# +#$LG_CACHE_TIME=600; +# +# +# LG_LOG is either a FQPN (fully qualified path name) the syslog +# facility to use for logging. if not defined, the LG +# will log to LG_CACHE_DIR/lg.log. possible syslog facility +# values are from the facility codes in /usr/include/syslog.h +# minus the 'LOG_' and lower case. +# +#$LG_LOG="$LG_CACHE_DIR/lg.log"; +#$LG_LOG="/tmp/lg.log"; +#$LG_LOG="local0"; +# +# +# LG_AS_REG *** not implemented. +# +#@LG_AS_REG=(); +# diff --git a/util/lg/lgform.cgi.in b/util/lg/lgform.cgi.in new file mode 100755 index 0000000..762c9d8 --- /dev/null +++ b/util/lg/lgform.cgi.in @@ -0,0 +1,200 @@ +#!@PERLV_PATH@ +# lgform.cgi - Looking glass front-end +# produces html form for calling lg.cgi + +use CGI qw/:standard/; + +my(@rtrlist, %rtrlabels); +my($BASEDIR) = "@prefix@"; + + +# read LG configuration file +sub readconf +{ + my($conffile, $cmds); + local(*CONF); + if (defined($env{LG_CONF})) { + $conffile = $env{LG_CONF}; + } else { + $conffile = "$BASEDIR/util/lg/lg.conf"; + } + + if (! -f $conffile) { + return; + } + + if (open(CONF, "< $conffile")) { + while (<CONF>) { + next if (/^\s*(#|$)/); + $cmds .= $_; + } + close(CONF); + eval $cmds; + } else { + printf(STDERR "ERROR: couldn\'t open the configuration file: $conffile: $!\n"); + exit(255); + } + + return; +} +# read router.db file +sub readrouters +{ + my($rtrdb); + local(*RTR); + + if (defined($LG_ROUTERDB)) { + $rtrdb = $LG_ROUTERDB; + } else { + $rtrdb = "$BASEDIR/util/lg/router.db"; + } + + if (! -f $rtrdb) { + my(@dirs, $dir); + # if the router.db file does not exist, try to compile from + # the rancid group's router.db files. + local(*DIR); + if (! opendir(DIR, $BASEDIR)) { + printf(STDERR "ERROR: couldn\'t read $BASEDIR: $!\n"); + } else { + while ($dir = readdir(DIR)) { + next if ($dir =~ /^(\.|\.\.|CVS|bin|logs|util)$/); + push(@dirs, $dir) if (-d "$BASEDIR/$dir"); + } + closedir(DIR); + + foreach $dir (@dirs) { + if (! opendir(DIR, "$BASEDIR/$dir")) { + printf(STDERR "ERROR: couldn\'t read $BASEDIR/$dir: $!\n"); + next; + } + closedir(DIR); + next if (! -f "$BASEDIR/$dir/router.db"); + if (open(RTR, "< $BASEDIR/$dir/router.db")) { + while (<RTR>) { + next if (/^\s*(#|$)/); + # fqdn:mfg:state + @record = split('\:', $_); + next if ($record[2] !~ /up/i || $record[1] !~ /(cisco|juniper)/); + push(@rtrlist, join(':', ($record[0], $record[1]))); + $rtrlabels{join(':', ($record[0], $record[1]))} = $record[0]; + } + close(RTR); + } else { + printf(STDERR "ERROR: couldn\'t open the router.db file: $BASEDIR/$dir/router.db: $!\n"); + } + } + } + } else { + if (open(RTR, "< $rtrdb")) { + while (<RTR>) { + next if (/^\s*(#|$)/); + # fqdn:mfg:state + @record = split('\:', $_); + next if ($record[2] !~ /up/i || $record[1] !~ /(cisco|juniper)/); + push(@rtrlist, join(':', ($record[0], $record[1]))); + $rtrlabels{join(':', ($record[0], $record[1]))} = $record[0]; + } + close(RTR); + } else { + printf(STDERR "ERROR: couldn\'t open the router.db file: $rtrdb: $!\n"); + exit(255); + } + } + + return; +} + +# read the configuration file if it exists. +readconf(); + +$query = new CGI; + +print $query->header; +print $query->start_html("LookingGlass form"); + +print "<BODY>"; + +# add the company image, LG_IMAGE +print $LG_IMAGE; + +print <<HEAD ; +<br> +<B><FONT SIZE=+2>Looking Glass</FONT></B> +<br> +<hr> +HEAD + +# start table, etc here +print <<DOTABLE ; +<form action=lg.cgi method=GET> +<center> +<table border cellspacing=0 width=575 align=center> + +DOTABLE + +# available query types here +print <<QTYPES ; +<tr valign=top> + <TD><B>Query:</B> +<dd><input type=radio name="query" value="framerelay">show frame-relay pvc [DLCI]</DD> +<dd><input type=radio name="query" value="interface">show interface <interface></DD> +<dd><input type=radio name="query" value="prefix">show ip bgp <prefix> [netmask]</DD> +<dd><input type=radio name="query" value="regex">show ip bgp regex <reg_exp></DD> +<dd><input type=radio name="query" value="summary">show ip bgp summary</DD> +<dd><input type=radio name="query" value="damp">show ip bgp dampened-paths</DD> +<dd><input type=radio name="query" value="prefixlist">show ip prefix-list <list_name></DD> +<dd><input type=radio name="query" value="route">show ip route <prefix> [netmask]</DD> +<dd><input type=radio name="query" value="mbgp">show ip mbgp <prefix> [netmask]</dd> +<dd><input type=radio name="query" value="mbgpsum">show ip mbgp summary</dd> +<dd><input type=radio name="query" value="log">show logging [| <match_string>]</DD> +<dd><input type=radio name="query" value="ping">ping <IP_addr | FQDN></dd> +<dd><input type=radio name="query" value="trace">traceroute <IP_addr | FQDN></DD> + +<P><B>Argument(s):</B> <INPUT name="args" size=30></P> + </TD> + <td ALIGH=left VALIGN=top> + <b>Router:</B> + +<dd> +QTYPES + +# unimplemented/disabled/removed query types. +# +# <dd>show ip bgp neighbor <IP_addr></dd> +# <dd>show ip bgp neighbor <IP_addr> advertised routes</dd> +# <dd>show ip bgp neighbor <IP_addr> flap statistics</dd> +# <dd>show ip bgp neighbor <IP_addr> received</dd> +# <dd>show ip bgp neighbor <IP_addr> routes</dd> +# +# <dd><input type=radio name="query" value="aspath">sh ip as-path-access-list <list_number></DD> +# <dd><input type="radio" name="query" value="acl">sh access-list <list_number></dd> +# <dd><input type=radio name="query" value="communitylist">sh ip community-list <list_number><DD> +# <dd><input type=radio name="query" value="routemap">sh ip route-map <map_name></DD> + +# read routers table and create the scrolling list +readrouters(); +print $query->scrolling_list(-name => 'router', + -values => \@rtrlist, + -size => 20, + -labels => \%rtrlabels); + +# end +print <<TAIL ; +</dd> +</td> +</TABLE> +<p><input type=submit value=Submit> <INPUT type=reset value=Reset></FORM> +</center> +<br> +<a href=lgnotes.html>Looking Glass notes</a> +TAIL + +print <<TAIL ; +<p> +</body> +TAIL + +print $query->end_html; + +exit 0; diff --git a/util/lg/lgnotes.html b/util/lg/lgnotes.html new file mode 100644 index 0000000..5fa2336 --- /dev/null +++ b/util/lg/lgnotes.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<title>Looking Glass Notes</title> +</head> + +</strong></font><font face="Arial"> </font><font +size=+3><strong> Looking Glass Notes +</strong></font></p> +<br> +<p> +<ul> +Just a few straight forward notes on our implementation of +Ed Kern's looking glass. See the "real thing" at +<a href=http://nitrous.digex.net>http://nitrous.digex.net</a>. +</ul> +</p> +<p> +<UL> +<li>Items in the queries column which do not have radio buttons + are not yet implemented but are on the list of things to do.</li> +<li>Some items are not implemented for the junipers yet (so, as i get + to it) or no equivalent exists. +<li>If there is something which you feel is missing, feel free to ask + and/or send comments to the <a href=mailto:rancid@shrubbery.net>maintainer + </a> to implement it. No guarantees.</li> +<li>Only one query per router allowed at any given time. This is to avoid + resource deprivation. The looking glass will attempt to serialize + queries.</li> +<li>The looking glass will ping a router prior to querying it to avoid + trying to query routers which are down or otherwise inaccessible.</li> +<li>Login failures can be intermittent or permanent, either due to the + router being inaccessible from the looking glass machine, + or authorization failure(s). Contact your local network engineering + folks to resolve login failures.</li> +<li>Queries followed by <something> require an argument(s) in the text + window below the query list. Some queries take optional arguments + denoted by [something]. Multiple arguments should be separated by a + space.</li> +<li>Note that output from certain queries is cached by the server and may + be slightly out of date. These queries will be noted as such in the + output. This is limited to queries which could produce lots of output, + such as 'sh ip bgp dampened-paths'.</li> +<li>Note that some queries have potential to produce great load on the router + and produce lots of output, such as 'sh ip bgp' or 'sh ip bgp reg '^3561'. + The looking glass attempts to deny such commands.</li> +</ul> +</body> +</html> |