1// UserSecurityContext.cpp 2 3#include <new> 4 5#include <HashMap.h> 6 7#include "SecurityContext.h" 8#include "UserSecurityContext.h" 9#include "Node.h" 10 11// PermissionMap 12struct UserSecurityContext::PermissionMap : HashMap<NodeRef, Permissions> { 13}; 14 15// constructor 16UserSecurityContext::UserSecurityContext() 17 : fUser(NULL), 18 fPermissions(NULL) 19{ 20} 21 22// destructor 23UserSecurityContext::~UserSecurityContext() 24{ 25 if (fUser) 26 fUser->ReleaseReference(); 27 28 delete fPermissions; 29} 30 31// Init 32status_t 33UserSecurityContext::Init(User* user) 34{ 35 if (fUser) 36 fUser->ReleaseReference(); 37 38 fUser = user; 39 if (fUser) 40 fUser->AcquireReference(); 41 42 delete fPermissions; 43 fPermissions = new(std::nothrow) PermissionMap; 44 45 if (!fPermissions) 46 return B_NO_MEMORY; 47 return B_OK; 48} 49 50// GetUser 51User* 52UserSecurityContext::GetUser() const 53{ 54 return fUser; 55} 56 57// AddNode 58status_t 59UserSecurityContext::AddNode(dev_t volumeID, ino_t nodeID, 60 Permissions permissions) 61{ 62 return fPermissions->Put(NodeRef(volumeID, nodeID), permissions); 63} 64 65// GetNodePermissions 66Permissions 67UserSecurityContext::GetNodePermissions(dev_t volumeID, ino_t nodeID) const 68{ 69 return fPermissions->Get(NodeRef(volumeID, nodeID)); 70} 71 72// GetNodePermissions 73Permissions 74UserSecurityContext::GetNodePermissions(const node_ref& ref) const 75{ 76 return fPermissions->Get(NodeRef(ref)); 77} 78 79// GetNodePermissions 80Permissions 81UserSecurityContext::GetNodePermissions(dev_t volumeID, ino_t nodeID, 82 Permissions parentPermissions) const 83{ 84 if (fPermissions->ContainsKey(NodeRef(volumeID, nodeID))) 85 return fPermissions->Get(NodeRef(volumeID, nodeID)); 86 return parentPermissions; 87} 88 89// GetNodePermissions 90Permissions 91UserSecurityContext::GetNodePermissions(const node_ref& ref, 92 Permissions parentPermissions) const 93{ 94 if (fPermissions->ContainsKey(NodeRef(ref))) 95 return fPermissions->Get(NodeRef(ref)); 96 return parentPermissions; 97} 98 99