sddl 0.1.6

a library to parse and analyse SDDL Strings
Documentation
use sddl::SecurityDescriptor;

/// <https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/2918391b-75b9-4eeb-83f0-7fdc04a5c6c9>
#[test]
fn testcase1() {
    let sddl_string = "O:BAG:BAD:P(A;CIOI;GRGX;;;BU)(A;CIOI;GA;;;BA)(A;CIOI;GA;;;SY)(A;CIOI;GA;;;CO)S:P(AU;FA;GR;;;WD)";
    let domain_rid = [1,2,3];
    let _ = SecurityDescriptor::from_sddl(sddl_string, Some(&domain_rid)).unwrap();
}

#[test]
fn testcase1_reversed() {
    let sddl_string = "O:BAG:BAS:P(AU;FA;GR;;;WD)D:P(A;CIOI;GRGX;;;BU)(A;CIOI;GA;;;BA)(A;CIOI;GA;;;SY)(A;CIOI;GA;;;CO)";
    let domain_rid = [1,2,3];
    let _ = SecurityDescriptor::from_sddl(sddl_string, Some(&domain_rid)).unwrap();
}

#[test]
fn testcase2() {
    let sddl_string = "O:S-1-1-0G:S-1-1-0D:(A;OICISA;GRGWGXGAMAASSYWOWDRCSD;;;WD)";
    let domain_rid = [1,2,3];
    let sd = SecurityDescriptor::from_sddl(sddl_string, Some(&domain_rid)).unwrap();
    assert_eq!(&format!("{sd}"), sddl_string);
}

#[test]
fn testcase2_numeric() {
    let sddl_string = "O:S-1-1-0G:S-1-1-0D:(A;OICISA;GRGWGXGAMAASSYWOWDRCSD;;;WD)";
    let domain_rid = [1,2,3];
    let sd = SecurityDescriptor::from_sddl(sddl_string, Some(&domain_rid)).unwrap();
    assert_eq!(&format!("{sd:#}"), "O:S-1-1-0G:S-1-1-0D:(A;OICISA;0xf31f0000;;;WD)");
    assert_eq!(&format!("{sd:}"), sddl_string);
}