#include <sys/types.h>
#include <ttrace.h>
+#include <filesystem>
#include <memory>
+#include <string>
#include <utility>
#include "app_request.h"
namespace {
+constexpr const char kRunAulDaemonsPath[] = "/run/aul/daemons/";
+constexpr const char kLaunchpadProcessPoolSock[] =
+ ".launchpad-process-pool-sock";
+const int kPadCmdKillLoader = 19;
constexpr const int TEP_ISMOUNT_MAX_RETRY_CNT = 20;
class ResultInfo {
return AUL_R_OK;
}
+
+extern "C" API int aul_kill_loader(const char* loader_name) {
+ return aul_kill_loader_for_uid(loader_name, getuid());
+}
+
+extern "C" API int aul_kill_loader_for_uid(const char* loader_name,
+ uid_t uid) {
+ if (loader_name == nullptr) {
+ _E("Invalid parameter");
+ return AUL_R_EINVAL;
+ }
+
+ if (uid < REGULAR_UID_MIN) {
+ uid = tzplatform_getuid(TZ_SYS_DEFAULT_USER);
+ _W("Use system default user ID(%u)", uid);
+ }
+
+ std::string endpoint = kRunAulDaemonsPath + std::to_string(uid) + "/" +
+ std::string(kLaunchpadProcessPoolSock);
+ if (!std::filesystem::exists(endpoint)) {
+ _E("launchpad socket is not prepared");
+ return AUL_R_ENOENT;
+ }
+
+ int fd = aul_sock_create_launchpad_client(kLaunchpadProcessPoolSock, uid);
+ if (fd < 0) {
+ _E("Failed to create launchpad client socket. error(%d)", fd);
+ return aul_error_convert(fd);
+ }
+
+ tizen_base::Bundle b = { {AUL_K_LOADER_NAME, loader_name} };
+ int ret = aul_sock_send_bundle_with_fd(fd, kPadCmdKillLoader, b.GetHandle(),
+ AUL_SOCK_NOREPLY);
+ if (ret != AUL_R_OK)
+ return aul_error_convert(ret);
+
+ return AUL_R_OK;
+}