Discussion:
[rancid] clogin can't login to more then one router.
Per-Olof Olsson
2014-05-05 05:40:06 UTC
Permalink
clogin only work if one router is listed at command line.
(rancid 2.3.8 and 3.0 tested)

clogin -c "show term" router1 router2

output for second router:
--------------------------
can't read "autoenable": no such variable
while executing
"if { $enable && $do_enapasswd && $autoenable == 0 && [llength $pswd] < 2 } {
send_user -- "\nError: no enable password for $router in $password_file...."
("foreach" body line 28)
invoked from within
"foreach router [lrange $argv $i end] {
set router [string tolower $router]
# attempt at platform switching.
set platform ""
send_user ..."
(file "/usr/local/rancid/bin/clogin" line 759)
----------------------------

Possible more settings need to be reset before login to each router.
Got it to work for my settings, by moving "set enable 0" inside foreach loop.

3.0 clogin diff.
*** 752,757 ****
--- 752,758 ----
set prompt_match ""
set enable 0
foreach router [lrange $argv $i end] {
+ set enable 0
set router [string tolower $router]
# attempt at platform switching.
set platform ""




/Peo
----------------------------------------------------------
Per-Olof Olsson Email: ***@chalmers.se
Chalmers tekniska högskola IT-service
Arvid Hedvalls backe 6 412 96 Göteborg
Tel: 031/772 6738 Fax: 031/772 8660
Mob: 0707 88 3708
----------------------------------------------------------
heasley
2014-05-05 23:06:13 UTC
Permalink
Post by Per-Olof Olsson
clogin only work if one router is listed at command line.
(rancid 2.3.8 and 3.0 tested)
clogin -c "show term" router1 router2
--------------------------
can't read "autoenable": no such variable
while executing
"if { $enable && $do_enapasswd && $autoenable == 0 && [llength $pswd] < 2 } {
send_user -- "\nError: no enable password for $router in $password_file...."
("foreach" body line 28)
invoked from within
"foreach router [lrange $argv $i end] {
set router [string tolower $router]
# attempt at platform switching.
set platform ""
send_user ..."
(file "/usr/local/rancid/bin/clogin" line 759)
----------------------------
Possible more settings need to be reset before login to each router.
Got it to work for my settings, by moving "set enable 0" inside foreach loop.
I think you misread the error msg. this seems like a better fix, and yet
still somewhat lacking, in the sense that autoenable should just go away,
eventually. look good?

Index: bin/clogin.in
===================================================================
--- bin/clogin.in (revision 2838)
+++ bin/clogin.in (working copy)
@@ -750,7 +750,6 @@
set in_proc 0
set exitval 0
set prompt_match ""
-set enable 0
foreach router [lrange $argv $i end] {
set router [string tolower $router]
# attempt at platform switching.
@@ -769,9 +768,23 @@
set prompt "(>|#| \\(enable\\))"
}

- # look for noenable option in .cloginrc
- if { [find noenable $router] == "1" } {
+ # look for autoenable option in .cloginrc & cmd-line
+ set ae [find autoenable $router]
+ if { "$ae" == "1" || $avautoenable } {
+ set autoenable 1
+ } else {
+ set autoenable 0
+ }
+ # look for enable options in .cloginrc & cmd-line
+ if { $avenable == 0 } {
set enable 0
+ } else {
+ set ne [find noenable $router]
+ if { "$ne" == "1" || "$autoenable" == "1" } {
+ set enable 0
+ } else {
+ set enable 1
+ }
}

# Figure out passwords
@@ -882,18 +895,6 @@
# Figure out the prompt.
if { [regexp -- "(#| \\(enable\\))" $prompt_match junk] == 1 } {
set enable 0
- } else {
- if { $avenable == 0 } {
- set enable 0
- } else {
- set ne [find noenable $router]
- set ae [find autoenable $router]
- if { "$ne" == "1" || "$ae" == "1" || $avautoenable } {
- set enable 0
- } else {
- set enable 1
- }
- }
}
if { $enable } {
if {[do_enable $enauser $enapasswd]} {
Per-Olof Olsson
2014-05-08 05:35:47 UTC
Permalink
Thanks.

Now added your patch and it works nice.
Better to rewrite, then just add one more fast fix.

/Peo
Post by heasley
Post by Per-Olof Olsson
clogin only work if one router is listed at command line.
(rancid 2.3.8 and 3.0 tested)
clogin -c "show term" router1 router2
--------------------------
can't read "autoenable": no such variable
while executing
"if { $enable && $do_enapasswd && $autoenable == 0 && [llength $pswd] < 2 } {
send_user -- "\nError: no enable password for $router in $password_file...."
("foreach" body line 28)
invoked from within
"foreach router [lrange $argv $i end] {
set router [string tolower $router]
# attempt at platform switching.
set platform ""
send_user ..."
(file "/usr/local/rancid/bin/clogin" line 759)
----------------------------
Possible more settings need to be reset before login to each router.
Got it to work for my settings, by moving "set enable 0" inside foreach loop.
I think you misread the error msg. this seems like a better fix, and yet
still somewhat lacking, in the sense that autoenable should just go away,
eventually. look good?
Index: bin/clogin.in
===================================================================
--- bin/clogin.in (revision 2838)
+++ bin/clogin.in (working copy)
@@ -750,7 +750,6 @@
set in_proc 0
set exitval 0
set prompt_match ""
-set enable 0
foreach router [lrange $argv $i end] {
set router [string tolower $router]
# attempt at platform switching.
@@ -769,9 +768,23 @@
set prompt "(>|#| \\(enable\\))"
}
- # look for noenable option in .cloginrc
- if { [find noenable $router] == "1" } {
+ # look for autoenable option in .cloginrc & cmd-line
+ set ae [find autoenable $router]
+ if { "$ae" == "1" || $avautoenable } {
+ set autoenable 1
+ } else {
+ set autoenable 0
+ }
+ # look for enable options in .cloginrc & cmd-line
+ if { $avenable == 0 } {
set enable 0
+ } else {
+ set ne [find noenable $router]
+ if { "$ne" == "1" || "$autoenable" == "1" } {
+ set enable 0
+ } else {
+ set enable 1
+ }
}
# Figure out passwords
@@ -882,18 +895,6 @@
# Figure out the prompt.
if { [regexp -- "(#| \\(enable\\))" $prompt_match junk] == 1 } {
set enable 0
- } else {
- if { $avenable == 0 } {
- set enable 0
- } else {
- set ne [find noenable $router]
- set ae [find autoenable $router]
- if { "$ne" == "1" || "$ae" == "1" || $avautoenable } {
- set enable 0
- } else {
- set enable 1
- }
- }
}
if { $enable } {
if {[do_enable $enauser $enapasswd]} {
Loading...