Wed, Oct 24, 2018 at 04:43:41PM -0400, Erik Muller:
> On 10/24/18 13:28 , heasley wrote:
> > Sat, Sep 29, 2018 at 03:19:00PM -0700, Erik Muller:
> >> So here's an odd thing I just ran across. Running clogin with a script
> >> with multiple blank lines has some very unexpected behaviour. It looks
> >> like it's turning \n\n into \n;, with the net effect of commenting out any
> >> command that follows two blank lines. Reproducible on ubuntu 12.04 and
> >> OSX 10.13 with stock 3.8 source. Works as expected in 2.3.8 ubuntu
> >> packages.
> >>
> >> The culprit is definitely in the "# handle escaped ;s in commands, and ;;
> >> and ^;" section of clogin (rolling that block back to what was in 2.3.8
> >> fixes it), but trying to grok that in expect language to provide a real
> >> fix makes my head hurt, so I'll leave this as a bug report. Examples
> >> below.
> >>
> >> thanks,
> >> -e
> >
> > I believe that patch addresses this bug.
>
>
> That definitely fixes the blanks-may-comment-the-next-line issue, though it
> looks like it also breaks handling of escaped ;s as well.
>
> before:
> $ clogin-3.8 -c 'sh ip bgp nei | inc 1\; ; show ver | inc ^Model Num' fl1-as01
> ...
> fl1-as01#sh ip bgp nei | inc 1;
> Route to peer address reachability Up: 1; Down: 0
> Connections established 1; dropped 0
>
>
> with patch:
> $ clogin -c 'sh ip bgp nei | inc 1\; ; show ver | inc ^Model Num' fl1-as01
> ...
> fl1-as01#sh ip bgp nei | inc 1
> BGP neighbor is x.x.x.x, remote AS 4200000000, external link
>
>
>
> And it seems to eat leading semicolon comments as well:
>
> $ cat ~/clogin-blanks-test2
> show bridge
> ; just a comment
> $ clogin -x ~/clogin-blanks-test2 fl1-as01.polaris.corp
> ...
> fl1-as01#show bridge
> fl1-as01#
> fl1-as01#
> fl1-as01#
> fl1-as01# just a comment
> ^
> % Invalid input detected at '^' marker.
>
I missed that in your example, but noticed it in testing...after I sent that
patch. This is my final patch, i think. I havent committed it yet, as I
want to review it once more.
Index: bin/clogin.in
===================================================================
--- bin/clogin.in (revision 3909)
+++ bin/clogin.in (working copy)
@@ -76,11 +76,12 @@
}
# handle escaped ;s in commands, and ;; and ^;
- regsub -all {([^\\]);;} $command "\\1;\u002;" esccommand
- regsub {^;} $esccommand "\u002;" command
- set sep "\\1\u001"
- regsub -all {([^\\])\;} $command "$sep" esccommand
- set sep "\u001"
+ regsub -all {([^\\]);} $command "\\1\u002;" esccommand
+ regsub -all {([^\\]);;} $esccommand "\\1;\u002;" command
+ regsub {^;} $command "\u002;" esccommand
+ regsub -all {[\\];} $esccommand ";" command
+ regsub -all {\u002;} $command "\u002" esccommand
+ set sep "\u002;"
set commands [split $esccommand $sep]
set num_commands [llength $commands]
set rshfail 0
@@ -373,11 +374,12 @@
log_user 0
# handle escaped ;s in commands, and ;; and ^;
- regsub -all {([^\\]);;} $command "\\1;\u002;" esccommand
- regsub {^;} $esccommand "\u002;" command
- set sep "\\1\u001"
- regsub -all {([^\\])\;} $command "$sep" esccommand
- set sep "\u001"
+ regsub -all {([^\\]);} $command "\\1\u002;" esccommand
+ regsub -all {([^\\]);;} $esccommand "\\1;\u002;" command
+ regsub {^;} $command "\u002;" esccommand
+ regsub -all {[\\];} $esccommand ";" command
+ regsub -all {\u002;} $command "\u002" esccommand
+ set sep "\u002"
set commands [split $esccommand $sep]
set num_commands [llength $commands]
# the pager can not be turned off on the PIX, so we have to look
@@ -384,11 +386,7 @@
# for the "More" prompt. the extreme is equally obnoxious in pre-12.3 XOS,
# with a global switch in the config.
for {set i 0} {$i < $num_commands} { incr i} {
- if { [lindex $commands $i] == "\u002" } {
- send -- "\r"
- } else {
- send -- "[subst -nocommands [lindex $commands $i]]\r"
- }
+ send -h -- "[subst -nocommands [lindex $commands $i]]\r"
expect {
-re "^\b+" { exp_continue }
-re "^\[^\n\r *]*$reprompt" { send_user --
"$expect_out(buffer)"
_______________________________________________
Rancid-discuss mailing list
[email protected]
http://www.shrubbery.net/mailman/listinfo/rancid-discuss