diff --git a/caddy.go b/caddy.go index d67719d97..d245dd04c 100644 --- a/caddy.go +++ b/caddy.go @@ -22,7 +22,6 @@ import ( "net" "os" "os/exec" - "path" "runtime" "strconv" "strings" @@ -399,7 +398,7 @@ func startWithListenerFds(cdyfile Input, inst *Instance, restartFds map[string]r inst.caddyfileInput = cdyfile - sblocks, err := loadServerBlocks(stypeName, path.Base(cdyfile.Path()), bytes.NewReader(cdyfile.Body())) + sblocks, err := loadServerBlocks(stypeName, cdyfile.Path(), bytes.NewReader(cdyfile.Body())) if err != nil { return err } diff --git a/caddyfile/parse.go b/caddyfile/parse.go index 6e2083761..44f8d9e1b 100644 --- a/caddyfile/parse.go +++ b/caddyfile/parse.go @@ -212,14 +212,15 @@ func (p *parser) doImport() error { // make path relative to Caddyfile rather than current working directory (issue #867) // and then use glob to get list of matching filenames - var matches []string - relImportPattern, err := filepath.Rel(filepath.Dir(p.Dispenser.filename), importPattern) - if err == nil { - matches, err = filepath.Glob(relImportPattern) - } else { - matches, err = filepath.Glob(importPattern) + absFile, err := filepath.Abs(p.Dispenser.filename) + if err != nil { + return p.Errf("Failed to get absolute path of file: %s", p.Dispenser.filename) } + var matches []string + relImportPattern := filepath.Join(filepath.Dir(absFile), importPattern) + matches, err = filepath.Glob(relImportPattern) + if err != nil { return p.Errf("Failed to use import pattern %s: %v", importPattern, err) } diff --git a/caddyfile/parse_test.go b/caddyfile/parse_test.go index 8073b1b38..8f296c619 100644 --- a/caddyfile/parse_test.go +++ b/caddyfile/parse_test.go @@ -187,7 +187,7 @@ func TestParseOneAndImport(t *testing.T) { {`localhost dir1 arg1 - import ../testdata/import_test1.txt`, false, []string{ + import testdata/import_test1.txt`, false, []string{ "localhost", }, map[string]int{ "dir1": 2, @@ -195,16 +195,16 @@ func TestParseOneAndImport(t *testing.T) { "dir3": 1, }}, - {`import ../testdata/import_test2.txt`, false, []string{ + {`import testdata/import_test2.txt`, false, []string{ "host1", }, map[string]int{ "dir1": 1, "dir2": 2, }}, - {`import ../testdata/import_test1.txt ../testdata/import_test2.txt`, true, []string{}, map[string]int{}}, + {`import testdata/import_test1.txt testdata/import_test2.txt`, true, []string{}, map[string]int{}}, - {`import ../testdata/not_found.txt`, true, []string{}, map[string]int{}}, + {`import testdata/not_found.txt`, true, []string{}, map[string]int{}}, {`""`, false, []string{}, map[string]int{}}, @@ -394,8 +394,6 @@ func TestEnvironmentReplacement(t *testing.T) { func testParser(input string) parser { buf := strings.NewReader(input) - // use relative path to test that import paths are relative to - // the Caddyfile rather than the current working directory (issue #867) - p := parser{Dispenser: NewDispenser("../Test", buf)} + p := parser{Dispenser: NewDispenser("Caddyfile", buf)} return p }