@@ -49,6 +49,7 @@ public class AclImplTests {
4949 PermissionGrantingStrategy pgs ;
5050 AuditLogger mockAuditLogger ;
5151 ObjectIdentity objectIdentity = new ObjectIdentityImpl (TARGET_CLASS , 100 );
52+ private DefaultPermissionFactory permissionFactory ;
5253
5354 // ~ Methods
5455 // ========================================================================================================
@@ -60,6 +61,7 @@ public void setUp() {
6061 mockAuditLogger = mock (AuditLogger .class );
6162 pgs = new DefaultPermissionGrantingStrategy (mockAuditLogger );
6263 auth .setAuthenticated (true );
64+ permissionFactory = new DefaultPermissionFactory ();
6365 }
6466
6567 @ After
@@ -559,9 +561,39 @@ public void changingParentIsSuccessful() {
559561 childAcl .setParent (changeParentAcl );
560562 }
561563
564+ // SEC-2342
565+ @ Test
566+ public void maskPermissionGrantingStrategy () {
567+ DefaultPermissionGrantingStrategy maskPgs = new MaskPermissionGrantingStrategy (mockAuditLogger );
568+ MockAclService service = new MockAclService ();
569+ AclImpl acl = new AclImpl (objectIdentity , 1 , authzStrategy , maskPgs , null , null ,
570+ true , new PrincipalSid ("joe" ));
571+ Permission permission = permissionFactory .buildFromMask (BasePermission .READ .getMask () | BasePermission .WRITE .getMask ());
572+ Sid sid = new PrincipalSid ("ben" );
573+ acl .insertAce (0 , permission , sid , true );
574+ service .updateAcl (acl );
575+ List <Permission > permissions = Arrays .asList (BasePermission .READ );
576+ List <Sid > sids = Arrays .asList (sid );
577+ assertThat (acl .isGranted (permissions , sids , false )).isTrue ();
578+ }
579+
562580 // ~ Inner Classes
563581 // ==================================================================================================
564582
583+ private static class MaskPermissionGrantingStrategy extends DefaultPermissionGrantingStrategy {
584+ public MaskPermissionGrantingStrategy (AuditLogger auditLogger ) {
585+ super (auditLogger );
586+ }
587+
588+ @ Override
589+ protected boolean isGranted (AccessControlEntry ace , Permission p ) {
590+ if (p .getMask () != 0 ) {
591+ return (p .getMask () & ace .getPermission ().getMask ()) != 0 ;
592+ }
593+ return super .isGranted (ace , p );
594+ }
595+ }
596+
565597 private class MockAclService implements MutableAclService {
566598 public MutableAcl createAcl (ObjectIdentity objectIdentity )
567599 throws AlreadyExistsException {
0 commit comments