libtailscale: use syspolicy RegisterStore rather than deprecated RegisterHandler

Updates tailscale/tailscale#17022

Signed-off-by: Brad Fitzpatrick <brad@danga.com>
pull/697/head
Brad Fitzpatrick 3 months ago
parent 981f5e8770
commit 91f82b0732

@ -51,7 +51,7 @@ type App struct {
appCtx AppContext appCtx AppContext
store *stateStore store *stateStore
policyStore *syspolicyHandler policyStore *syspolicyStore
logIDPublicAtomic atomic.Pointer[logid.PublicID] logIDPublicAtomic atomic.Pointer[logid.PublicID]
localAPIHandler http.Handler localAPIHandler http.Handler

@ -10,33 +10,34 @@ import (
"tailscale.com/util/set" "tailscale.com/util/set"
"tailscale.com/util/syspolicy" "tailscale.com/util/syspolicy"
"tailscale.com/util/syspolicy/pkey"
) )
// syspolicyHandler is a syspolicy handler for the Android version of the Tailscale client, // syspolicyStore is a syspolicy Store for the Android version of the Tailscale client,
// which lets the main networking code read values set via the Android RestrictionsManager. // which lets the main networking code read values set via the Android RestrictionsManager.
type syspolicyHandler struct { type syspolicyStore struct {
a *App a *App
mu sync.RWMutex mu sync.RWMutex
cbs set.HandleSet[func()] cbs set.HandleSet[func()]
} }
func (h *syspolicyHandler) ReadString(key string) (string, error) { func (h *syspolicyStore) ReadString(key pkey.Key) (string, error) {
if key == "" { if key == "" {
return "", syspolicy.ErrNoSuchKey return "", syspolicy.ErrNoSuchKey
} }
retVal, err := h.a.appCtx.GetSyspolicyStringValue(key) retVal, err := h.a.appCtx.GetSyspolicyStringValue(string(key))
return retVal, translateHandlerError(err) return retVal, translateHandlerError(err)
} }
func (h *syspolicyHandler) ReadBoolean(key string) (bool, error) { func (h *syspolicyStore) ReadBoolean(key pkey.Key) (bool, error) {
if key == "" { if key == "" {
return false, syspolicy.ErrNoSuchKey return false, syspolicy.ErrNoSuchKey
} }
retVal, err := h.a.appCtx.GetSyspolicyBooleanValue(key) retVal, err := h.a.appCtx.GetSyspolicyBooleanValue(string(key))
return retVal, translateHandlerError(err) return retVal, translateHandlerError(err)
} }
func (h *syspolicyHandler) ReadUInt64(key string) (uint64, error) { func (h *syspolicyStore) ReadUInt64(key pkey.Key) (uint64, error) {
if key == "" { if key == "" {
return 0, syspolicy.ErrNoSuchKey return 0, syspolicy.ErrNoSuchKey
} }
@ -44,11 +45,11 @@ func (h *syspolicyHandler) ReadUInt64(key string) (uint64, error) {
return 0, errors.New("ReadUInt64 is not implemented on Android") return 0, errors.New("ReadUInt64 is not implemented on Android")
} }
func (h *syspolicyHandler) ReadStringArray(key string) ([]string, error) { func (h *syspolicyStore) ReadStringArray(key pkey.Key) ([]string, error) {
if key == "" { if key == "" {
return nil, syspolicy.ErrNoSuchKey return nil, syspolicy.ErrNoSuchKey
} }
retVal, err := h.a.appCtx.GetSyspolicyStringArrayJSONValue(key) retVal, err := h.a.appCtx.GetSyspolicyStringArrayJSONValue(string(key))
if err := translateHandlerError(err); err != nil { if err := translateHandlerError(err); err != nil {
return nil, err return nil, err
} }
@ -63,7 +64,7 @@ func (h *syspolicyHandler) ReadStringArray(key string) ([]string, error) {
return arr, err return arr, err
} }
func (h *syspolicyHandler) RegisterChangeCallback(cb func()) (unregister func(), err error) { func (h *syspolicyStore) RegisterChangeCallback(cb func()) (unregister func(), err error) {
h.mu.Lock() h.mu.Lock()
handle := h.cbs.Add(cb) handle := h.cbs.Add(cb)
h.mu.Unlock() h.mu.Unlock()
@ -74,7 +75,7 @@ func (h *syspolicyHandler) RegisterChangeCallback(cb func()) (unregister func(),
}, nil }, nil
} }
func (h *syspolicyHandler) notifyChanged() { func (h *syspolicyStore) notifyChanged() {
h.mu.RLock() h.mu.RLock()
for _, cb := range h.cbs { for _, cb := range h.cbs {
go cb() go cb()

@ -19,7 +19,8 @@ import (
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/types/logid" "tailscale.com/types/logid"
"tailscale.com/util/clientmetric" "tailscale.com/util/clientmetric"
"tailscale.com/util/syspolicy" "tailscale.com/util/syspolicy/rsop"
"tailscale.com/util/syspolicy/setting"
) )
const defaultMTU = 1280 // minimalMTU from wgengine/userspace.go const defaultMTU = 1280 // minimalMTU from wgengine/userspace.go
@ -39,9 +40,9 @@ func newApp(dataDir, directFileRoot string, appCtx AppContext) Application {
a.ready.Add(2) a.ready.Add(2)
a.store = newStateStore(a.appCtx) a.store = newStateStore(a.appCtx)
a.policyStore = &syspolicyHandler{a: a} a.policyStore = &syspolicyStore{a: a}
netmon.RegisterInterfaceGetter(a.getInterfaces) netmon.RegisterInterfaceGetter(a.getInterfaces)
syspolicy.RegisterHandler(a.policyStore) rsop.RegisterStore("DeviceHandler", setting.DeviceScope, a.policyStore)
go a.watchFileOpsChanges() go a.watchFileOpsChanges()
go func() { go func() {

Loading…
Cancel
Save