@cryptotaxi247 / netdata-1 / commits / 7be6a6cb3

go.d dyncfg add job name validation (#17971)

Ilya Mashchenko committed Jun 20, 2024 at 19:53 UTC 7be6a6cb3630b3372b6c65f26c254d3b6d82b665
1 file changed +27
src/go/collectors/go.d.plugin/agent/jobmgr/dyncfg.go
+27
@@ -5,12 +5,14 @@ package jobmgr
5 import (
6 "context"
7 "encoding/json"
8 + "errors"
9 "fmt"
10 "log/slog"
11 "reflect"
12 "strconv"
13 "strings"
14 "time"
15 + "unicode"
16
17 "github.com/netdata/netdata/go/go.d.plugin/agent/confgroup"
18 "github.com/netdata/netdata/go/go.d.plugin/agent/functions"
@@ -211,6 +213,12 @@ func (m *Manager) dyncfgConfigTest(fn functions.Function) {
213 jn = fn.Args[2]
214 }
215
216 + if err := validateJobName(jn); err != nil {
217 + m.Warningf("dyncfg: test: module %s: unacceptable job name '%s': %v", mn, jn, err)
218 + m.dyncfgRespf(fn, 400, "Unacceptable job name '%s': %v.", jn, err)
219 + return
220 + }
221 +
222 creator, ok := m.Modules.Lookup(mn)
223 if !ok {
224 m.Warningf("dyncfg: test: module %s not found", mn)
@@ -547,6 +555,12 @@ func (m *Manager) dyncfgConfigAdd(fn functions.Function) {
555 return
556 }
557
558 + if err := validateJobName(jn); err != nil {
559 + m.Warningf("dyncfg: add: module %s: unacceptable job name '%s': %v", mn, jn, err)
560 + m.dyncfgRespf(fn, 400, "Unacceptable job name '%s': %v.", jn, err)
561 + return
562 + }
563 +
564 cfg, err := configFromPayload(fn)
565 if err != nil {
566 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) {
837 }
838 return id[i+1:], true
839 }
840 +
841 +func validateJobName(jobName string) error {
842 + for _, r := range jobName {
843 + if unicode.IsSpace(r) {
844 + return errors.New("contains spaces")
845 + }
846 + switch r {
847 + case '.', ':':
848 + return fmt.Errorf("contains '%c'", r)
849 + }
850 + }
851 + return nil
852 +}