X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=4d2f520f23170aef7f84e4aeea52c43616400266;hp=599930aa11628a36c6cb4317823c816b12a242db;hb=08bd4a0d28f709a3b0ca5598e2a3eb62d4378800;hpb=68a836e35fb625b1eefb584fbc57d6c8ab06a658 diff --git a/net.c b/net.c index 599930aa..4d2f520f 100644 --- a/net.c +++ b/net.c @@ -392,10 +392,12 @@ static void dispose_fds(int *fds, int num) * \param size the size of \a buffer * \param cred the credentials are returned here * + * \return negative on errors, the user id on success. + * * \sa okir's Black Hats Manual * \sa recvmsg(2) */ -int recv_cred_buffer(int fd, char *buf, size_t size, struct ucred *cred) +int recv_cred_buffer(int fd, char *buf, size_t size) { char control[255]; struct msghdr msg; @@ -403,6 +405,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size, struct ucred *cred) struct iovec iov; int result; int yes = 1; + struct ucred cred; setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &yes, sizeof(int)); memset(&msg, 0, sizeof(msg)); @@ -420,8 +423,8 @@ int recv_cred_buffer(int fd, char *buf, size_t size, struct ucred *cred) while (cmsg) { if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_CREDENTIALS) { - memcpy(cred, CMSG_DATA(cmsg), sizeof(struct ucred)); - result = iov.iov_len; + memcpy(&cred, CMSG_DATA(cmsg), sizeof(struct ucred)); + result = cred.uid; } else if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {