X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=3bddf76744216c4d684e940290f0089e67c13c43;hb=bf5ff35ed0a3a7f60e92d654a5b97e73b94da852;hp=16a634069a0beb1d33616860128449c95e0d1923;hpb=63375ccec438f16d32a9bf22f409294d4518f770;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 16a63406..3bddf767 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -22,7 +22,6 @@ #define _LGPL_SOURCE #include #include -#include #include #include #include @@ -46,6 +45,7 @@ #include #include "tracepoint-internal.h" #include "ltt-tracer-core.h" +#include "compat.h" #include "../libringbuffer/tlsfixup.h" /* @@ -156,14 +156,16 @@ int setup_local_apps(void) * Disallow per-user tracing for setuid binaries. */ if (uid != geteuid()) { - local_apps.allowed = 0; + assert(local_apps.allowed == 0); return 0; - } else { - local_apps.allowed = 1; } home_dir = (const char *) getenv("HOME"); - if (!home_dir) + if (!home_dir) { + WARN("HOME environment variable not set. Disabling LTTng-UST per-user tracing."); + assert(local_apps.allowed == 0); return -ENOENT; + } + local_apps.allowed = 1; snprintf(local_apps.sock_path, PATH_MAX, DEFAULT_HOME_APPS_UNIX_SOCK, home_dir); snprintf(local_apps.wait_shm_path, PATH_MAX, @@ -175,7 +177,6 @@ static int register_app_to_sessiond(int socket) { ssize_t ret; - int prctl_ret; struct { uint32_t major; uint32_t minor; @@ -194,11 +195,7 @@ int register_app_to_sessiond(int socket) reg_msg.uid = getuid(); reg_msg.gid = getgid(); reg_msg.bits_per_long = CAA_BITS_PER_LONG; - prctl_ret = prctl(PR_GET_NAME, (unsigned long) reg_msg.name, 0, 0, 0); - if (prctl_ret) { - ERR("Error executing prctl"); - return -errno; - } + lttng_ust_getprocname(reg_msg.name); ret = ustcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg)); if (ret >= 0 && ret != sizeof(reg_msg)) @@ -255,6 +252,7 @@ int handle_message(struct sock_info *sock_info, const struct lttng_ust_objd_ops *ops; struct ustcomm_ust_reply lur; int shm_fd, wait_fd; + char *shm_path, *wait_pipe_path; union ust_args args; ust_lock(); @@ -313,14 +311,18 @@ end: * Use lum.u output. */ lur.u.stream.memory_map_size = *args.stream.memory_map_size; - shm_fd = *args.stream.shm_fd; - wait_fd = *args.stream.wait_fd; + shm_fd = *args.stream.shm_fd; + shm_path = args.stream.shm_path; + wait_fd = *args.stream.wait_fd; + wait_pipe_path = args.stream.wait_pipe_path; break; case LTTNG_UST_METADATA: case LTTNG_UST_CHANNEL: lur.u.channel.memory_map_size = *args.channel.memory_map_size; - shm_fd = *args.channel.shm_fd; - wait_fd = *args.channel.wait_fd; + shm_fd = *args.channel.shm_fd; + shm_path = args.channel.shm_path; + wait_fd = *args.channel.wait_fd; + wait_pipe_path = args.channel.wait_pipe_path; break; case LTTNG_UST_TRACER_VERSION: lur.u.version = lum->u.version; @@ -342,23 +344,19 @@ end: && lur.ret_code == USTCOMM_OK) { int sendret = 0; - /* we also need to send the file descriptors. */ - ret = ustcomm_send_fds_unix_sock(sock, - &shm_fd, &shm_fd, - 1, sizeof(int)); + /* send the shm path */ + ret = ustcomm_send_string(sock, shm_path, strlen(shm_path)); if (ret < 0) { - perror("send shm_fd"); + perror("send shm_path"); sendret = ret; } /* * The sessiond expects 2 file descriptors, even upon * error. */ - ret = ustcomm_send_fds_unix_sock(sock, - &wait_fd, &wait_fd, - 1, sizeof(int)); + ret = ustcomm_send_string(sock, wait_pipe_path, strlen(wait_pipe_path)); if (ret < 0) { - perror("send wait_fd"); + perror("send wait_pipe_path"); goto error; } if (sendret) { @@ -891,7 +889,7 @@ void __attribute__((constructor)) lttng_ust_init(void) ret = setup_local_apps(); if (ret) { - ERR("Error setting up to local apps"); + DBG("local apps setup returned %d", ret); } /* A new thread created by pthread_create inherits the signal mask