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

Reply via email to