From da5cbea7b1c5a66c48d67967f53af4ae594097de Mon Sep 17 00:00:00 2001 From: evilsocket Date: Tue, 21 Aug 2018 13:45:46 +0200 Subject: [PATCH] fix: correct lookup of caplet files from multiple default paths --- session/session.go | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/session/session.go b/session/session.go index a53babe6..f9b0fa10 100644 --- a/session/session.go +++ b/session/session.go @@ -504,10 +504,33 @@ func (s *Session) ReadLine() (string, error) { return s.Input.Readline() } -func (s *Session) RunCaplet(filename string) error { - s.Events.Log(core.INFO, "Reading from caplet %s ...", filename) +func (s *Session) getCapletFilePath(caplet string) string { + if core.Exists(caplet) { + return caplet + } - input, err := os.Open(filename) + for _, path := range CapPaths { + filename := filepath.Join(path, caplet) + if !strings.HasSuffix(filename, ".cap") { + filename += ".cap" + } + if core.Exists(filename) { + return filename + } + } + + return "" +} + +func (s *Session) RunCaplet(filename string) error { + var caplet string + if caplet = s.getCapletFilePath(filename); caplet == "" { + return fmt.Errorf("could not load caplet from %s", filename) + } + + s.Events.Log(core.INFO, "Reading from caplet %s ...", caplet) + + input, err := os.Open(caplet) if err != nil { return err } @@ -543,11 +566,8 @@ func (s *Session) isCapletCommand(line string) (is bool, filename string, argv [ } } - for _, path := range CapPaths { - filename := filepath.Join(path, file) + ".cap" - if core.Exists(filename) { - return true, filename, argv - } + if filename := s.getCapletFilePath(file); filename != "" { + return true, filename, argv } return false, "", nil