sessiond: make disable_context static
[lttng-tools.git] / src / bin / lttng-sessiond / agent.c
index b2608a186f83095b9faf20fd58a222eb4f2b0283..3cb33caef4835df1fb5d0681c9d036b0fd10eb4d 100644 (file)
@@ -29,7 +29,7 @@
 #include "agent.h"
 #include "ust-app.h"
 #include "utils.h"
-#include "error.h"
+#include "common/error.h"
 
 #define AGENT_RET_CODE_INDEX(code) (code - AGENT_RET_CODE_SUCCESS)
 
@@ -143,11 +143,18 @@ static int ht_match_event(struct cds_lfht_node *node,
        }
 
        /* Filter expression */
-       if (strncmp(event->filter_expression, key->filter_expression,
-                       strlen(event->filter_expression)) != 0) {
+       if (!!event->filter_expression != !!key->filter_expression) {
+               /* One has a filter expression, the other does not */
                goto no_match;
        }
 
+       if (event->filter_expression) {
+               if (strncmp(event->filter_expression, key->filter_expression,
+                               strlen(event->filter_expression)) != 0) {
+                       goto no_match;
+               }
+       }
+
        return 1;
 
 no_match:
@@ -353,8 +360,11 @@ static ssize_t list_events(struct agent_app *app, struct lttng_event **events)
 
        for (i = 0; i < nb_event; i++) {
                offset += len;
-               strncpy(tmp_events[i].name, reply->payload + offset,
-                               sizeof(tmp_events[i].name));
+               if (lttng_strncpy(tmp_events[i].name, reply->payload + offset,
+                               sizeof(tmp_events[i].name))) {
+                       ret = LTTNG_ERR_INVALID;
+                       goto error;
+               }
                tmp_events[i].pid = app->pid;
                tmp_events[i].enabled = -1;
                len = strlen(reply->payload + offset) + 1;
@@ -408,17 +418,20 @@ static int enable_event(struct agent_app *app, struct agent_event *event)
        }
        data_size = sizeof(msg) + filter_expression_length;
 
-       ret = send_header(app->sock, data_size, AGENT_CMD_ENABLE, 0);
-       if (ret < 0) {
-               goto error_io;
-       }
-
        memset(&msg, 0, sizeof(msg));
        msg.loglevel_value = htobe32(event->loglevel_value);
        msg.loglevel_type = htobe32(event->loglevel_type);
-       strncpy(msg.name, event->name, sizeof(msg.name));
+       if (lttng_strncpy(msg.name, event->name, sizeof(msg.name))) {
+               ret = LTTNG_ERR_INVALID;
+               goto error;
+       }
        msg.filter_expression_length = htobe32(filter_expression_length);
 
+       ret = send_header(app->sock, data_size, AGENT_CMD_ENABLE, 0);
+       if (ret < 0) {
+               goto error_io;
+       }
+
        bytes_to_send = zmalloc(data_size);
        if (!bytes_to_send) {
                ret = LTTNG_ERR_NOMEM;
@@ -591,14 +604,17 @@ static int disable_event(struct agent_app *app, struct agent_event *event)
                        app->pid, app->sock->fd);
 
        data_size = sizeof(msg);
+       memset(&msg, 0, sizeof(msg));
+       if (lttng_strncpy(msg.name, event->name, sizeof(msg.name))) {
+               ret = LTTNG_ERR_INVALID;
+               goto error;
+       }
 
        ret = send_header(app->sock, data_size, AGENT_CMD_DISABLE, 0);
        if (ret < 0) {
                goto error_io;
        }
 
-       memset(&msg, 0, sizeof(msg));
-       strncpy(msg.name, event->name, sizeof(msg.name));
        ret = send_payload(app->sock, &msg, sizeof(msg));
        if (ret < 0) {
                goto error_io;
@@ -692,7 +708,7 @@ void destroy_app_ctx(struct agent_app_ctx *ctx)
 }
 
 static
-struct agent_app_ctx *create_app_ctx(struct lttng_event_context *ctx)
+struct agent_app_ctx *create_app_ctx(const struct lttng_event_context *ctx)
 {
        struct agent_app_ctx *agent_ctx = NULL;
 
@@ -722,7 +738,7 @@ end:
  *
  * Return LTTNG_OK on success or else a LTTNG_ERR* code.
  */
-int agent_enable_context(struct lttng_event_context *ctx,
+int agent_enable_context(const struct lttng_event_context *ctx,
                enum lttng_domain_type domain)
 {
        int ret;
@@ -747,13 +763,14 @@ int agent_enable_context(struct lttng_event_context *ctx,
 
                agent_ctx = create_app_ctx(ctx);
                if (!agent_ctx) {
+                       ret = LTTNG_ERR_NOMEM;
                        goto error_unlock;
                }
 
                /* Enable event on agent application through TCP socket. */
                ret = app_context_op(app, agent_ctx, AGENT_CMD_APP_CTX_ENABLE);
+               destroy_app_ctx(agent_ctx);
                if (ret != LTTNG_OK) {
-                       destroy_app_ctx(agent_ctx);
                        goto error_unlock;
                }
        }
@@ -813,7 +830,8 @@ end:
  *
  * Return LTTNG_OK on success or else a LTTNG_ERR* code.
  */
-int disable_context(struct agent_app_ctx *ctx, enum lttng_domain_type domain)
+static int disable_context(struct agent_app_ctx *ctx,
+               enum lttng_domain_type domain)
 {
        int ret = LTTNG_OK;
        struct agent_app *app;
@@ -1149,7 +1167,7 @@ void agent_add_event(struct agent_event *event, struct agent *agt)
 /*
  * Unique add of a agent context to an agent object.
  */
-int agent_add_context(struct lttng_event_context *ctx, struct agent *agt)
+int agent_add_context(const struct lttng_event_context *ctx, struct agent *agt)
 {
        int ret = LTTNG_OK;
        struct agent_app_ctx *agent_ctx = NULL;
This page took 0.024622 seconds and 4 git commands to generate.