summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2024-06-20 19:53:26 +0300
committerAustin S. Hemmelgarn <ahferroin7@gmail.com>2024-06-21 08:33:46 -0400
commitcbede9acfb46267d5f5ac2e6a7231a2fada227fa (patch)
treec084a21a3d1bbce56c014b8602b49f846d6f9177 /src
parent94cd9739ec7f76095026a3330a29c2ba656c68cd (diff)
go.d dyncfg add job name validation (#17971)
(cherry picked from commit 7be6a6cb3630b3372b6c65f26c254d3b6d82b665)
Diffstat (limited to 'src')
-rw-r--r--src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go b/src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go
index 953c6db58f..404f4bf3b4 100644
--- a/src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go
+++ b/src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go
@@ -5,12 +5,14 @@ package jobmgr
import (
"context"
"encoding/json"
+ "errors"
"fmt"
"log/slog"
"reflect"
"strconv"
"strings"
"time"
+ "unicode"
"github.com/netdata/netdata/go/go.d.plugin/agent/confgroup"
"github.com/netdata/netdata/go/go.d.plugin/agent/functions"
@@ -211,6 +213,12 @@ func (m *Manager) dyncfgConfigTest(fn functions.Function) {
jn = fn.Args[2]
}
+ if err := validateJobName(jn); err != nil {
+ m.Warningf("dyncfg: test: module %s: unacceptable job name '%s': %v", mn, jn, err)
+ m.dyncfgRespf(fn, 400, "Unacceptable job name '%s': %v.", jn, err)
+ return
+ }
+
creator, ok := m.Modules.Lookup(mn)
if !ok {
m.Warningf("dyncfg: test: module %s not found", mn)
@@ -547,6 +555,12 @@ func (m *Manager) dyncfgConfigAdd(fn functions.Function) {
return
}
+ if err := validateJobName(jn); err != nil {
+ m.Warningf("dyncfg: add: module %s: unacceptable job name '%s': %v", mn, jn, err)
+ m.dyncfgRespf(fn, 400, "Unacceptable job name '%s': %v.", jn, err)
+ return
+ }
+
cfg, err := configFromPayload(fn)
if err != nil {
m.Warningf("dyncfg: add: module %s job %s: failed to create config from payload: %v", mn, jn, err)
@@ -823,3 +837,16 @@ func extractJobName(id string) (string, bool) {
}
return id[i+1:], true
}
+
+func validateJobName(jobName string) error {
+ for _, r := range jobName {
+ if unicode.IsSpace(r) {
+ return errors.New("contains spaces")
+ }
+ switch r {
+ case '.', ':':
+ return fmt.Errorf("contains '%c'", r)
+ }
+ }
+ return nil
+}