X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Flttng.c;h=13c77321eb1a208544161e7317f9ad8e0379344a;hb=96ffaa0c61089296dd5c9dd07810f32f97931fc8;hp=a676be825684d5bd70d34753feb72343ef639322;hpb=883d80f9e038060bccf0512679eb366c7b245d14;p=lttng-tools.git diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index a676be825..13c77321e 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -29,6 +30,7 @@ #include #include +#include #include "command.h" @@ -83,8 +85,8 @@ static struct cmd_struct commands[] = { { "snapshot", cmd_snapshot}, { "save", cmd_save}, { "load", cmd_load}, - { "enable-consumer", cmd_enable_consumer}, /* OBSOLETE */ - { "disable-consumer", cmd_disable_consumer}, /* OBSOLETE */ + { "track", cmd_track}, + { "untrack", cmd_untrack}, { NULL, NULL} /* Array closure */ }; @@ -126,6 +128,8 @@ static void usage(FILE *ofp) fprintf(ofp, " view Start trace viewer\n"); fprintf(ofp, " save Save session configuration\n"); fprintf(ofp, " load Load session configuration\n"); + fprintf(ofp, " track Track specific system resources\n"); + fprintf(ofp, " untrack Untrack specific system resources\n"); fprintf(ofp, "\n"); fprintf(ofp, "Each command also has its own -h, --help option.\n"); fprintf(ofp, "\n"); @@ -239,7 +243,7 @@ static int set_signal_handler(void) sigset_t sigset; if ((ret = sigemptyset(&sigset)) < 0) { - perror("sigemptyset"); + PERROR("sigemptyset"); goto end; } @@ -247,17 +251,17 @@ static int set_signal_handler(void) sa.sa_mask = sigset; sa.sa_flags = 0; if ((ret = sigaction(SIGUSR1, &sa, NULL)) < 0) { - perror("sigaction"); + PERROR("sigaction"); goto end; } if ((ret = sigaction(SIGTERM, &sa, NULL)) < 0) { - perror("sigaction"); + PERROR("sigaction"); goto end; } if ((ret = sigaction(SIGCHLD, &sa, NULL)) < 0) { - perror("sigaction"); + PERROR("sigaction"); goto end; } @@ -325,7 +329,7 @@ static int spawn_sessiond(char *pathname) if (errno == ENOENT) { ERR("No session daemon found. Use --sessiond-path."); } else { - perror("execlp"); + PERROR("execlp"); } kill(getppid(), SIGTERM); /* wake parent */ exit(EXIT_FAILURE); @@ -351,7 +355,7 @@ static int spawn_sessiond(char *pathname) } goto end; } else { - perror("fork"); + PERROR("fork"); ret = -1; goto end; } @@ -446,6 +450,11 @@ static int parse_args(int argc, char **argv) int opt, ret; char *user; + if (lttng_is_setuid_setgid()) { + ERR("'%s' is not allowed to be executed as a setuid/setgid binary for security reasons. Aborting.", argv[0]); + clean_exit(EXIT_FAILURE); + } + if (argc < 2) { usage(stderr); clean_exit(EXIT_FAILURE); @@ -485,9 +494,17 @@ static int parse_args(int argc, char **argv) break; case OPT_SESSION_PATH: opt_sessiond_path = strdup(optarg); + if (!opt_sessiond_path) { + ret = -1; + goto error; + } break; case OPT_RELAYD_PATH: opt_relayd_path = strdup(optarg); + if (!opt_relayd_path) { + ret = -1; + goto error; + } break; case OPT_DUMP_OPTIONS: list_options(stdout);