Skip to content

Commit

Permalink
adding a security policy that allows access if and only if all given …
Browse files Browse the repository at this point in the history
…security policies allow access. this contributes to b/221149437 and is similar to cl/442582915
  • Loading branch information
marvinliu authored and ejona86 committed Apr 28, 2022
1 parent 4c916c4 commit fdd9ab4
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
31 changes: 31 additions & 0 deletions binder/src/main/java/io/grpc/binder/SecurityPolicies.java
Expand Up @@ -187,4 +187,35 @@ private static boolean checkPackageSignature(
}
return false;
}

/**
* Creates a {@link SecurityPolicy} that allows access if and only if *all* of the specified
* {@code securityPolicies} allow access.
*
* @param securityPolicies the security policies that all must allow access.
* @throws NullPointerException if any of the inputs are {@code null}.
* @throws IllegalArgumentException if {@code securityPolicies} is empty.
*/
public static SecurityPolicy allOf(SecurityPolicy... securityPolicies) {
Preconditions.checkNotNull(securityPolicies, "securityPolicies");
Preconditions.checkArgument(securityPolicies.length > 0, "securityPolicies must not be empty");

return allOfSecurityPolicy(securityPolicies);
}

private static SecurityPolicy allOfSecurityPolicy(SecurityPolicy... securityPolicies) {
return new SecurityPolicy() {
@Override
public Status checkAuthorization(int uid) {
for (SecurityPolicy policy : securityPolicies) {
Status checkAuth = policy.checkAuthorization(uid);
if (!checkAuth.isOk()) {
return checkAuth;
}
}

return Status.OK;
}
};
}
}
20 changes: 20 additions & 0 deletions binder/src/test/java/io/grpc/binder/SecurityPoliciesTest.java
Expand Up @@ -171,4 +171,24 @@ public void testHasSignature_failsIfUidUnknown() throws Exception {
assertThat(policy.checkAuthorization(OTHER_UID_UNKNOWN).getCode())
.isEqualTo(Status.UNAUTHENTICATED.getCode());
}

@Test
public void testAllOf_succeedsIfAllSecurityPoliciesAllowed() throws Exception {
policy = SecurityPolicies.allOf(SecurityPolicies.internalOnly());

assertThat(policy.checkAuthorization(MY_UID).getCode()).isEqualTo(Status.OK.getCode());
}

@Test
public void testAllOf_failsIfOneSecurityPoliciesNotAllowed() throws Exception {
policy =
SecurityPolicies.allOf(
SecurityPolicies.internalOnly(),
SecurityPolicies.permissionDenied("Not allowed SecurityPolicy"));

assertThat(policy.checkAuthorization(MY_UID).getCode())
.isEqualTo(Status.PERMISSION_DENIED.getCode());
assertThat(policy.checkAuthorization(MY_UID).getDescription())
.contains("Not allowed SecurityPolicy");
}
}

0 comments on commit fdd9ab4

Please sign in to comment.