Files
routedns/blocklistdb-multi.go
Frank Olbricht acc8842fad Support naming blocklists to help with logging (#201)
* Support naming blocklists to help with logging

* Support naming of lists in response blocklists too

* Add list name to client-blocklist as well
2022-01-09 07:44:53 -07:00

45 lines
880 B
Go

package rdns
import (
"net"
"github.com/miekg/dns"
)
// MultiDB wraps multiple blocklist DBs and performs queries over all of them.
type MultiDB struct {
dbs []BlocklistDB
}
var _ BlocklistDB = MultiDB{}
// NewMultiDB returns a new instance of a wrapper for blocklists
func NewMultiDB(dbs ...BlocklistDB) (MultiDB, error) {
return MultiDB{dbs}, nil
}
func (m MultiDB) Reload() (BlocklistDB, error) {
var newDBs []BlocklistDB
for _, db := range m.dbs {
n, err := db.Reload()
if err != nil {
return nil, err
}
newDBs = append(newDBs, n)
}
return NewMultiDB(newDBs...)
}
func (m MultiDB) Match(q dns.Question) (net.IP, string, *BlocklistMatch, bool) {
for _, db := range m.dbs {
if ip, name, match, ok := db.Match(q); ok {
return ip, name, match, ok
}
}
return nil, "", nil, false
}
func (m MultiDB) String() string {
return "Multi-Blocklist"
}