SET(CMAKE_POSITION_INDEPENDENT_CODE "True")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
-option(ENABLE_SYSTEMD_SUPPORT "Enable support for systemd" ON)
-
-IF(ENABLE_SYSTEMD_SUPPORT AND NOT SYSTEMD_FOUND)
- message(FATAL_ERROR "systemd support required but systemd not found")
-ENDIF()
-
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(shared)
FIND_PACKAGE(Boost REQUIRED
COMPONENTS
serialization
- filesystem
log
thread
system
IF(NOT MBEDTLS_HEADERS_OK)
message(FATAL_ERROR "No mbedtls headers")
ENDIF()
-
-PKG_CHECK_MODULES(SYSTEMD libsystemd)
LINK_DIRECTORIES(${DLOG_LIBRARY_DIRS})
ADD_DEFINITIONS(${DLOG_CFLAGS_OTHER})
-IF(ENABLE_SYSTEMD_SUPPORT)
- include_directories(${SYSTEMD_INCLUDE_DIRS})
- link_directories(${SYSTEMD_LIBRARY_DIRS})
- add_definitions(${SYSTEMD_CFLAGS_OTHER})
- add_definitions(-DUSE_SYSTEMD_API=1)
-ENDIF(ENABLE_SYSTEMD_SUPPORT)
+PKG_CHECK_MODULES(SYSTEMD
+ REQUIRED
+ libsystemd)
+
+INCLUDE_DIRECTORIES(${SYSTEMD_INCLUDE_DIRS})
+LINK_DIRECTORIES(${SYSTEMD_LIBRARY_DIRS})
+ADD_DEFINITIONS(${SYSTEMD_CFLAGS_OTHER})
PKG_CHECK_MODULES(CYNARA
REQUIRED
target_link_libraries(device-certificate-managerd
${Boost_LOG_LIBRARY}
${Boost_THREAD_LIBRARY}
- ${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${CMAKE_THREAD_LIBS_INIT}
${DLOG_LIBRARIES}
${CYNARA_LIBRARIES}
+ ${SYSTEMD_LIBRARIES}
device-certificate-manager
dl)
-IF(ENABLE_SYSTEMD_SUPPORT)
- target_link_libraries(device-certificate-managerd ${SYSTEMD_LIBRARIES})
-ENDIF(ENABLE_SYSTEMD_SUPPORT)
-
###### Installation #######
INSTALL(TARGETS device-certificate-managerd
BOOST_LOG_FUNCTION();
- service_adapter serviceAdapter(DCM_UNIX_SOCKET_PATH);
+ service_adapter serviceAdapter;
cynara_configuration * cynara_conf = nullptr;
error = cynara_configuration_create(&cynara_conf);
/******************************************************************
*
- * Copyright 2017 - 2019 Samsung Electronics All Rights Reserved.
+ * Copyright 2017 - 2020 Samsung Electronics All Rights Reserved.
*
* Author: Jaroslaw Pelczar <j.pelczar@samsung.com>
*
#include "serviceadapter.h"
#include "logging.h"
-#include <boost/filesystem.hpp>
#include <cstring>
-#ifdef USE_SYSTEMD_API
#include <systemd/sd-daemon.h>
-#endif
-service_adapter::service_adapter(const std::string& default_socket_path) :
- fDefaultSocketPath(default_socket_path)
+service_adapter::service_adapter()
{
}
service_adapter::~service_adapter()
{
- if(fDefaultSocketPathUsed) {
- boost::filesystem::remove(fDefaultSocketPath);
- }
}
boost::asio::local::stream_protocol::acceptor service_adapter::create_platform_socket_acceptor(boost::asio::io_service& io_service)
{
BOOST_LOG_FUNCTION();
-#ifdef USE_SYSTEMD_API
BOOST_LOG_SEV(dcm_logger::get(), log_severity::debug) << "Try to get socket from systemd";
int n = sd_listen_fds(0);
BOOST_LOG_SEV(dcm_logger::get(), log_severity::error) << "No systemd sockets found";
throw std::runtime_error("No socket created by systemd");
-#else
- fDefaultSocketPathUsed = true;
- boost::filesystem::remove(fDefaultSocketPath);
-
- return boost::asio::local::stream_protocol::acceptor(
- io_service,
- boost::asio::local::stream_protocol::endpoint(fDefaultSocketPath));
-#endif
}
void service_adapter::notify_start_complete()
BOOST_LOG_FUNCTION();
BOOST_LOG_SEV(dcm_logger::get(), log_severity::normal) << "Notify start completed to systemd";
-#ifdef USE_SYSTEMD_API
sd_listen_fds(1);
sd_notify(0, "READY=1");
fStartCompleteNotified = true;
-#endif
}
void service_adapter::notify_start_failure(int error)
BOOST_LOG_FUNCTION();
BOOST_LOG_SEV(dcm_logger::get(), log_severity::error) << "Notify start failure";
-#ifdef USE_SYSTEMD_API
if(!fStartCompleteNotified) {
char buffer[512];
buffer[0] = '\0';
else
sd_notifyf(0, "STATUS=Failed to start up: (no message)\nERRNO=%d", error);
}
-#endif
}
/******************************************************************
*
- * Copyright 2017 Samsung Electronics All Rights Reserved.
+ * Copyright 2017 - 2020 Samsung Electronics All Rights Reserved.
*
* Author: Jaroslaw Pelczar <j.pelczar@samsung.com>
*
class service_adapter final : public boost::noncopyable {
public:
- service_adapter(const std::string& default_socket_path);
+ service_adapter();
~service_adapter();
boost::asio::local::stream_protocol::acceptor create_platform_socket_acceptor(boost::asio::io_service& io_service);
void notify_start_failure(int error);
private:
- std::string fDefaultSocketPath;
- bool fDefaultSocketPathUsed = false;
+ std::string fDefaultSocketPath = DCM_UNIX_SOCKET_PATH;
bool fStartCompleteNotified = false;
};
configure_file(device-certificate-manager.service.in device-certificate-manager.service @ONLY)
configure_file(device-certificate-manager.socket.in device-certificate-manager.socket @ONLY)
-IF(NOT ("${SYSTEMD_UNIT_DIR}" STREQUAL ""))
-
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager.service
${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager.socket
DESTINATION ${SYSTEMD_UNIT_DIR})
-
-ENDIF()