[rancid] clogin commenting script commands following multiple blanks lines

Heasley heas at shrubbery.net
Thu Oct 25 20:02:58 UTC 2018



> Am 25.10.2018 um 12:53 schrieb Erik Muller <erikm at buh.org>:
> 
>> 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 at 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]
> 



More information about the Rancid-discuss mailing list