blob: 3b2d084a2416caef1a068a7bb3a8d8439beba65d [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#ifndef SHILL_MINIJAIL_H_
6#define SHILL_MINIJAIL_H_
7
8#include <vector>
9
10extern "C" {
11#include <linux/capability.h>
12}
13
14#include <base/lazy_instance.h>
15#include <chromeos/libminijail.h>
16
17namespace shill {
18
19// A Minijail abstraction allowing Minijail mocking in tests.
20class Minijail {
21 public:
22 virtual ~Minijail();
23
24 // This is a singleton -- use Minijail::GetInstance()->Foo()
25 static Minijail *GetInstance();
26
27 // minijail_new
28 virtual struct minijail *New();
29 // minijail_destroy
30 virtual void Destroy(struct minijail *jail);
31
32 // minijail_change_user/minijail_change_group
33 virtual bool DropRoot(struct minijail *jail, const char *user);
34 // minijail_use_caps
35 virtual void UseCapabilities(struct minijail *jail, uint64_t capmask);
36
37 // minijail_run_pid
38 virtual bool Run(struct minijail *jail, std::vector<char *> args, pid_t *pid);
39
Jorge Lucangeli Obes8c1706f2012-08-30 15:30:48 -070040 // minijail_run_pid_pipe
41 virtual bool RunPipe(struct minijail *jail, std::vector<char *> args,
42 pid_t *pid, int *stdin);
43
Jorge Lucangeli Obesad43cc62012-04-11 16:25:43 -070044 // Run() and Destroy()
45 virtual bool RunAndDestroy(struct minijail *jail,
46 std::vector<char *> args,
47 pid_t *pid);
48
Jorge Lucangeli Obes8c1706f2012-08-30 15:30:48 -070049 // RunPipe() and Destroy()
50 virtual bool RunPipeAndDestroy(struct minijail *jail,
51 std::vector<char *> args,
52 pid_t *pid, int *stdin);
53
Jorge Lucangeli Obesad43cc62012-04-11 16:25:43 -070054 protected:
55 Minijail();
56
57 private:
58 friend struct base::DefaultLazyInstanceTraits<Minijail>;
59
60 DISALLOW_COPY_AND_ASSIGN(Minijail);
61};
62
63} // namespace shill
64
65#endif // SHILL_MINIJAIL_H_