sddl 0.1.3

a library to parse and analyse SDDL Strings
Documentation
use crate::*;
pub struct ParsedContents {
    pub flags: ace::header::Flags,
    pub mask: AccessMask,
    pub sid: Sid,
    pub object_type: Option<Guid>,
    pub inherited_object_type: Option<Guid>,
}

impl ParsedContents {
    pub(crate) fn new(
        flags: ace::header::Flags,
        mask: AccessMask,
        sid: Sid,
        object_type: Option<Guid>,
        inherited_object_type: Option<Guid>,
    ) -> Self {
        Self {
            flags,
            mask,
            sid,
            object_type,
            inherited_object_type,
        }
    }

    pub(crate) fn into_ace(self, ace_type: ace::Type) -> Ace {
        let flags = self.flags;
        let mask = self.mask;
        let sid = self.sid;
        let object_type = self.object_type;
        let inherited_object_type = self.inherited_object_type;
        match ace_type {
            ace::Type::ACCESS_ALLOWED_ACE_TYPE => Ace::access_allowed(flags, mask, sid),
            ace::Type::ACCESS_DENIED_ACE_TYPE => Ace::access_denied(flags, mask, sid),
            ace::Type::SYSTEM_AUDIT_ACE_TYPE => Ace::system_audit(flags, mask, sid),
            ace::Type::SYSTEM_ALARM_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_ALLOWED_COMPOUND_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_ALLOWED_OBJECT_ACE_TYPE => {
                Ace::access_allowed_object(flags, mask, object_type, inherited_object_type, sid)
            }
            ace::Type::ACCESS_DENIED_OBJECT_ACE_TYPE => {
                Ace::access_denied_object(flags, mask, object_type, inherited_object_type, sid)
            }
            ace::Type::SYSTEM_AUDIT_OBJECT_ACE_TYPE => Ace::system_audit_object(
                flags,
                mask,
                object_type,
                inherited_object_type,
                sid,
                vec![],
            ),
            ace::Type::SYSTEM_ALARM_OBJECT_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_ALLOWED_CALLBACK_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_DENIED_CALLBACK_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE => unimplemented!(),
            ace::Type::ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_AUDIT_CALLBACK_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_ALARM_CALLBACK_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_MANDATORY_LABEL_ACE_TYPE => {
                Ace::system_mandatory_label(flags, mask, sid)
            }
            ace::Type::SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE => unimplemented!(),
            ace::Type::SYSTEM_SCOPED_POLICY_ID_ACE_TYPE => {
                Ace::system_scoped_policy_id(flags, mask, sid)
            }
        }
    }
}