blob: 3cb7a4d26fdfb08c43f6e4a0baf1714659151fae [file] [log] [blame]
Jorge Lucangeli Obesad43cc62012-04-11 16:25:43 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/minijail.h"
6
7using std::vector;
8
9namespace shill {
10
11static base::LazyInstance<Minijail> g_minijail = LAZY_INSTANCE_INITIALIZER;
12
13Minijail::Minijail() {}
14
15Minijail::~Minijail() {}
16
17// static
18Minijail *Minijail::GetInstance() {
19 return g_minijail.Pointer();
20}
21
22struct minijail *Minijail::New() {
23 return minijail_new();
24}
25
26void Minijail::Destroy(struct minijail *jail) {
27 minijail_destroy(jail);
28}
29
30bool Minijail::DropRoot(struct minijail *jail, const char *user) {
31 // |user| is copied so the only reason either of these calls can fail
32 // is ENOMEM.
33 return !minijail_change_user(jail, user) &&
34 !minijail_change_group(jail, user);
35}
36
37void Minijail::UseCapabilities(struct minijail *jail, uint64_t capmask) {
38 minijail_use_caps(jail, capmask);
39}
40
41bool Minijail::Run(struct minijail *jail,
42 vector<char *> args, pid_t *pid) {
43 return minijail_run_pid(jail, args[0], args.data(), pid) == 0;
44}
45
46bool Minijail::RunAndDestroy(struct minijail *jail,
47 vector<char *> args, pid_t *pid) {
48 bool res = Run(jail, args, pid);
49 Destroy(jail);
50 return res;
51}
52
53} // namespace shill