// Copyright (c) 2009 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.
//
// Provide a interfacefor supplying system interface functionality at a
// behavioral level.
//
// TODO(wad) Support LinuxSUIDSandox, net namespaces, jail profiles, etc.

#ifndef __CHROMEOS_MINIJAIL_ENV_H
#define __CHROMEOS_MINIJAIL_ENV_H

#include <base/basictypes.h>
#include <base/memory/scoped_ptr.h>

namespace chromeos {
namespace minijail {

class Env {
 public:
  Env() { }
  virtual ~Env() { }
  virtual bool ChangeUser(uid_t uid, gid_t gid) const;
  virtual bool DisableDefaultRootPrivileges() const;
  virtual bool DisableTracing() const;
  virtual bool EnterNamespace(int namespaces) const;
  virtual bool FilterSyscallsBenchmarkOnly() const;
  virtual bool FilterSyscallsBySource() const;
  // virtual bool ExportXAuthority(int appgroup, bool trusted) const;
  virtual bool KeepRootCapabilities() const;
  // bool do_delayed_chroot;
  // bool enter_net_namespace();
  // TODO(wad) add flags: ro_proc, custom /dev, ...
  virtual bool Mount() const;
  virtual bool SanitizeBoundingSet(uint64 capmask) const;
  // /dev/input/*
  // /dev/video*
  // /dev/*audio*
  // bool ShimUserDevices();
  //bool add_to_cgroup(const char *cgroup_name);
  virtual bool SanitizeCapabilities(uint64 eff_capmask) const;

  virtual bool Run(const char *path,
                   char * const *argv,
                   char * const *envp) const;
 private:
  DISALLOW_COPY_AND_ASSIGN(Env);
};

}  // namespace minijail
}  // namespace chromeos

#endif  // __CHROMEOS_MINIJAIL_ENV_H
