Fix review comments: NextFilterId collisions
This commit is contained in:
parent
0e065a2e61
commit
54bdacdde2
6
app.go
6
app.go
|
@ -303,8 +303,10 @@ func upgradeConfigSchema(oldVersion int, newVersion int) error {
|
||||||
|
|
||||||
filter := &config.Filters[i] // otherwise we will be operating on a copy
|
filter := &config.Filters[i] // otherwise we will be operating on a copy
|
||||||
|
|
||||||
log.Printf("Seting ID=%d for filter %s", i, filter.URL)
|
// Set the filter ID
|
||||||
filter.ID = i + 1 // start with ID=1
|
log.Printf("Seting ID=%d for filter %s", NextFilterId, filter.URL)
|
||||||
|
filter.ID = NextFilterId
|
||||||
|
NextFilterId++
|
||||||
|
|
||||||
// Forcibly update the filter
|
// Forcibly update the filter
|
||||||
_, err := filter.update(true)
|
_, err := filter.update(true)
|
||||||
|
|
16
config.go
16
config.go
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"gopkg.in/yaml.v2"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
@ -11,6 +10,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"text/template"
|
"text/template"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Current schema version. We compare it with the value from
|
// Current schema version. We compare it with the value from
|
||||||
|
@ -20,8 +21,11 @@ const SchemaVersion = 1
|
||||||
// Directory where we'll store all downloaded filters contents
|
// Directory where we'll store all downloaded filters contents
|
||||||
const FiltersDir = "filters"
|
const FiltersDir = "filters"
|
||||||
|
|
||||||
|
// User filter ID is always 0
|
||||||
|
const UserFilterId = 0
|
||||||
|
|
||||||
// Just a counter that we use for incrementing the filter ID
|
// Just a counter that we use for incrementing the filter ID
|
||||||
var NextFilterId int
|
var NextFilterId = time.Now().Unix()
|
||||||
|
|
||||||
// configuration is loaded from YAML
|
// configuration is loaded from YAML
|
||||||
type configuration struct {
|
type configuration struct {
|
||||||
|
@ -46,7 +50,7 @@ type configuration struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type coreDnsFilter struct {
|
type coreDnsFilter struct {
|
||||||
ID int `yaml:"-"`
|
ID int64 `yaml:"-"`
|
||||||
Path string `yaml:"-"`
|
Path string `yaml:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +74,7 @@ type coreDNSConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type filter struct {
|
type filter struct {
|
||||||
ID int `json:"id" yaml:"id"` // auto-assigned when filter is added (see NextFilterId)
|
ID int64 `json:"id" yaml:"id"` // auto-assigned when filter is added (see NextFilterId)
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Name string `json:"name" yaml:"name"`
|
Name string `json:"name" yaml:"name"`
|
||||||
Enabled bool `json:"enabled"`
|
Enabled bool `json:"enabled"`
|
||||||
|
@ -119,8 +123,8 @@ func getUserFilter() filter {
|
||||||
}
|
}
|
||||||
|
|
||||||
userFilter := filter{
|
userFilter := filter{
|
||||||
// User filter always has ID=0
|
// User filter always has constant ID=0
|
||||||
ID: 0,
|
ID: UserFilterId,
|
||||||
contents: contents,
|
contents: contents,
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
}
|
}
|
||||||
|
|
16
control.go
16
control.go
|
@ -15,7 +15,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
coreDnsPlugin "github.com/AdguardTeam/AdGuardHome/coredns_plugin"
|
corednsplugin "github.com/AdguardTeam/AdGuardHome/coredns_plugin"
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
"gopkg.in/asaskevich/govalidator.v4"
|
"gopkg.in/asaskevich/govalidator.v4"
|
||||||
)
|
)
|
||||||
|
@ -39,7 +39,7 @@ var client = &http.Client{
|
||||||
// coredns run control
|
// coredns run control
|
||||||
// -------------------
|
// -------------------
|
||||||
func tellCoreDNSToReload() {
|
func tellCoreDNSToReload() {
|
||||||
coreDnsPlugin.Reload <- true
|
corednsplugin.Reload <- true
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeAllConfigsAndReloadCoreDNS() error {
|
func writeAllConfigsAndReloadCoreDNS() error {
|
||||||
|
@ -790,7 +790,7 @@ func (filter *filter) load() error {
|
||||||
|
|
||||||
// Path to the filter contents
|
// Path to the filter contents
|
||||||
func (filter *filter) getFilterFilePath() string {
|
func (filter *filter) getFilterFilePath() string {
|
||||||
return filepath.Join(config.ourBinaryDir, config.ourDataDir, FiltersDir, strconv.Itoa(filter.ID)+".txt")
|
return filepath.Join(config.ourBinaryDir, config.ourDataDir, FiltersDir, strconv.FormatInt(filter.ID, 10)+".txt")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------
|
// ------------
|
||||||
|
@ -950,15 +950,15 @@ func registerControlHandlers() {
|
||||||
http.HandleFunc("/control/status", optionalAuth(ensureGET(handleStatus)))
|
http.HandleFunc("/control/status", optionalAuth(ensureGET(handleStatus)))
|
||||||
http.HandleFunc("/control/enable_protection", optionalAuth(ensurePOST(handleProtectionEnable)))
|
http.HandleFunc("/control/enable_protection", optionalAuth(ensurePOST(handleProtectionEnable)))
|
||||||
http.HandleFunc("/control/disable_protection", optionalAuth(ensurePOST(handleProtectionDisable)))
|
http.HandleFunc("/control/disable_protection", optionalAuth(ensurePOST(handleProtectionDisable)))
|
||||||
http.HandleFunc("/control/querylog", optionalAuth(ensureGET(coreDnsPlugin.HandleQueryLog)))
|
http.HandleFunc("/control/querylog", optionalAuth(ensureGET(corednsplugin.HandleQueryLog)))
|
||||||
http.HandleFunc("/control/querylog_enable", optionalAuth(ensurePOST(handleQueryLogEnable)))
|
http.HandleFunc("/control/querylog_enable", optionalAuth(ensurePOST(handleQueryLogEnable)))
|
||||||
http.HandleFunc("/control/querylog_disable", optionalAuth(ensurePOST(handleQueryLogDisable)))
|
http.HandleFunc("/control/querylog_disable", optionalAuth(ensurePOST(handleQueryLogDisable)))
|
||||||
http.HandleFunc("/control/set_upstream_dns", optionalAuth(ensurePOST(handleSetUpstreamDNS)))
|
http.HandleFunc("/control/set_upstream_dns", optionalAuth(ensurePOST(handleSetUpstreamDNS)))
|
||||||
http.HandleFunc("/control/test_upstream_dns", optionalAuth(ensurePOST(handleTestUpstreamDNS)))
|
http.HandleFunc("/control/test_upstream_dns", optionalAuth(ensurePOST(handleTestUpstreamDNS)))
|
||||||
http.HandleFunc("/control/stats_top", optionalAuth(ensureGET(coreDnsPlugin.HandleStatsTop)))
|
http.HandleFunc("/control/stats_top", optionalAuth(ensureGET(corednsplugin.HandleStatsTop)))
|
||||||
http.HandleFunc("/control/stats", optionalAuth(ensureGET(coreDnsPlugin.HandleStats)))
|
http.HandleFunc("/control/stats", optionalAuth(ensureGET(corednsplugin.HandleStats)))
|
||||||
http.HandleFunc("/control/stats_history", optionalAuth(ensureGET(coreDnsPlugin.HandleStatsHistory)))
|
http.HandleFunc("/control/stats_history", optionalAuth(ensureGET(corednsplugin.HandleStatsHistory)))
|
||||||
http.HandleFunc("/control/stats_reset", optionalAuth(ensurePOST(coreDnsPlugin.HandleStatsReset)))
|
http.HandleFunc("/control/stats_reset", optionalAuth(ensurePOST(corednsplugin.HandleStatsReset)))
|
||||||
http.HandleFunc("/control/version.json", optionalAuth(handleGetVersionJSON))
|
http.HandleFunc("/control/version.json", optionalAuth(handleGetVersionJSON))
|
||||||
http.HandleFunc("/control/filtering/enable", optionalAuth(ensurePOST(handleFilteringEnable)))
|
http.HandleFunc("/control/filtering/enable", optionalAuth(ensurePOST(handleFilteringEnable)))
|
||||||
http.HandleFunc("/control/filtering/disable", optionalAuth(ensurePOST(handleFilteringDisable)))
|
http.HandleFunc("/control/filtering/disable", optionalAuth(ensurePOST(handleFilteringDisable)))
|
||||||
|
|
|
@ -52,7 +52,7 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
type plugFilter struct {
|
type plugFilter struct {
|
||||||
ID uint32
|
ID int64
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ func setupPlugin(c *caddy.Controller) (*plug, error) {
|
||||||
return nil, c.ArgErr()
|
return nil, c.ArgErr()
|
||||||
}
|
}
|
||||||
|
|
||||||
filterId, err := strconv.Atoi(c.Val())
|
filterId, err := strconv.ParseInt(c.Val(), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, c.ArgErr()
|
return nil, c.ArgErr()
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ func setupPlugin(c *caddy.Controller) (*plug, error) {
|
||||||
|
|
||||||
// Initialize filter and add it to the list
|
// Initialize filter and add it to the list
|
||||||
p.settings.Filters = append(p.settings.Filters, plugFilter{
|
p.settings.Filters = append(p.settings.Filters, plugFilter{
|
||||||
ID: uint32(filterId),
|
ID: filterId,
|
||||||
Path: filterPath,
|
Path: filterPath,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ type rule struct {
|
||||||
isImportant bool
|
isImportant bool
|
||||||
|
|
||||||
// user-supplied data
|
// user-supplied data
|
||||||
listID uint32
|
listID int64
|
||||||
|
|
||||||
// suffix matching
|
// suffix matching
|
||||||
isSuffix bool
|
isSuffix bool
|
||||||
|
@ -146,7 +146,7 @@ type Result struct {
|
||||||
Reason Reason `json:",omitempty"` // Reason for blocking / unblocking
|
Reason Reason `json:",omitempty"` // Reason for blocking / unblocking
|
||||||
Rule string `json:",omitempty"` // Original rule text
|
Rule string `json:",omitempty"` // Original rule text
|
||||||
Ip net.IP `json:",omitempty"` // Not nil only in the case of a hosts file syntax
|
Ip net.IP `json:",omitempty"` // Not nil only in the case of a hosts file syntax
|
||||||
FilterID uint32 `json:",omitempty"` // Filter ID the rule belongs to
|
FilterID int64 `json:",omitempty"` // Filter ID the rule belongs to
|
||||||
}
|
}
|
||||||
|
|
||||||
// Matched can be used to see if any match at all was found, no matter filtered or not
|
// Matched can be used to see if any match at all was found, no matter filtered or not
|
||||||
|
@ -734,7 +734,7 @@ func (d *Dnsfilter) lookupCommon(host string, lookupstats *LookupStats, cache gc
|
||||||
//
|
//
|
||||||
|
|
||||||
// AddRule adds a rule, checking if it is a valid rule first and if it wasn't added already
|
// AddRule adds a rule, checking if it is a valid rule first and if it wasn't added already
|
||||||
func (d *Dnsfilter) AddRule(input string, filterListID uint32) error {
|
func (d *Dnsfilter) AddRule(input string, filterListID int64) error {
|
||||||
input = strings.TrimSpace(input)
|
input = strings.TrimSpace(input)
|
||||||
d.storageMutex.RLock()
|
d.storageMutex.RLock()
|
||||||
_, exists := d.storage[input]
|
_, exists := d.storage[input]
|
||||||
|
@ -797,7 +797,7 @@ func (d *Dnsfilter) AddRule(input string, filterListID uint32) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parses the hosts-syntax rules. Returns false if the input string is not of hosts-syntax.
|
// Parses the hosts-syntax rules. Returns false if the input string is not of hosts-syntax.
|
||||||
func (d *Dnsfilter) parseEtcHosts(input string, filterListID uint32) bool {
|
func (d *Dnsfilter) parseEtcHosts(input string, filterListID int64) bool {
|
||||||
// Strip the trailing comment
|
// Strip the trailing comment
|
||||||
ruleText := input
|
ruleText := input
|
||||||
if pos := strings.IndexByte(ruleText, '#'); pos != -1 {
|
if pos := strings.IndexByte(ruleText, '#'); pos != -1 {
|
||||||
|
|
Loading…
Reference in New Issue