fix(inputs.snmp): use the correct path when evaluating symlink (#10748)

This commit is contained in:
reimda 2022-03-11 08:29:16 -07:00 committed by GitHub
parent 6a025f9903
commit 35d69de1fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 8 deletions

View File

@ -20,8 +20,12 @@ var once sync.Once
var cache = make(map[string]bool)
type MibLoader interface {
loadModule(path string) error
// appendPath takes the path of a directory
appendPath(path string)
// loadModule takes the name of a file in one of the
// directories. Basename only, no relative or absolute path
loadModule(path string) error
}
type GosmiMibLoader struct{}
@ -60,17 +64,18 @@ func LoadMibsFromPath(paths []string, log telegraf.Logger, loader MibLoader) err
for _, info := range modules {
if info.Mode()&os.ModeSymlink != 0 {
target, err := filepath.EvalSymlinks(path)
symlink := filepath.Join(path, info.Name())
target, err := filepath.EvalSymlinks(symlink)
if err != nil {
log.Warnf("Couldn't evaluate symbolic links for %v: %v", target, err)
log.Warnf("Couldn't evaluate symbolic links for %v: %v", symlink, err)
continue
}
info, err = os.Lstat(filepath.Join(path, target))
//replace symlink's info with the target's info
info, err = os.Lstat(target)
if err != nil {
log.Warnf("Couldn't stat target %v: %v", target, err)
continue
}
path = target
}
if info.Mode().IsRegular() {
err := loader.loadModule(info.Name())
@ -113,7 +118,7 @@ func walkPaths(paths []string, log telegraf.Logger) ([]string, error) {
if info.Mode()&os.ModeSymlink != 0 {
target, err := filepath.EvalSymlinks(path)
if err != nil {
log.Warnf("Couldn't evaluate symbolic links for %v: %v", target, err)
log.Warnf("Couldn't evaluate symbolic links for %v: %v", path, err)
}
info, err = os.Lstat(target)
if err != nil {

View File

@ -107,8 +107,6 @@ func TestFolderLookup(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("Skipping on windows")
}
var folders []string
var givenPath []string
tests := []struct {
name string
@ -132,17 +130,23 @@ func TestFolderLookup(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
loader := TestingMibLoader{}
var givenPath []string
for _, paths := range tt.mibPath {
rootPath := filepath.Join(paths...)
givenPath = append(givenPath, rootPath)
}
err := LoadMibsFromPath(givenPath, testutil.Logger{}, &loader)
require.NoError(t, err)
var folders []string
for _, pathSlice := range tt.paths {
path := filepath.Join(pathSlice...)
folders = append(folders, path)
}
require.Equal(t, folders, loader.folders)
require.Equal(t, tt.files, loader.files)
})
}