X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Funix.c;h=933baa61c7195b645cb066152d58657180189654;hb=e8b6939aed74a39cd65e0d6e6609f6602ce3df44;hp=023bff847273df004c537593cbbbceb012540681;hpb=982583bdd4fea58b902f8396a83e2233a70087ad;p=lttng-tools.git diff --git a/src/common/unix.c b/src/common/unix.c index 023bff847..933baa61c 100644 --- a/src/common/unix.c +++ b/src/common/unix.c @@ -7,7 +7,6 @@ */ #define _LGPL_SOURCE -#include #include #include #include @@ -181,9 +180,9 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len) ssize_t ret = -1; size_t len_last; - assert(sock); - assert(buf); - assert(len > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); memset(&msg, 0, sizeof(msg)); @@ -198,7 +197,7 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len) if (ret > 0) { iov[0].iov_base += ret; iov[0].iov_len -= ret; - assert(ret <= len_last); + LTTNG_ASSERT(ret <= len_last); } } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR)); if (ret < 0) { @@ -227,9 +226,9 @@ ssize_t lttcomm_recv_unix_sock_non_block(int sock, void *buf, size_t len) struct iovec iov[1]; ssize_t ret; - assert(sock); - assert(buf); - assert(len > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); memset(&msg, 0, sizeof(msg)); @@ -279,9 +278,9 @@ ssize_t lttcomm_send_unix_sock(int sock, const void *buf, size_t len) struct iovec iov[1]; ssize_t ret; - assert(sock); - assert(buf); - assert(len > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); memset(&msg, 0, sizeof(msg)); @@ -333,9 +332,9 @@ ssize_t lttcomm_send_unix_sock_non_block(int sock, const void *buf, size_t len) struct iovec iov[1]; ssize_t ret; - assert(sock); - assert(buf); - assert(len > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); memset(&msg, 0, sizeof(msg)); @@ -411,9 +410,9 @@ ssize_t lttcomm_send_fds_unix_sock(int sock, const int *fds, size_t nb_fd) char tmp[CMSG_SPACE(sizeof_fds)]; char dummy = 0; - assert(sock); - assert(fds); - assert(nb_fd > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(fds); + LTTNG_ASSERT(nb_fd > 0); memset(&msg, 0, sizeof(msg)); memset(tmp, 0, sizeof(tmp)); @@ -545,9 +544,9 @@ ssize_t lttcomm_send_fds_unix_sock_non_block(int sock, const int *fds, size_t nb char tmp[CMSG_SPACE(sizeof_fds)]; char dummy = 0; - assert(sock); - assert(fds); - assert(nb_fd > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(fds); + LTTNG_ASSERT(nb_fd > 0); memset(&msg, 0, sizeof(msg)); memset(tmp, 0, sizeof(tmp)); @@ -638,9 +637,9 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd) struct msghdr msg; char dummy; - assert(sock); - assert(fds); - assert(nb_fd > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(fds); + LTTNG_ASSERT(nb_fd > 0); memset(&msg, 0, sizeof(msg)); @@ -758,7 +757,7 @@ enum lttng_error_code add_fds_to_payload(struct lttng_dynamic_array *raw_fds, int *raw_fd = (int *) lttng_dynamic_array_get_element( raw_fds, i); - assert(*raw_fd != -1); + LTTNG_ASSERT(*raw_fd != -1); handle = fd_handle_create(*raw_fd); if (!handle) { @@ -791,9 +790,9 @@ ssize_t _lttcomm_recv_payload_fds_unix_sock(int sock, size_t nb_fd, int default_value = -1; struct lttng_dynamic_array raw_fds; - assert(sock); - assert(payload); - assert(nb_fd > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(payload); + LTTNG_ASSERT(nb_fd > 0); lttng_dynamic_array_init(&raw_fds, sizeof(int), close_raw_fd); @@ -861,9 +860,9 @@ ssize_t lttcomm_recv_fds_unix_sock_non_block(int sock, int *fds, size_t nb_fd) struct cmsghdr *cmsg; size_t sizeof_fds = nb_fd * sizeof(int); - assert(sock); - assert(fds); - assert(nb_fd > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(fds); + LTTNG_ASSERT(nb_fd > 0); #ifdef __linux__ /* Account for the struct ucred cmsg in the buffer size */ @@ -992,27 +991,27 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, const void *buf, size_t len) struct msghdr msg; struct iovec iov[1]; ssize_t ret = -1; -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) struct cmsghdr *cmptr; size_t sizeof_cred = sizeof(lttng_sock_cred); char anc_buf[CMSG_SPACE(sizeof_cred)]; lttng_sock_cred *creds; memset(anc_buf, 0, CMSG_SPACE(sizeof_cred) * sizeof(char)); -#endif /* __linux__ */ +#endif /* __linux__, __CYGWIN__ */ memset(&msg, 0, sizeof(msg)); - assert(sock); - assert(buf); - assert(len > 0); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); iov[0].iov_base = (void *) buf; iov[0].iov_len = len; msg.msg_iov = iov; msg.msg_iovlen = 1; -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) msg.msg_control = (caddr_t) anc_buf; msg.msg_controllen = CMSG_LEN(sizeof_cred); @@ -1029,7 +1028,7 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, const void *buf, size_t len) LTTNG_SOCK_SET_UID_CRED(creds, geteuid()); LTTNG_SOCK_SET_GID_CRED(creds, getegid()); LTTNG_SOCK_SET_PID_CRED(creds, getpid()); -#endif /* __linux__ */ +#endif /* __linux__, __CYGWIN__ */ do { ret = sendmsg(sock, &msg, 0); @@ -1059,16 +1058,16 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, struct iovec iov[1]; ssize_t ret; size_t len_last; -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) struct cmsghdr *cmptr; size_t sizeof_cred = sizeof(lttng_sock_cred); char anc_buf[CMSG_SPACE(sizeof_cred)]; -#endif /* __linux__ */ +#endif /* __linux__, __CYGWIN__ */ - assert(sock); - assert(buf); - assert(len > 0); - assert(creds); + LTTNG_ASSERT(sock); + LTTNG_ASSERT(buf); + LTTNG_ASSERT(len > 0); + LTTNG_ASSERT(creds); memset(&msg, 0, sizeof(msg)); @@ -1078,10 +1077,10 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, msg.msg_iov = iov; msg.msg_iovlen = 1; -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) msg.msg_control = anc_buf; msg.msg_controllen = sizeof(anc_buf); -#endif /* __linux__ */ +#endif /* __linux__, __CYGWIN__ */ do { len_last = iov[0].iov_len; @@ -1089,7 +1088,7 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, if (ret > 0) { iov[0].iov_base += ret; iov[0].iov_len -= ret; - assert(ret <= len_last); + LTTNG_ASSERT(ret <= len_last); } } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR)); if (ret < 0) { @@ -1100,7 +1099,7 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, } /* Else ret = 0 meaning an orderly shutdown. */ -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) if (msg.msg_flags & MSG_CTRUNC) { fprintf(stderr, "Error: Control message truncated.\n"); ret = -1; @@ -1129,18 +1128,15 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, } memcpy(creds, CMSG_DATA(cmptr), sizeof_cred); -#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__) || defined(__APPLE__)) - { - int peer_ret; - - peer_ret = getpeereid(sock, &creds->uid, &creds->gid); - if (peer_ret != 0) { - return peer_ret; - } +#elif (defined(__FreeBSD__) || defined(__sun__) || defined(__APPLE__)) + if (lttng_get_unix_socket_peer_creds(sock, creds)) { + fprintf(stderr, "ARG\n"); + ret = -1; + goto end; } #else #error "Please implement credential support for your OS." -#endif /* __linux__ */ +#endif /* __linux__, __CYGWIN__ */ end: return ret; @@ -1149,7 +1145,7 @@ end: /* * Set socket option to use credentials passing. */ -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) LTTNG_HIDDEN int lttcomm_setsockopt_creds_unix_sock(int sock) { @@ -1162,7 +1158,7 @@ int lttcomm_setsockopt_creds_unix_sock(int sock) } return ret; } -#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__) || defined(__APPLE__)) +#elif (defined(__FreeBSD__) || defined(__sun__) || defined(__APPLE__)) LTTNG_HIDDEN int lttcomm_setsockopt_creds_unix_sock(int sock) {