}
}
+void getPkgIdByCynaraClient(const std::string &client, std::string *pkgId, std::string *appId,
+ lib_retcode expectedResult)
+{
+ char *pkg_Id = nullptr;
+ char *app_Id = nullptr;
+
+ int result = security_manager_identify_app_from_cynara_client(client.c_str(),
+ pkgId == nullptr ? nullptr : &pkg_Id,
+ appId == nullptr ? nullptr : &app_Id);
+
+ RUNNER_ASSERT_MSG((lib_retcode)result == expectedResult,
+ "getting pkg id from pid returned wrong value."
+ << " client: " << client << ";"
+ << " Result: " << result << ";"
+ << " Expected result: " << expectedResult);
+
+ if (pkgId && result == SECURITY_MANAGER_SUCCESS) {
+ RUNNER_ASSERT_MSG(pkg_Id != nullptr, "getting pkg and app id did not allocate memory");
+ }
+
+ if (appId && result == SECURITY_MANAGER_SUCCESS) {
+ RUNNER_ASSERT_MSG(app_Id != nullptr, "getting pkg and app id did not allocate memory");
+ }
+
+ if (pkg_Id) {
+ *pkgId = pkg_Id;
+ free(pkg_Id);
+ }
+
+ if (app_Id) {
+ *appId = app_Id;
+ free(app_Id);
+ }
+}
+
void appHasPrivilege(const char *appId, const char *privilege, uid_t user, int &value, lib_retcode expectedResult)
{
int result = security_manager_app_has_privilege(appId, privilege, user, &value);
#include <unistd.h>
#include <access_provider.h>
+#include <cynara_helpers_creds.h>
#include <dpl/test/test_runner.h>
#include <memory.h>
#include <passwd_access.h>
Api::uninstall(requestUninst);
}
+
+RUNNER_CHILD_TEST(security_manager_53a_get_id_by_cynara_client)
+{
+ const char *const sm_app_id = "sm_test_53a_app";
+ const char *const sm_pkg_id = "sm_test_53a_pkg";
+
+ InstallRequest requestInst;
+ requestInst.setAppId(sm_app_id);
+ requestInst.setPkgId(sm_pkg_id);
+
+ Api::install(requestInst);
+
+ std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+ clientTestTemplate([&] (int sock, pid_t) {
+ std::string rcvPkgId, rcvAppId;
+ CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+ RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+ Api::getPkgIdByCynaraClient(cynaraClient.get(), &rcvPkgId, &rcvAppId);
+ RUNNER_ASSERT_MSG(rcvPkgId == sm_pkg_id, "pkgIds don't match ret = " << rcvPkgId
+ << "; expected = " << sm_pkg_id);
+ RUNNER_ASSERT_MSG(rcvAppId == sm_app_id, "appIds don't match ret = " << rcvAppId
+ << "; expected = " << sm_app_id);
+ }, "tcsmc53a", smackLabel);
+
+ InstallRequest requestUninst;
+ requestUninst.setAppId(sm_app_id);
+
+ Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53b_get_id_by_cynara_client_wrong_client)
+{
+
+ std::string rcvPkgId, rcvAppId;
+ Api::getPkgIdByCynaraClient("NotAnApp", &rcvPkgId, &rcvAppId,
+ SECURITY_MANAGER_ERROR_NO_SUCH_OBJECT);
+}
+
+RUNNER_CHILD_TEST(security_manager_53c_get_id_by_cynara_client_only_pkgid)
+{
+ const char *const sm_app_id = "sm_test_53c_app";
+ const char *const sm_pkg_id = "sm_test_53c_pkg";
+
+ InstallRequest requestInst;
+ requestInst.setAppId(sm_app_id);
+ requestInst.setPkgId(sm_pkg_id);
+
+ Api::install(requestInst);
+
+ std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+ clientTestTemplate([&] (int sock, pid_t) {
+ std::string rcvPkgId;
+ CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+ RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+ Api::getPkgIdByCynaraClient(cynaraClient.get(), &rcvPkgId, nullptr);
+ RUNNER_ASSERT_MSG(rcvPkgId == sm_pkg_id, "pkgIds don't match ret = " << rcvPkgId
+ << "; expected = " << sm_pkg_id);
+ }, "tcsm28c", smackLabel);
+
+ InstallRequest requestUninst;
+ requestUninst.setAppId(sm_app_id);
+
+ Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53d_get_id_by_cynara_client_only_appid)
+{
+ const char *const sm_app_id = "sm_test_53d_app";
+ const char *const sm_pkg_id = "sm_test_53d_pkg";
+
+ InstallRequest requestInst;
+ requestInst.setAppId(sm_app_id);
+ requestInst.setPkgId(sm_pkg_id);
+
+ Api::install(requestInst);
+
+ std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+ clientTestTemplate([&] (int sock, pid_t) {
+ std::string rcvAppId;
+ CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+ RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+ Api::getPkgIdByCynaraClient(cynaraClient.get(), nullptr, &rcvAppId);
+ RUNNER_ASSERT_MSG(rcvAppId == sm_app_id, "appIds don't match ret = " << rcvAppId
+ << "; expected = " << sm_app_id);
+ }, "tcsm28d", smackLabel);
+
+ InstallRequest requestUninst;
+ requestUninst.setAppId(sm_app_id);
+
+ Api::uninstall(requestUninst);
+}
+
+RUNNER_CHILD_TEST(security_manager_53e_get_id_by_cynara_client_nulls)
+{
+ const char *const sm_app_id = "sm_test_53e_app";
+ const char *const sm_pkg_id = "sm_test_53e_pkg";
+
+ InstallRequest requestInst;
+ requestInst.setAppId(sm_app_id);
+ requestInst.setPkgId(sm_pkg_id);
+
+ Api::install(requestInst);
+
+ std::string smackLabel = generateProcessLabel(sm_app_id, sm_pkg_id);
+
+ clientTestTemplate([&] (int sock, pid_t) {
+ std::string rcvAppId;
+ CStringPtr cynaraClient(CynaraHelperCredentials::socketGetClient(sock, CLIENT_METHOD_SMACK));
+ RUNNER_ASSERT_MSG(cynaraClient, "Cynara client from socket returned NULL");
+ Api::getPkgIdByCynaraClient(cynaraClient.get(), nullptr, nullptr, SECURITY_MANAGER_ERROR_INPUT_PARAM);
+ }, "tcsm28e", smackLabel);
+
+ InstallRequest requestUninst;
+ requestUninst.setAppId(sm_app_id);
+
+ Api::uninstall(requestUninst);
+}