Merge remote-tracking branch 'tizen/tizen' into HEAD
[platform/core/test/security-tests.git] / src / security-manager-tests / security_manager_tests.cpp
index d8025b8..02ae726 100644 (file)
@@ -18,6 +18,7 @@
 #include <string>
 #include <unordered_set>
 
+#include <ftw.h>
 #include <grp.h>
 #include <pwd.h>
 
@@ -27,7 +28,6 @@
 #include <access_provider.h>
 #include <dpl/log/log.h>
 #include <dpl/test/test_runner.h>
-#include <libprivilege-control_test_common.h>
 #include <passwd_access.h>
 #include <tests_common.h>
 #include <sm_api.h>
@@ -171,6 +171,58 @@ static std::string generatePkgLabel(const std::string &pkgId)
     return "User::Pkg::" + pkgId;
 }
 
+#define FTW_MAX_FDS 16
+
+static int nftw_remove_labels(const char *fpath, const struct stat* /*sb*/,
+                       int /*typeflag*/, struct FTW* /*ftwbuf*/)
+{
+    smack_lsetlabel(fpath, nullptr, SMACK_LABEL_ACCESS);
+    smack_lsetlabel(fpath, nullptr, SMACK_LABEL_EXEC);
+    smack_lsetlabel(fpath, nullptr, SMACK_LABEL_TRANSMUTE);
+
+    return 0;
+}
+
+static int nftw_set_labels_non_app_dir(const char *fpath, const struct stat* /*sb*/,
+                                int /*typeflag*/, struct FTW* /*ftwbuf*/)
+{
+    smack_lsetlabel(fpath, "canary_label", SMACK_LABEL_ACCESS);
+    smack_lsetlabel(fpath, "canary_label", SMACK_LABEL_EXEC);
+    smack_lsetlabel(fpath, nullptr, SMACK_LABEL_TRANSMUTE);
+
+    return 0;
+}
+
+static int nftw_check_labels_non_app_dir(const char *fpath, const struct stat* /*sb*/,
+                                  int /*typeflag*/, struct FTW* /*ftwbuf*/)
+{
+    int result;
+    CStringPtr labelPtr;
+    char* label = nullptr;
+
+    /* ACCESS */
+    result = smack_lgetlabel(fpath, &label, SMACK_LABEL_ACCESS);
+    labelPtr.reset(label);
+    RUNNER_ASSERT_MSG(result == 0, "Could not get label for the path");
+    result = strcmp("canary_label", labelPtr.get());
+    RUNNER_ASSERT_MSG(result == 0, "ACCESS label on " << fpath << " is overwritten");
+
+    /* EXEC */
+    result = smack_lgetlabel(fpath, &label, SMACK_LABEL_EXEC);
+    labelPtr.reset(label);
+    RUNNER_ASSERT_MSG(result == 0, "Could not get label for the path");
+    result = strcmp("canary_label", labelPtr.get());
+    RUNNER_ASSERT_MSG(result == 0, "EXEC label on " << fpath << " is overwritten");
+
+    /* TRANSMUTE */
+    result = smack_lgetlabel(fpath, &label, SMACK_LABEL_TRANSMUTE);
+    labelPtr.reset(label);
+    RUNNER_ASSERT_MSG(result == 0, "Could not get label for the path");
+    RUNNER_ASSERT_MSG(labelPtr.get() == nullptr, "TRANSMUTE label on " << fpath << " is set");
+
+    return 0;
+}
+
 static int nftw_check_sm_labels_app_dir(const char *fpath, const struct stat *sb,
                               const char* correctLabel, bool transmute_test, bool exec_test)
 {
@@ -659,33 +711,28 @@ RUNNER_CHILD_TEST_SMACK(security_manager_03_set_label_from_appid)
     uninstall_app(app_id, pkg_id, true);
     install_app(app_id, pkg_id);
 
-    struct sockaddr_un sockaddr = {AF_UNIX, SOCK_PATH};
-    //Clean up before creating socket
-    unlink(SOCK_PATH);
-    int sock = socket(AF_UNIX, SOCK_STREAM, 0);
-    RUNNER_ASSERT_ERRNO_MSG(sock >= 0, "socket failed");
+    const auto sockaddr = UDSHelpers::makeAbstractAddress("sm_test_03.socket");
+    int sock = UDSHelpers::createServer(&sockaddr);
     SockUniquePtr sockPtr(&sock);
-    //Bind socket to address
-    result = bind(sock, (struct sockaddr*) &sockaddr, sizeof(struct sockaddr_un));
-    RUNNER_ASSERT_ERRNO_MSG(result == 0, "bind failed");
+
     //Set socket label to something different than expecedLabel
-    result = smack_set_label_for_file(sock, XATTR_NAME_SMACKIPIN, socketLabel);
+    result = smack_set_label_for_file(*sockPtr, XATTR_NAME_SMACKIPIN, socketLabel);
     RUNNER_ASSERT_ERRNO_MSG(result == 0,
         "Can't set socket label. Result: " << result);
-    result = smack_set_label_for_file(sock, XATTR_NAME_SMACKIPOUT, socketLabel);
+    result = smack_set_label_for_file(*sockPtr, XATTR_NAME_SMACKIPOUT, socketLabel);
     RUNNER_ASSERT_ERRNO_MSG(result == 0,
         "Can't set socket label. Result: " << result);
 
     Api::setProcessLabel(app_id);
 
-    result = smack_new_label_from_file(sock, XATTR_NAME_SMACKIPIN, &label);
+    result = smack_new_label_from_file(*sockPtr, XATTR_NAME_SMACKIPIN, &label);
     RUNNER_ASSERT_ERRNO_MSG(result != -1, "smack_new_label_from_file failed: " << label);
     labelPtr.reset(label);
     result = expected_label.compare(label);
     RUNNER_ASSERT_MSG(result == 0, "Socket label is incorrect. Expected: " <<
         expected_label << " Actual: " << label);
 
-    result = smack_new_label_from_file(sock, XATTR_NAME_SMACKIPOUT, &label);
+    result = smack_new_label_from_file(*sockPtr, XATTR_NAME_SMACKIPOUT, &label);
     RUNNER_ASSERT_ERRNO_MSG(result != -1, "smack_new_label_from_file failed: " << label);
     labelPtr.reset(label);
     result = expected_label.compare(label);