xtreemfs/cpp/include/libxtreemfs/user_mapping.h
2020-09-22 02:25:22 +02:00

75 lines
2.5 KiB
C++

/*
* Copyright (c) 2010-2011 by Patrick Schaefer, Zuse Institute Berlin
* 2011-2012 by Michael Berlin, Zuse Institute Berlin
*
* Licensed under the BSD License, see LICENSE file for details.
*
*/
#ifndef CPP_INCLUDE_LIBXTREEMFS_USER_MAPPING_H_
#define CPP_INCLUDE_LIBXTREEMFS_USER_MAPPING_H_
#include <sys/types.h>
#include <list>
#include <string>
namespace xtreemfs {
namespace pbrpc {
class UserCredentials;
} // namespace pbrpc
class Options;
/** Allows to specify a transformation between local user and group names and
* its global counterparts stored in XtreemFS. */
class UserMapping {
public:
/** Available UserMappings which are allowed by CreateUserMapping(). */
enum UserMappingType {
kNone, kUnicore, kGlobus
};
/** Returns an instance of the chosen UserMapping.
*
* @param type Type of the user mapping to be created.
* @param options Options object which has to contain additional members
* depending on the constructor of the user mapping.
*/
static UserMapping* CreateUserMapping(UserMappingType type,
const Options& options);
/** Returns CreateUserMapping(type, options) whereas options is a
* default Options object. */
static UserMapping* CreateUserMapping(UserMappingType type);
virtual ~UserMapping() {}
/** Has to be called after creating a UserMapping object and can be used to
* start a needed thread. */
virtual void Start() = 0;
/** Has to be called before the deletion of a UserMapping object and can be
* used to stop a created threads. */
virtual void Stop() = 0;
virtual void LocalToGlobalUsername(const std::string& username_local,
std::string* username_global) = 0;
virtual void LocalToGlobalGroupname(const std::string& groupname_local,
std::string* groupname_global) = 0;
virtual void GlobalToLocalUsername(const std::string& username_global,
std::string* username_local) = 0;
virtual void GlobalToLocalGroupname(const std::string& groupname_global,
std::string* groupname_local) = 0;
/** Retrieve the list of known group names based on the local username. */
virtual void GetGroupnames(
const std::string& username_local,
xtreemfs::pbrpc::UserCredentials* user_credentials) = 0;
};
} // namespace xtreemfs
#endif // CPP_INCLUDE_LIBXTREEMFS_USER_MAPPING_H_