X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fenable_channels.c;h=673fecfc57a0aeb394135b3b92a9e2c1d350ec82;hp=f8272e92270b5c582faa23cc01b46e04ba38eb24;hb=8e32b63b5ad14e5a647ee580f618762c439a0d47;hpb=6c1c0768320135c6936c371b09731851b508c023 diff --git a/src/bin/lttng/commands/enable_channels.c b/src/bin/lttng/commands/enable_channels.c index f8272e922..673fecfc5 100644 --- a/src/bin/lttng/commands/enable_channels.c +++ b/src/bin/lttng/commands/enable_channels.c @@ -15,7 +15,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE #include #include @@ -220,9 +219,8 @@ static int enable_channel(char *session_name) dom.buf_type = LTTNG_BUFFER_PER_UID; } } else { - print_missing_domain(); - ret = CMD_ERROR; - goto error; + /* Checked by the caller. */ + assert(0); } set_default_attr(&dom); @@ -275,9 +273,16 @@ static int enable_channel(char *session_name) /* Strip channel list (format: chan1,chan2,...) */ channel_name = strtok(opt_channels, ","); while (channel_name != NULL) { - /* Copy channel name and normalize it */ - strncpy(chan.name, channel_name, NAME_MAX); - chan.name[NAME_MAX - 1] = '\0'; + /* Validate channel name's length */ + if (strlen(channel_name) >= NAME_MAX) { + ERR("Channel name is too long (max. %zu characters)", + sizeof(chan.name) - 1); + error = 1; + goto skip_enable; + } + + /* Copy channel name */ + strcpy(chan.name, channel_name); DBG("Enabling channel %s", channel_name); @@ -292,6 +297,12 @@ static int enable_channel(char *session_name) lttng_strerror(ret), session_name); warn = 1; break; + case LTTNG_ERR_INVALID_CHANNEL_NAME: + ERR("Invalid channel name: \"%s\". " + "Channel names may not start with '.', and " + "may not contain '/'.", channel_name); + error = 1; + break; default: ERR("Channel %s: %s (session %s)", channel_name, lttng_strerror(ret), session_name); @@ -304,6 +315,7 @@ static int enable_channel(char *session_name) success = 1; } +skip_enable: if (lttng_opt_mi) { /* Mi print the channel element and leave it open */ ret = mi_lttng_channel(writer, &chan, 1); @@ -556,6 +568,12 @@ int cmd_enable_channels(int argc, const char **argv) } } + ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace); + if (ret) { + ret = CMD_ERROR; + goto end; + } + /* Mi check */ if (lttng_opt_mi) { writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);