#include <new>
#include <HashMap.h>
#include "SecurityContext.h"
#include "UserSecurityContext.h"
#include "Node.h"
struct UserSecurityContext::PermissionMap : HashMap<NodeRef, Permissions> {
};
UserSecurityContext::UserSecurityContext()
: fUser(NULL),
fPermissions(NULL)
{
}
UserSecurityContext::~UserSecurityContext()
{
if (fUser)
fUser->ReleaseReference();
delete fPermissions;
}
status_t
UserSecurityContext::Init(User* user)
{
if (fUser)
fUser->ReleaseReference();
fUser = user;
if (fUser)
fUser->AcquireReference();
delete fPermissions;
fPermissions = new(std::nothrow) PermissionMap;
if (!fPermissions)
return B_NO_MEMORY;
return B_OK;
}
User*
UserSecurityContext::GetUser() const
{
return fUser;
}
status_t
UserSecurityContext::AddNode(dev_t volumeID, ino_t nodeID,
Permissions permissions)
{
return fPermissions->Put(NodeRef(volumeID, nodeID), permissions);
}
Permissions
UserSecurityContext::GetNodePermissions(dev_t volumeID, ino_t nodeID) const
{
return fPermissions->Get(NodeRef(volumeID, nodeID));
}
Permissions
UserSecurityContext::GetNodePermissions(const node_ref& ref) const
{
return fPermissions->Get(NodeRef(ref));
}
Permissions
UserSecurityContext::GetNodePermissions(dev_t volumeID, ino_t nodeID,
Permissions parentPermissions) const
{
if (fPermissions->ContainsKey(NodeRef(volumeID, nodeID)))
return fPermissions->Get(NodeRef(volumeID, nodeID));
return parentPermissions;
}
Permissions
UserSecurityContext::GetNodePermissions(const node_ref& ref,
Permissions parentPermissions) const
{
if (fPermissions->ContainsKey(NodeRef(ref)))
return fPermissions->Get(NodeRef(ref));
return parentPermissions;
}