// Copyright 2019 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 KERBEROS_KRB5_JAIL_WRAPPER_H_
#define KERBEROS_KRB5_JAIL_WRAPPER_H_

#include <memory>
#include <string>
#include <utility>

#include <base/macros.h>
#include <libminijail.h>
#include <scoped_minijail.h>

#include "kerberos/krb5_interface.h"
#include "kerberos/proto_bindings/kerberos_service.pb.h"

namespace base {
class FilePath;
}

namespace kerberos {

// Wraps all calls to a Krb5Interface in a minijail that changes the user to
// kerberosd-exec.
class Krb5JailWrapper : public Krb5Interface {
 public:
  explicit Krb5JailWrapper(std::unique_ptr<Krb5Interface> krb5);
  ~Krb5JailWrapper() override;

  // Krb5Interface:
  ErrorType AcquireTgt(const std::string& principal_name,
                       const std::string& password,
                       const base::FilePath& krb5cc_path,
                       const base::FilePath& krb5conf_path) override;

  // Krb5Interface:
  ErrorType RenewTgt(const std::string& principal_name,
                     const base::FilePath& krb5cc_path,
                     const base::FilePath& krb5conf_path) override;

  // Krb5Interface:
  ErrorType GetTgtStatus(const base::FilePath& krb5cc_path,
                         TgtStatus* status) override;

  // Krb5Interface:
  ErrorType ValidateConfig(const std::string& krb5conf,
                           ConfigErrorInfo* error_info) override;

  // If |disabled|, will not setuid to kerberosd-exec. This is needed in some
  // environments where setuid is not permitted.
  static void DisableChangeUserForTesting(bool disabled);

 private:
  // Inner interface where calls are forwarded to after they've been jailed.
  std::unique_ptr<Krb5Interface> krb5_;

  DISALLOW_COPY_AND_ASSIGN(Krb5JailWrapper);
};

}  // namespace kerberos

#endif  // KERBEROS_KRB5_JAIL_WRAPPER_H_
