relayd: environment variable to disable clear command
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 9 Dec 2019 14:35:08 +0000 (09:35 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 19 Dec 2019 22:23:17 +0000 (17:23 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I04e5867220315660a373f2e49d5e6f0652a6c37e
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-relayd/main.c
src/common/defaults.h

index 54f31d7218a175fa16cbc8a7827f53c393a7f616..6beb21692c4b2fe7077b751456e7f272c9c5c366 100644 (file)
@@ -98,7 +98,7 @@ enum relay_connection_status {
 
 /* command line options */
 char *opt_output_path, *opt_working_directory;
 
 /* 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;
 
 /*
 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', },
        { "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, },
 };
 
        { 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;
                }
                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 */
        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_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);
 
 exit:
        free(optstring);
@@ -3811,6 +3829,8 @@ int main(int argc, char **argv)
                goto exit_options;
        }
 
                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 != '/') {
        /* Try to create directory if -o, --output is specified. */
        if (opt_output_path) {
                if (*opt_output_path != '/') {
index 23f1f733610664b9f989e5e6541ae72ea07aed1b..155739f460a2d0615f0c4053ae7954afa4d97351 100644 (file)
 #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_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"
 
 
 #define DEFAULT_LTTNG_RELAYD_WORKING_DIRECTORY_ENV "LTTNG_RELAYD_WORKING_DIRECTORY"
 
This page took 0.029856 seconds and 5 git commands to generate.