From 31e615dcc26883cd67b28a3f05da37ca8a350db2 Mon Sep 17 00:00:00 2001 From: Bartlomiej Grzelewski Date: Wed, 26 Aug 2015 17:59:38 +0200 Subject: [PATCH] CKM: Use pkgId instead smack label in tests. Change-Id: Ia912089bacff330df230292fa136d10848534300 --- src/ckm/access_provider2.cpp | 4 ++-- src/ckm/capi-access_control.cpp | 8 ++++---- src/ckm/ckm-common.cpp | 30 ++++++++++++++++++++---------- src/ckm/ckm-common.h | 9 +++++---- src/ckm/encryption-decryption.cpp | 10 +++++----- src/ckm/main.cpp | 4 ++-- 6 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/ckm/access_provider2.cpp b/src/ckm/access_provider2.cpp index 31f67ba..58a98eb 100644 --- a/src/ckm/access_provider2.cpp +++ b/src/ckm/access_provider2.cpp @@ -24,8 +24,8 @@ #include #include - #include +#include namespace { @@ -37,7 +37,7 @@ std::string toSmackLabel(const std::string &ownerId) { return ownerId.substr(1, std::string::npos); } - return "User::App::" + ownerId; + return SMACK_USER_APP_PREFIX + ownerId; } } // anonymous namespace diff --git a/src/ckm/capi-access_control.cpp b/src/ckm/capi-access_control.cpp index 0da0bee..3a7a574 100644 --- a/src/ckm/capi-access_control.cpp +++ b/src/ckm/capi-access_control.cpp @@ -143,8 +143,8 @@ RUNNER_CHILD_TEST(T3006_manager_allow_access_to_myself) ScopedSaveData ssd(TEST_ALIAS, TEST_DATA); - CharPtr label = get_label(); - int ret = ckmc_set_permission(TEST_ALIAS, label.get(), CKMC_PERMISSION_READ); + std::string ownerId = getOwnerIdFromSelf(); + int ret = ckmc_set_permission(TEST_ALIAS, ownerId.c_str(), CKMC_PERMISSION_READ); RUNNER_ASSERT_MSG(CKMC_ERROR_INVALID_PARAMETER == ret, "Trying to allow myself returned: " << CKMCErrorToString(ret)); } @@ -557,7 +557,7 @@ RUNNER_TEST(T3101_control_allow_access_invalid) RUNNER_ASSERT(CKMC_ERROR_INVALID_PARAMETER == ret); // double owner - std::string aliasLabel = aliasWithLabel(get_label().get(), TEST_ALIAS); + std::string aliasLabel = aliasWithLabel(getOwnerIdFromSelf().c_str(), TEST_ALIAS); ret = ckmc_set_permission_by_adm(APP_1, aliasWithLabel("another-owner", aliasLabel.c_str()).c_str(), APP_LABEL_1, CKMC_PERMISSION_READ); RUNNER_ASSERT(CKMC_ERROR_INVALID_PARAMETER == ret); } @@ -578,7 +578,7 @@ RUNNER_TEST(T3102_control_deny_access_invalid) ckmc_set_permission_by_adm(APP_1, aliasWithLabel("owner", TEST_ALIAS).c_str(), NULL, CKMC_PERMISSION_NONE)); // double owner - std::string aliasLabel = aliasWithLabel(get_label().get(), TEST_ALIAS); + std::string aliasLabel = aliasWithLabel(getOwnerIdFromSelf().c_str(), TEST_ALIAS); RUNNER_ASSERT(CKMC_ERROR_INVALID_PARAMETER == ckmc_set_permission_by_adm(APP_1, aliasWithLabel("another-owner", aliasLabel.c_str()).c_str(), APP_LABEL_1, CKMC_PERMISSION_NONE)); } diff --git a/src/ckm/ckm-common.cpp b/src/ckm/ckm-common.cpp index 60c7c34..6a3e6ae 100644 --- a/src/ckm/ckm-common.cpp +++ b/src/ckm/ckm-common.cpp @@ -33,6 +33,8 @@ #include #include +const std::string SMACK_USER_APP_PREFIX = "User::App::"; + void generate_random(size_t random_bytes, char *output) { RUNNER_ASSERT(random_bytes>0 && output); @@ -63,15 +65,23 @@ void stop_service(ServiceIdx idx) sm.stopService(); } -// returns process label -CharPtr get_label() -{ +std::string getLabel() { int ret; - char* my_label = NULL; - RUNNER_ASSERT_MSG(0 <= (ret = smack_new_label_from_self(&my_label)), + char* myLabel = NULL; + RUNNER_ASSERT_MSG(0 <= (ret = smack_new_label_from_self(&myLabel)), "Failed to get smack label for self. Error: " << ret); - RUNNER_ASSERT_MSG(my_label, "NULL smack label"); - return CharPtr(my_label, free); + RUNNER_ASSERT_MSG(myLabel, "NULL smack label"); + std::string result = myLabel; + free(myLabel); + return result; +} + +std::string getOwnerIdFromSelf() { + const std::string& prefix = SMACK_USER_APP_PREFIX; + std::string smack = getLabel(); + if (0 == smack.compare(0, prefix.size(), prefix)) + return smack.substr(prefix.size(), std::string::npos); + return "/" + smack; } std::string aliasWithLabel(const char *label, const char *alias) @@ -92,7 +102,7 @@ void change_label(const char* label) RUNNER_ASSERT_MSG(0 == ret, "Error in smack_set_label_for_self("< #include +extern const std::string SMACK_USER_APP_PREFIX; + // support for error printing const char * CKMCErrorToString(int error); std::string CKMCReadableError(int error); @@ -79,12 +81,11 @@ enum ServiceIdx { void start_service(ServiceIdx idx); void stop_service(ServiceIdx idx); - // scoped free typedef std::unique_ptr CharPtr; -// returns process label -CharPtr get_label(); +// returns process owner id +std::string getOwnerIdFromSelf(); std::string aliasWithLabel(const char *label, const char *alias); @@ -99,7 +100,7 @@ public: ~ScopedLabel(); private: - CharPtr m_original_label; + std::string m_original_label; }; void save_data(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE); diff --git a/src/ckm/encryption-decryption.cpp b/src/ckm/encryption-decryption.cpp index 3fc133c..925870f 100644 --- a/src/ckm/encryption-decryption.cpp +++ b/src/ckm/encryption-decryption.cpp @@ -171,7 +171,7 @@ KeyAliasPair AlgoAes::keyGen(const char* pass, const char* suffix) { KeyAliasPair aliases; std::ostringstream oss; - CharPtr my_label = get_label(); + std::string ownerId = getOwnerIdFromSelf(); CharPtr passPtr(nullptr, free); if (pass) passPtr.reset(strdup(pass)); @@ -179,8 +179,8 @@ KeyAliasPair AlgoAes::keyGen(const char* pass, const char* suffix) oss << "aes_" << static_cast(m_type) << "_" << m_keyLen << "_key_alias"; if (suffix) oss << suffix; - aliases.prv = aliasWithLabel(my_label.get(),oss.str().c_str()); - aliases.pub = aliasWithLabel(my_label.get(), oss.str().c_str()); + aliases.prv = aliasWithLabel(ownerId.c_str(),oss.str().c_str()); + aliases.pub = aliasWithLabel(ownerId.c_str(), oss.str().c_str()); ckmc_policy_s policy; policy.extractable = false; @@ -205,8 +205,8 @@ KeyAliasPair AlgoRsa::keyGen(const char* pass, const char* suffix) oss_pub << suffix; } KeyAliasPair aliases = { - aliasWithLabel(get_label().get(), oss_prv.str().c_str()), - aliasWithLabel(get_label().get(), oss_pub.str().c_str()) + aliasWithLabel(getOwnerIdFromSelf().c_str(), oss_prv.str().c_str()), + aliasWithLabel(getOwnerIdFromSelf().c_str(), oss_pub.str().c_str()) }; CharPtr passPtr(nullptr, free); if (pass) diff --git a/src/ckm/main.cpp b/src/ckm/main.cpp index eed138f..46313b1 100644 --- a/src/ckm/main.cpp +++ b/src/ckm/main.cpp @@ -289,8 +289,8 @@ RUNNER_TEST(T1014_save_with_label) auto key = CKM::Key::create(buffer, CKM::Password()); CKM::KeyShPtr key_name, key_full_addr; CKM::Alias alias = "mykey-2"; - CharPtr top_label = get_label(); - std::string full_address = aliasWithLabel(top_label.get(), alias.c_str()); + std::string top_label = getOwnerIdFromSelf(); + std::string full_address = aliasWithLabel(top_label.c_str(), alias.c_str()); RUNNER_ASSERT_MSG( CKM_API_SUCCESS == (temp = manager->saveKey(full_address, key, CKM::Policy())), -- 2.7.4