From c9d743cd9a0ac9788884fafd70e6cf5e78941290 Mon Sep 17 00:00:00 2001 From: Andre Date: Wed, 19 Apr 2006 22:35:04 +0200 Subject: [PATCH] net.c: make it compile without ucred This patch is ugly as hell and only compile-tested. It obviously needs more work (or a totally different approch like using the usual send/recv functions in case ucred is not available). MacOs testers are welcome. --- net.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/net.c b/net.c index 4d2f520f..5af967b9 100644 --- a/net.c +++ b/net.c @@ -27,6 +27,13 @@ extern void (*crypt_function_recv)(unsigned long len, const unsigned char *indata, unsigned char *outdata); extern void (*crypt_function_send)(unsigned long len, const unsigned char *indata, unsigned char *outdata); + +#ifndef HAVE_UCRED + struct ucred { + uid_t uid, pid, gid; +}; +#endif /* HAVE_UCRED */ + /** * initialize a struct sockaddr_in * @param addr A pointer to the struct to be initialized @@ -363,6 +370,7 @@ ssize_t send_cred_buffer(int sock, char *buf) msg.msg_iovlen = 1; msg.msg_control = control; msg.msg_controllen = sizeof(control); +#ifdef HAVE_UCRED /* attach the ucred struct */ cmsg = CMSG_FIRSTHDR(&msg); cmsg->cmsg_level = SOL_SOCKET; @@ -370,6 +378,7 @@ ssize_t send_cred_buffer(int sock, char *buf) cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred)); *(struct ucred *)CMSG_DATA(cmsg) = c; msg.msg_controllen = cmsg->cmsg_len; +#endif ret = sendmsg(sock, &msg, 0); if (ret < 0) ret = -E_SENDMSG; @@ -390,7 +399,6 @@ static void dispose_fds(int *fds, int num) * \param fd the socket file descriptor * \param buf the buffer to store the message * \param size the size of \a buffer - * \param cred the credentials are returned here * * \return negative on errors, the user id on success. * @@ -403,11 +411,13 @@ int recv_cred_buffer(int fd, char *buf, size_t size) struct msghdr msg; struct cmsghdr *cmsg; struct iovec iov; - int result; + int result = 0; int yes = 1; struct ucred cred; +#ifdef HAVE_UCRED setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &yes, sizeof(int)); +#endif memset(&msg, 0, sizeof(msg)); memset(buf, 0, size); iov.iov_base = buf; @@ -418,6 +428,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) msg.msg_controllen = sizeof(control); if (recvmsg(fd, &msg, 0) < 0) return -E_RECVMSG; +#ifdef HAVE_UCRED result = -E_SCM_CREDENTIALS; cmsg = CMSG_FIRSTHDR(&msg); while (cmsg) { @@ -434,6 +445,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) } cmsg = CMSG_NXTHDR(&msg, cmsg); } +#endif return result; } @@ -447,7 +459,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) * \return The file descriptor of the created socket, negative * on errors. * - * \sa get_socket() + * \sa get_socket() * \sa setsockopt(2) * \sa bind(2) * \sa listen(2) -- 2.30.2