Move resolving unbreak filter list IDs to filterlists module

This commit is contained in:
Daniel 2022-08-30 13:54:34 +02:00
parent 8a98f69fca
commit 092b1cd8a0
3 changed files with 39 additions and 16 deletions

View file

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

View file

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

View file

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