dovecot-2.0: fdpass: Use memcpy() to access data in CMSG_DATA().
dovecot at dovecot.org
dovecot at dovecot.org
Fri Sep 17 19:54:25 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/bdf922d26534
changeset: 12130:bdf922d26534
user: Timo Sirainen <tss at iki.fi>
date: Fri Sep 17 17:54:22 2010 +0100
description:
fdpass: Use memcpy() to access data in CMSG_DATA().
This fixes at least AIX where the previous way was broken for some reason.
diffstat:
src/lib/fdpass.c | 11 +++--------
1 files changed, 3 insertions(+), 8 deletions(-)
diffs (42 lines):
diff -r 4a5e2be6e112 -r bdf922d26534 src/lib/fdpass.c
--- a/src/lib/fdpass.c Fri Sep 17 17:30:30 2010 +0100
+++ b/src/lib/fdpass.c Fri Sep 17 17:54:22 2010 +0100
@@ -107,7 +107,6 @@
struct const_iovec iov;
struct cmsghdr *cmsg;
char buf[CMSG_SPACE(sizeof(int))];
- void *cmsg_data;
/* at least one byte is required to be sent with fd passing */
i_assert(size > 0 && size < INT_MAX);
@@ -130,8 +129,7 @@
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
- cmsg_data = CMSG_DATA(cmsg);
- *(int *)cmsg_data = send_fd;
+ memcpy(CMSG_DATA(cmsg), &send_fd, sizeof(send_fd));
/* set the real length we want to use. Do it after all is
set just in case CMSG macros required the extra padding
@@ -166,7 +164,6 @@
struct cmsghdr *cmsg;
ssize_t ret;
char buf[CMSG_SPACE(sizeof(int))];
- void *cmsg_data;
i_assert(size > 0 && size < INT_MAX);
@@ -196,10 +193,8 @@
cmsg = CMSG_FIRSTHDR(&msg);
if (!CHECK_MSG(msg) || !CHECK_CMSG(cmsg))
*fd = -1;
- else {
- cmsg_data = CMSG_DATA(cmsg);
- *fd = *(int *)cmsg_data;
- }
+ else
+ memcpy(fd, CMSG_DATA(cmsg), sizeof(*fd));
return ret;
}
More information about the dovecot-cvs
mailing list