mirror of
https://github.com/binary-kitchen/doorlockd
synced 2024-12-22 18:34:25 +01:00
Added proper daemonization
This commit is contained in:
parent
de6008e28b
commit
ae8f2b83b5
10
CMakeLists.txt
Executable file → Normal file
10
CMakeLists.txt
Executable file → Normal file
@ -29,6 +29,7 @@ door.cpp
|
|||||||
epaper.cpp
|
epaper.cpp
|
||||||
logic.cpp
|
logic.cpp
|
||||||
util.cpp
|
util.cpp
|
||||||
|
daemon.cpp
|
||||||
epaper/Display_COG_Process.c
|
epaper/Display_COG_Process.c
|
||||||
epaper/Display_Controller.c
|
epaper/Display_Controller.c
|
||||||
epaper/Display_Hardware_Driver.c
|
epaper/Display_Hardware_Driver.c
|
||||||
@ -38,9 +39,10 @@ epaper/bsp.c
|
|||||||
add_executable(doorlockd ${SRCS})
|
add_executable(doorlockd ${SRCS})
|
||||||
target_link_libraries(doorlockd wiringPi jsoncpp ldap ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(doorlockd wiringPi jsoncpp ldap ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
|
||||||
install(TARGETS doorlockd DESTINATION sbin)
|
install(TARGETS doorlockd DESTINATION sbin/)
|
||||||
install(FILES img/template.png DESTINATION share/doorlockd)
|
install(FILES img/template.png DESTINATION share/doorlockd/)
|
||||||
install(DIRECTORY scripts/ DESTINATION share/doorlockd
|
install(DIRECTORY scripts/ DESTINATION share/doorlockd/
|
||||||
FILES_MATCHING PATTERN "scripts/doorlockd-*"
|
FILES_MATCHING PATTERN "scripts/doorlockd-*"
|
||||||
PERMISSIONS WORLD_EXECUTE WORLD_READ OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE OWNER_WRITE)
|
PERMISSIONS WORLD_EXECUTE WORLD_READ OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE OWNER_WRITE)
|
||||||
install(FILES scripts/doorlockd.service DESTINATION /etc/systemd/system)
|
install(FILES scripts/doorlockd.service DESTINATION /etc/systemd/system/)
|
||||||
|
install(FILES scripts/doorlockd DESTINATION /etc/sysconfig/)
|
||||||
|
2
config.h.in
Executable file → Normal file
2
config.h.in
Executable file → Normal file
@ -14,6 +14,8 @@
|
|||||||
#define DEFAULT_WEB_PREFIX "https://lock.binary.kitchen/"
|
#define DEFAULT_WEB_PREFIX "https://lock.binary.kitchen/"
|
||||||
#define DEFAULT_LDAP_SERVER "ldaps://ldap.binary.kitchen"
|
#define DEFAULT_LDAP_SERVER "ldaps://ldap.binary.kitchen"
|
||||||
#define DEFAULT_BINDDN "cn=%s,ou=Users,dc=binary-kitchen,dc=de"
|
#define DEFAULT_BINDDN "cn=%s,ou=Users,dc=binary-kitchen,dc=de"
|
||||||
|
#define DEFAULT_LOG_FILE "/var/log/doorlockd.log"
|
||||||
#define DEFAULT_ALLOWED_IP_PREFIX "172.23.3."
|
#define DEFAULT_ALLOWED_IP_PREFIX "172.23.3."
|
||||||
|
#define DEFAULT_PID_FILE "/var/run/doorlockd.pid"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
10
logic.cpp
Executable file → Normal file
10
logic.cpp
Executable file → Normal file
@ -56,7 +56,7 @@ Logic::Response Logic::parseRequest(const string &str)
|
|||||||
{
|
{
|
||||||
unique_lock<mutex> l(_mutex);
|
unique_lock<mutex> l(_mutex);
|
||||||
|
|
||||||
_logger("Parsing request...");
|
_logger(LogLevel::info, "Incoming request...");
|
||||||
Json::Reader reader;
|
Json::Reader reader;
|
||||||
Json::Value root;
|
Json::Value root;
|
||||||
Response retval = Fail;
|
Response retval = Fail;
|
||||||
@ -66,7 +66,7 @@ Logic::Response Logic::parseRequest(const string &str)
|
|||||||
bool suc = reader.parse(str, root, false);
|
bool suc = reader.parse(str, root, false);
|
||||||
if (!suc)
|
if (!suc)
|
||||||
{
|
{
|
||||||
_logger(LogLevel::error, "Request ist not valid JSON!");
|
_logger(LogLevel::warning, "Request ist not valid JSON!");
|
||||||
retval = NotJson;
|
retval = NotJson;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -89,8 +89,10 @@ Logic::Response Logic::parseRequest(const string &str)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Action: %s\nAuthenticate: %d\nIP: %s\n",action.c_str(), authenticate, ip.c_str());
|
_logger(" Action: " + action, LogLevel::notice);
|
||||||
printf("User: %s\nPassword: XXXXXXXXXX\nToken: %s\n",user.c_str(), token.c_str());
|
_logger(" User : " + user, LogLevel::notice);
|
||||||
|
_logger(" IP : " + ip, LogLevel::notice);
|
||||||
|
_logger(" Token : " + token, LogLevel::notice);
|
||||||
|
|
||||||
if (authenticate == true)
|
if (authenticate == true)
|
||||||
{
|
{
|
||||||
|
37
main.cpp
Executable file → Normal file
37
main.cpp
Executable file → Normal file
@ -3,10 +3,12 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <csignal>
|
||||||
|
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
|
|
||||||
|
#include "daemon.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "logic.h"
|
#include "logic.h"
|
||||||
|
|
||||||
@ -19,6 +21,15 @@ const static Logger &l = Logger::get();
|
|||||||
|
|
||||||
static unique_ptr<Logic> logic = nullptr;
|
static unique_ptr<Logic> logic = nullptr;
|
||||||
|
|
||||||
|
boost::asio::io_service io_service;
|
||||||
|
|
||||||
|
void signal_handler(int signum)
|
||||||
|
{
|
||||||
|
(void)signum;
|
||||||
|
io_service.stop();
|
||||||
|
logic.reset();
|
||||||
|
}
|
||||||
|
|
||||||
class session
|
class session
|
||||||
: public std::enable_shared_from_this<session>
|
: public std::enable_shared_from_this<session>
|
||||||
{
|
{
|
||||||
@ -96,6 +107,9 @@ int main(int argc, char** argv)
|
|||||||
string bindDN;
|
string bindDN;
|
||||||
string lockPagePrefix;
|
string lockPagePrefix;
|
||||||
string allowedIpPrefix;
|
string allowedIpPrefix;
|
||||||
|
string logfile;
|
||||||
|
string pidFile;
|
||||||
|
bool foreground = false;
|
||||||
|
|
||||||
l(LogLevel::notice, "Starting doorlockd");
|
l(LogLevel::notice, "Starting doorlockd");
|
||||||
|
|
||||||
@ -106,10 +120,13 @@ int main(int argc, char** argv)
|
|||||||
("help,h", "print help")
|
("help,h", "print help")
|
||||||
("tokentimeout,t", po::value<unsigned int>(&timeout)->default_value(DEFAULT_TOKEN_TIMEOUT), "Token timeout in seconds")
|
("tokentimeout,t", po::value<unsigned int>(&timeout)->default_value(DEFAULT_TOKEN_TIMEOUT), "Token timeout in seconds")
|
||||||
("port,p", po::value<short>(&port)->default_value(DEFAULT_PORT), "Port")
|
("port,p", po::value<short>(&port)->default_value(DEFAULT_PORT), "Port")
|
||||||
("ldap,l", po::value<string>(&ldapServer)->default_value(DEFAULT_LDAP_SERVER), "Ldap Server")
|
("ldap,s", po::value<string>(&ldapServer)->default_value(DEFAULT_LDAP_SERVER), "Ldap Server")
|
||||||
("bidndn,b", po::value<string>(&bindDN)->default_value(DEFAULT_BINDDN), "Bind DN, %s means username")
|
("bidndn,b", po::value<string>(&bindDN)->default_value(DEFAULT_BINDDN), "Bind DN, %s means username")
|
||||||
("web,w", po::value<string>(&lockPagePrefix)->default_value(DEFAULT_WEB_PREFIX), "Prefix of the webpage")
|
("web,w", po::value<string>(&lockPagePrefix)->default_value(DEFAULT_WEB_PREFIX), "Prefix of the webpage")
|
||||||
("ip,i", po::value<string>(&allowedIpPrefix)->default_value(DEFAULT_ALLOWED_IP_PREFIX), "Default allowed IP Prefix");
|
("ip,i", po::value<string>(&allowedIpPrefix)->default_value(DEFAULT_ALLOWED_IP_PREFIX), "Default allowed IP Prefix")
|
||||||
|
("foreground,f", po::bool_switch(&foreground)->default_value(false), "Run in foreground")
|
||||||
|
("logfile,l", po::value<string>(&logfile)->default_value(DEFAULT_LOG_FILE), "Log file")
|
||||||
|
("pid,z", po::value<string>(&pidFile)->default_value(DEFAULT_PID_FILE), "PID file");
|
||||||
|
|
||||||
po::variables_map vm;
|
po::variables_map vm;
|
||||||
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
|
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
|
||||||
@ -131,6 +148,19 @@ int main(int argc, char** argv)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
daemonize(!foreground,
|
||||||
|
"/",
|
||||||
|
"/dev/null",
|
||||||
|
logfile,
|
||||||
|
logfile,
|
||||||
|
pidFile);
|
||||||
|
|
||||||
|
signal(SIGINT, signal_handler);
|
||||||
|
signal(SIGKILL, signal_handler);
|
||||||
|
signal(SIGTERM, signal_handler);
|
||||||
|
signal(SIGUSR1, signal_handler);
|
||||||
|
signal(SIGUSR2, signal_handler);
|
||||||
|
|
||||||
logic = unique_ptr<Logic>(new Logic(tokenTimeout,
|
logic = unique_ptr<Logic>(new Logic(tokenTimeout,
|
||||||
ldapServer,
|
ldapServer,
|
||||||
bindDN,
|
bindDN,
|
||||||
@ -138,11 +168,8 @@ int main(int argc, char** argv)
|
|||||||
allowedIpPrefix));
|
allowedIpPrefix));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
boost::asio::io_service io_service;
|
|
||||||
server s(io_service, port);
|
server s(io_service, port);
|
||||||
io_service.run();
|
io_service.run();
|
||||||
|
|
||||||
retval = 0;
|
|
||||||
}
|
}
|
||||||
catch (const char* const &ex) {
|
catch (const char* const &ex) {
|
||||||
ostringstream str;
|
ostringstream str;
|
||||||
|
Loading…
Reference in New Issue
Block a user