From: Igor Kotrasinski Date: Fri, 20 Jul 2018 13:49:46 +0000 (+0200) Subject: Take local debugproxy socket from systemd X-Git-Tag: submit/tizen/20180828.110226~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8bd53c11c8565a09fe01d0c83258d6e669047b0;p=platform%2Fcore%2Fsecurity%2Ftef-simulator.git Take local debugproxy socket from systemd Change-Id: I468c80dcecd977afd762f103a27cedd00cec7621 Signed-off-by: Igor Kotrasinski --- diff --git a/simulatordaemon/debugproxy/CMakeLists.txt b/simulatordaemon/debugproxy/CMakeLists.txt index b55eaaf..8197799 100644 --- a/simulatordaemon/debugproxy/CMakeLists.txt +++ b/simulatordaemon/debugproxy/CMakeLists.txt @@ -19,6 +19,7 @@ PKG_CHECK_MODULES(DEBUGPROXY_DEPS REQUIRED dlog + libsystemd-daemon ) SET(DEBUGPROXY_SOURCES diff --git a/simulatordaemon/debugproxy/inc/DebugproxySocket.h b/simulatordaemon/debugproxy/inc/DebugproxySocket.h index d07d4a4..316f239 100644 --- a/simulatordaemon/debugproxy/inc/DebugproxySocket.h +++ b/simulatordaemon/debugproxy/inc/DebugproxySocket.h @@ -11,7 +11,8 @@ class DebugproxySocket { public: - DebugproxySocket(boost::asio::io_service &io); + DebugproxySocket(int sock, boost::asio::io_service &io); + DebugproxySocket(std::string sock_path, boost::asio::io_service &io); void start_accept(); void shutdown(); private: @@ -19,7 +20,6 @@ private: void handle_connection(std::shared_ptr local_sock, yield_ctx yield); boost::asio::io_service &io; - local::stream_protocol::endpoint ep; local::stream_protocol::acceptor acceptor; std::shared_ptr quit_event; }; diff --git a/simulatordaemon/debugproxy/src/DebugproxySocket.cpp b/simulatordaemon/debugproxy/src/DebugproxySocket.cpp index fa586fb..130eb50 100644 --- a/simulatordaemon/debugproxy/src/DebugproxySocket.cpp +++ b/simulatordaemon/debugproxy/src/DebugproxySocket.cpp @@ -13,16 +13,23 @@ #include "DebugproxySocket.h" #include "ProxySession.h" -DebugproxySocket::DebugproxySocket(boost::asio::io_service &io) +DebugproxySocket::DebugproxySocket(int sock, boost::asio::io_service &io) : io(io) -, ep(DEBUGPROXY_SOCK_PATH) -, acceptor(io, ep) +, acceptor(io, local::stream_protocol(), sock) , quit_event(std::make_shared(io)) {} +DebugproxySocket::DebugproxySocket(std::string sock_path, boost::asio::io_service &io) +: io(io) +, acceptor(io, sock_path) +, quit_event(std::make_shared(io)) +{} + + void DebugproxySocket::start_accept() { - LOGD(MODULE_DEBUGPROXY, "Listening on %s", DEBUGPROXY_SOCK_PATH); + LOGD(MODULE_DEBUGPROXY, "Listening on %s", + this->acceptor.local_endpoint().path().c_str()); boost::asio::spawn(this->io, boost::bind(&DebugproxySocket::async_accept, this, _1)); } diff --git a/simulatordaemon/debugproxy/src/main.cpp b/simulatordaemon/debugproxy/src/main.cpp index 8febefc..3b92ad6 100644 --- a/simulatordaemon/debugproxy/src/main.cpp +++ b/simulatordaemon/debugproxy/src/main.cpp @@ -1,18 +1,43 @@ +#include #include +#include + +#include +#include #include +int take_socket_from_systemd() { + int n = sd_listen_fds(0); + if (n == 0) { + LOGD(MODULE_DEBUGPROXY, "No socket from systemd provided"); + return -1; + } + if (n != 1) + throw std::runtime_error("Unexpected number of systemd sockets received"); + int fd = SD_LISTEN_FDS_START; + int ret = sd_is_socket_unix(fd, SOCK_STREAM, 1, DEBUGPROXY_SOCK_PATH, 0); + if (ret <= 0) + throw std::runtime_error("Error when checking systemd socket type"); + return fd; +} + int main() { - boost::asio::io_service io; - DebugproxySocket socket(io); - socket.start_accept(); - - boost::asio::signal_set graceful_shutdown_sigs(io, SIGTERM); - graceful_shutdown_sigs.async_wait( - [&socket](const boost::system::error_code &e, int number) { - socket.shutdown(); - }); - - io.run(); + try { + boost::asio::io_service io; + int sock = take_socket_from_systemd(); + DebugproxySocket socket = sock >= 0 ? DebugproxySocket(sock, io) + : DebugproxySocket(DEBUGPROXY_SOCK_PATH, io); + socket.start_accept(); + boost::asio::signal_set graceful_shutdown_sigs(io, SIGTERM); + graceful_shutdown_sigs.async_wait( + [&socket](const boost::system::error_code &e, int number) { + socket.shutdown(); + }); + io.run(); + } catch (std::exception &e) { + LOGD(MODULE_DEBUGPROXY, "Setup error: %s", e.what()); + return 1; + } return 0; }