Skip to main content

PolicyIndex

Struct PolicyIndex 

Source
pub struct PolicyIndex { /* private fields */ }
Expand description

An index for facilitating fast lookup of common abstractions inside parsed binary policy data structures. Typically, data is indexed by an enum that describes a well-known value and the index stores the offset of the data in the binary policy to avoid scanning a collection to find an element that contains a matching string. For example, the policy contains a collection of classes that are identified by string names included in each collection entry. However, policy_index.classes(KernelClass::Process).unwrap() yields the offset in the policy’s collection of classes where the “process” class resides.

Implementations§

Source§

impl PolicyIndex

Source

pub fn new(parsed_policy: ParsedPolicy) -> Result<Self, Error>

Constructs a PolicyIndex that indexes over well-known policy elements.

[Class]es and [Permission]s used by the kernel are amongst the indexed elements. The policy’s handle_unknown() configuration determines whether the policy can be loaded even if it omits classes or permissions expected by the kernel, and whether to allow or deny those permissions if so.

Source

pub fn kernel_permission_to_access_vector<P: Into<KernelPermission>>( &self, permission: P, ) -> Option<AccessVector>

Returns the policy entry for a well-known kernel object class permission.

Source

pub fn compute_create_context_with_name( &self, source: &SecurityContext, target: &SecurityContext, class: ObjectClass, name: NullessByteStr<'_>, ) -> Option<SecurityContext>

Returns the security context that should be applied to a newly created SELinux object according to source and target security contexts, as well as the new object’s class.

If no filename-transition rule matches the supplied arguments then None is returned, and the caller should fall-back to filename-independent labeling via [compute_create_context()]

Source

pub fn compute_create_context( &self, source: &SecurityContext, target: &SecurityContext, class: ObjectClass, ) -> SecurityContext

Returns the security context that should be applied to a newly created SELinux object according to source and target security contexts, as well as the new object’s class.

Computation follows the “create” algorithm for labeling newly created objects:

  • user is taken from the source.
  • role, type and range are taken from the matching transition rules, if any.
  • role, type and range fall-back to the source or target values according to policy.

If no transitions apply, and the policy does not explicitly specify defaults then the role, type and range values have defaults chosen based on the class:

  • For “process”, and socket-like classes, role, type and range are taken from the source.
  • Otherwise role is “object_r”, type is taken from target and range is set to the low level of the source range.

Methods from Deref<Target = ParsedPolicy>§

Source

pub fn has_policycap(&self, policy_cap: PolicyCap) -> bool

Returns true if the specified capability is in the policy’s enabled capabilities set.

Source

pub fn validate(&self) -> Result<(), Error>

Trait Implementations§

Source§

impl Debug for PolicyIndex

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for PolicyIndex

Source§

type Target = ParsedPolicy

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<F, N> FidlIntoNative<Box<N>> for F
where F: FidlIntoNative<N>,

§

fn fidl_into_native(self) -> Box<N>

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> MultiArchFrom<T> for U
where U: From<T>,

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,

Source§

impl<B, A> LockEqualOrBefore<B> for A
where A: LockBefore<B>,