| Index: sandbox/mac/bootstrap_sandbox_unittest.mm
|
| diff --git a/sandbox/mac/bootstrap_sandbox_unittest.mm b/sandbox/mac/bootstrap_sandbox_unittest.mm
|
| index f8d8165b868057edfc6a170eb8ca6d2237ff4439..f9068d687ba962b8c89e64ba178debbfae4566c6 100644
|
| --- a/sandbox/mac/bootstrap_sandbox_unittest.mm
|
| +++ b/sandbox/mac/bootstrap_sandbox_unittest.mm
|
| @@ -88,7 +88,7 @@ class BootstrapSandboxTest : public base::MultiProcessTest {
|
| BootstrapSandboxPolicy BaselinePolicy() {
|
| BootstrapSandboxPolicy policy;
|
| if (base::mac::IsOSSnowLeopard())
|
| - policy["com.apple.SecurityServer"] = Rule(POLICY_ALLOW);
|
| + policy.rules["com.apple.SecurityServer"] = Rule(POLICY_ALLOW);
|
| return policy;
|
| }
|
|
|
| @@ -149,11 +149,11 @@ TEST_F(BootstrapSandboxTest, DistributedNotifications_SandboxAllow) {
|
|
|
| BootstrapSandboxPolicy policy(BaselinePolicy());
|
| // 10.9:
|
| - policy["com.apple.distributed_notifications@Uv3"] = Rule(POLICY_ALLOW);
|
| - policy["com.apple.distributed_notifications@1v3"] = Rule(POLICY_ALLOW);
|
| + policy.rules["com.apple.distributed_notifications@Uv3"] = Rule(POLICY_ALLOW);
|
| + policy.rules["com.apple.distributed_notifications@1v3"] = Rule(POLICY_ALLOW);
|
| // 10.6:
|
| - policy["com.apple.system.notification_center"] = Rule(POLICY_ALLOW);
|
| - policy["com.apple.distributed_notifications.2"] = Rule(POLICY_ALLOW);
|
| + policy.rules["com.apple.system.notification_center"] = Rule(POLICY_ALLOW);
|
| + policy.rules["com.apple.distributed_notifications.2"] = Rule(POLICY_ALLOW);
|
| sandbox_->RegisterSandboxPolicy(2, policy);
|
|
|
| base::ProcessHandle pid;
|
| @@ -175,7 +175,7 @@ const char kTestServer[] = "org.chromium.test_bootstrap_server";
|
|
|
| TEST_F(BootstrapSandboxTest, PolicyDenyError) {
|
| BootstrapSandboxPolicy policy(BaselinePolicy());
|
| - policy[kTestServer] = Rule(POLICY_DENY_ERROR);
|
| + policy.rules[kTestServer] = Rule(POLICY_DENY_ERROR);
|
| sandbox_->RegisterSandboxPolicy(1, policy);
|
|
|
| RunChildWithPolicy(1, "PolicyDenyError", NULL);
|
| @@ -198,7 +198,7 @@ MULTIPROCESS_TEST_MAIN(PolicyDenyError) {
|
|
|
| TEST_F(BootstrapSandboxTest, PolicyDenyDummyPort) {
|
| BootstrapSandboxPolicy policy(BaselinePolicy());
|
| - policy[kTestServer] = Rule(POLICY_DENY_DUMMY_PORT);
|
| + policy.rules[kTestServer] = Rule(POLICY_DENY_DUMMY_PORT);
|
| sandbox_->RegisterSandboxPolicy(1, policy);
|
|
|
| RunChildWithPolicy(1, "PolicyDenyDummyPort", NULL);
|
| @@ -247,7 +247,7 @@ TEST_F(BootstrapSandboxTest, PolicySubstitutePort) {
|
| EXPECT_EQ(1u, send_rights);
|
|
|
| BootstrapSandboxPolicy policy(BaselinePolicy());
|
| - policy[kTestServer] = Rule(port);
|
| + policy.rules[kTestServer] = Rule(port);
|
| sandbox_->RegisterSandboxPolicy(1, policy);
|
|
|
| RunChildWithPolicy(1, "PolicySubstitutePort", NULL);
|
| @@ -340,4 +340,76 @@ TEST_F(BootstrapSandboxTest, ForwardMessageInProcess) {
|
| EXPECT_EQ(2u, send_rights);
|
| }
|
|
|
| +const char kDefaultRuleTestAllow[] =
|
| + "org.chromium.sandbox.test.DefaultRuleAllow";
|
| +const char kDefaultRuleTestDeny[] =
|
| + "org.chromium.sandbox.test.DefaultRuleAllow.Deny";
|
| +
|
| +TEST_F(BootstrapSandboxTest, DefaultRuleAllow) {
|
| + mach_port_t task = mach_task_self();
|
| +
|
| + mach_port_t port;
|
| + ASSERT_EQ(KERN_SUCCESS, mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE,
|
| + &port));
|
| + base::mac::ScopedMachReceiveRight scoped_port_recv(port);
|
| +
|
| + ASSERT_EQ(KERN_SUCCESS, mach_port_insert_right(task, port, port,
|
| + MACH_MSG_TYPE_MAKE_SEND));
|
| + base::mac::ScopedMachSendRight scoped_port_send(port);
|
| +
|
| + BootstrapSandboxPolicy policy;
|
| + policy.default_rule = Rule(POLICY_ALLOW);
|
| + policy.rules[kDefaultRuleTestAllow] = Rule(port);
|
| + policy.rules[kDefaultRuleTestDeny] = Rule(POLICY_DENY_ERROR);
|
| + sandbox_->RegisterSandboxPolicy(3, policy);
|
| +
|
| + base::scoped_nsobject<DistributedNotificationObserver> observer(
|
| + [[DistributedNotificationObserver alloc] init]);
|
| +
|
| + int pid = 0;
|
| + RunChildWithPolicy(3, "DefaultRuleAllow", &pid);
|
| + EXPECT_GT(pid, 0);
|
| +
|
| + [observer waitForNotification];
|
| + EXPECT_EQ(1, [observer receivedCount]);
|
| + EXPECT_EQ(pid, [[observer object] intValue]);
|
| +
|
| + struct SubstitutePortAckRecv msg;
|
| + bzero(&msg, sizeof(msg));
|
| + msg.header.msgh_size = sizeof(msg);
|
| + msg.header.msgh_local_port = port;
|
| + kern_return_t kr = mach_msg(&msg.header, MACH_RCV_MSG, 0,
|
| + msg.header.msgh_size, port,
|
| + TestTimeouts::tiny_timeout().InMilliseconds(), MACH_PORT_NULL);
|
| + EXPECT_EQ(KERN_SUCCESS, kr);
|
| +
|
| + EXPECT_EQ(0, strncmp(kSubstituteAck, msg.buf, sizeof(msg.buf)));
|
| +}
|
| +
|
| +MULTIPROCESS_TEST_MAIN(DefaultRuleAllow) {
|
| + [[NSDistributedNotificationCenter defaultCenter]
|
| + postNotificationName:kTestNotification
|
| + object:[NSString stringWithFormat:@"%d", getpid()]];
|
| +
|
| + mach_port_t port = MACH_PORT_NULL;
|
| + CHECK_EQ(BOOTSTRAP_UNKNOWN_SERVICE, bootstrap_look_up(bootstrap_port,
|
| + const_cast<char*>(kDefaultRuleTestDeny), &port));
|
| + CHECK(port == MACH_PORT_NULL);
|
| +
|
| + CHECK_EQ(KERN_SUCCESS, bootstrap_look_up(bootstrap_port,
|
| + const_cast<char*>(kDefaultRuleTestAllow), &port));
|
| + CHECK(port != MACH_PORT_NULL);
|
| +
|
| + struct SubstitutePortAckSend msg;
|
| + bzero(&msg, sizeof(msg));
|
| + msg.header.msgh_size = sizeof(msg);
|
| + msg.header.msgh_remote_port = port;
|
| + msg.header.msgh_bits = MACH_MSGH_BITS_REMOTE(MACH_MSG_TYPE_MOVE_SEND);
|
| + strncpy(msg.buf, kSubstituteAck, sizeof(msg.buf));
|
| +
|
| + CHECK_EQ(KERN_SUCCESS, mach_msg_send(&msg.header));
|
| +
|
| + return 0;
|
| +}
|
| +
|
| } // namespace sandbox
|
|
|