ENDIF(DEFINED GBS_BUILD)
IF(NOT CMAKE_BUILD_TYPE)
- SET(CMAKE_BUILD_TYPE "RELEASE")
+ SET(CMAKE_BUILD_TYPE "DEBUG")
ENDIF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=c++1y -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
description("Policy administrator.")
schema([
Column("name", TEXT, "Policy admin name"),
+ Column("activated", INTEGER, "State of activation"),
])
implementation("tizen/policy_admin@genPolicyAdmin")
implementation_delete("tizen/policy_admin@deletePolicyAdmin")
implementation_insert("tizen/policy_admin@insertPolicyAdmin")
+implementation_update("tizen/policy_admin@updatePolicyAdmin")
auto admins = vist::policy::API::Admin::GetAll();
for (auto& admin : admins) {
- Row r;
- r["name"] = SQL_TEXT(admin);
-
- DEBUG(VIST) << "Admin info [name]: " << r["name"];
- results.emplace_back(std::move(r));
+ if (context.constraints["name"].exists(EQUALS)) { /// where clause
+ auto names = context.constraints["name"].getAll(EQUALS);
+ for (const auto& name : names) {
+ if (name == admin.first) {
+ Row row;
+ row["name"] = admin.first;
+ row["activated"] = std::to_string(admin.second);
+
+ DEBUG(VIST) << "Admin info [name]: " << row["name"]
+ << ", [activated]:" << row["activated"];
+
+ results.emplace_back(std::move(row));
+ }
+ }
+ } else { /// select *;
+ Row row;
+ row["name"] = admin.first;
+ row["activated"] = std::to_string(admin.second);
+
+ DEBUG(VIST) << "Admin info [name]: " << row["name"]
+ << ", [activated]:" << row["activated"];
+ results.emplace_back(std::move(row));
+ }
}
return results;
return { r };
}
+QueryData updatePolicyAdmin(QueryContext& context, const PluginRequest& request) try {
+ INFO(VIST) << "Update query about policy-admin table.";
+ if (request.count("json_value_array") == 0)
+ throw std::runtime_error("Wrong request format. Not found json value.");
+
+ std::string str = request.at("json_value_array");
+ rapidjson::Document document;
+ document.Parse(str.c_str());
+ if (document.HasParseError() || !document.IsArray())
+ throw std::runtime_error("Cannot parse request.");
+
+ if (document.Size() != 2)
+ throw std::runtime_error("Wrong request format.");
+
+ std::string name = document[0].GetString();
+ int activated = document[1].GetInt();
+
+ vist::policy::API::Admin::Activate(name, activated);
+
+ Row r;
+ r["status"] = "success";
+ return { r };
+} catch (...) {
+ ERROR(VIST) << "Failed to insert query on policy-admin.";
+ Row r;
+ return { r };
+}
+
} // namespace tables
} // namespace osquery
${TARGET_VIST_POLICY_LIB}
${TARGET_OSQUERY_LIB})
-IF(DEFINED GBS_BUILD)
- ADD_EXECUTABLE(${TARGET_VIST_DAEMON} main/main.cpp)
- TARGET_LINK_LIBRARIES(${TARGET_VIST_DAEMON} ${TARGET_VIST_LIB})
- TARGET_LINK_WHOLE(${TARGET_VIST_DAEMON} ${TARGET_OSQUERY_LIB})
- SET_TARGET_PROPERTIES(${TARGET_VIST_DAEMON} PROPERTIES COMPILE_FLAGS "-fPIE")
- SET_TARGET_PROPERTIES(${TARGET_VIST_DAEMON} PROPERTIES LINK_FLAGS "-pie")
- INSTALL(TARGETS ${TARGET_VIST_DAEMON}
- DESTINATION ${CMAKE_INSTALL_BINDIR}
- PERMISSIONS OWNER_READ
- OWNER_WRITE
- OWNER_EXECUTE
- GROUP_READ
- GROUP_EXECUTE
- WORLD_READ
- WORLD_EXECUTE)
+ADD_EXECUTABLE(${TARGET_VIST_DAEMON} main/main.cpp)
+TARGET_LINK_LIBRARIES(${TARGET_VIST_DAEMON} ${TARGET_VIST_LIB})
+TARGET_LINK_WHOLE(${TARGET_VIST_DAEMON} ${TARGET_OSQUERY_LIB})
+SET_TARGET_PROPERTIES(${TARGET_VIST_DAEMON} PROPERTIES COMPILE_FLAGS "-fPIE")
+SET_TARGET_PROPERTIES(${TARGET_VIST_DAEMON} PROPERTIES LINK_FLAGS "-pie")
+INSTALL(TARGETS ${TARGET_VIST_DAEMON}
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ PERMISSIONS OWNER_READ
+ OWNER_WRITE
+ OWNER_EXECUTE
+ GROUP_READ
+ GROUP_EXECUTE
+ WORLD_READ
+ WORLD_EXECUTE)
- ADD_EXECUTABLE(${TARGET_VIST_CLI} main/cli.cpp)
- TARGET_LINK_LIBRARIES(${TARGET_VIST_CLI} ${TARGET_VIST_CLIENT_LIB})
- SET_TARGET_PROPERTIES(${TARGET_VIST_CLI} PROPERTIES COMPILE_FLAGS "-fPIE")
- SET_TARGET_PROPERTIES(${TARGET_VIST_CLI} PROPERTIES LINK_FLAGS "-pie")
- INSTALL(TARGETS ${TARGET_VIST_CLI}
- DESTINATION ${CMAKE_INSTALL_BINDIR}
- PERMISSIONS OWNER_READ
- OWNER_WRITE
- OWNER_EXECUTE
- GROUP_READ
- GROUP_EXECUTE
- WORLD_READ
- WORLD_EXECUTE)
-ENDIF(DEFINED GBS_BUILD)
+ADD_EXECUTABLE(${TARGET_VIST_CLI} main/cli.cpp)
+TARGET_LINK_LIBRARIES(${TARGET_VIST_CLI} ${TARGET_VIST_CLIENT_LIB})
+SET_TARGET_PROPERTIES(${TARGET_VIST_CLI} PROPERTIES COMPILE_FLAGS "-fPIE")
+SET_TARGET_PROPERTIES(${TARGET_VIST_CLI} PROPERTIES LINK_FLAGS "-pie")
+INSTALL(TARGETS ${TARGET_VIST_CLI}
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ PERMISSIONS OWNER_READ
+ OWNER_WRITE
+ OWNER_EXECUTE
+ GROUP_READ
+ GROUP_EXECUTE
+ WORLD_READ
+ WORLD_EXECUTE)
ADD_EXECUTABLE(${TARGET_VIST_TEST} main/tests.cpp
${${TARGET_VIST_LIB}_TESTS})
virtual-table.cpp)
FILE(GLOB CLIENT_TESTS "tests/*.cpp")
-IF(DEFINED GBS_BUILD)
+#IF(DEFINED GBS_BUILD)
ADD_VIST_TEST(${CLIENT_TESTS})
-ENDIF(DEFINED GBS_BUILD)
+ #ENDIF(DEFINED GBS_BUILD)
ADD_LIBRARY(${TARGET_VIST_CLIENT_LIB} STATIC ${${TARGET_VIST_CLIENT_LIB}_SRCS})
TARGET_LINK_LIBRARIES(${TARGET_VIST_CLIENT_LIB} ${VIST_CLIENT_DEPS_LIBRARIES}
using namespace vist;
-class ClientTests : public testing::Test {};
+class QueryTests : public testing::Test {};
-TEST(ClientTests, query) {
+TEST(QueryTests, query)
+{
auto rows = Query::Execute("SELECT * FROM policy");
EXPECT_TRUE(rows.size() > 0);
}
-TEST(ClientTests, admin_enrollment) {
+TEST(QueryTests, admin_enrollment)
+{
/// Default policy admin is always exist.
auto rows = Query::Execute("SELECT * FROM policy_admin");
EXPECT_EQ(rows.size(), 1);
rows = Query::Execute("SELECT * FROM policy_admin");
EXPECT_EQ(rows.size(), 1);
}
+
+TEST(QueryTests, admin_activation)
+{
+ /// Default policy admin is always exist.
+ auto rows = Query::Execute("SELECT * FROM policy_admin");
+ EXPECT_EQ(rows.size(), 1);
+
+ Query::Execute("INSERT INTO policy_admin (name) VALUES ('testAdmin')");
+ rows = Query::Execute("SELECT * FROM policy_admin WHERE name = 'testAdmin'");
+ EXPECT_EQ(rows.size(), 1);
+ EXPECT_EQ(rows[0]["name"], "testAdmin");
+ EXPECT_EQ(rows[0]["activated"], "0");
+
+ Query::Execute("UPDATE policy_admin SET activated = 1 where name = 'testAdmin'");
+ rows = Query::Execute("SELECT * FROM policy_admin WHERE name = 'testAdmin'");
+ EXPECT_EQ(rows.size(), 1);
+ EXPECT_EQ(rows[0]["name"], "testAdmin");
+ EXPECT_EQ(rows[0]["activated"], "1");
+
+ rows = Query::Execute("DELETE FROM policy_admin WHERE name = 'testAdmin'");
+ EXPECT_EQ(rows.size(), 0);
+}
#include <vist/exception.hpp>
#include <vist/logger.hpp>
-#include <vist/logger/dlog.hpp>
#include <cstdlib>
using namespace vist;
int main() try {
- LogStream::Init(std::make_shared<Dlog>());
Vist::Instance().start();
return EXIT_SUCCESS;
} catch(const Exception<ErrCode>& e) {
PolicyManager::Instance().activate(admin, state);
}
-std::vector<std::string> API::Admin::GetAll()
+std::unordered_map<std::string, int> API::Admin::GetAll()
{
return PolicyManager::Instance().getAdmins();
}
#include <string>
#include <unordered_map>
-#include <vector>
namespace vist {
namespace policy {
static void Activate(const std::string& admin, bool state = true);
- static std::vector<std::string> GetAll();
+ static std::unordered_map<std::string, int> GetAll();
};
};
return policies;
}
-std::vector<std::string> PolicyManager::getAdmins()
+std::unordered_map<std::string, int> PolicyManager::getAdmins()
{
return storage.getAdmins();
}
PolicyValue get(const std::string& policy);
std::unordered_map<std::string, PolicyValue> getAll();
- std::vector<std::string> getAdmins();
+ std::unordered_map<std::string, int> getAdmins();
private:
explicit PolicyManager();
THROW(ErrCode::RuntimeError) << "Failed to activate admin: " << admin;
this->admins[admin].activated = state;
+ INFO(VIST) << "Admin[" << admin << "]'s activated value is set: " << state;
}
bool PolicyStorage::isActivated(const std::string& admin)
return std::move(*strictestPtr);
}
-std::vector<std::string> PolicyStorage::getAdmins() const noexcept
+std::unordered_map<std::string, int> PolicyStorage::getAdmins() const noexcept
{
- std::vector<std::string> tmp;
+ std::unordered_map<std::string, int> ret;
for (const auto& admin : this->admins)
- tmp.push_back(admin.first);
+ ret[admin.second.name] = admin.second.activated;
- return tmp;
+ return ret;
}
} // namespace policy
#include <memory>
#include <unordered_map>
-#include <vector>
-
namespace vist {
namespace policy {
PolicyValue strictest(const std::shared_ptr<PolicyModel>& policy);
- std::vector<std::string> getAdmins() const noexcept;
+ std::unordered_map<std::string, int> getAdmins() const noexcept;
private:
std::string getScript(const std::string& name);