-/*
- * Send a message with credentials over a unix socket.
- *
- * Returns the size of data sent, or negative error value.
- */
-ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len)
-{
- struct msghdr msg;
- struct iovec iov[1];
- ssize_t ret = -1;
-#ifdef __linux__
- struct cmsghdr *cmptr;
- size_t sizeof_cred = sizeof(lttng_sock_cred);
- char anc_buf[CMSG_SPACE(sizeof_cred)];
- lttng_sock_cred *creds;
-#endif /* __linux__ */
-
- memset(&msg, 0, sizeof(msg));
-
- iov[0].iov_base = buf;
- iov[0].iov_len = len;
- msg.msg_iov = iov;
- msg.msg_iovlen = 1;
-
-#ifdef __linux__
- msg.msg_control = (caddr_t) anc_buf;
- msg.msg_controllen = CMSG_LEN(sizeof_cred);
-
- cmptr = CMSG_FIRSTHDR(&msg);
- cmptr->cmsg_level = SOL_SOCKET;
- cmptr->cmsg_type = LTTNG_SOCK_CREDS;
- cmptr->cmsg_len = CMSG_LEN(sizeof_cred);
-
- creds = (lttng_sock_cred*) CMSG_DATA(cmptr);
-
- LTTNG_SOCK_SET_UID_CRED(creds, geteuid());
- LTTNG_SOCK_SET_GID_CRED(creds, getegid());
- LTTNG_SOCK_SET_PID_CRED(creds, getpid());
-#endif /* __linux__ */
-
- ret = sendmsg(sock, &msg, 0);
- if (ret < 0) {
- /*
- * Only warn about EPIPE when quiet mode is deactivated.
- * We consider EPIPE as expected.
- */
- if (errno != EPIPE || !lttng_opt_quiet) {
- PERROR("sendmsg");
- }
- }