mirror of
https://github.com/safing/portmaster
synced 2025-09-05 03:59:11 +00:00
Move resolving unbreak filter list IDs to filterlists module
This commit is contained in:
parent
8a98f69fca
commit
092b1cd8a0
3 changed files with 39 additions and 16 deletions
|
@ -2,19 +2,12 @@ package firewall
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/safing/portbase/config"
|
"github.com/safing/portbase/config"
|
||||||
"github.com/safing/portbase/log"
|
|
||||||
"github.com/safing/portbase/modules"
|
"github.com/safing/portbase/modules"
|
||||||
"github.com/safing/portbase/modules/subsystems"
|
"github.com/safing/portbase/modules/subsystems"
|
||||||
_ "github.com/safing/portmaster/core"
|
_ "github.com/safing/portmaster/core"
|
||||||
"github.com/safing/portmaster/intel/filterlists"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var filterModule *modules.Module
|
||||||
filterModule *modules.Module
|
|
||||||
|
|
||||||
unbreakFilterListIDs = []string{"UNBREAK"}
|
|
||||||
resolvedUnbreakFilterListIDs []string
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
filterModule = modules.Register("filter", filterPrep, filterStart, nil, "core", "intel")
|
filterModule = modules.Register("filter", filterPrep, filterStart, nil, "core", "intel")
|
||||||
|
@ -51,12 +44,5 @@ func filterPrep() (err error) {
|
||||||
func filterStart() error {
|
func filterStart() error {
|
||||||
getConfig()
|
getConfig()
|
||||||
|
|
||||||
// TODO: Re-resolve IDs when filterlist index changes.
|
|
||||||
resolvedIDs, err := filterlists.ResolveListIDs(unbreakFilterListIDs)
|
|
||||||
if err != nil {
|
|
||||||
log.Warningf("filter: failed to resolve unbreak filter list IDs: %s", err)
|
|
||||||
} else {
|
|
||||||
resolvedUnbreakFilterListIDs = resolvedIDs
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/safing/portmaster/intel/filterlists"
|
||||||
|
|
||||||
"github.com/agext/levenshtein"
|
"github.com/agext/levenshtein"
|
||||||
"golang.org/x/net/publicsuffix"
|
"golang.org/x/net/publicsuffix"
|
||||||
|
|
||||||
|
@ -435,6 +437,7 @@ func checkFilterLists(ctx context.Context, conn *network.Connection, p *profile.
|
||||||
switch result {
|
switch result {
|
||||||
case endpoints.Denied:
|
case endpoints.Denied:
|
||||||
// If the connection matches a filter list, check if the "unbreak" list matches too and abort blocking.
|
// If the connection matches a filter list, check if the "unbreak" list matches too and abort blocking.
|
||||||
|
resolvedUnbreakFilterListIDs := filterlists.GetUnbreakFilterListIDs()
|
||||||
for _, blockedListID := range conn.Entity.BlockedByLists {
|
for _, blockedListID := range conn.Entity.BlockedByLists {
|
||||||
for _, unbreakListID := range resolvedUnbreakFilterListIDs {
|
for _, unbreakListID := range resolvedUnbreakFilterListIDs {
|
||||||
if blockedListID == unbreakListID {
|
if blockedListID == unbreakListID {
|
||||||
|
|
|
@ -196,8 +196,12 @@ func updateListIndex() error {
|
||||||
listIndexUpdate.Version(),
|
listIndexUpdate.Version(),
|
||||||
)
|
)
|
||||||
default:
|
default:
|
||||||
log.Debug("filterlists: index is up to date")
|
|
||||||
// List is in cache and current, there is nothing to do.
|
// List is in cache and current, there is nothing to do.
|
||||||
|
log.Debug("filterlists: index is up to date")
|
||||||
|
|
||||||
|
// Update the unbreak filter list IDs on initial load.
|
||||||
|
updateUnbreakFilterListIDs()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
case listIndexUpdate.UpgradeAvailable():
|
case listIndexUpdate.UpgradeAvailable():
|
||||||
|
@ -225,6 +229,9 @@ func updateListIndex() error {
|
||||||
}
|
}
|
||||||
log.Debugf("intel/filterlists: updated list index in cache to %s", index.Version)
|
log.Debugf("intel/filterlists: updated list index in cache to %s", index.Version)
|
||||||
|
|
||||||
|
// Update the unbreak filter list IDs after an update.
|
||||||
|
updateUnbreakFilterListIDs()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,3 +259,30 @@ func ResolveListIDs(ids []string) ([]string, error) {
|
||||||
|
|
||||||
return resolved, nil
|
return resolved, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
unbreakCategoryIDs = []string{"UNBREAK"}
|
||||||
|
|
||||||
|
unbreakIDs []string
|
||||||
|
unbreakIDsLock sync.Mutex
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetUnbreakFilterListIDs returns the resolved list of all unbreak filter lists.
|
||||||
|
func GetUnbreakFilterListIDs() []string {
|
||||||
|
unbreakIDsLock.Lock()
|
||||||
|
defer unbreakIDsLock.Unlock()
|
||||||
|
|
||||||
|
return unbreakIDs
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateUnbreakFilterListIDs() {
|
||||||
|
unbreakIDsLock.Lock()
|
||||||
|
defer unbreakIDsLock.Unlock()
|
||||||
|
|
||||||
|
resolvedIDs, err := ResolveListIDs(unbreakCategoryIDs)
|
||||||
|
if err != nil {
|
||||||
|
log.Warningf("filter: failed to resolve unbreak filter list IDs: %s", err)
|
||||||
|
} else {
|
||||||
|
unbreakIDs = resolvedIDs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue