summaryrefslogtreecommitdiff
path: root/caddyconfig
diff options
context:
space:
mode:
authorY.Horie <u5.horie@gmail.com>2023-01-22 02:22:36 +0900
committerGitHub <noreply@github.com>2023-01-21 10:22:36 -0700
commitd6d7511699f6a35e3246918023af5ba3bc2cbc67 (patch)
treee66396854c444346989408fafd73a27b6f2f38e2 /caddyconfig
parent8d6870fd068aa3ea472a46f34d219f41703e2ddb (diff)
httpcaddyfile: Warn on importing empty file; skip dotfiles (#5320)
* httpcaddyfile: Change the parse rules when empty file or dotfile with a glob. * Fixes #5295 * Empty file should just log a warning, and result in no tokens. * The last segment of the path is '*', it should skip any dotfiles. * The last segment of the path is '.*', it should read all dotfiles in a dir. * httpcaddyfile: Regard empty files as import files which include only white space.
Diffstat (limited to 'caddyconfig')
-rw-r--r--caddyconfig/caddyfile/parse.go20
-rw-r--r--caddyconfig/caddyfile/parse_test.go17
-rw-r--r--caddyconfig/caddyfile/testdata/empty.txt0
-rw-r--r--caddyconfig/caddyfile/testdata/glob/.dotfile.txt4
-rw-r--r--caddyconfig/caddyfile/testdata/glob/import_test1.txt2
-rw-r--r--caddyconfig/caddyfile/testdata/only_white_space.txt7
6 files changed, 50 insertions, 0 deletions
diff --git a/caddyconfig/caddyfile/parse.go b/caddyconfig/caddyfile/parse.go
index 82c515b..edc86f2 100644
--- a/caddyconfig/caddyfile/parse.go
+++ b/caddyconfig/caddyfile/parse.go
@@ -389,6 +389,20 @@ func (p *parser) doImport() error {
} else {
return p.Errf("File to import not found: %s", importPattern)
}
+ } else {
+ // See issue #5295 - should skip any files that start with a . when iterating over them.
+ sep := string(filepath.Separator)
+ segGlobPattern := strings.Split(globPattern, sep)
+ if strings.HasPrefix(segGlobPattern[len(segGlobPattern)-1], "*") {
+ var tmpMatches []string
+ for _, m := range matches {
+ seg := strings.Split(m, sep)
+ if !strings.HasPrefix(seg[len(seg)-1], ".") {
+ tmpMatches = append(tmpMatches, m)
+ }
+ }
+ matches = tmpMatches
+ }
}
// collect all the imported tokens
@@ -451,6 +465,12 @@ func (p *parser) doSingleImport(importFile string) ([]Token, error) {
return nil, p.Errf("Could not read imported file %s: %v", importFile, err)
}
+ // only warning in case of empty files
+ if len(input) == 0 || len(strings.TrimSpace(string(input))) == 0 {
+ caddy.Log().Warn("Import file is empty", zap.String("file", importFile))
+ return []Token{}, nil
+ }
+
importedTokens, err := allTokens(importFile, input)
if err != nil {
return nil, p.Errf("Could not read tokens while importing %s: %v", importFile, err)
diff --git a/caddyconfig/caddyfile/parse_test.go b/caddyconfig/caddyfile/parse_test.go
index e3eff56..4d18cc4 100644
--- a/caddyconfig/caddyfile/parse_test.go
+++ b/caddyconfig/caddyfile/parse_test.go
@@ -187,6 +187,23 @@ func TestParseOneAndImport(t *testing.T) {
{`import testdata/not_found.txt`, true, []string{}, []int{}},
+ // empty file should just log a warning, and result in no tokens
+ {`import testdata/empty.txt`, false, []string{}, []int{}},
+
+ {`import testdata/only_white_space.txt`, false, []string{}, []int{}},
+
+ // import path/to/dir/* should skip any files that start with a . when iterating over them.
+ {`localhost
+ dir1 arg1
+ import testdata/glob/*`, false, []string{
+ "localhost",
+ }, []int{2, 3, 1}},
+
+ // import path/to/dir/.* should continue to read all dotfiles in a dir.
+ {`import testdata/glob/.*`, false, []string{
+ "host1",
+ }, []int{1, 2}},
+
{`""`, false, []string{}, []int{}},
{``, false, []string{}, []int{}},
diff --git a/caddyconfig/caddyfile/testdata/empty.txt b/caddyconfig/caddyfile/testdata/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/caddyconfig/caddyfile/testdata/empty.txt
diff --git a/caddyconfig/caddyfile/testdata/glob/.dotfile.txt b/caddyconfig/caddyfile/testdata/glob/.dotfile.txt
new file mode 100644
index 0000000..faab100
--- /dev/null
+++ b/caddyconfig/caddyfile/testdata/glob/.dotfile.txt
@@ -0,0 +1,4 @@
+host1 {
+ dir1
+ dir2 arg1
+}
diff --git a/caddyconfig/caddyfile/testdata/glob/import_test1.txt b/caddyconfig/caddyfile/testdata/glob/import_test1.txt
new file mode 100644
index 0000000..dac7b29
--- /dev/null
+++ b/caddyconfig/caddyfile/testdata/glob/import_test1.txt
@@ -0,0 +1,2 @@
+dir2 arg1 arg2
+dir3 \ No newline at end of file
diff --git a/caddyconfig/caddyfile/testdata/only_white_space.txt b/caddyconfig/caddyfile/testdata/only_white_space.txt
new file mode 100644
index 0000000..705327c
--- /dev/null
+++ b/caddyconfig/caddyfile/testdata/only_white_space.txt
@@ -0,0 +1,7 @@
+
+
+
+
+ 
+
+