*/
int lttng_opt_quiet;
int lttng_opt_verbose;
+int lttng_opt_mi;
/*
* Copy string from src to dst and enforce null terminated byte.
case LTTNG_DOMAIN_KERNEL:
case LTTNG_DOMAIN_UST:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_LOG4J:
memcpy(dst, src, sizeof(struct lttng_domain));
break;
default:
/* Don't add filter for the '*' event. */
if (ev->name[0] != '*') {
if (filter) {
- err = asprintf(&jul_filter, "%s && logger_name == \"%s\"", filter,
+ err = asprintf(&jul_filter, "(%s) && (logger_name == \"%s\")", filter,
ev->name);
} else {
err = asprintf(&jul_filter, "logger_name == \"%s\"", ev->name);
if (filter || jul_filter) {
char *new_filter;
- err = asprintf(&new_filter, "%s && int_loglevel %s %d",
+ err = asprintf(&new_filter, "(%s) && (int_loglevel %s %d)",
jul_filter ? jul_filter : filter, op,
ev->loglevel);
if (jul_filter) {
ret = -LTTNG_ERR_FILTER_INVAL;
goto parse_error;
}
+ /* Validate strings used as literals in the expression */
+ ret = filter_visitor_ir_validate_string(ctx);
+ if (ret) {
+ ret = -LTTNG_ERR_FILTER_INVAL;
+ goto parse_error;
+ }
dbg_printf("done\n");
dbg_printf("Generating bytecode... ");
* filtering by logger name.
*/
if (exclusion_count == 0 && filter_expression == NULL &&
- handle->domain.type != LTTNG_DOMAIN_JUL) {
+ (handle->domain.type != LTTNG_DOMAIN_JUL &&
+ handle->domain.type != LTTNG_DOMAIN_LOG4J)) {
goto ask_sessiond;
}
*/
/* Parse filter expression */
- if (filter_expression != NULL || handle->domain.type == LTTNG_DOMAIN_JUL) {
- if (handle->domain.type == LTTNG_DOMAIN_JUL) {
+ if (filter_expression != NULL || handle->domain.type == LTTNG_DOMAIN_JUL
+ || handle->domain.type == LTTNG_DOMAIN_LOG4J) {
+ if (handle->domain.type == LTTNG_DOMAIN_JUL ||
+ handle->domain.type == LTTNG_DOMAIN_LOG4J) {
char *jul_filter;
/* Setup JUL filter if needed. */
+ LTTNG_SYMBOL_NAME_LEN * exclusion_count);
if (!varlen_data) {
ret = -LTTNG_ERR_EXCLUSION_NOMEM;
- goto filter_error;
+ goto mem_error;
}
/* Put exclusion names first in the data */
lsm.u.enable.bytecode_len + lsm.u.enable.expression_len, NULL);
free(varlen_data);
-filter_error:
- if (filter_expression) {
+mem_error:
+ if (filter_expression && ctx) {
filter_bytecode_free(ctx);
filter_ir_free(ctx);
filter_parser_ctx_free(ctx);
- if (free_filter_expression) {
- /*
- * The filter expression has been replaced and must be
- * freed as it is not the original filter expression
- * received as a parameter.
- */
- free(filter_expression);
- }
+ }
+filter_error:
+ if (free_filter_expression) {
+ /*
+ * The filter expression has been replaced and must be freed as it is
+ * not the original filter expression received as a parameter.
+ */
+ free(filter_expression);
}
error:
/*
lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
- if (name != NULL) {
+ if (name != NULL && *name != '*') {
lttng_ctl_copy_string(lsm.u.disable.name, name,
sizeof(lsm.u.disable.name));
lsm.cmd_type = LTTNG_DISABLE_EVENT;