blob: 9ed0499bee6e9cb88bb9a3f40260d91c5989124a [file] [log] [blame]
// 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_INTERFACE_H_
#define KERBEROS_KRB5_INTERFACE_H_
#include <string>
#include <base/compiler_specific.h>
#include <base/macros.h>
#include "kerberos/proto_bindings/kerberos_service.pb.h"
namespace base {
class FilePath;
}
namespace kerberos {
class Krb5Interface {
public:
Krb5Interface() = default;
Krb5Interface(const Krb5Interface&) = delete;
Krb5Interface& operator=(const Krb5Interface&) = delete;
virtual ~Krb5Interface() = default;
// Ticket-granting-ticket status, see GetTgtStatus().
struct TgtStatus {
// For how many seconds the ticket is still valid.
int64_t validity_seconds = 0;
// For how many seconds the ticket can be renewed.
int64_t renewal_seconds = 0;
constexpr TgtStatus() = default;
constexpr TgtStatus(int64_t validity_seconds, int64_t renewal_seconds)
: validity_seconds(validity_seconds),
renewal_seconds(renewal_seconds) {}
bool operator==(const TgtStatus& other) const {
return validity_seconds == other.validity_seconds &&
renewal_seconds == other.renewal_seconds;
}
bool operator!=(const TgtStatus& other) const { return !(*this == other); }
};
// Gets a Kerberos ticket-granting-ticket for the given |principal_name|
// (user@REALM.COM). |password| is the password for the Kerberos account.
// |krb5cc_path| is the file path where the Kerberos credential cache (i.e.
// the TGT) is written to. |krb5conf_path| is the path to a Kerberos
// configuration file (krb5.conf).
virtual ErrorType AcquireTgt(const std::string& principal_name,
const std::string& password,
const base::FilePath& krb5cc_path,
const base::FilePath& krb5conf_path)
WARN_UNUSED_RESULT = 0;
// Renews an existing Kerberos ticket-granting-ticket for the given
// |principal_name| (user@REALM.COM). |krb5cc_path| is the file path of the
// Kerberos credential cache. |krb5conf_path| is the path to a Kerberos
// configuration file (krb5.conf).
virtual ErrorType RenewTgt(const std::string& principal_name,
const base::FilePath& krb5cc_path,
const base::FilePath& krb5conf_path)
WARN_UNUSED_RESULT = 0;
// Gets some stats about the ticket-granting-ticket in the credential cache
// at |krb5cc_path|.
virtual ErrorType GetTgtStatus(const base::FilePath& krb5cc_path,
TgtStatus* status) WARN_UNUSED_RESULT = 0;
// Validates the Kerberos configuration data |krb5conf|. If the config has
// syntax errors or uses non-whitelisted options, returns ERROR_BAD_CONFIG
// and fills |error_info| with error information.
virtual ErrorType ValidateConfig(const std::string& krb5conf,
ConfigErrorInfo* error_info)
WARN_UNUSED_RESULT = 0;
};
} // namespace kerberos
#endif // KERBEROS_KRB5_INTERFACE_H_