OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sandbox/mac/xpc_message_server.h" | 5 #include "sandbox/mac/xpc_message_server.h" |
6 | 6 |
7 #include <bsm/libbsm.h> | 7 #include <bsm/libbsm.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/mac/mach_logging.h" | 11 #include "base/mac/mach_logging.h" |
12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
13 #include "sandbox/mac/dispatch_source_mach.h" | |
14 #include "sandbox/mac/xpc.h" | 13 #include "sandbox/mac/xpc.h" |
15 | 14 |
16 #if defined(MAC_OS_X_VERSION_10_7) && \ | 15 #if defined(MAC_OS_X_VERSION_10_7) && \ |
17 MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 | 16 MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 |
18 // Redeclare methods that only exist on 10.7+ to suppress | 17 // Redeclare methods that only exist on 10.7+ to suppress |
19 // -Wpartial-availability warnings. | 18 // -Wpartial-availability warnings. |
20 extern "C" { | 19 extern "C" { |
21 XPC_EXPORT XPC_MALLOC XPC_RETURNS_RETAINED XPC_WARN_RESULT XPC_NONNULL_ALL | 20 XPC_EXPORT XPC_MALLOC XPC_RETURNS_RETAINED XPC_WARN_RESULT XPC_NONNULL_ALL |
22 xpc_object_t | 21 xpc_object_t |
23 xpc_dictionary_create_reply(xpc_object_t original); | 22 xpc_dictionary_create_reply(xpc_object_t original); |
(...skipping 21 matching lines...) Expand all Loading... |
45 if ((kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, | 44 if ((kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, |
46 &port)) != KERN_SUCCESS) { | 45 &port)) != KERN_SUCCESS) { |
47 MACH_LOG(ERROR, kr) << "Failed to allocate new server port."; | 46 MACH_LOG(ERROR, kr) << "Failed to allocate new server port."; |
48 return false; | 47 return false; |
49 } | 48 } |
50 server_port_.reset(port); | 49 server_port_.reset(port); |
51 } | 50 } |
52 | 51 |
53 std::string label = base::StringPrintf( | 52 std::string label = base::StringPrintf( |
54 "org.chromium.sandbox.XPCMessageServer.%p", demuxer_); | 53 "org.chromium.sandbox.XPCMessageServer.%p", demuxer_); |
55 dispatch_source_.reset(new DispatchSourceMach( | 54 dispatch_source_.reset(new base::DispatchSourceMach( |
56 label.c_str(), server_port_.get(), ^{ ReceiveMessage(); })); | 55 label.c_str(), server_port_.get(), ^{ ReceiveMessage(); })); |
57 dispatch_source_->Resume(); | 56 dispatch_source_->Resume(); |
58 | 57 |
59 return true; | 58 return true; |
60 } | 59 } |
61 | 60 |
62 pid_t XPCMessageServer::GetMessageSenderPID(IPCMessage request) { | 61 pid_t XPCMessageServer::GetMessageSenderPID(IPCMessage request) { |
63 audit_token_t token; | 62 audit_token_t token; |
64 xpc_dictionary_get_audit_token(request.xpc, &token); | 63 xpc_dictionary_get_audit_token(request.xpc, &token); |
65 // TODO(rsesek): In the 10.7 SDK, there's audit_token_to_pid(). | 64 // TODO(rsesek): In the 10.7 SDK, there's audit_token_to_pid(). |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 demuxer_->DemuxMessage(request); | 117 demuxer_->DemuxMessage(request); |
119 | 118 |
120 xpc_release(request.xpc); | 119 xpc_release(request.xpc); |
121 if (reply_message_) { | 120 if (reply_message_) { |
122 xpc_release(reply_message_); | 121 xpc_release(reply_message_); |
123 reply_message_ = NULL; | 122 reply_message_ = NULL; |
124 } | 123 } |
125 } | 124 } |
126 | 125 |
127 } // namespace sandbox | 126 } // namespace sandbox |
OLD | NEW |