shill, libchromeos: Move the minijail c++ bindings
This CL moves the c++ binding for minijail from shill
into libchromeos
BUG=None
TEST=emerge-lumpy libchromeos && FEATURES=test emerge-lumpy platform2
CQ-DEPEND=CL:210408
Change-Id: Ia087ffbf4f54e08fff450f0e2b7984e9eb3448e3
Reviewed-on: https://chromium-review.googlesource.com/210379
Tested-by: Utkarsh Sanghi <usanghi@chromium.org>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Commit-Queue: Utkarsh Sanghi <usanghi@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
diff --git a/crypto_util_proxy.cc b/crypto_util_proxy.cc
index 46d594b..2143028 100644
--- a/crypto_util_proxy.cc
+++ b/crypto_util_proxy.cc
@@ -40,7 +40,7 @@
CryptoUtilProxy::CryptoUtilProxy(EventDispatcher *dispatcher, GLib *glib)
: dispatcher_(dispatcher),
glib_(glib),
- minijail_(Minijail::GetInstance()),
+ minijail_(chromeos::Minijail::GetInstance()),
process_killer_(ProcessKiller::GetInstance()),
file_io_(FileIO::GetInstance()),
input_buffer_(),
diff --git a/crypto_util_proxy.h b/crypto_util_proxy.h
index df9813c..2ae7d14 100644
--- a/crypto_util_proxy.h
+++ b/crypto_util_proxy.h
@@ -12,12 +12,12 @@
#include <base/cancelable_callback.h>
#include <base/memory/weak_ptr.h>
#include <base/strings/stringprintf.h>
+#include <chromeos/minijail/minijail.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "shill/callbacks.h"
#include "shill/error.h"
#include "shill/io_handler.h"
-#include "shill/minijail.h"
#include "shill/proto_bindings/shims/protos/crypto_util.pb.h"
namespace shill {
@@ -121,7 +121,7 @@
EventDispatcher *dispatcher_;
GLib *glib_;
- Minijail *minijail_;
+ chromeos::Minijail *minijail_;
ProcessKiller *process_killer_;
FileIO *file_io_;
std::string input_buffer_;
diff --git a/crypto_util_proxy_unittest.cc b/crypto_util_proxy_unittest.cc
index 7840c80..de903b6 100644
--- a/crypto_util_proxy_unittest.cc
+++ b/crypto_util_proxy_unittest.cc
@@ -7,19 +7,20 @@
#include <vector>
#include <base/callback.h>
+#include <chromeos/minijail/minijail.h>
+#include <chromeos/minijail/mock_minijail.h>
#include <gtest/gtest.h>
#include "shill/callbacks.h"
#include "shill/crypto_util_proxy.h"
-#include "shill/minijail.h"
#include "shill/mock_crypto_util_proxy.h"
#include "shill/mock_event_dispatcher.h"
#include "shill/mock_file_io.h"
#include "shill/mock_glib.h"
-#include "shill/mock_minijail.h"
#include "shill/mock_process_killer.h"
using base::Bind;
+using chromeos::MockMinijail;
using std::min;
using std::string;
using std::vector;
diff --git a/dhcp_config.cc b/dhcp_config.cc
index ea9fb59..780441e 100644
--- a/dhcp_config.cc
+++ b/dhcp_config.cc
@@ -14,6 +14,7 @@
#include <base/strings/string_split.h>
#include <base/strings/stringprintf.h>
#include <chromeos/dbus/service_constants.h>
+#include <chromeos/minijail/minijail.h>
#include "shill/dhcp_provider.h"
#include "shill/dhcpcd_proxy.h"
@@ -22,7 +23,6 @@
#include "shill/ip_address.h"
#include "shill/logging.h"
#include "shill/metrics.h"
-#include "shill/minijail.h"
#include "shill/proxy_factory.h"
using std::string;
@@ -105,7 +105,7 @@
dispatcher_(dispatcher),
glib_(glib),
metrics_(metrics),
- minijail_(Minijail::GetInstance()) {
+ minijail_(chromeos::Minijail::GetInstance()) {
SLOG(DHCP, 2) << __func__ << ": " << device_name;
if (lease_file_suffix_.empty()) {
lease_file_suffix_ = device_name;
diff --git a/dhcp_config.h b/dhcp_config.h
index ffef897..6eefb62 100644
--- a/dhcp_config.h
+++ b/dhcp_config.h
@@ -12,12 +12,12 @@
#include <base/files/file_path.h>
#include <base/memory/scoped_ptr.h>
#include <base/memory/weak_ptr.h>
+#include <chromeos/minijail/minijail.h>
#include <dbus-c++/types.h>
#include <glib.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "shill/ipconfig.h"
-#include "shill/minijail.h"
namespace shill {
@@ -266,7 +266,7 @@
GLib *glib_;
Metrics *metrics_;
- Minijail *minijail_;
+ chromeos::Minijail *minijail_;
DISALLOW_COPY_AND_ASSIGN(DHCPConfig);
};
diff --git a/dhcp_config_unittest.cc b/dhcp_config_unittest.cc
index 255a7a1..63e4471 100644
--- a/dhcp_config_unittest.cc
+++ b/dhcp_config_unittest.cc
@@ -12,6 +12,7 @@
#include <base/files/scoped_temp_dir.h>
#include <base/strings/stringprintf.h>
#include <chromeos/dbus/service_constants.h>
+#include <chromeos/minijail/mock_minijail.h>
#include "shill/dbus_adaptor.h"
#include "shill/dhcp_provider.h"
@@ -21,7 +22,6 @@
#include "shill/mock_glib.h"
#include "shill/mock_log.h"
#include "shill/mock_metrics.h"
-#include "shill/mock_minijail.h"
#include "shill/mock_proxy_factory.h"
#include "shill/property_store_unittest.h"
#include "shill/testing.h"
@@ -30,6 +30,7 @@
using base::FilePath;
using base::ScopedTempDir;
using base::Unretained;
+using chromeos::MockMinijail;
using std::string;
using std::vector;
using testing::_;
diff --git a/diagnostics_reporter.cc b/diagnostics_reporter.cc
index c49cd61..58ff6bd 100644
--- a/diagnostics_reporter.cc
+++ b/diagnostics_reporter.cc
@@ -7,8 +7,8 @@
#include <vector>
#include <base/file_util.h>
+#include <chromeos/minijail/minijail.h>
-#include "shill/minijail.h"
#include "shill/process_killer.h"
#include "shill/shill_time.h"
#include "shill/shims/net_diags_upload.h"
@@ -30,7 +30,7 @@
const int DiagnosticsReporter::kLogStashThrottleSeconds = 30 * 60;
DiagnosticsReporter::DiagnosticsReporter()
- : minijail_(Minijail::GetInstance()),
+ : minijail_(chromeos::Minijail::GetInstance()),
process_killer_(ProcessKiller::GetInstance()),
time_(Time::GetInstance()),
last_log_stash_(0),
diff --git a/diagnostics_reporter.h b/diagnostics_reporter.h
index 11c294e..1d358bc 100644
--- a/diagnostics_reporter.h
+++ b/diagnostics_reporter.h
@@ -8,9 +8,14 @@
#include <base/files/file_path.h>
#include <base/lazy_instance.h>
-namespace shill {
+namespace chromeos {
class Minijail;
+
+} // namespace chromeos
+
+namespace shill {
+
class ProcessKiller;
class Time;
@@ -36,7 +41,7 @@
static const int kLogStashThrottleSeconds;
- Minijail *minijail_;
+ chromeos::Minijail *minijail_;
ProcessKiller *process_killer_;
Time *time_;
uint64 last_log_stash_; // Monotonic time seconds.
diff --git a/diagnostics_reporter_unittest.cc b/diagnostics_reporter_unittest.cc
index 77650bf..790030b 100644
--- a/diagnostics_reporter_unittest.cc
+++ b/diagnostics_reporter_unittest.cc
@@ -6,14 +6,15 @@
#include <base/file_util.h>
#include <base/files/scoped_temp_dir.h>
+#include <chromeos/minijail/mock_minijail.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
-#include "shill/mock_minijail.h"
#include "shill/mock_process_killer.h"
#include "shill/mock_time.h"
using base::FilePath;
+using chromeos::MockMinijail;
using testing::_;
using testing::ElementsAre;
using testing::InSequence;
diff --git a/minijail.cc b/minijail.cc
deleted file mode 100644
index ffb529c..0000000
--- a/minijail.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "shill/minijail.h"
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-using std::vector;
-
-namespace shill {
-
-static base::LazyInstance<Minijail> g_minijail = LAZY_INSTANCE_INITIALIZER;
-
-Minijail::Minijail() {}
-
-Minijail::~Minijail() {}
-
-// static
-Minijail *Minijail::GetInstance() {
- return g_minijail.Pointer();
-}
-
-struct minijail *Minijail::New() {
- return minijail_new();
-}
-
-void Minijail::Destroy(struct minijail *jail) {
- minijail_destroy(jail);
-}
-
-bool Minijail::DropRoot(struct minijail *jail, const char *user) {
- // |user| is copied so the only reason either of these calls can fail
- // is ENOMEM.
- return !minijail_change_user(jail, user) &&
- !minijail_change_group(jail, user);
-}
-
-void Minijail::UseCapabilities(struct minijail *jail, uint64_t capmask) {
- minijail_use_caps(jail, capmask);
-}
-
-bool Minijail::Run(struct minijail *jail,
- vector<char *> args, pid_t *pid) {
- return minijail_run_pid(jail, args[0], args.data(), pid) == 0;
-}
-
-bool Minijail::RunSync(struct minijail *jail,
- vector<char *> args, int *status) {
- pid_t pid;
- if (Run(jail, args, &pid) && waitpid(pid, status, 0) == pid) {
- return true;
- }
-
- return false;
-}
-
-bool Minijail::RunPipe(struct minijail *jail,
- vector<char *> args, pid_t *pid, int *stdin) {
- return minijail_run_pid_pipe(jail, args[0], args.data(), pid, stdin) == 0;
-}
-
-bool Minijail::RunPipes(struct minijail *jail, vector<char *> args, pid_t *pid,
- int *stdin, int *stdout, int *stderr) {
- return minijail_run_pid_pipes(jail, args[0], args.data(),
- pid, stdin, stdout, stderr) == 0;
-}
-
-bool Minijail::RunAndDestroy(struct minijail *jail,
- vector<char *> args, pid_t *pid) {
- bool res = Run(jail, args, pid);
- Destroy(jail);
- return res;
-}
-
-bool Minijail::RunSyncAndDestroy(struct minijail *jail,
- vector<char *> args, int *status) {
- bool res = RunSync(jail, args, status);
- Destroy(jail);
- return res;
-}
-
-bool Minijail::RunPipeAndDestroy(struct minijail *jail,
- vector<char *> args, pid_t *pid, int *stdin) {
- bool res = RunPipe(jail, args, pid, stdin);
- Destroy(jail);
- return res;
-}
-
-bool Minijail::RunPipesAndDestroy(struct minijail *jail,
- vector<char *> args, pid_t *pid, int *stdin,
- int *stdout, int *stderr) {
- bool res = RunPipes(jail, args, pid, stdin, stdout, stderr);
- Destroy(jail);
- return res;
-}
-
-} // namespace shill
diff --git a/minijail.h b/minijail.h
deleted file mode 100644
index 863f169..0000000
--- a/minijail.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SHILL_MINIJAIL_H_
-#define SHILL_MINIJAIL_H_
-
-#include <vector>
-
-extern "C" {
-#include <linux/capability.h>
-}
-
-#include <base/lazy_instance.h>
-#include <chromeos/libminijail.h>
-
-namespace shill {
-
-// A Minijail abstraction allowing Minijail mocking in tests.
-class Minijail {
- public:
- virtual ~Minijail();
-
- // This is a singleton -- use Minijail::GetInstance()->Foo().
- static Minijail *GetInstance();
-
- // minijail_new
- virtual struct minijail *New();
- // minijail_destroy
- virtual void Destroy(struct minijail *jail);
-
- // minijail_change_user/minijail_change_group
- virtual bool DropRoot(struct minijail *jail, const char *user);
- // minijail_use_caps
- virtual void UseCapabilities(struct minijail *jail, uint64_t capmask);
-
- // minijail_run_pid
- virtual bool Run(struct minijail *jail, std::vector<char *> args, pid_t *pid);
-
- // minijail_run_pid and waitpid
- virtual bool RunSync(struct minijail *jail, std::vector<char *> args,
- int *status);
-
- // minijail_run_pid_pipe
- virtual bool RunPipe(struct minijail *jail, std::vector<char *> args,
- pid_t *pid, int *stdin);
-
- // minijail_run_pid_pipes
- virtual bool RunPipes(struct minijail *jail, std::vector<char *> args,
- pid_t *pid, int *stdin, int *stdout, int *stderr);
-
- // Run() and Destroy()
- virtual bool RunAndDestroy(struct minijail *jail,
- std::vector<char *> args,
- pid_t *pid);
-
- // RunSync() and Destroy()
- virtual bool RunSyncAndDestroy(struct minijail *jail,
- std::vector<char *> args,
- int *status);
-
- // RunPipe() and Destroy()
- virtual bool RunPipeAndDestroy(struct minijail *jail,
- std::vector<char *> args,
- pid_t *pid, int *stdin);
-
- // RunPipes() and Destroy()
- virtual bool RunPipesAndDestroy(struct minijail *jail,
- std::vector<char *> args,
- pid_t *pid, int *stdin,
- int *stdout, int *stderr);
-
- protected:
- Minijail();
-
- private:
- friend struct base::DefaultLazyInstanceTraits<Minijail>;
-
- DISALLOW_COPY_AND_ASSIGN(Minijail);
-};
-
-} // namespace shill
-
-#endif // SHILL_MINIJAIL_H_
diff --git a/mock_minijail.cc b/mock_minijail.cc
deleted file mode 100644
index 890a9c4..0000000
--- a/mock_minijail.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "shill/mock_minijail.h"
-
-namespace shill {
-
-MockMinijail::MockMinijail() {}
-
-MockMinijail::~MockMinijail() {}
-
-} // namespace shill
diff --git a/mock_minijail.h b/mock_minijail.h
deleted file mode 100644
index d6ddcfd..0000000
--- a/mock_minijail.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SHILL_MOCK_MINIJAIL_H_
-#define SHILL_MOCK_MINIJAIL_H_
-
-#include <vector>
-
-#include <base/basictypes.h>
-#include <gmock/gmock.h>
-
-#include "shill/minijail.h"
-
-namespace shill {
-
-class MockMinijail : public Minijail {
- public:
- MockMinijail();
- virtual ~MockMinijail();
-
- MOCK_METHOD0(New, struct minijail *());
- MOCK_METHOD1(Destroy, void(struct minijail *));
-
- MOCK_METHOD2(DropRoot, bool(struct minijail *jail, const char *user));
- MOCK_METHOD2(UseCapabilities, void(struct minijail *jail, uint64_t capmask));
- MOCK_METHOD3(Run, bool(struct minijail *jail,
- std::vector<char *> args, pid_t *pid));
- MOCK_METHOD3(RunSync, bool(struct minijail *jail,
- std::vector<char *> args, int *status));
- MOCK_METHOD3(RunAndDestroy, bool(struct minijail *jail,
- std::vector<char *> args, pid_t *pid));
- MOCK_METHOD3(RunSyncAndDestroy, bool(struct minijail *jail,
- std::vector<char *> args, int *status));
- MOCK_METHOD4(RunPipeAndDestroy, bool(struct minijail *jail,
- std::vector<char *> args,
- pid_t *pid, int *stdin));
- MOCK_METHOD6(RunPipesAndDestroy, bool(struct minijail *jail,
- std::vector<char *> args,
- pid_t *pid, int *stdin,
- int *stdout, int *stderr));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockMinijail);
-};
-
-} // namespace shill
-
-#endif // SHILL_MOCK_MINIJAIL_H_
diff --git a/shill.gyp b/shill.gyp
index 566cadc..0773324 100644
--- a/shill.gyp
+++ b/shill.gyp
@@ -205,7 +205,6 @@
],
},
'libraries': [
- '-lminijail',
'-lrootdev',
'-lrt'
],
@@ -351,7 +350,6 @@
'manager.cc',
'manager_dbus_adaptor.cc',
'metrics.cc',
- 'minijail.cc',
'netlink_attribute.cc',
'netlink_manager.cc',
'netlink_message.cc',
@@ -609,7 +607,6 @@
'mock_log_unittest.cc',
'mock_manager.cc',
'mock_metrics.cc',
- 'mock_minijail.cc',
'mock_netlink_manager.cc',
'mock_pending_activation_store.cc',
'mock_portal_detector.cc',
diff --git a/shill_main.cc b/shill_main.cc
index 71d54d4..fa3be0f 100644
--- a/shill_main.cc
+++ b/shill_main.cc
@@ -16,11 +16,11 @@
#include <base/files/file_path.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_split.h>
+#include <chromeos/minijail/minijail.h>
#include <chromeos/syslog_logging.h>
#include "shill/dbus_control.h"
#include "shill/logging.h"
-#include "shill/minijail.h"
#include "shill/shill_config.h"
#include "shill/shill_daemon.h"
@@ -90,7 +90,7 @@
logger_command_line.push_back(daemon_name);
logger_command_line.push_back(NULL);
- shill::Minijail *minijail = shill::Minijail::GetInstance();
+ chromeos::Minijail *minijail = chromeos::Minijail::GetInstance();
struct minijail *jail = minijail->New();
minijail->DropRoot(jail, kLoggerUser);