Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(658)

Unified Diff: chrome/common/service_process_util_mac.mm

Issue 982883003: Use fixed socket name instead of SecureSocketWithKey (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/service_process_util_mac.mm
diff --git a/chrome/common/service_process_util_mac.mm b/chrome/common/service_process_util_mac.mm
index bf68feb65b5fe8ebeac7955c7583efa38b34c9f5..3bb8b9cff2a40989aed9607c6d00c23ebfbabbb9 100644
--- a/chrome/common/service_process_util_mac.mm
+++ b/chrome/common/service_process_util_mac.mm
@@ -27,6 +27,7 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
#include "chrome/common/mac/launchd.h"
+#include "ipc/unix_domain_socket_util.h"
using ::base::FilePathWatcher;
@@ -55,10 +56,6 @@ NSString* GetServiceProcessLaunchDLabel() {
return label;
}
-NSString* GetServiceProcessLaunchDSocketKey() {
- return @"ServiceProcessSocket";
-}
-
bool GetParentFSRef(const FSRef& child, FSRef* parent) {
return FSGetCatalogInfo(&child, 0, NULL, NULL, NULL, parent) == noErr;
}
@@ -84,29 +81,23 @@ class ExecFilePathWatcherCallback {
FSRef executable_fsref_;
};
-} // namespace
-
-NSString* GetServiceProcessLaunchDSocketEnvVar() {
- NSString *label = GetServiceProcessLaunchDLabel();
- NSString *env_var = [label stringByReplacingOccurrencesOfString:@"."
- withString:@"_"];
- env_var = [env_var stringByAppendingString:@"_SOCKET"];
- env_var = [env_var uppercaseString];
- return env_var;
+base::FilePath GetServiceProcessSocketName() {
+ base::FilePath socket_name;
+ PathService::Get(base::DIR_TEMP, &socket_name);
+ std::string pipe_name = GetServiceProcessScopedName("srv");
+ socket_name = socket_name.Append(pipe_name);
+ if (socket_name.value().size() < IPC::kMaxSocketNameLength)
+ return socket_name;
+ // Fallback to /tmp if $TMPDIR is too long.
Robert Sesek 2015/03/05 22:34:02 When would this happen?
Vitaly Buka (NO REVIEWS) 2015/03/05 23:22:13 kMaxSocketNameLength is 104 name generated on my
+ return base::FilePath("/tmp").Append(pipe_name);
}
-// Gets the name of the service process IPC channel.
+} // namespace
+
IPC::ChannelHandle GetServiceProcessChannel() {
- base::mac::ScopedNSAutoreleasePool pool;
- std::string socket_path;
- base::scoped_nsobject<NSDictionary> dictionary(
- base::mac::CFToNSCast(Launchd::GetInstance()->CopyExports()));
- NSString *ns_socket_path =
- [dictionary objectForKey:GetServiceProcessLaunchDSocketEnvVar()];
- if (ns_socket_path) {
- socket_path = base::SysNSStringToUTF8(ns_socket_path);
- }
- return IPC::ChannelHandle(socket_path);
+ base::FilePath socket_name = GetServiceProcessSocketName();
+ VLOG(1) << "ServiceProcessChannel: " << socket_name.value();
+ return IPC::ChannelHandle(socket_name.value());
}
bool ForceServiceProcessShutdown(const std::string& /* version */,
@@ -185,22 +176,13 @@ bool ServiceProcessState::Initialize() {
}
IPC::ChannelHandle ServiceProcessState::GetServiceProcessChannel() {
- DCHECK(state_);
- NSDictionary *ns_launchd_conf = base::mac::CFToNSCast(state_->launchd_conf);
- NSDictionary* socket_dict =
- [ns_launchd_conf objectForKey:@ LAUNCH_JOBKEY_SOCKETS];
- NSArray* sockets =
- [socket_dict objectForKey:GetServiceProcessLaunchDSocketKey()];
- DCHECK_EQ([sockets count], 1U);
- int socket = [[sockets objectAtIndex:0] intValue];
- base::FileDescriptor fd(socket, false);
- return IPC::ChannelHandle(std::string(), fd);
+ return ::GetServiceProcessChannel();
}
bool CheckServiceProcessReady() {
std::string version;
pid_t pid;
- if (!GetServiceProcessData(&version, &pid)) {
+ if (!GetServiceProcessData(&version, &pid) || pid == -1) {
return false;
}
Version service_version(version);
@@ -243,20 +225,13 @@ CFDictionaryRef CreateServiceProcessLaunchdPlist(base::CommandLine* cmd_line,
[ns_args addObject:base::SysUTF8ToNSString(*iter)];
}
- NSDictionary *socket =
- [NSDictionary dictionaryWithObject:GetServiceProcessLaunchDSocketEnvVar()
- forKey:@ LAUNCH_JOBSOCKETKEY_SECUREWITHKEY];
- NSDictionary *sockets =
- [NSDictionary dictionaryWithObject:socket
- forKey:GetServiceProcessLaunchDSocketKey()];
-
// See the man page for launchd.plist.
NSMutableDictionary *launchd_plist =
[[NSMutableDictionary alloc] initWithObjectsAndKeys:
GetServiceProcessLaunchDLabel(), @ LAUNCH_JOBKEY_LABEL,
program, @ LAUNCH_JOBKEY_PROGRAM,
ns_args, @ LAUNCH_JOBKEY_PROGRAMARGUMENTS,
- sockets, @ LAUNCH_JOBKEY_SOCKETS,
+ [NSNumber numberWithBool:YES], @ LAUNCH_JOBKEY_RUNATLOAD,
Robert Sesek 2015/03/05 22:34:02 This is changing the RunAtLoad to be from only whe
Robert Sesek 2015/03/05 22:34:02 You can use @YES
Vitaly Buka (NO REVIEWS) 2015/03/05 23:22:13 Done.
Vitaly Buka (NO REVIEWS) 2015/03/05 23:22:13 for_auto_launch means that this file is going to b
nil];
if (for_auto_launch) {
@@ -270,7 +245,6 @@ CFDictionaryRef CreateServiceProcessLaunchdPlist(base::CommandLine* cmd_line,
forKey:@ LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT];
NSDictionary *auto_launchd_plist =
[[NSDictionary alloc] initWithObjectsAndKeys:
- [NSNumber numberWithBool:YES], @ LAUNCH_JOBKEY_RUNATLOAD,
keep_alive, @ LAUNCH_JOBKEY_KEEPALIVE,
@ kServiceProcessSessionType, @ LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE,
nil];

Powered by Google App Engine
This is Rietveld 408576698