From: Mathieu Desnoyers Date: Mon, 9 Dec 2019 14:35:08 +0000 (-0500) Subject: relayd: environment variable to disable clear command X-Git-Tag: v2.12.0-rc1~150 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=35ab25e536fda26b8e079726cd2ce9d552f25bc8;p=lttng-tools.git relayd: environment variable to disable clear command Signed-off-by: Mathieu Desnoyers Change-Id: I04e5867220315660a373f2e49d5e6f0652a6c37e Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 54f31d721..6beb21692 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -98,7 +98,7 @@ enum relay_connection_status { /* command line options */ char *opt_output_path, *opt_working_directory; -static int opt_daemon, opt_background, opt_print_version; +static int opt_daemon, opt_background, opt_print_version, opt_allow_clear = 1; enum relay_group_output_by opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_UNKNOWN; /* @@ -189,6 +189,7 @@ static struct option long_options[] = { { "working-directory", 1, 0, 'w', }, { "group-output-by-session", 0, 0, 's', }, { "group-output-by-host", 0, 0, 'p', }, + { "disallow-clear", 0, 0, 'x' }, { NULL, 0, 0, 0, }, }; @@ -355,6 +356,10 @@ static int set_option(int opt, const char *arg, const char *optname) } opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST; break; + case 'x': + /* Disallow clear */ + opt_allow_clear = 0; + break; default: /* Unknown option or other error. * Error is printed by getopt, just return */ @@ -562,6 +567,19 @@ static int set_options(int argc, char **argv) if (opt_group_output_by == RELAYD_GROUP_OUTPUT_BY_UNKNOWN) { opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST; } + if (opt_allow_clear) { + /* Check if env variable exists. */ + const char *value = lttng_secure_getenv(DEFAULT_LTTNG_RELAYD_DISALLOW_CLEAR_ENV); + if (value) { + ret = config_parse_value(value); + if (ret < 0) { + ERR("Invalid value for %s specified", DEFAULT_LTTNG_RELAYD_DISALLOW_CLEAR_ENV); + retval = -1; + goto exit; + } + opt_allow_clear = !ret; + } + } exit: free(optstring); @@ -3811,6 +3829,8 @@ int main(int argc, char **argv) goto exit_options; } + DBG("Clear command %s", opt_allow_clear ? "allowed" : "disallowed"); + /* Try to create directory if -o, --output is specified. */ if (opt_output_path) { if (*opt_output_path != '/') { diff --git a/src/common/defaults.h b/src/common/defaults.h index 23f1f7336..155739f46 100644 --- a/src/common/defaults.h +++ b/src/common/defaults.h @@ -345,6 +345,7 @@ #define DEFAULT_LTTNG_RELAYD_TCP_KEEP_ALIVE_MAX_PROBE_COUNT_ENV "LTTNG_RELAYD_TCP_KEEP_ALIVE_MAX_PROBE_COUNT" #define DEFAULT_LTTNG_RELAYD_TCP_KEEP_ALIVE_PROBE_INTERVAL_ENV "LTTNG_RELAYD_TCP_KEEP_ALIVE_PROBE_INTERVAL" #define DEFAULT_LTTNG_RELAYD_TCP_KEEP_ALIVE_ABORT_THRESHOLD_ENV "LTTNG_RELAYD_TCP_KEEP_ALIVE_ABORT_THRESHOLD" +#define DEFAULT_LTTNG_RELAYD_DISALLOW_CLEAR_ENV "LTTNG_RELAYD_DISALLOW_CLEAR" #define DEFAULT_LTTNG_RELAYD_WORKING_DIRECTORY_ENV "LTTNG_RELAYD_WORKING_DIRECTORY"