From 8b8afd72d75df6ca2d8c67df72826aaa09bf7422 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Wed, 17 Aug 2016 17:03:21 -0600 Subject: [PATCH] Support env vars in import; make sure it's a file --- caddyfile/parse.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/caddyfile/parse.go b/caddyfile/parse.go index d3f65f4a2..92431fc8d 100644 --- a/caddyfile/parse.go +++ b/caddyfile/parse.go @@ -201,11 +201,14 @@ func (p *parser) directives() error { // other words, call Next() to access the first token that was // imported. func (p *parser) doImport() error { - // syntax check + // syntax checks if !p.NextArg() { return p.ArgErr() } - importPattern := p.Val() + importPattern := replaceEnvVars(p.Val()) + if importPattern == "" { + return p.Err("Import requires a non-empty filepath") + } if p.NextArg() { return p.Err("Import takes only one argument (glob pattern or file)") } @@ -284,6 +287,13 @@ func (p *parser) doSingleImport(importFile string) ([]Token, error) { return nil, p.Errf("Could not import %s: %v", importFile, err) } defer file.Close() + + if info, err := file.Stat(); err != nil { + return nil, p.Errf("Could not import %s: %v", importFile, err) + } else if info.IsDir() { + return nil, p.Errf("Could not import %s: is a directory", importFile) + } + importedTokens := allTokens(file) // Tack the filename onto these tokens so errors show the imported file's name