Add app owner getter test 10/320310/4
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 26 Feb 2025 10:03:25 +0000 (11:03 +0100)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 4 Mar 2025 15:05:25 +0000 (15:05 +0000)
Change-Id: Ida7103c7c48f34da5ff6d32e5cb0d1c290456a18

src/security-manager-tests/run-security-manager-no-smack-tests.sh
src/security-manager-tests/test_cases.cpp

index df4c682a0b719d2936bf5c374d756b9561b6e942..99ba48619b07c3fa33c1d709c118236a813ab696 100644 (file)
@@ -87,7 +87,8 @@ required=(
        security_manager_25i_local_path_preloaded_install
        security_manager_25j_global_path_local_install
        security_manager_26_hybrid_pkg_uninstall_artifacts_check
-       security_manager_26_1_security_manager_get_app_owner_uid
+       security_manager_26_1a_security_manager_get_app_owner_uid
+       security_manager_26_1b_security_manager_get_app_owner_uid
        security_manager_26_2_security_manager_self_is_app
        security_manager_26_3_security_manager_is_app_from_pid
        nss_01_normal_user_without_inter_daemon_groups
index 04433fb7bfbaa737b7667ce1f673d86bb956e686..732afa34bd4d3869810e726de07b8965ebe41ecb 100644 (file)
@@ -1190,11 +1190,11 @@ RUNNER_CHILD_TEST(security_manager_26_hybrid_pkg_uninstall_artifacts_check)
     app2.checkAfterUninstall();
 }
 
-RUNNER_CHILD_TEST(security_manager_26_1_security_manager_get_app_owner_uid)
+RUNNER_CHILD_TEST(security_manager_26_1a_security_manager_get_app_owner_uid)
 {
-    TemporaryTestUser testUser("sm_test_26_1_user_name", GUM_USERTYPE_NORMAL);
+    TemporaryTestUser testUser("sm_test_26_1a_user_name", GUM_USERTYPE_NORMAL);
     testUser.create();
-    AppInstallHelperExt app("sm_test_26_1", "sm_test_26_1", testUser.getUid());
+    AppInstallHelperExt app("sm_test_26_1a", "sm_test_26_1a", testUser.getUid());
     ScopedInstaller appInstall(app);
     pid_t pid = fork();
     RUNNER_ASSERT_ERRNO_MSG(pid >= 0, "Fork failed");
@@ -1219,17 +1219,52 @@ RUNNER_CHILD_TEST(security_manager_26_1_security_manager_get_app_owner_uid)
         //
         // This will be changed once we'll do completely black-box security tests that will actually
         // install a real app.
-#ifdef SMACK_ENABLED
-        RUNNER_ASSERT_MSG(owner_uid == getuid(), "Invalid uid returned - expected: "
-                          << getuid() << " returned: " << owner_uid);
-#else
-        RUNNER_ASSERT_MSG(owner_uid == testUser.getUid(), "Invalid uid returned - expected: "
-                          << testUser.getUid() << " returned: " << owner_uid);
-#endif
+        if (smack_check()) {
+            RUNNER_ASSERT_MSG(owner_uid == getuid(), "Invalid uid returned - expected: "
+                              << getuid() << " returned: " << owner_uid);
+        } else {
+            RUNNER_ASSERT_MSG(owner_uid == testUser.getUid(), "Invalid uid returned - expected: "
+                              << testUser.getUid() << " returned: " << owner_uid);
+        }
         exit(0);
     }
 }
 
+RUNNER_CHILD_TEST(security_manager_26_1b_security_manager_get_app_owner_uid)
+{
+    // For non-apps in smack-enabled mode the owner uid is always getuid(). In no-smack mode
+    // non-apps can't be identified so SECURITY_MANAGER_ERROR_NO_SUCH_OBJECT is returned.
+    auto test = []{
+        uid_t owner_uid = 0;
+
+        int ret = security_manager_get_app_owner_uid(getpid(), &owner_uid);
+        if (smack_check()) {
+            RUNNER_ASSERT_MSG(ret == SECURITY_MANAGER_SUCCESS,
+                              "security_manager_get_app_owner_uid() failed ");
+            RUNNER_ASSERT_MSG(owner_uid == getuid(),
+                              "Invalid uid returned - expected: " << getuid() << " returned: " <<
+                              owner_uid);
+        } else {
+            RUNNER_ASSERT_MSG(ret == SECURITY_MANAGER_ERROR_NO_SUCH_OBJECT,
+                              "security_manager_get_app_owner_uid() did not fail as expected");
+        }
+    };
+
+    TemporaryTestUser testUser("sm_test_26_1b_user_name", GUM_USERTYPE_NORMAL);
+    testUser.create();
+    pid_t pid = fork();
+    RUNNER_ASSERT_ERRNO_MSG(pid >= 0, "Fork failed");
+    if (pid != 0) {
+        // wait for child to exit
+        waitPid(pid);
+    } else {
+        // child
+        test();
+        RUNNER_ASSERT_MSG(setLauncherSecurityAttributes(testUser) == 0, "launcher failed");
+        test();
+        exit(0);
+    }
+}
 
 RUNNER_CHILD_TEST(security_manager_26_2_security_manager_self_is_app)
 {