Skip to content

Commit

Permalink
Resolve symlinks in config directory
Browse files Browse the repository at this point in the history
Docker/Openshift/Kubernetes mount the config file as a symbolic link and
IsDir returns true if the file is a symlink. Before calling IsDir, the
symlink should be resolved to determine if it points at a file or
directory.

Fixes hashicorp#3753
  • Loading branch information
jameshartig committed Jan 12, 2018
1 parent cd09caf commit aedab91
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion agent/config/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,25 @@ func (b *Builder) ReadPath(path string) ([]Source, error) {

var sources []Source
for _, fi := range fis {
fp := filepath.Join(path, fi.Name())
// check for a symlink and resolve the path
if fi.Mode()&os.ModeSymlink > 0 {
var err error
fp, err = filepath.EvalSymlinks(fp)
if err != nil {
return nil, err
}
fi, err = os.Stat(fp)
if err != nil {
return nil, err
}
}
// do not recurse into sub dirs
if fi.IsDir() {
continue
}

src, err := b.ReadFile(filepath.Join(path, fi.Name()))
src, err := b.ReadFile(fp)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit aedab91

Please sign in to comment.