Skip to content

Commit

Permalink
add required "name" field to filters in the config, enrich log messag…
Browse files Browse the repository at this point in the history
…es a bit
  • Loading branch information
capnspacehook committed Jan 19, 2022
1 parent 1e19f1a commit 299df45
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 40 deletions.
31 changes: 19 additions & 12 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"github.com/pelletier/go-toml"
)

const selfFilterName = "self-filter"

type Config struct {
InboundDNSQueue uint16
SelfDNSQueue uint16
Expand All @@ -17,6 +19,7 @@ type Config struct {
}

type FilterOptions struct {
Name string
DNSQueue uint16 `toml:"dnsQueue"`
TrafficQueue uint16
IPv6 bool
Expand Down Expand Up @@ -56,41 +59,44 @@ func parseConfigBytes(cb []byte) (*Config, error) {
allCachedHostnames []string
)
for i, filterOpt := range config.Filters {
if filterOpt.Name == "" {
return nil, fmt.Errorf(`filter #%d: "name" must be set`, i)
}
if filterOpt.DNSQueue == 0 && len(filterOpt.CachedHostnames) == 0 && !filterOpt.LookupUnknownIPs {
return nil, fmt.Errorf(`filter #%d: "dnsQueue" must be set`, i)
return nil, fmt.Errorf(`filter %q: "dnsQueue" must be set`, filterOpt.Name)
}
if filterOpt.TrafficQueue == 0 && !filterOpt.AllowAllHostnames {
return nil, fmt.Errorf(`filter #%d: "trafficQueue" must be set`, i)
return nil, fmt.Errorf(`filter %q: "trafficQueue" must be set`, filterOpt.Name)
}
if filterOpt.TrafficQueue > 0 && filterOpt.AllowAllHostnames {
return nil, fmt.Errorf(`filter #%d: "trafficQueue" must not be set when "allowAllHostnames" is true`, i)
return nil, fmt.Errorf(`filter %q: "trafficQueue" must not be set when "allowAllHostnames" is true`, filterOpt.Name)
}
if filterOpt.DNSQueue == filterOpt.TrafficQueue {
return nil, fmt.Errorf(`filter #%d: "dnsQueue" and "trafficQueue" must be different`, i)
return nil, fmt.Errorf(`filter %q: "dnsQueue" and "trafficQueue" must be different`, filterOpt.Name)
}
if len(filterOpt.AllowedHostnames) == 0 && !filterOpt.AllowAllHostnames && len(filterOpt.CachedHostnames) == 0 && !filterOpt.LookupUnknownIPs {
return nil, fmt.Errorf(`filter #%d: "allowedHostnames" must not be empty`, i)
return nil, fmt.Errorf(`filter %q: "allowedHostnames" must not be empty`, filterOpt.Name)
}
if len(filterOpt.AllowedHostnames) > 0 && filterOpt.AllowAllHostnames {
return nil, fmt.Errorf(`filter #%d: "allowedHostnames" must be empty when "allowAllHostnames" is true`, i)
return nil, fmt.Errorf(`filter %q: "allowedHostnames" must be empty when "allowAllHostnames" is true`, filterOpt.Name)
}
if filterOpt.AllowAnswersFor == 0 && len(filterOpt.AllowedHostnames) > 0 {
return nil, fmt.Errorf(`filter #%d: "allowAnswersFor" must be set when "allowedHostnames" is not empty`, i)
return nil, fmt.Errorf(`filter %q: "allowAnswersFor" must be set when "allowedHostnames" is not empty`, filterOpt.Name)
}
if filterOpt.AllowAnswersFor != 0 && filterOpt.AllowAllHostnames {
return nil, fmt.Errorf(`filter #%d: "allowAnswersFor" must not be set when "allowAllHostnames" is true`, i)
return nil, fmt.Errorf(`filter %q: "allowAnswersFor" must not be set when "allowAllHostnames" is true`, filterOpt.Name)
}
if len(filterOpt.CachedHostnames) > 0 && filterOpt.AllowAllHostnames {
return nil, fmt.Errorf(`filter #%d: "cachedHostnames" must be empty when "allowAllHostnames" is true`, i)
return nil, fmt.Errorf(`filter %q: "cachedHostnames" must be empty when "allowAllHostnames" is true`, filterOpt.Name)
}
if filterOpt.ReCacheEvery == 0 && len(filterOpt.CachedHostnames) > 0 {
return nil, fmt.Errorf(`filter #%d: "reCacheEvery" must be set when "cachedHostnames" is not empty`, i)
return nil, fmt.Errorf(`filter %q: "reCacheEvery" must be set when "cachedHostnames" is not empty`, filterOpt.Name)
}
if filterOpt.ReCacheEvery > 0 && len(filterOpt.CachedHostnames) == 0 {
return nil, fmt.Errorf(`filter #%d: "reCacheEvery" must not be set when "cachedHostnames" is empty`, i)
return nil, fmt.Errorf(`filter %q: "reCacheEvery" must not be set when "cachedHostnames" is empty`, filterOpt.Name)
}
if filterOpt.DNSQueue != 0 && len(filterOpt.AllowedHostnames) == 0 && (len(filterOpt.CachedHostnames) > 0 || filterOpt.LookupUnknownIPs) {
return nil, fmt.Errorf(`filter #%d: "dnsQueue" must not be set when "allowedHostnames" is empty and either "cachedHostames" is not empty or "lookupUnknownIPs" is true`, i)
return nil, fmt.Errorf(`filter %q: "dnsQueue" must not be set when "allowedHostnames" is empty and either "cachedHostames" is not empty or "lookupUnknownIPs" is true`, filterOpt.Name)
}

if filterOpt.LookupUnknownIPs {
Expand All @@ -115,6 +121,7 @@ func parseConfigBytes(cb []byte) (*Config, error) {
// Egress Eddie to only make required DNS queries
if config.SelfDNSQueue > 0 {
selfFilter := FilterOptions{
Name: selfFilterName,
DNSQueue: config.SelfDNSQueue,
IPv6: config.IPv6,
}
Expand Down
Loading

0 comments on commit 299df45

Please sign in to comment.