From 97b3abf1624641d7d6f14a7657ae572fa2a6ab2e Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Tue, 7 Feb 2012 16:21:23 +0100 Subject: [PATCH] Add access flags to fine tune application access. Not sure if these will actually be used, as they might just be a little overkill and not easily usable. --- src/servers/keystore/KeyStoreServer.cpp | 67 +++++++++++++++++++++++++ src/servers/keystore/KeyStoreServer.h | 2 + 2 files changed, 69 insertions(+) diff --git a/src/servers/keystore/KeyStoreServer.cpp b/src/servers/keystore/KeyStoreServer.cpp index 3eda433198..2324f18206 100644 --- a/src/servers/keystore/KeyStoreServer.cpp +++ b/src/servers/keystore/KeyStoreServer.cpp @@ -27,6 +27,31 @@ using namespace BPrivate; static const char* kKeyringKeysIdentifier = "Keyrings"; +static const uint32 kFlagGetKey = 0x0001; +static const uint32 kFlagEnumerateKeys = 0x0002; +static const uint32 kFlagAddKey = 0x0004; +static const uint32 kFlagRemoveKey = 0x0008; +static const uint32 kFlagAddKeyring = 0x0010; +static const uint32 kFlagRemoveKeyring = 0x0020; +static const uint32 kFlagEnumerateKeyrings = 0x0040; +static const uint32 kFlagSetMasterKey = 0x0080; +static const uint32 kFlagRemoveMasterKey = 0x0100; +static const uint32 kFlagAddKeyringsToMaster = 0x0200; +static const uint32 kFlagRemoveKeyringsFromMaster = 0x0400; +static const uint32 kFlagEnumerateMasterKeyrings = 0x0800; +static const uint32 kFlagQueryAccessibility = 0x1000; +static const uint32 kFlagRevokeAccess = 0x2000; +static const uint32 kFlagEnumerateApplications = 0x4000; +static const uint32 kFlagRemoveApplications = 0x8000; + +static const uint32 kDefaultAppFlags = kFlagGetKey | kFlagEnumerateKeys + | kFlagAddKey | kFlagRemoveKey | kFlagAddKeyring | kFlagRemoveKeyring + | kFlagEnumerateKeyrings | kFlagSetMasterKey | kFlagRemoveMasterKey + | kFlagAddKeyringsToMaster | kFlagRemoveKeyringsFromMaster + | kFlagEnumerateMasterKeyrings | kFlagQueryAccessibility + | kFlagQueryAccessibility | kFlagRevokeAccess | kFlagEnumerateApplications + | kFlagRemoveApplications; + KeyStoreServer::KeyStoreServer() : @@ -411,6 +436,48 @@ KeyStoreServer::_WriteKeyStoreDatabase() } +uint32 +KeyStoreServer::_AccessFlagsFor(uint32 command) const +{ + switch (command) { + case KEY_STORE_GET_KEY: + return kFlagGetKey; + case KEY_STORE_GET_NEXT_KEY: + return kFlagEnumerateKeys; + case KEY_STORE_ADD_KEY: + return kFlagAddKey; + case KEY_STORE_REMOVE_KEY: + return kFlagRemoveKey; + case KEY_STORE_ADD_KEYRING: + return kFlagAddKeyring; + case KEY_STORE_REMOVE_KEYRING: + return kFlagRemoveKeyring; + case KEY_STORE_GET_NEXT_KEYRING: + return kFlagEnumerateKeyrings; + case KEY_STORE_SET_MASTER_KEY: + return kFlagSetMasterKey; + case KEY_STORE_REMOVE_MASTER_KEY: + return kFlagRemoveMasterKey; + case KEY_STORE_ADD_KEYRING_TO_MASTER: + return kFlagAddKeyringsToMaster; + case KEY_STORE_REMOVE_KEYRING_FROM_MASTER: + return kFlagRemoveKeyringsFromMaster; + case KEY_STORE_GET_NEXT_MASTER_KEYRING: + return kFlagEnumerateMasterKeyrings; + case KEY_STORE_IS_KEYRING_ACCESSIBLE: + return kFlagQueryAccessibility; + case KEY_STORE_REVOKE_ACCESS: + return kFlagRevokeAccess; + case KEY_STORE_GET_NEXT_APPLICATION: + return kFlagEnumerateApplications; + case KEY_STORE_REMOVE_APPLICATION: + return kFlagRemoveApplications; + } + + return 0; +} + + Keyring* KeyStoreServer::_FindKeyring(const BString& name) { diff --git a/src/servers/keystore/KeyStoreServer.h b/src/servers/keystore/KeyStoreServer.h index 7729f92f5c..2ec5a4fad9 100644 --- a/src/servers/keystore/KeyStoreServer.h +++ b/src/servers/keystore/KeyStoreServer.h @@ -28,6 +28,8 @@ private: status_t _ReadKeyStoreDatabase(); status_t _WriteKeyStoreDatabase(); + uint32 _AccessFlagsFor(uint32 command) const; + Keyring* _FindKeyring(const BString& name); status_t _AddKeyring(const BString& name,