Add sanity checks for radius templates

This commit is contained in:
ionutboangiu
2024-03-04 07:56:52 -05:00
committed by Dan Christian Bogos
parent 9be32c36da
commit b580e09a00
4 changed files with 38 additions and 2 deletions

View File

@@ -534,6 +534,9 @@ func (ra *RadiusAgent) V1AlterSessions(_ *context.Context, cgrEv utils.CGREvent,
if optTpl, err := cgrEv.OptAsString(utils.MetaRadCoATemplate); err == nil {
coaTpl = optTpl
}
if _, found := ra.cgrCfg.TemplatesCfg()[coaTpl]; !found {
return fmt.Errorf("%w: CoA Template %s", utils.ErrNotFound, coaTpl)
}
replyCode, err := ra.sendRadDaReq(radigo.CoARequest, coaTpl,
originID, utils.MapStorage(cgrEv.Event), nil)

View File

@@ -373,6 +373,16 @@ func (cfg *CGRConfig) checkConfigSanity() error {
}
//Radius Agent
if cfg.radiusAgentCfg.Enabled {
if cfg.radiusAgentCfg.CoATemplate != "" {
if _, found := cfg.templates[cfg.radiusAgentCfg.CoATemplate]; !found {
return fmt.Errorf("<%s> CoA Template %s not defined", utils.RadiusAgent, cfg.radiusAgentCfg.CoATemplate)
}
}
if cfg.radiusAgentCfg.DMRTemplate != "" {
if _, found := cfg.templates[cfg.radiusAgentCfg.DMRTemplate]; !found {
return fmt.Errorf("<%s> DMR Template %s not defined", utils.RadiusAgent, cfg.radiusAgentCfg.DMRTemplate)
}
}
for _, connID := range cfg.radiusAgentCfg.SessionSConns {
if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled {
return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.RadiusAgent)

View File

@@ -608,8 +608,22 @@ func TestConfigSanityRadiusAgent(t *testing.T) {
},
}
cfg.radiusAgentCfg.CoATemplate = "test_coa" // point to non-existent template
expected := "<RadiusAgent> CoA Template test_coa not defined"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("expected %v, received %v", expected, err)
}
cfg.radiusAgentCfg.CoATemplate = "*coa" // point to default CoA template
cfg.radiusAgentCfg.DMRTemplate = "test_dmr" // point to non-existent template
expected = "<RadiusAgent> DMR Template test_dmr not defined"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("expected %v, received %v", expected, err)
}
cfg.radiusAgentCfg.DMRTemplate = "*dmr" // point to default DMR template
cfg.radiusAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)}
expected := "<SessionS> not enabled but requested by <RadiusAgent> component"
expected = "<SessionS> not enabled but requested by <RadiusAgent> component"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expecting: %+q received: %+q", expected, err)
}
@@ -683,6 +697,15 @@ func TestConfigSanityRadiusAgent(t *testing.T) {
t.Errorf("Expecting: %+q received: %+q", expected, err)
}
cfg.radiusAgentCfg.RequestProcessors[0].Filters = []string{"*string:~*req.Account:1001"}
if err := cfg.checkConfigSanity(); err != nil {
t.Error(err)
}
cfg.radiusAgentCfg.CoATemplate = ""
cfg.radiusAgentCfg.DMRTemplate = ""
if err := cfg.checkConfigSanity(); err != nil {
t.Error(err)
}
}
func TestConfigSanityDNSAgent(t *testing.T) {

View File

@@ -11,7 +11,7 @@
{"tag": "Acct-Session-Id", "path": "*radDAReq.Acct-Session-Id", "type": "*variable",
"value": "~*oreq.Acct-Session-Id"},
{"tag": "Filter-Id", "path": "*radDAReq.Filter-Id", "type": "*variable",
"value": "~*req.CustomFilter"},
"value": "~*req.CustomFilter"}
]
}