From 502885d8afae12b0aaef82e8a094c98ec4a9ddca Mon Sep 17 00:00:00 2001 From: Joe Marcus Clarke Date: Sat, 18 Dec 2004 00:27:02 +0000 Subject: Fix some alignment errors with socket authentication which fixes gnome-keyring on non-i386 platforms. Submitted by: Sean McNeil --- .../files/patch-gnome-keyring-daemon-io.c | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c (limited to 'security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c') diff --git a/security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c b/security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c new file mode 100644 index 000000000000..9a283741317c --- /dev/null +++ b/security/gnome-keyring/files/patch-gnome-keyring-daemon-io.c @@ -0,0 +1,53 @@ +--- gnome-keyring-daemon-io.c.orig Tue Jan 13 05:29:02 2004 ++++ gnome-keyring-daemon-io.c Fri Dec 17 00:44:55 2004 +@@ -100,8 +100,10 @@ + char buf; + + #ifdef HAVE_CMSGCRED +- char cmsgmem[CMSG_SPACE (sizeof (struct cmsgcred))]; +- struct cmsghdr *cmsg = (struct cmsghdr *) cmsgmem; ++ struct { ++ struct cmsghdr hdr; ++ struct cmsgcred cred; ++ } cmsg; + #endif + + *pid = 0; +@@ -126,9 +128,9 @@ + 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 = &cmsg; ++ msg.msg_controllen = sizeof (cmsg); + #endif + + again: +@@ -147,7 +149,8 @@ + } + + #ifdef HAVE_CMSGCRED +- if (cmsg->cmsg_len < sizeof (cmsgmem) || cmsg->cmsg_type != SCM_CREDS) { ++ if (cmsg.hdr.cmsg_len < sizeof (cmsg) || ++ cmsg.hdr.cmsg_type != SCM_CREDS) { + g_warning ("Message from recvmsg() was not SCM_CREDS\n"); + return FALSE; + } +@@ -168,12 +171,8 @@ + return FALSE; + } + #elif defined(HAVE_CMSGCRED) +- struct cmsgcred *cred; +- +- cred = (struct cmsgcred *) CMSG_DATA (cmsg); +- +- *pid = cred->cmcred_pid; +- *uid = cred->cmcred_euid; ++ *pid = cmsg.cred.cmcred_pid; ++ *uid = cmsg.cred.cmcred_euid; + #else /* !SO_PEERCRED && !HAVE_CMSGCRED */ + g_warning ("Socket credentials not supported on this OS\n"); + return FALSE; -- cgit v1.2.3