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
12 struct UserSecurityContext::PermissionMap : HashMap<NodeRef, Permissions> {
13 };
14
15 // constructor
UserSecurityContext()16 UserSecurityContext::UserSecurityContext()
17 : fUser(NULL),
18 fPermissions(NULL)
19 {
20 }
21
22 // destructor
~UserSecurityContext()23 UserSecurityContext::~UserSecurityContext()
24 {
25 if (fUser)
26 fUser->ReleaseReference();
27
28 delete fPermissions;
29 }
30
31 // Init
32 status_t
Init(User * user)33 UserSecurityContext::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
51 User*
GetUser() const52 UserSecurityContext::GetUser() const
53 {
54 return fUser;
55 }
56
57 // AddNode
58 status_t
AddNode(dev_t volumeID,ino_t nodeID,Permissions permissions)59 UserSecurityContext::AddNode(dev_t volumeID, ino_t nodeID,
60 Permissions permissions)
61 {
62 return fPermissions->Put(NodeRef(volumeID, nodeID), permissions);
63 }
64
65 // GetNodePermissions
66 Permissions
GetNodePermissions(dev_t volumeID,ino_t nodeID) const67 UserSecurityContext::GetNodePermissions(dev_t volumeID, ino_t nodeID) const
68 {
69 return fPermissions->Get(NodeRef(volumeID, nodeID));
70 }
71
72 // GetNodePermissions
73 Permissions
GetNodePermissions(const node_ref & ref) const74 UserSecurityContext::GetNodePermissions(const node_ref& ref) const
75 {
76 return fPermissions->Get(NodeRef(ref));
77 }
78
79 // GetNodePermissions
80 Permissions
GetNodePermissions(dev_t volumeID,ino_t nodeID,Permissions parentPermissions) const81 UserSecurityContext::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
90 Permissions
GetNodePermissions(const node_ref & ref,Permissions parentPermissions) const91 UserSecurityContext::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