CKM: Use pkgId instead smack label in tests. 73/46873/3
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Wed, 26 Aug 2015 15:59:38 +0000 (17:59 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Mon, 31 Aug 2015 15:11:01 +0000 (17:11 +0200)
Change-Id: Ia912089bacff330df230292fa136d10848534300

src/ckm/access_provider2.cpp
src/ckm/capi-access_control.cpp
src/ckm/ckm-common.cpp
src/ckm/ckm-common.h
src/ckm/encryption-decryption.cpp
src/ckm/main.cpp

index 31f67ba..58a98eb 100644 (file)
@@ -24,8 +24,8 @@
 #include <sys/smack.h>
 
 #include <access_provider2.h>
-
 #include <tests_common.h>
+#include <ckm-common.h>
 
 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
index 0da0bee..3a7a574 100644 (file)
@@ -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));
 }
index 60c7c34..6a3e6ae 100644 (file)
@@ -33,6 +33,8 @@
 #include <fcntl.h>
 #include <unistd.h>
 
+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("<<label<<"). Error: " << ret);
 }
 
-ScopedLabel::ScopedLabel(const char* label) : m_original_label(get_label())
+ScopedLabel::ScopedLabel(const char* label) : m_original_label(getLabel())
 {
     change_label(label);
 }
@@ -103,7 +113,7 @@ ScopedLabel::~ScopedLabel()
      * Let it throw. If we can't restore label then remaining tests results will be
      * unreliable anyway.
      */
-    change_label(m_original_label.get());
+    change_label(m_original_label.c_str());
 }
 
 const char * CKMCErrorToString(int error) {
@@ -186,7 +196,7 @@ void GarbageCollector::add(const char* alias)
 {
     save_item item;
     item.item_alias = std::string(alias);
-    item.owner_label = std::string(get_label().get());
+    item.owner_label = getOwnerIdFromSelf();
     item.owner_uid = geteuid();
     item.owner_gid = getegid();
     m_garbage.push_back(item);
index 8722c96..2e9ec6f 100644 (file)
@@ -31,6 +31,8 @@
 #include <tests_common.h>
 #include <sys/types.h>
 
+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<char, void (*)(void *)> 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);
index 3fc133c..925870f 100644 (file)
@@ -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<int>(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)
index eed138f..46313b1 100644 (file)
@@ -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())),