#include <vector>
#include <map>
#include <string>
+#include <memory>
#include <dpl/log/log.h>
#include <dpl/singleton.h>
opts.add_options()
("help,h", "produce help message")
("install,i", "install an application")
+ ("uninstall,r", "uninstall an application")
("manage-users,m", po::value<std::string>(), "add or remove user, parameter is 'a' or 'add' (for add) and 'r' or 'remove' (for remove)")
;
return opts;
return opts;
}
+static po::options_description getUninstallOptions()
+{
+ po::options_description opts("Uninstall options");
+ opts.add_options()
+ ("app,a", po::value<std::string>()->required(),
+ "application name (required)")
+ ("uid,u", po::value<uid_t>()->required(),
+ "user identifier number (required)")
+ ;
+ return opts;
+}
+
static po::options_description getUserOptions()
{
po::options_description opts("User management options");
po::options_description opts("Allowed options");
opts.add(getGenericOptions());
opts.add(getInstallOptions());
+ opts.add(getUninstallOptions());
opts.add(getUserOptions());
return opts;
}
+static void parseUninstallOptions(int argc, char *argv[],
+ struct app_inst_req &req,
+ po::variables_map &vm)
+{
+ parseCommandOptions(argc, argv, getUninstallOptions(), vm);
+
+ if (vm.count("app"))
+ req.appName = vm["app"].as<std::string>();
+ if (vm.count("uid"))
+ req.uid = vm["uid"].as<uid_t>();
+}
+
static void parseUserOptions(int argc, char *argv[],
struct user_req &req,
po::variables_map &vm)
return ret;
}
+static int uninstallApp(const struct app_inst_req &req)
+{
+ int ret = EXIT_FAILURE;
+
+ ret = security_manager_app_uninstall(&req);
+ if (SECURITY_MANAGER_SUCCESS == ret) {
+ std::cout << "Application " << req.appName <<
+ " uninstalled successfully." << std::endl;
+ LogDebug("Application " << req.appName <<
+ " uninstalled successfully.");
+ } else {
+ std::cout << "Failed to uninstall " << req.appName << " application: " <<
+ security_manager_strerror(static_cast<lib_retcode>(ret)) <<
+ " (" << ret << ")." << std::endl;
+ LogError("Failed to uninstall " << req.appName << " application: " <<
+ security_manager_strerror(static_cast<lib_retcode>(ret)) <<
+ " (" << ret << ")." << std::endl);
+ }
+ return ret;
+}
+
static int manageUserOperation(const struct user_req &req, std::string operation)
{
int ret = EXIT_FAILURE;
return EXIT_FAILURE;
parseInstallOptions(argc, argv, *req, vm);
return installApp(*req);
+ } else if (vm.count("uninstall")) {
+ struct app_inst_req *req = nullptr;
+ LogDebug("Uninstall command.");
+ if (security_manager_app_inst_req_new(&req) != SECURITY_MANAGER_SUCCESS)
+ return EXIT_FAILURE;
+ std::unique_ptr<app_inst_req, void(*)(app_inst_req*)> req_ptr(
+ req, security_manager_app_inst_req_free);
+ parseUninstallOptions(argc, argv, *req, vm);
+ return uninstallApp(*req);
} else if (vm.count("manage-users")) {
std::string operation = vm["manage-users"].as<std::string>();
struct user_req *req = nullptr;