From e5e5e73ebb701191f37518d7ed1feb4e51758b2d Mon Sep 17 00:00:00 2001 From: "Theodor S. Midtlien" Date: Mon, 7 Sep 2026 12:28:36 +0200 Subject: [PATCH] Improve owner config parsing --- client/internal/ipcauth/identity.go | 15 +++++++++++++++ client/internal/profilemanager/service.go | 20 ++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/client/internal/ipcauth/identity.go b/client/internal/ipcauth/identity.go index 235fa9983..9d0699c26 100644 --- a/client/internal/ipcauth/identity.go +++ b/client/internal/ipcauth/identity.go @@ -186,3 +186,18 @@ func OwnerPrincipalForIdentity(id Identity) string { } return UIDPrincipal(id.UID) } + +func IdentityFromPrincipal(p Principal) (Identity, error) { + switch p.Kind { + case KindUID: + uid, err := strconv.ParseUint(p.Value, 10, 32) + if err != nil { + return Identity{}, err + } + return Identity{UID: uint32(uid)}, nil + case KindSID: + return Identity{SID: p.Value}, nil + default: + return Identity{}, nil + } +} diff --git a/client/internal/profilemanager/service.go b/client/internal/profilemanager/service.go index 7bff4d969..019c497cc 100644 --- a/client/internal/profilemanager/service.go +++ b/client/internal/profilemanager/service.go @@ -578,16 +578,28 @@ func readProfileName(path string) string { } // nolint: unused,unusedfunc -func readProfileOwner(path string) []string { +func readProfileOwner(path string) (ipcauth.Identity, error) { data, err := os.ReadFile(path) if err != nil { - return []string{} + return ipcauth.Identity{}, err } var meta ownerMeta if err := json.Unmarshal(data, &meta); err != nil { - return []string{} + return ipcauth.Identity{}, err } - return meta.Owners + if len(meta.Owners) < 1 { + return ipcauth.Identity{}, nil + } + owner := meta.Owners[0] + principal, ok := ipcauth.ParsePrincipal(owner) + if !ok { + return ipcauth.Identity{}, fmt.Errorf("unexpected owner principal: %s", owner) + } + id, err := ipcauth.IdentityFromPrincipal(principal) + if err != nil { + return id, fmt.Errorf("parsing identity from principal failed: %w", err) + } + return id, nil } // nolint: unused,unusedfunc