fix(inputs.snmp): use the correct path when evaluating symlink (#10748)
This commit is contained in:
parent
6a025f9903
commit
35d69de1fc
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue