freebsd-ports/security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c
2005-07-17 01:54:54 +00:00

58 lines
1.7 KiB
C

--- gnome-keyring-daemon-io.c.orig Wed May 4 03:17:18 2005
+++ gnome-keyring-daemon-io.c Sat Jul 16 21:46:13 2005
@@ -100,14 +100,17 @@ read_unix_socket_credentials (int fd,
char buf;
#ifdef HAVE_CMSGCRED
- char cmsgmem[CMSG_SPACE (sizeof (struct cmsgcred))];
- struct cmsghdr *cmsg = (struct cmsghdr *) cmsgmem;
+ struct cmsgcred *cred;
+ union {
+ struct cmsghdr hdr;
+ char cred[CMSG_SPACE (sizeof (struct cmsgcred))];
+ } cmsg;
#endif
*pid = 0;
*uid = 0;
-#if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED)
+#if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED) && !defined(__FreeBSD__)
/* Set the socket to receive credentials on the next message */
{
int on = 1;
@@ -126,9 +129,9 @@ read_unix_socket_credentials (int fd,
msg.msg_iovlen = 1;
#ifdef HAVE_CMSGCRED
- memset (cmsgmem, 0, sizeof (cmsgmem));
- msg.msg_control = cmsgmem;
- msg.msg_controllen = sizeof (cmsgmem);
+ memset (&cmsg, 0, sizeof (cmsg));
+ msg.msg_control = (caddr_t) &cmsg;
+ msg.msg_controllen = CMSG_SPACE (sizeof (struct cmsgcred));
#endif
again:
@@ -147,7 +150,8 @@ read_unix_socket_credentials (int fd,
}
#ifdef HAVE_CMSGCRED
- if (cmsg->cmsg_len < sizeof (cmsgmem) || cmsg->cmsg_type != SCM_CREDS) {
+ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred)) ||
+ cmsg.hdr.cmsg_type != SCM_CREDS) {
g_warning ("Message from recvmsg() was not SCM_CREDS\n");
return FALSE;
}
@@ -168,10 +172,7 @@ read_unix_socket_credentials (int fd,
return FALSE;
}
#elif defined(HAVE_CMSGCRED)
- struct cmsgcred *cred;
-
- cred = (struct cmsgcred *) CMSG_DATA (cmsg);
-
+ cred = (struct cmsgcred *) CMSG_DATA (&cmsg);
*pid = cred->cmcred_pid;
*uid = cred->cmcred_euid;
#else /* !SO_PEERCRED && !HAVE_CMSGCRED */