mirror of
https://github.com/flatpak/flatpak.git
synced 2026-09-21 20:55:48 -04:00
context: Add new FlatpakPermission(s) type
This adds a new type that is meant to track more complex permissions than a pure bitmask, including conditional dependencies. It is not yet used, but it will be used for at least the socket and device permissions. For each possible permission we track whether the permission is unconditionally allowed, unconditionally disallowed, or if it is conditionally allowed (allowed if some conditions are met). Additionally we track for each permission whether stacking the context on top of another will reset permissions in the layer below. This is a new feature, because previously merging layers *always* overrode the value from below, whereas conditional permissions can either stack on top of, or replace the underlying layer. In terms of the keyfile, there are 4 possible types of layers: 1) Add a permission, removes all partial permissions below socket=pipewire 2) Remove access, removes both partial and full permissions below socket=!pipewire 3) Adds a partial permission, keeping whatever is already there: socket=pipewire;pipewire:if:has-wayland Note: This adds a plain `pipewire` for backwards compat. Note: If parent has full pipewire access, this is a no-op. 4) Adds a partial permission, remove all previous access socket=!pipewire;pipewire;pipewire:if:has-wayland Note: This seems weird as it has both !pipewire and pipewire, but older versions will read these in order and get the right result. Additionally, partial permissions can have multiple conditions: socket=pipewire;pipewire:if:has-something;pipewire:if:has-other; In such a case the socket will be accessible if any condition matches. Conditions can also be negated: socket=pipewire;pipewire:if:!has-something; Due to backwards compatibility we have to add the non-conditional permission as well as the conditional, as older flatpak will ignore the conditional. This is handle when serializing/deserializing the permissions, and internally we don't have to care about this.
This commit is contained in:
500 Internal Server Error
Gitea Version: 1.28.0+dev-477-g8b6ad49a5f