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
+}