Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #5573: have cf-serverd understands SIGHUP #490

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions rudder-agent/SOURCES/Makefile
Expand Up @@ -49,6 +49,7 @@ localdepends: ./initial-promises ./detect_os.sh ./files ./fusioninventory-agent
$(PATCH) -d ./cfengine-source -p1 < ./patches/cfengine/0008-fix-promise-evaluation.patch
$(PATCH) -d ./cfengine-source -p1 < ./patches/cfengine/0009-dont-duplicate-text-blocks.patch
$(PATCH) -d ./cfengine-source -p1 < ./patches/cfengine/0010-support-large-int.patch
$(PATCH) -d ./cfengine-source -p1 < ./patches/cfengine/0011-cfserverd_understands_SIGHUP.patch

# Bootstrap the package using autogen before compilation
cd cfengine-source && NO_CONFIGURE=1 ./autogen.sh
Expand Down
@@ -0,0 +1,88 @@
diff --git a/cf-serverd/cf-serverd-functions.c b/cf-serverd/cf-serverd-functions.c
index 03bef86..7148161 100644
--- a/cf-serverd/cf-serverd-functions.c
+++ b/cf-serverd/cf-serverd-functions.c
@@ -321,6 +321,14 @@ static void CheckFileChanges(EvalContext *ctx, Policy **policy, GenericAgentConf
Log(LOG_LEVEL_DEBUG, "Checking file updates for input file '%s'",
config->input_file);

+ /* If we force the reload of config, effectively recheck the promises */
+ if ( IsRequestReloadConfig() )
+ {
+ Log(LOG_LEVEL_VERBOSE, "Force reload of inputs files...");
+ GenericAgentCheckPolicy(config, true, true);
+ ClearRequestReloadConfig();
+ }
+
time_t validated_at = ReadTimestampFromPolicyValidatedFile(config, NULL);

if (config->agent_specific.daemon.last_validated_at < validated_at)
@@ -547,7 +555,7 @@ void StartServer(EvalContext *ctx, Policy **policy, GenericAgentConfig *config)

signal(SIGINT, HandleSignalsForDaemon);
signal(SIGTERM, HandleSignalsForDaemon);
- signal(SIGHUP, SIG_IGN);
+ signal(SIGHUP, HandleSignalsForDaemon);
signal(SIGPIPE, SIG_IGN);
signal(SIGUSR1, HandleSignalsForDaemon);
signal(SIGUSR2, HandleSignalsForDaemon);
diff --git a/libpromises/signals.c b/libpromises/signals.c
index 682bf1e..a872a8d 100644
--- a/libpromises/signals.c
+++ b/libpromises/signals.c
@@ -26,6 +26,7 @@

static bool PENDING_TERMINATION = false; /* GLOBAL_X */

+static bool RELOAD_CONFIG = false; /* GLOBAL_X */
/********************************************************************/

bool IsPendingTermination(void)
@@ -33,6 +34,15 @@ bool IsPendingTermination(void)
return PENDING_TERMINATION;
}

+bool IsRequestReloadConfig(void)
+{
+ return RELOAD_CONFIG;
+}
+
+void ClearRequestReloadConfig()
+{
+ RELOAD_CONFIG = false;
+}
/********************************************************************/

static int SIGNAL_PIPE[2] = { -1, -1 }; /* GLOBAL_C */
@@ -144,7 +154,6 @@ void HandleSignalsForDaemon(int signum)
{
case SIGTERM:
case SIGINT:
- case SIGHUP:
case SIGSEGV:
case SIGKILL:
case SIGPIPE:
@@ -156,6 +165,9 @@ void HandleSignalsForDaemon(int signum)
case SIGUSR2:
LogSetGlobalLevel(LOG_LEVEL_NOTICE);
break;
+ case SIGHUP:
+ RELOAD_CONFIG = true;
+ break;
default:
/* No action */
break;
diff --git a/libpromises/signals.h b/libpromises/signals.h
index bb36707..a1783b5 100644
--- a/libpromises/signals.h
+++ b/libpromises/signals.h
@@ -30,6 +30,9 @@
// check whether the running daemon should terminate after having received a signal.
bool IsPendingTermination(void);

+bool IsRequestReloadConfig(void);
+void ClearRequestReloadConfig();
+
void MakeSignalPipe(void);
int GetSignalPipe(void);
void HandleSignalsForDaemon(int signum);