// Copyright 2017 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.

#include "virtual_file_provider/util.h"

#include <memory>
#include <string>

#include <sys/capability.h>
#include <sys/prctl.h>

#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_util.h>
#include <base/logging.h>

namespace virtual_file_provider {

// Clears all capabilities.
bool ClearCapabilities() {
  // Read cap_last_cap.
  const base::FilePath last_cap_path("/proc/sys/kernel/cap_last_cap");
  std::string contents;
  int last_cap = 0;
  if (!base::ReadFileToString(last_cap_path, &contents) ||
      !base::StringToInt(
          base::TrimWhitespaceASCII(contents, base::TRIM_TRAILING),
          &last_cap)) {
    LOG(ERROR) << "Failed to read cap_last_cap";
    return false;
  }
  // Drop cap bset.
  for (int i = 0; i <= last_cap; ++i) {
    if (prctl(PR_CAPBSET_DROP, i)) {
      PLOG(ERROR) << "Failed to drop bset " << i;
      return false;
    }
  }
  // Drop capabilities.
  std::unique_ptr<std::remove_pointer<cap_t>::type, decltype(&cap_free)> cap(
      cap_init(), cap_free);
  if (!cap) {
    PLOG(ERROR) << "Failed to cap_init()";
    return false;
  }
  if (cap_set_proc(cap.get())) {
    PLOG(ERROR) << "Failed to cap_set_proc()";
    return false;
  }
  return true;
}

}  // namespace virtual_file_provider
