switch to the new struct writer/writer_node abstraction
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index 599930aa11628a36c6cb4317823c816b12a242db..4d2f520f23170aef7f84e4aeea52c43616400266 100644 (file)
--- 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) {