- break;
- case 'c':
- snprintf(client_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'a':
- snprintf(apps_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'd':
- opt_daemon = 1;
- break;
- case 'g':
- tracing_group_name = optarg;
- break;
- case 'h':
- usage();
- exit(EXIT_FAILURE);
- case 'V':
- fprintf(stdout, "%s\n", VERSION);
- exit(EXIT_SUCCESS);
- case 'S':
- opt_sig_parent = 1;
- break;
- case 'E':
- snprintf(kconsumer_data.err_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'C':
- snprintf(kconsumer_data.cmd_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'F':
- snprintf(ustconsumer64_data.err_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'D':
- snprintf(ustconsumer64_data.cmd_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'H':
- snprintf(ustconsumer32_data.err_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'G':
- snprintf(ustconsumer32_data.cmd_unix_sock_path, PATH_MAX, "%s", optarg);
- break;
- case 'N':
- opt_no_kernel = 1;
- break;
- case 'q':
- lttng_opt_quiet = 1;
- break;
- case 'v':
- /* Verbose level can increase using multiple -v */
- lttng_opt_verbose += 1;
- break;
- case 'Z':
- opt_verbose_consumer += 1;
- break;
- case 'u':
- consumerd32_bin= optarg;
- break;
- case 'U':
- consumerd32_libdir = optarg;
- break;
- case 't':
- consumerd64_bin = optarg;
- break;
- case 'T':
- consumerd64_libdir = optarg;
- break;
- case 'p':
- opt_pidfile = optarg;
- break;
- case 'J': /* JUL TCP port. */
- {
+ }
+ } else if (string_match(optname, "apps-sock") || opt == 'a') {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "-a, --apps-sock");
+ } else {
+ config_string_set(&config.apps_unix_sock_path,
+ strdup(arg));
+ if (!config.apps_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "daemonize") || opt == 'd') {
+ config.daemonize = true;
+ } else if (string_match(optname, "background") || opt == 'b') {
+ config.background = true;
+ } else if (string_match(optname, "group") || opt == 'g') {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "-g, --group");
+ } else {
+ config_string_set(&config.tracing_group_name,
+ strdup(arg));
+ if (!config.tracing_group_name.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "help") || opt == 'h') {
+ ret = utils_show_help(8, "lttng-sessiond", help_msg);
+ if (ret) {
+ ERR("Cannot show --help for `lttng-sessiond`");
+ perror("exec");
+ }
+ exit(ret ? EXIT_FAILURE : EXIT_SUCCESS);
+ } else if (string_match(optname, "version") || opt == 'V') {
+ fprintf(stdout, "%s\n", VERSION);
+ exit(EXIT_SUCCESS);
+ } else if (string_match(optname, "sig-parent") || opt == 'S') {
+ config.sig_parent = true;
+ } else if (string_match(optname, "kconsumerd-err-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--kconsumerd-err-sock");
+ } else {
+ config_string_set(&config.kconsumerd_err_unix_sock_path,
+ strdup(arg));
+ if (!config.kconsumerd_err_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "kconsumerd-cmd-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--kconsumerd-cmd-sock");
+ } else {
+ config_string_set(&config.kconsumerd_cmd_unix_sock_path,
+ strdup(arg));
+ if (!config.kconsumerd_cmd_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "ustconsumerd64-err-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--ustconsumerd64-err-sock");
+ } else {
+ config_string_set(&config.consumerd64_err_unix_sock_path,
+ strdup(arg));
+ if (!config.consumerd64_err_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "ustconsumerd64-cmd-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--ustconsumerd64-cmd-sock");
+ } else {
+ config_string_set(&config.consumerd64_cmd_unix_sock_path,
+ strdup(arg));
+ if (!config.consumerd64_cmd_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "ustconsumerd32-err-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--ustconsumerd32-err-sock");
+ } else {
+ config_string_set(&config.consumerd32_err_unix_sock_path,
+ strdup(arg));
+ if (!config.consumerd32_err_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "ustconsumerd32-cmd-sock")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--ustconsumerd32-cmd-sock");
+ } else {
+ config_string_set(&config.consumerd32_cmd_unix_sock_path,
+ strdup(arg));
+ if (!config.consumerd32_cmd_unix_sock_path.value) {
+ ret = -ENOMEM;
+ PERROR("strdup");
+ }
+ }
+ } else if (string_match(optname, "no-kernel")) {
+ config.no_kernel = true;
+ } else if (string_match(optname, "quiet") || opt == 'q') {
+ lttng_opt_quiet = true;
+ } else if (string_match(optname, "verbose") || opt == 'v') {
+ /* Verbose level can increase using multiple -v */
+ if (arg) {
+ /* Value obtained from config file */
+ config.verbose = config_parse_value(arg);
+ } else {
+ /* -v used on command line */
+ config.verbose++;
+ }
+ /* Clamp value to [0, 3] */
+ config.verbose = config.verbose < 0 ? 0 :
+ (config.verbose <= 3 ? config.verbose : 3);
+ } else if (string_match(optname, "verbose-consumer")) {
+ if (arg) {
+ config.verbose_consumer = config_parse_value(arg);
+ } else {
+ config.verbose_consumer++;
+ }
+ } else if (string_match(optname, "consumerd32-path")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--consumerd32-path");
+ } else {
+ config_string_set(&config.consumerd32_bin_path,
+ strdup(arg));
+ if (!config.consumerd32_bin_path.value) {
+ PERROR("strdup");
+ ret = -ENOMEM;
+ }
+ }
+ } else if (string_match(optname, "consumerd32-libdir")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--consumerd32-libdir");
+ } else {
+ config_string_set(&config.consumerd32_lib_dir,
+ strdup(arg));
+ if (!config.consumerd32_lib_dir.value) {
+ PERROR("strdup");
+ ret = -ENOMEM;
+ }
+ }
+ } else if (string_match(optname, "consumerd64-path")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--consumerd64-path");
+ } else {
+ config_string_set(&config.consumerd64_bin_path,
+ strdup(arg));
+ if (!config.consumerd64_bin_path.value) {
+ PERROR("strdup");
+ ret = -ENOMEM;
+ }
+ }
+ } else if (string_match(optname, "consumerd64-libdir")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--consumerd64-libdir");
+ } else {
+ config_string_set(&config.consumerd64_lib_dir,
+ strdup(arg));
+ if (!config.consumerd64_lib_dir.value) {
+ PERROR("strdup");
+ ret = -ENOMEM;
+ }
+ }
+ } else if (string_match(optname, "pidfile") || opt == 'p') {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "-p, --pidfile");
+ } else {
+ config_string_set(&config.pid_file_path, strdup(arg));
+ if (!config.pid_file_path.value) {
+ PERROR("strdup");
+ ret = -ENOMEM;
+ }
+ }
+ } else if (string_match(optname, "agent-tcp-port")) {
+ if (!arg || *arg == '\0') {
+ ret = -EINVAL;
+ goto end;
+ }
+ if (lttng_is_setuid_setgid()) {
+ WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
+ "--agent-tcp-port");
+ } else {