From 6fed9dd0dd62718f78eca11e30a71c2712636fbd Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 16 Dec 2020 15:27:48 +0300 Subject: hook and socket args check fix, tests --- cmd/tunneld/main.go | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'cmd/tunneld') diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 8f9606a..71af6d4 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -128,14 +128,41 @@ func (p *parser) parse(file string, skip bool) error { func (p *parser) read(fp *os.File) error { scanner := bufio.NewScanner(fp) - for nline := 1; scanner.Scan(); nline++ { - s := strings.SplitN(scanner.Text(), "#", 2) - t := strings.TrimSpace(s[0]) - args := strings.Fields(s[0]) + var args []string + var line int + for n := 1; scanner.Scan(); n++ { + if line == 0 { + line = n + } + + parts := strings.SplitN(scanner.Text(), "#", 2) + s := parts[0] + + readahead := false + + if len(parts) == 1 && strings.HasSuffix(s, "\\") { + s = s[:len(s)-1] + readahead = true + } + + args = append(args, strings.Fields(s)...) + + if readahead { + continue + } + + t := strings.Join(args, " ") if err := p.apply(args); err != nil { - return fmt.Errorf("%s:%d: %s: %w", fp.Name(), nline, t, err) + return fmt.Errorf("%s:%d: %s: %w", fp.Name(), line, t, err) } + + args = []string{} + line = 0 + } + + if len(args) > 0 { + fmt.Errorf("%s:%d: uncomplete command", fp.Name(), line) } return nil -- cgit v1.2.3-70-g09d2