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)
|
var cache = make(map[string]bool)
|
||||||
|
|
||||||
type MibLoader interface {
|
type MibLoader interface {
|
||||||
loadModule(path string) error
|
// appendPath takes the path of a directory
|
||||||
appendPath(path string)
|
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{}
|
type GosmiMibLoader struct{}
|
||||||
|
|
@ -60,17 +64,18 @@ func LoadMibsFromPath(paths []string, log telegraf.Logger, loader MibLoader) err
|
||||||
|
|
||||||
for _, info := range modules {
|
for _, info := range modules {
|
||||||
if info.Mode()&os.ModeSymlink != 0 {
|
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 {
|
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
|
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 {
|
if err != nil {
|
||||||
log.Warnf("Couldn't stat target %v: %v", target, err)
|
log.Warnf("Couldn't stat target %v: %v", target, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
path = target
|
|
||||||
}
|
}
|
||||||
if info.Mode().IsRegular() {
|
if info.Mode().IsRegular() {
|
||||||
err := loader.loadModule(info.Name())
|
err := loader.loadModule(info.Name())
|
||||||
|
|
@ -113,7 +118,7 @@ func walkPaths(paths []string, log telegraf.Logger) ([]string, error) {
|
||||||
if info.Mode()&os.ModeSymlink != 0 {
|
if info.Mode()&os.ModeSymlink != 0 {
|
||||||
target, err := filepath.EvalSymlinks(path)
|
target, err := filepath.EvalSymlinks(path)
|
||||||
if err != nil {
|
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)
|
info, err = os.Lstat(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,6 @@ func TestFolderLookup(t *testing.T) {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
t.Skip("Skipping on windows")
|
t.Skip("Skipping on windows")
|
||||||
}
|
}
|
||||||
var folders []string
|
|
||||||
var givenPath []string
|
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|
@ -132,17 +130,23 @@ func TestFolderLookup(t *testing.T) {
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
loader := TestingMibLoader{}
|
loader := TestingMibLoader{}
|
||||||
|
|
||||||
|
var givenPath []string
|
||||||
for _, paths := range tt.mibPath {
|
for _, paths := range tt.mibPath {
|
||||||
rootPath := filepath.Join(paths...)
|
rootPath := filepath.Join(paths...)
|
||||||
givenPath = append(givenPath, rootPath)
|
givenPath = append(givenPath, rootPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := LoadMibsFromPath(givenPath, testutil.Logger{}, &loader)
|
err := LoadMibsFromPath(givenPath, testutil.Logger{}, &loader)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
var folders []string
|
||||||
for _, pathSlice := range tt.paths {
|
for _, pathSlice := range tt.paths {
|
||||||
path := filepath.Join(pathSlice...)
|
path := filepath.Join(pathSlice...)
|
||||||
folders = append(folders, path)
|
folders = append(folders, path)
|
||||||
}
|
}
|
||||||
require.Equal(t, folders, loader.folders)
|
require.Equal(t, folders, loader.folders)
|
||||||
|
|
||||||
require.Equal(t, tt.files, loader.files)
|
require.Equal(t, tt.files, loader.files)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue