mirror of
https://github.com/falcosecurity/falco.git
synced 2026-04-02 10:02:12 +00:00
Compare commits
1 Commits
dev_docker
...
chore/falc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc714d06fc |
@@ -45,6 +45,7 @@ set(
|
|||||||
app_actions/validate_rules_files.cpp
|
app_actions/validate_rules_files.cpp
|
||||||
app_actions/create_requested_paths.cpp
|
app_actions/create_requested_paths.cpp
|
||||||
app_actions/configure_interesting_sets.cpp
|
app_actions/configure_interesting_sets.cpp
|
||||||
|
app_actions/gain_lock.cpp
|
||||||
configuration.cpp
|
configuration.cpp
|
||||||
logger.cpp
|
logger.cpp
|
||||||
falco_outputs.cpp
|
falco_outputs.cpp
|
||||||
|
|||||||
45
userspace/falco/app_actions/gain_lock.cpp
Normal file
45
userspace/falco/app_actions/gain_lock.cpp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2022 The Falco Authors.
|
||||||
|
|
||||||
|
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 "application.h"
|
||||||
|
#include <sys/file.h>
|
||||||
|
|
||||||
|
using namespace falco::app;
|
||||||
|
|
||||||
|
#define FALCO_LOCK_FILE "falco.lock"
|
||||||
|
|
||||||
|
application::run_result application::gain_lock()
|
||||||
|
{
|
||||||
|
m_lock_fd = open(FALCO_LOCK_FILE, O_CREAT | O_WRONLY, 0644);
|
||||||
|
if (m_lock_fd < 0)
|
||||||
|
{
|
||||||
|
return run_result::fatal(std::string("Failed to open " FALCO_LOCK_FILE " lock file: ") + strerror(errno));
|
||||||
|
}
|
||||||
|
if (flock(m_lock_fd, LOCK_EX | LOCK_NB) == -1)
|
||||||
|
{
|
||||||
|
return run_result::fatal("A lock is present on " FALCO_LOCK_FILE " Another Falco instance running?");
|
||||||
|
}
|
||||||
|
return run_result::ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool application::release_lock(std::string &errstr)
|
||||||
|
{
|
||||||
|
if (m_lock_fd > 0)
|
||||||
|
{
|
||||||
|
close(m_lock_fd);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -130,6 +130,7 @@ bool application::run(std::string &errstr, bool &restart)
|
|||||||
// dependencies are honored (e.g. don't process events before
|
// dependencies are honored (e.g. don't process events before
|
||||||
// loading plugins, opening inspector, etc.).
|
// loading plugins, opening inspector, etc.).
|
||||||
std::list<std::function<run_result()>> run_steps = {
|
std::list<std::function<run_result()>> run_steps = {
|
||||||
|
std::bind(&application::gain_lock, this),
|
||||||
std::bind(&application::print_help, this),
|
std::bind(&application::print_help, this),
|
||||||
std::bind(&application::print_version, this),
|
std::bind(&application::print_version, this),
|
||||||
std::bind(&application::print_page_size, this),
|
std::bind(&application::print_page_size, this),
|
||||||
@@ -165,8 +166,9 @@ bool application::run(std::string &errstr, bool &restart)
|
|||||||
std::bind(&application::unregister_signal_handlers, this, _1),
|
std::bind(&application::unregister_signal_handlers, this, _1),
|
||||||
#ifndef MINIMAL_BUILD
|
#ifndef MINIMAL_BUILD
|
||||||
std::bind(&application::stop_grpc_server, this, _1),
|
std::bind(&application::stop_grpc_server, this, _1),
|
||||||
std::bind(&application::stop_webserver, this, _1)
|
std::bind(&application::stop_webserver, this, _1),
|
||||||
#endif
|
#endif
|
||||||
|
std::bind(&application::release_lock, this, _1)
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto &func : run_steps)
|
for (auto &func : run_steps)
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ private:
|
|||||||
|
|
||||||
// These methods comprise the code the application "runs". The
|
// These methods comprise the code the application "runs". The
|
||||||
// order in which the methods run is in application.cpp.
|
// order in which the methods run is in application.cpp.
|
||||||
|
run_result gain_lock();
|
||||||
run_result create_signal_handlers();
|
run_result create_signal_handlers();
|
||||||
run_result attach_inotify_signals();
|
run_result attach_inotify_signals();
|
||||||
run_result daemonize();
|
run_result daemonize();
|
||||||
@@ -279,6 +280,7 @@ private:
|
|||||||
bool stop_grpc_server(std::string &errstr);
|
bool stop_grpc_server(std::string &errstr);
|
||||||
bool stop_webserver(std::string &errstr);
|
bool stop_webserver(std::string &errstr);
|
||||||
#endif
|
#endif
|
||||||
|
bool release_lock(std::string &errstr);
|
||||||
|
|
||||||
// Methods called by the above methods
|
// Methods called by the above methods
|
||||||
int create_dir(const std::string &path);
|
int create_dir(const std::string &path);
|
||||||
@@ -320,6 +322,7 @@ private:
|
|||||||
std::unique_ptr<state> m_state;
|
std::unique_ptr<state> m_state;
|
||||||
cmdline_options m_options;
|
cmdline_options m_options;
|
||||||
bool m_initialized;
|
bool m_initialized;
|
||||||
|
int m_lock_fd;
|
||||||
};
|
};
|
||||||
|
|
||||||
}; // namespace app
|
}; // namespace app
|
||||||
|
|||||||
Reference in New Issue
Block a user