mirror of
https://github.com/apernet/OpenGFW.git
synced 2024-12-22 17:09:21 +08:00
Merge pull request #130 from apernet/fix-geo-leak
fix: do not reload geoip/geosite when reloading ruleset to prevent leaking references to streams
This commit is contained in:
commit
245ac46b65
@ -17,6 +17,7 @@ import (
|
|||||||
"github.com/apernet/OpenGFW/modifier"
|
"github.com/apernet/OpenGFW/modifier"
|
||||||
modUDP "github.com/apernet/OpenGFW/modifier/udp"
|
modUDP "github.com/apernet/OpenGFW/modifier/udp"
|
||||||
"github.com/apernet/OpenGFW/ruleset"
|
"github.com/apernet/OpenGFW/ruleset"
|
||||||
|
"github.com/apernet/OpenGFW/ruleset/builtins/geo"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
@ -259,8 +260,7 @@ func runMain(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
rsConfig := &ruleset.BuiltinConfig{
|
rsConfig := &ruleset.BuiltinConfig{
|
||||||
Logger: &rulesetLogger{},
|
Logger: &rulesetLogger{},
|
||||||
GeoSiteFilename: config.Ruleset.GeoSite,
|
GeoMatcher: geo.NewGeoMatcher(config.Ruleset.GeoSite, config.Ruleset.GeoIp),
|
||||||
GeoIpFilename: config.Ruleset.GeoIp,
|
|
||||||
ProtectedDialContext: engineConfig.IO.ProtectedDialContext,
|
ProtectedDialContext: engineConfig.IO.ProtectedDialContext,
|
||||||
}
|
}
|
||||||
rs, err := ruleset.CompileExprRules(rawRs, analyzers, modifiers, rsConfig)
|
rs, err := ruleset.CompileExprRules(rawRs, analyzers, modifiers, rsConfig)
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
"github.com/apernet/OpenGFW/analyzer"
|
"github.com/apernet/OpenGFW/analyzer"
|
||||||
"github.com/apernet/OpenGFW/modifier"
|
"github.com/apernet/OpenGFW/modifier"
|
||||||
"github.com/apernet/OpenGFW/ruleset/builtins"
|
"github.com/apernet/OpenGFW/ruleset/builtins"
|
||||||
"github.com/apernet/OpenGFW/ruleset/builtins/geo"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ExprRule is the external representation of an expression rule.
|
// ExprRule is the external representation of an expression rule.
|
||||||
@ -302,23 +301,22 @@ type Function struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildFunctionMap(config *BuiltinConfig) map[string]*Function {
|
func buildFunctionMap(config *BuiltinConfig) map[string]*Function {
|
||||||
geoMatcher := geo.NewGeoMatcher(config.GeoSiteFilename, config.GeoIpFilename)
|
|
||||||
return map[string]*Function{
|
return map[string]*Function{
|
||||||
"geoip": {
|
"geoip": {
|
||||||
InitFunc: geoMatcher.LoadGeoIP,
|
InitFunc: config.GeoMatcher.LoadGeoIP,
|
||||||
PatchFunc: nil,
|
PatchFunc: nil,
|
||||||
Func: func(params ...any) (any, error) {
|
Func: func(params ...any) (any, error) {
|
||||||
return geoMatcher.MatchGeoIp(params[0].(string), params[1].(string)), nil
|
return config.GeoMatcher.MatchGeoIp(params[0].(string), params[1].(string)), nil
|
||||||
},
|
},
|
||||||
Types: []reflect.Type{reflect.TypeOf(geoMatcher.MatchGeoIp)},
|
Types: []reflect.Type{reflect.TypeOf(config.GeoMatcher.MatchGeoIp)},
|
||||||
},
|
},
|
||||||
"geosite": {
|
"geosite": {
|
||||||
InitFunc: geoMatcher.LoadGeoSite,
|
InitFunc: config.GeoMatcher.LoadGeoSite,
|
||||||
PatchFunc: nil,
|
PatchFunc: nil,
|
||||||
Func: func(params ...any) (any, error) {
|
Func: func(params ...any) (any, error) {
|
||||||
return geoMatcher.MatchGeoSite(params[0].(string), params[1].(string)), nil
|
return config.GeoMatcher.MatchGeoSite(params[0].(string), params[1].(string)), nil
|
||||||
},
|
},
|
||||||
Types: []reflect.Type{reflect.TypeOf(geoMatcher.MatchGeoSite)},
|
Types: []reflect.Type{reflect.TypeOf(config.GeoMatcher.MatchGeoSite)},
|
||||||
},
|
},
|
||||||
"cidr": {
|
"cidr": {
|
||||||
InitFunc: nil,
|
InitFunc: nil,
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/apernet/OpenGFW/analyzer"
|
"github.com/apernet/OpenGFW/analyzer"
|
||||||
"github.com/apernet/OpenGFW/modifier"
|
"github.com/apernet/OpenGFW/modifier"
|
||||||
|
"github.com/apernet/OpenGFW/ruleset/builtins/geo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Action int
|
type Action int
|
||||||
@ -102,7 +103,6 @@ type Logger interface {
|
|||||||
|
|
||||||
type BuiltinConfig struct {
|
type BuiltinConfig struct {
|
||||||
Logger Logger
|
Logger Logger
|
||||||
GeoSiteFilename string
|
GeoMatcher *geo.GeoMatcher
|
||||||
GeoIpFilename string
|
|
||||||
ProtectedDialContext func(ctx context.Context, network, address string) (net.Conn, error)
|
ProtectedDialContext func(ctx context.Context, network, address string) (net.Conn, error)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user