%license LICENSE-Apache-2.0
%license LICENSE-GPL-2.0
%license LICENSE-MIT
+%{_bindir}/vistd
%{vist_script_dir}/*.sql
%dir %attr(-, %{user_name}, %{group_name}) %{vist_db_dir}
%dir %attr(-, %{user_name}, %{group_name}) %{vist_plugin_dir}
# See the License for the specific language governing permissions and
# limitations under the License
+SET(TARGET_VIST_DAEMON vistd)
SET(TARGET_VIST_TEST vist-test)
SET(${TARGET_VIST_LIB}_SRCS "")
SET(${TARGET_VIST_LIB}_DEPS "")
SET(${TARGET_VIST_LIB}_TESTS "")
-ADD_SUBDIRECTORY(ipc)
+INCLUDE_DIRECTORIES(. common)
+
+ADD_SUBDIRECTORY(client)
+ADD_SUBDIRECTORY(common)
ADD_SUBDIRECTORY(manager)
ADD_SUBDIRECTORY(notification)
ADD_SUBDIRECTORY(property)
+ADD_SUBDIRECTORY(service)
ADD_LIBRARY(${TARGET_VIST_LIB} STATIC ${${TARGET_VIST_LIB}_SRCS})
TARGET_LINK_LIBRARIES(${TARGET_VIST_LIB} ${${TARGET_VIST_LIB}_DEPS}
${TARGET_OSQUERY_LIB})
+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})
+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_TEST} main/tests.cpp
${${TARGET_VIST_LIB}_TESTS})
TARGET_LINK_LIBRARIES(${TARGET_VIST_TEST} ${TARGET_VIST_LIB}
--- /dev/null
+# Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License
+
+ADD_VIST_LIBRARY(vist_client query.cpp)
+
+FILE(GLOB CLIENT_TESTS "tests/*.cpp")
+ADD_VIST_TEST(${CLIENT_TESTS})
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include "query.h"
+
+#include "ipc/client.h"
+
+namespace {
+ const std::string SOCK_ADDR = "/tmp/.vistd";
+} // anonymous namespace
+
+namespace vist {
+
+Rows Query::Execute(const std::string& statement)
+{
+ auto& client = ipc::Client::Instance(SOCK_ADDR);
+
+ return client->methodCall<Rows>("Vistd::query", statement);
+}
+
+} // namespace vist
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+namespace vist {
+
+using Row = std::map<std::string, std::string>;
+using Rows = std::vector<Row>;
+
+struct Query final {
+ static Rows Execute(const std::string& statement);
+};
+
+} // namespace vist
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include <gtest/gtest.h>
+
+#include "../query.h"
+
+#include <chrono>
+#include <thread>
+
+using namespace vist;
+
+class ClientTests : public testing::Test {};
+
+TEST_F(ClientTests, query) {
+ auto rows = Query::Execute("SELECT * FROM policy");
+
+ EXPECT_TRUE(rows.size() > 0);
+}
# See the License for the specific language governing permissions and
# limitations under the License
-FILE(GLOB SERVER_TESTS "tests/*.cpp")
-ADD_VIST_TEST(${SERVER_TESTS})
+FILE(GLOB IPC_TESTS "ipc/tests/*.cpp")
+ADD_VIST_TEST(${IPC_TESTS})
#include <klay/rmi/client.h>
+namespace vist {
namespace ipc {
class Client final {
};
} // namespace ipc
+} // namespace vist
#include <klay/rmi/service.h>
+namespace vist {
namespace ipc {
class Server final {
};
} // namespace ipc
+} // namespace vist
#include <gtest/gtest.h>
-#include "../server.h"
-#include "../client.h"
+#include "ipc/server.h"
+#include "ipc/client.h"
#include <chrono>
#include <thread>
#include <sys/types.h>
#include <unistd.h>
-using namespace ipc;
+using namespace vist;
namespace {
std::string g_socket = "/tmp/vist-test";
-
- void init()
- {
- }
-
} // anonymous namespace
class TestServer {
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include "service/vistd.h"
+
+#include <cstdlib>
+#include <stdexcept>
+
+int main() try
+{
+ vist::Vistd vistd;
+ vistd.start();
+
+ return EXIT_SUCCESS;
+} catch(const std::exception&)
+{
+ return EXIT_FAILURE;
+}
--- /dev/null
+# Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License
+
+ADD_VIST_LIBRARY(vist_daemon vistd.cpp)
+
+FILE(GLOB DAEMON_TESTS "tests/*.cpp")
+ADD_VIST_TEST(${DAEMON_TESTS})
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include <gtest/gtest.h>
+
+#include "../vistd.h"
+#include "ipc/client.h"
+
+#include <chrono>
+#include <thread>
+
+using namespace vist;
+
+class DaemonTests : public testing::Test {};
+
+TEST_F(DaemonTests, query) {
+ Vistd vistd;
+ auto rows = vistd.query("SELECT * FROM policy");
+
+ EXPECT_TRUE(rows.size() > 0);
+}
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include "vistd.h"
+#include "ipc/server.h"
+
+#include <stdexcept>
+
+#include <osquery/registry.h>
+#include <osquery/sql.h>
+#include <osquery/status.h>
+
+#define QUERY_RET_TYPE std::vector<std::map<std::string, std::string>>
+
+namespace {
+ const std::string SOCK_ADDR = "/tmp/.vistd";
+} // anonymous namespace
+
+namespace vist {
+
+Vistd::Vistd()
+{
+ osquery::registryAndPluginInit();
+}
+
+void Vistd::start()
+{
+ auto& server = ipc::Server::Instance(SOCK_ADDR);
+
+ server->expose(this, "", (QUERY_RET_TYPE)(Vistd::query)(std::string));
+ server->start();
+}
+
+Rows Vistd::query(const std::string& statement)
+{
+ osquery::SQL sql(statement, true);
+ if (!sql.ok())
+ throw std::runtime_error("Faild to execute query: " + sql.getMessageString());
+
+ return std::move(sql.rows());
+}
+
+} // namespace vist
--- /dev/null
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+namespace vist {
+
+using Row = std::map<std::string, std::string>;
+using Rows = std::vector<Row>;
+
+class Vistd final {
+public:
+ explicit Vistd();
+
+ Rows query(const std::string& statement);
+ void start();
+};
+
+} // namespace vist