Relayd: disallow-clear option parsing
[lttng-tools.git] / src / bin / lttng-relayd / main.c
index de14cdb432d977c6fb1fa2cf982e435a5c0063d5..2900e2fe0a040912ebcf1bc81afd5932bb4e1a3e 100644 (file)
@@ -94,6 +94,7 @@ enum relay_connection_status {
 /* command line options */
 char *opt_output_path;
 static int opt_daemon, opt_background;
+static int opt_allow_clear = 1;
 
 /*
  * We need to wait for listener and live listener threads, as well as
@@ -179,6 +180,7 @@ static struct option long_options[] = {
        { "verbose", 0, 0, 'v', },
        { "config", 1, 0, 'f' },
        { "version", 0, 0, 'V' },
+       { "disallow-clear", 0, 0, 'x' },
        { NULL, 0, 0, 0, },
 };
 
@@ -300,6 +302,10 @@ static int set_option(int opt, const char *arg, const char *optname)
                        }
                }
                break;
+       case 'x':
+               /* Disallow clear */
+               opt_allow_clear = 0;
+               break;
        default:
                /* Unknown option or other error.
                 * Error is printed by getopt, just return */
@@ -375,6 +381,7 @@ static int set_options(int argc, char **argv)
        int orig_optopt = optopt, orig_optind = optind;
        char *default_address, *optstring;
        const char *config_path = NULL;
+       const char *value = NULL;
 
        optstring = utils_generate_optstring(long_options,
                        sizeof(long_options) / sizeof(struct option));
@@ -487,6 +494,20 @@ static int set_options(int argc, char **argv)
                }
        }
 
+       if (opt_allow_clear) {
+               /* Check if env variable exists. */
+               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);
        return retval;
@@ -4092,6 +4113,10 @@ int main(int argc, char **argv)
                goto exit_options;
        }
 
+       if (!opt_allow_clear) {
+               DBG("Clear command disallowed.");
+       }
+
        /* Try to create directory if -o, --output is specified. */
        if (opt_output_path) {
                if (*opt_output_path != '/') {
This page took 0.025153 seconds and 5 git commands to generate.