blob: 863f169f54b7c400cf2e1c0bcba0edd9f64033a1 [file] [log] [blame]
// 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_