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