X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcmd.c;h=dc1249ff1c845bef46a560e4221fd207a49d9b37;hp=37c0e31ce9dfe73b9713088c83ed1427f83ad389;hb=3da864a94ccc39239fea82c4803b58b6b56a1003;hpb=e368fb4396b9bdb22de16f0c93512c9f6d7ab0b4 diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 37c0e31ce..dc1249ff1 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -4264,6 +4264,10 @@ int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock, ssize_t sock_recv_len; struct lttng_trigger *trigger = NULL; struct lttng_payload trigger_payload; + struct lttng_credentials cmd_creds = { + .uid = cmd_ctx->creds.uid, + .gid = cmd_ctx->creds.gid, + }; lttng_payload_init(&trigger_payload); trigger_len = (size_t) cmd_ctx->lsm.u.trigger.length; @@ -4283,6 +4287,20 @@ int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock, goto end; } + /* Receive fds, if any. */ + if (cmd_ctx->lsm.fd_count > 0) { + ret = lttcomm_recv_payload_fds_unix_sock( + sock, cmd_ctx->lsm.fd_count, &trigger_payload); + if (ret > 0 && ret != cmd_ctx->lsm.fd_count * sizeof(int)) { + ret = LTTNG_ERR_INVALID_PROTOCOL; + goto end; + } else if (ret <= 0) { + ret = LTTNG_ERR_FATAL; + goto end; + } + } + + /* Deserialize trigger. */ { struct lttng_payload_view view = lttng_payload_view_from_payload( @@ -4296,6 +4314,10 @@ int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock, } } + /* Set the trigger credential */ + lttng_trigger_set_credentials(trigger, &cmd_creds); + + /* Inform the notification thread */ ret = notification_thread_command_register_trigger(notification_thread, trigger); /* Ownership of trigger was transferred. */ @@ -4314,6 +4336,10 @@ int cmd_unregister_trigger(struct command_ctx *cmd_ctx, int sock, ssize_t sock_recv_len; struct lttng_trigger *trigger = NULL; struct lttng_payload trigger_payload; + struct lttng_credentials cmd_creds = { + .uid = cmd_ctx->creds.uid, + .gid = cmd_ctx->creds.gid, + }; lttng_payload_init(&trigger_payload); trigger_len = (size_t) cmd_ctx->lsm.u.trigger.length; @@ -4333,6 +4359,19 @@ int cmd_unregister_trigger(struct command_ctx *cmd_ctx, int sock, goto end; } + /* Receive fds, if any. */ + if (cmd_ctx->lsm.fd_count > 0) { + ret = lttcomm_recv_payload_fds_unix_sock( + sock, cmd_ctx->lsm.fd_count, &trigger_payload); + if (ret > 0 && ret != cmd_ctx->lsm.fd_count * sizeof(int)) { + ret = LTTNG_ERR_INVALID_PROTOCOL; + goto end; + } else if (ret <= 0) { + ret = LTTNG_ERR_FATAL; + goto end; + } + } + { struct lttng_payload_view view = lttng_payload_view_from_payload( @@ -4346,6 +4385,8 @@ int cmd_unregister_trigger(struct command_ctx *cmd_ctx, int sock, } } + lttng_trigger_set_credentials(trigger, &cmd_creds); + ret = notification_thread_command_unregister_trigger(notification_thread, trigger); end: