Fix review comments: NextFilterId collisions

This commit is contained in:
Andrey Meshkov 2018-10-30 17:16:20 +03:00
parent 0e065a2e61
commit 54bdacdde2
5 changed files with 29 additions and 23 deletions

6
app.go
View File

@ -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)

View File

@ -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,
} }

View File

@ -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)))

View File

@ -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,
}) })
} }

View File

@ -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 {