blob: 528910111dce8d19d7b7febd4a65acc2894c519d [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 Obesccd5c852012-12-19 18:08:40 -080040 // minijail_run_pid and waitpid
41 virtual bool RunSync(struct minijail *jail, std::vector<char *> args,
42 int *status);
43
Jorge Lucangeli Obes8c1706f2012-08-30 15:30:48 -070044 // minijail_run_pid_pipe
45 virtual bool RunPipe(struct minijail *jail, std::vector<char *> args,
46 pid_t *pid, int *stdin);
47
Jorge Lucangeli Obesad43cc62012-04-11 16:25:43 -070048 // Run() and Destroy()
49 virtual bool RunAndDestroy(struct minijail *jail,
50 std::vector<char *> args,
51 pid_t *pid);
52
Jorge Lucangeli Obesccd5c852012-12-19 18:08:40 -080053 // RunSync() and Destroy()
54 virtual bool RunSyncAndDestroy(struct minijail *jail,
55 std::vector<char *> args,
56 int *status);
57
Jorge Lucangeli Obes8c1706f2012-08-30 15:30:48 -070058 // RunPipe() and Destroy()
59 virtual bool RunPipeAndDestroy(struct minijail *jail,
60 std::vector<char *> args,
61 pid_t *pid, int *stdin);
62
Jorge Lucangeli Obesad43cc62012-04-11 16:25:43 -070063 protected:
64 Minijail();
65
66 private:
67 friend struct base::DefaultLazyInstanceTraits<Minijail>;
68
69 DISALLOW_COPY_AND_ASSIGN(Minijail);
70};
71
72} // namespace shill
73
74#endif // SHILL_MINIJAIL_H_