@@ -78,14 +78,17 @@ pub const NOC_CAT_SUBJECT_PREFIX: u64 = 0xFFFF_FFFD_0000_0000;
78
78
const NOC_CAT_ID_MASK : u64 = 0xFFFF_0000 ;
79
79
const NOC_CAT_VERSION_MASK : u64 = 0xFFFF ;
80
80
81
+ /// Is this identifier a NOC CAT
81
82
fn is_noc_cat ( id : u64 ) -> bool {
82
83
( id & NOC_CAT_SUBJECT_PREFIX ) == NOC_CAT_SUBJECT_PREFIX
83
84
}
84
85
86
+ /// Get the 16-bit NOC CAT id from the identifier
85
87
fn get_noc_cat_id ( id : u64 ) -> u64 {
86
88
( id & NOC_CAT_ID_MASK ) >> 16
87
89
}
88
90
91
+ /// Get the 16-bit NOC CAT version from the identifier
89
92
fn get_noc_cat_version ( id : u64 ) -> u64 {
90
93
id & NOC_CAT_VERSION_MASK
91
94
}
@@ -96,6 +99,7 @@ pub fn gen_noc_cat(id: u16, version: u16) -> u32 {
96
99
( ( id as u32 ) << 16 ) | version as u32
97
100
}
98
101
102
+ /// The Subjects that identify the Accessor
99
103
pub struct AccessorSubjects ( [ u64 ; MAX_ACCESSOR_SUBJECTS ] ) ;
100
104
101
105
impl AccessorSubjects {
@@ -816,4 +820,34 @@ mod tests {
816
820
req. set_target_perms ( Access :: RWVA ) ;
817
821
assert_eq ! ( req. allow( ) , true ) ;
818
822
}
823
+
824
+ #[ test]
825
+ fn test_delete_for_fabric ( ) {
826
+ let am = Arc :: new ( AclMgr :: new_with ( false ) . unwrap ( ) ) ;
827
+ am. erase_all ( ) ;
828
+ let path = GenericPath :: new ( Some ( 1 ) , Some ( 1234 ) , None ) ;
829
+ let accessor2 = Accessor :: new ( 2 , AccessorSubjects :: new ( 112233 ) , AuthMode :: Case , am. clone ( ) ) ;
830
+ let mut req2 = AccessReq :: new ( & accessor2, & path, Access :: READ ) ;
831
+ req2. set_target_perms ( Access :: RWVA ) ;
832
+ let accessor3 = Accessor :: new ( 3 , AccessorSubjects :: new ( 112233 ) , AuthMode :: Case , am. clone ( ) ) ;
833
+ let mut req3 = AccessReq :: new ( & accessor3, & path, Access :: READ ) ;
834
+ req3. set_target_perms ( Access :: RWVA ) ;
835
+
836
+ // Allow for subject match - target is wildcard - Fabric idx 2
837
+ let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
838
+ new. add_subject ( 112233 ) . unwrap ( ) ;
839
+ am. add ( new) . unwrap ( ) ;
840
+
841
+ // Allow for subject match - target is wildcard - Fabric idx 3
842
+ let mut new = AclEntry :: new ( 3 , Privilege :: VIEW , AuthMode :: Case ) ;
843
+ new. add_subject ( 112233 ) . unwrap ( ) ;
844
+ am. add ( new) . unwrap ( ) ;
845
+
846
+ // Req for Fabric idx 2 gets denied, and that for Fabric idx 3 is allowed
847
+ assert_eq ! ( req2. allow( ) , true ) ;
848
+ assert_eq ! ( req3. allow( ) , true ) ;
849
+ am. delete_for_fabric ( 2 ) . unwrap ( ) ;
850
+ assert_eq ! ( req2. allow( ) , false ) ;
851
+ assert_eq ! ( req3. allow( ) , true ) ;
852
+ }
819
853
}
0 commit comments