Build fix: retrieve unix socket peer PID on non-unix platforms
[lttng-tools.git] / src / common / runas.c
index 3c4c2ae0bb9d360141c3ed5dbb60fbc6a420e8ab..04aedc3e69a00b14a5ffa0d24798d51d0d0c602e 100644 (file)
@@ -8,7 +8,6 @@
  */
 
 #define _LGPL_SOURCE
-#include <errno.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
 #include <signal.h>
 
+#include <common/bytecode/bytecode.h>
 #include <common/lttng-kernel.h>
 #include <common/common.h>
 #include <common/utils.h>
+#include <common/compat/errno.h>
 #include <common/compat/getenv.h>
 #include <common/compat/string.h>
 #include <common/unix.h>
@@ -37,7 +38,6 @@
 
 #include <common/sessiond-comm/sessiond-comm.h>
 #include <common/filter/filter-ast.h>
-#include <common/filter/filter-bytecode.h>
 
 #include "runas.h"
 
@@ -124,7 +124,7 @@ struct run_as_extract_elf_symbol_offset_ret {
 
 struct run_as_extract_sdt_probe_offsets_ret {
        uint32_t num_offset;
-       uint64_t offsets[LTTNG_KERNEL_MAX_UPROBE_NUM];
+       uint64_t offsets[LTTNG_KERNEL_ABI_MAX_UPROBE_NUM];
 } LTTNG_PACKED;
 
 struct run_as_generate_filter_bytecode_ret {
@@ -607,7 +607,7 @@ int _extract_sdt_probe_offsets(struct run_as_data *data,
                goto end;
        }
 
-       if (num_offset <= 0 || num_offset > LTTNG_KERNEL_MAX_UPROBE_NUM) {
+       if (num_offset <= 0 || num_offset > LTTNG_KERNEL_ABI_MAX_UPROBE_NUM) {
                DBG("Wrong number of probes.");
                ret = -1;
                ret_value->_error = true;
@@ -730,7 +730,7 @@ int do_send_fds(int sock, const int *fds, unsigned int fd_count)
 
        for (i = 0; i < fd_count; i++) {
                if (fds[i] < 0) {
-                       ERR("Attempt to send invalid file descriptor to master (fd = %i)",
+                       DBG("Attempt to send invalid file descriptor (fd = %i)",
                                        fds[i]);
                        /* Return 0 as this is not a fatal error. */
                        return 0;
@@ -818,10 +818,14 @@ int send_fds_to_master(struct run_as_worker *worker, enum run_as_cmd cmd,
        }
 
        for (i = 0; i < COMMAND_OUT_FD_COUNT(cmd); i++) {
-               int ret_close = close(COMMAND_OUT_FDS(cmd, run_as_ret)[i]);
+               int fd = COMMAND_OUT_FDS(cmd, run_as_ret)[i];
+               if (fd >= 0) {
+                       int ret_close = close(fd);
 
-               if (ret_close < 0) {
-                       PERROR("Failed to close result file descriptor");
+                       if (ret_close < 0) {
+                               PERROR("Failed to close result file descriptor (fd = %i)",
+                                               fd);
+                       }
                }
        }
 end:
@@ -1299,6 +1303,9 @@ int run_as_create_worker_no_lock(const char *procname,
                reset_sighandler();
 
                set_worker_sighandlers();
+
+               logger_set_thread_name("Run-as worker", true);
+
                if (clean_up_func) {
                        if (clean_up_func(clean_up_user_data) < 0) {
                                ERR("Run-as post-fork clean-up failed, exiting.");
@@ -1799,15 +1806,16 @@ error:
 
 LTTNG_HIDDEN
 int run_as_generate_filter_bytecode(const char *filter_expression,
-               uid_t uid,
-               gid_t gid,
-               struct lttng_filter_bytecode **bytecode)
+               const struct lttng_credentials *creds,
+               struct lttng_bytecode **bytecode)
 {
        int ret;
        struct run_as_data data = {};
        struct run_as_ret run_as_ret = {};
-       const struct lttng_filter_bytecode *view_bytecode = NULL;
-       struct lttng_filter_bytecode *local_bytecode = NULL;
+       const struct lttng_bytecode *view_bytecode = NULL;
+       struct lttng_bytecode *local_bytecode = NULL;
+       const uid_t uid = lttng_credentials_get_uid(creds);
+       const gid_t gid = lttng_credentials_get_gid(creds);
 
        DBG3("generate_filter_bytecode() from expression=\"%s\" for uid %d and gid %d",
                        filter_expression, (int) uid, (int) gid);
@@ -1825,7 +1833,7 @@ int run_as_generate_filter_bytecode(const char *filter_expression,
                goto error;
        }
 
-       view_bytecode = (const struct lttng_filter_bytecode *) run_as_ret.u.generate_filter_bytecode.bytecode;
+       view_bytecode = (const struct lttng_bytecode *) run_as_ret.u.generate_filter_bytecode.bytecode;
 
        local_bytecode = zmalloc(sizeof(*local_bytecode) + view_bytecode->len);
        if (!local_bytecode) {
This page took 0.024394 seconds and 4 git commands to generate.