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

Side by Side Diff: chromeos/process_proxy/process_proxy.cc

Issue 2950153002: Improve process launch handle sharing API. (Closed)
Patch Set: Fix Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chromeos/process_proxy/process_proxy.h" 5 #include "chromeos/process_proxy/process_proxy.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <sys/ioctl.h> 9 #include <sys/ioctl.h>
10 10
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 197
198 if (pt_pair_[PT_SLAVE_FD] == -1) { 198 if (pt_pair_[PT_SLAVE_FD] == -1) {
199 CloseFdPair(pt_pair); 199 CloseFdPair(pt_pair);
200 return false; 200 return false;
201 } 201 }
202 202
203 return true; 203 return true;
204 } 204 }
205 205
206 int ProcessProxy::LaunchProcess(const std::string& command, int slave_fd) { 206 int ProcessProxy::LaunchProcess(const std::string& command, int slave_fd) {
207 base::LaunchOptions options;
208
207 // Redirect crosh process' output and input so we can read it. 209 // Redirect crosh process' output and input so we can read it.
208 base::FileHandleMappingVector fds_mapping; 210 options.fds_to_remap.push_back(std::make_pair(slave_fd, STDIN_FILENO));
209 fds_mapping.push_back(std::make_pair(slave_fd, STDIN_FILENO)); 211 options.fds_to_remap.push_back(std::make_pair(slave_fd, STDOUT_FILENO));
210 fds_mapping.push_back(std::make_pair(slave_fd, STDOUT_FILENO)); 212 options.fds_to_remap.push_back(std::make_pair(slave_fd, STDERR_FILENO));
211 fds_mapping.push_back(std::make_pair(slave_fd, STDERR_FILENO));
212 base::LaunchOptions options;
213 // Do not set NO_NEW_PRIVS on processes if the system is in dev-mode. This 213 // Do not set NO_NEW_PRIVS on processes if the system is in dev-mode. This
214 // permits sudo in the crosh shell when in developer mode. 214 // permits sudo in the crosh shell when in developer mode.
215 options.allow_new_privs = base::CommandLine::ForCurrentProcess()-> 215 options.allow_new_privs = base::CommandLine::ForCurrentProcess()->
216 HasSwitch(chromeos::switches::kSystemInDevMode); 216 HasSwitch(chromeos::switches::kSystemInDevMode);
217 options.fds_to_remap = &fds_mapping;
218 options.ctrl_terminal_fd = slave_fd; 217 options.ctrl_terminal_fd = slave_fd;
219 options.environ["TERM"] = "xterm"; 218 options.environ["TERM"] = "xterm";
220 219
221 // Launch the process. 220 // Launch the process.
222 process_.reset(new base::Process(base::LaunchProcess( 221 process_.reset(new base::Process(base::LaunchProcess(
223 base::CommandLine(base::FilePath(command)), options))); 222 base::CommandLine(base::FilePath(command)), options)));
224 223
225 // TODO(rvargas) crbug/417532: This is somewhat wrong but the interface of 224 // TODO(rvargas) crbug/417532: This is somewhat wrong but the interface of
226 // Open vends pid_t* so ownership is quite vague anyway, and Process::Close 225 // Open vends pid_t* so ownership is quite vague anyway, and Process::Close
227 // doesn't do much in POSIX. 226 // doesn't do much in POSIX.
(...skipping 12 matching lines...) Expand all
240 } 239 }
241 *fd = kInvalidFd; 240 *fd = kInvalidFd;
242 } 241 }
243 242
244 void ProcessProxy::ClearFdPair(int* pipe) { 243 void ProcessProxy::ClearFdPair(int* pipe) {
245 pipe[PT_MASTER_FD] = kInvalidFd; 244 pipe[PT_MASTER_FD] = kInvalidFd;
246 pipe[PT_SLAVE_FD] = kInvalidFd; 245 pipe[PT_SLAVE_FD] = kInvalidFd;
247 } 246 }
248 247
249 } // namespace chromeos 248 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698