Re: [rancid] clogin commenting script commands following multiple blanks lines

Heasley <[email protected]>
Newsgroups gmane.network.rancid
Message-ID <[email protected]>

> Am 25.10.2018 um 12:53 schrieb Erik Muller <[email protected]>:
> 
>> On 10/24/18 18:32 , heasley wrote:
>> Wed, Oct 24, 2018 at 09:19:31PM +0000, heasley:
>>> 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.
>> 
>> ok; committed.  Either the alpha tarball or the svn repo.  Welcome testers,
>> esp for palo alto, of which I have none.
> 
> That one was really close, but still didn't pass through ^; from command files properly.
> After a bit more tweaking, the following change seems to get it to handle all my test cases correctly.
> 

You have to escape the ; in the file (\;). The An argument could be made either way, i leN toward not altering the behavior of -x. 

> erikm@vpn41:~/ports-dev [15:21 - 1497]$ diff -Naur /opt/local/libexec/rancid/clogin-3.99.99.bak /opt/local/libexec/rancid/clogin-3.99.99
> --- /opt/local/libexec/rancid/clogin-3.99.99.bak    2018-10-24 19:46:30.000000000 -0400
> +++ /opt/local/libexec/rancid/clogin-3.99.99    2018-10-25 15:21:18.000000000 -0400
> @@ -253,7 +253,8 @@
>        }
>        set cmd_text [read $cmd_fd]
>        close $cmd_fd
> -        set command [join [split $cmd_text \n] \;]
> +        regsub -all {;} $cmd_text "\\;" cmd_text
> +        set command [join [split $cmd_text \n] \u002;]
>        set do_command 1
>    # 'ssh -c' cypher type
>    } -y* {
> @@ -444,13 +445,8 @@
>        continue;
>        }
> 
> -        # handle escaped ;s in commands, and ;; and ^;
> -        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 esccommand [escapecommandlist $command]
> +        set sep "\u002"
>        set commands [split $esccommand $sep]
>        set num_commands [llength $commands]
>        set rshfail 0
> @@ -724,6 +720,21 @@
>     return 0
> }
> 
> +# handle escaped ;s in commands, and ;; and ^;
> +proc escapecommandlist {command} {
> +    # \; should be passed through as a ;
> +    # ^; should be treated as a comment (when coming from a command file)
> +    # ;; represents a literal ; before a subsequent command (?)
> +    # other ;s are separators between items in a sequence of commands
> +    # note this is processed as one big multiline text blob, so ^ anchors may
> +    # not work as expected
> +    regsub -all {([^\\\u002]);} $command "\\1\u002;" esccommand
> +    regsub -all {([^\\\u00a\u00d\u002]);;} $esccommand "\\1;\u002;" command
> +    regsub -all {\u002;} $command "\u002" esccommand
> +    regsub -all {[\\];} $esccommand ";" command
> +    return $command
> +}
> +
> # Run commands given on the command line.
> proc run_commands { prompt command } {
>     global do_interact do_saveconfig in_proc platform
> @@ -742,12 +753,7 @@
>     # this is the only way i see to get rid of more prompts in o/p..grrrrr
>     log_user 0
> 
> -    # handle escaped ;s in commands, and ;; and ^;
> -    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 esccommand [escapecommandlist $command]
>     set sep "\u002"
>     set commands [split $esccommand $sep]
>     set num_commands [llength $commands]
> 

_______________________________________________
Rancid-discuss mailing list
[email protected]
http://www.shrubbery.net/mailman/listinfo/rancid-discuss
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.