Add FreeBSD compat layer for socket.h
[lttng-tools.git] / src / common / sessiond-comm / sessiond-comm.c
index 24757f702a2557de7a556afcab4d079e4763ed7f..f133d5bfbabe1892c868c6ccb7d6784cc707ac2f 100644 (file)
@@ -24,7 +24,6 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#include <sys/un.h>
 #include <unistd.h>
 #include <errno.h>
 
@@ -250,10 +249,12 @@ int lttcomm_listen_unix_sock(int sock)
  */
 ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
 {
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        struct iovec iov[1];
        ssize_t ret = -1;
 
+       memset(&msg, 0, sizeof(msg));
+
        iov[0].iov_base = buf;
        iov[0].iov_len = len;
        msg.msg_iov = iov;
@@ -274,10 +275,12 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
  */
 ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len)
 {
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        struct iovec iov[1];
        ssize_t ret = -1;
 
+       memset(&msg, 0, sizeof(msg));
+
        iov[0].iov_base = buf;
        iov[0].iov_len = len;
        msg.msg_iov = iov;
@@ -304,6 +307,8 @@ int lttcomm_close_unix_sock(int sock)
                perror("shutdown");
        }
 
+       close(sock);
+
        return ret;
 }
 
@@ -314,7 +319,7 @@ int lttcomm_close_unix_sock(int sock)
  */
 ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd)
 {
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        struct cmsghdr *cmptr;
        struct iovec iov[1];
        ssize_t ret = -1;
@@ -322,6 +327,8 @@ ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd)
        char tmp[CMSG_SPACE(sizeof_fds)];
        char dummy = 0;
 
+       memset(&msg, 0, sizeof(msg));
+
        if (nb_fd > LTTCOMM_MAX_SEND_FDS)
                return -EINVAL;
 
@@ -363,9 +370,11 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
        struct cmsghdr *cmsg;
        size_t sizeof_fds = nb_fd * sizeof(int);
        char recv_fd[CMSG_SPACE(sizeof_fds)];
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        char dummy;
 
+       memset(&msg, 0, sizeof(msg));
+
        /* Prepare to receive the structures */
        iov[0].iov_base = &dummy;
        iov[0].iov_len = 1;
@@ -402,7 +411,7 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
        }
        if (cmsg->cmsg_len != CMSG_LEN(sizeof_fds)) {
                fprintf(stderr, "Error: Received %zu bytes of ancillary data, expected %zu\n",
-                               cmsg->cmsg_len, CMSG_LEN(sizeof_fds));
+                               (size_t) cmsg->cmsg_len, (size_t) CMSG_LEN(sizeof_fds));
                ret = -1;
                goto end;
        }
@@ -419,13 +428,15 @@ end:
  */
 ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len)
 {
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        struct cmsghdr *cmptr;
        struct iovec iov[1];
        ssize_t ret = -1;
-       struct ucred *creds;
-       size_t sizeof_cred = sizeof(struct ucred);
+       size_t sizeof_cred = sizeof(lttng_sock_cred);
        char anc_buf[CMSG_SPACE(sizeof_cred)];
+       lttng_sock_cred *creds;
+
+       memset(&msg, 0, sizeof(msg));
 
        iov[0].iov_base = buf;
        iov[0].iov_len = len;
@@ -437,14 +448,14 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len)
 
        cmptr = CMSG_FIRSTHDR(&msg);
        cmptr->cmsg_level = SOL_SOCKET;
-       cmptr->cmsg_type = SCM_CREDENTIALS;
+       cmptr->cmsg_type = LTTNG_SOCK_CREDS;
        cmptr->cmsg_len = CMSG_LEN(sizeof_cred);
 
-       creds = (struct ucred *) CMSG_DATA(cmptr);
+       creds = (lttng_sock_cred*) CMSG_DATA(cmptr);
 
-       creds->uid = geteuid();
-       creds->gid = getegid();
-       creds->pid = getpid();
+       LTTNG_SOCK_SET_UID_CRED(creds, geteuid());
+       LTTNG_SOCK_SET_GID_CRED(creds, getegid());
+       LTTNG_SOCK_SET_PID_CRED(creds, getpid());
 
        ret = sendmsg(sock, &msg, 0);
        if (ret < 0) {
@@ -460,15 +471,17 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len)
  * Returns the size of received data, or negative error value.
  */
 ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
-               struct ucred *creds)
+               lttng_sock_cred *creds)
 {
-       struct msghdr msg = { 0 };
+       struct msghdr msg;
        struct cmsghdr *cmptr;
        struct iovec iov[1];
        ssize_t ret;
-       size_t sizeof_cred = sizeof(struct ucred);
+       size_t sizeof_cred = sizeof(lttng_sock_cred);
        char anc_buf[CMSG_SPACE(sizeof_cred)];
 
+       memset(&msg, 0, sizeof(msg));
+
        /* Not allowed */
        if (creds == NULL) {
                ret = -1;
@@ -504,7 +517,7 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
        }
 
        if (cmptr->cmsg_level != SOL_SOCKET ||
-                       cmptr->cmsg_type != SCM_CREDENTIALS) {
+                       cmptr->cmsg_type != LTTNG_SOCK_CREDS) {
                fprintf(stderr, "Didn't received any credentials\n");
                ret = -1;
                goto end;
@@ -512,7 +525,7 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
 
        if (cmptr->cmsg_len != CMSG_LEN(sizeof_cred)) {
                fprintf(stderr, "Error: Received %zu bytes of ancillary data, expected %zu\n",
-                               cmptr->cmsg_len, CMSG_LEN(sizeof_cred));
+                               (size_t) cmptr->cmsg_len, (size_t) CMSG_LEN(sizeof_cred));
                ret = -1;
                goto end;
        }
This page took 0.026827 seconds and 4 git commands to generate.