From 7e77f1fa35d6ac45ce6be9be9a6d76e63058f35c Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 10 Jul 2019 18:12:25 +0200 Subject: [PATCH] Adding DomainName and QueryName into DNSAgent variables --- agents/dnsagent.go | 3 +++ agents/libdns.go | 15 ++++++++++++++- agents/libdns_test.go | 12 ++++++++++++ data/conf/samples/dnsagent/cgrates.json | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/agents/dnsagent.go b/agents/dnsagent.go index f2e1951eb..9368a8602 100644 --- a/agents/dnsagent.go +++ b/agents/dnsagent.go @@ -80,6 +80,7 @@ func (da *DNSAgent) handleMessage(w dns.ResponseWriter, req *dns.Msg) { // message preprocesing switch req.Question[0].Qtype { case dns.TypeNAPTR: + reqVars[QueryName] = req.Question[0].Name e164, err := e164FromNAPTR(req.Question[0].Name) if err != nil { utils.Logger.Warning( @@ -90,6 +91,8 @@ func (da *DNSAgent) handleMessage(w dns.ResponseWriter, req *dns.Msg) { return } reqVars[E164Address] = e164 + reqVars[DomainName] = domainNameFromNAPTR(req.Question[0].Name) + } cgrRplyNM := config.NewNavigableMap(nil) rplyNM := config.NewNavigableMap(nil) // share it among different processors diff --git a/agents/libdns.go b/agents/libdns.go index 234d4ea06..5b6f46b0f 100644 --- a/agents/libdns.go +++ b/agents/libdns.go @@ -32,11 +32,13 @@ import ( const ( QueryType = "QueryType" E164Address = "E164Address" + QueryName = "QueryName" + DomainName = "DomainName" ) // e164FromNAPTR extracts the E164 address out of a NAPTR name record func e164FromNAPTR(name string) (e164 string, err error) { - i := strings.Index(name, ".e164.arpa") + i := strings.Index(name, ".e164.") if i == -1 { return "", errors.New("unknown format") } @@ -45,6 +47,17 @@ func e164FromNAPTR(name string) (e164 string, err error) { return } +// domainNameFromNAPTR extracts the domain part out of a NAPTR name record +func domainNameFromNAPTR(name string) (dName string) { + i := strings.Index(name, ".e164.") + if i == -1 { + dName = name + } else { + dName = name[i:] + } + return strings.Trim(dName, ".") +} + // newDADataProvider constructs a DataProvider for a diameter message func newDNSDataProvider(req *dns.Msg, w dns.ResponseWriter) config.DataProvider { diff --git a/agents/libdns_test.go b/agents/libdns_test.go index e6665054a..cc24fcb45 100644 --- a/agents/libdns_test.go +++ b/agents/libdns_test.go @@ -35,6 +35,18 @@ func TestE164FromNAPTR(t *testing.T) { } } +func TestDomainNameFromNAPTR(t *testing.T) { + if dName := domainNameFromNAPTR("8.7.6.5.4.3.2.1.0.1.6.e164.arpa."); dName != "e164.arpa" { + t.Errorf("received: <%s>", dName) + } + if dName := domainNameFromNAPTR("8.7.6.5.4.3.2.1.0.1.6.e164.itsyscom.com."); dName != "e164.itsyscom.com" { + t.Errorf("received: <%s>", dName) + } + if dName := domainNameFromNAPTR("8.7.6.5.4.3.2.1.0.1.6.itsyscom.com."); dName != "8.7.6.5.4.3.2.1.0.1.6.itsyscom.com" { + t.Errorf("received: <%s>", dName) + } +} + func TestAppendDNSAnswerTypeNAPTR(t *testing.T) { m := new(dns.Msg) m.SetQuestion("3.6.9.4.7.1.7.1.5.6.8.9.4.e164.arpa.", dns.TypeNAPTR) diff --git a/data/conf/samples/dnsagent/cgrates.json b/data/conf/samples/dnsagent/cgrates.json index d3b5d60c4..0db8fe045 100644 --- a/data/conf/samples/dnsagent/cgrates.json +++ b/data/conf/samples/dnsagent/cgrates.json @@ -11,6 +11,7 @@ "log_level": 7, // control the level of messages logged (0-emerg to 7-debug) }, + "stor_db": { "db_password": "CGRateS.org", },