diff options
Diffstat (limited to 'devel/gamin/files/patch-libgamin_gam_api.c')
-rw-r--r-- | devel/gamin/files/patch-libgamin_gam_api.c | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/devel/gamin/files/patch-libgamin_gam_api.c b/devel/gamin/files/patch-libgamin_gam_api.c deleted file mode 100644 index 9f2672c1d..000000000 --- a/devel/gamin/files/patch-libgamin_gam_api.c +++ /dev/null @@ -1,159 +0,0 @@ ---- libgamin/gam_api.c.orig 2007-08-27 03:21:03.000000000 -0700 -+++ libgamin/gam_api.c 2013-02-16 15:51:11.927100135 -0800 -@@ -14,6 +14,7 @@ - #include <sys/socket.h> - #include <sys/un.h> - #include <sys/uio.h> -+#include <string.h> - #include "fam.h" - #include "gam_protocol.h" - #include "gam_data.h" -@@ -117,7 +118,11 @@ - if (user_name[0] != 0) - return (user_name); - -+#ifdef RUN_AS_EUID -+ pw = getpwuid(geteuid()); -+#else - pw = getpwuid(getuid()); -+#endif - - if (pw != NULL) { - strncpy(user_name, pw->pw_name, 99); -@@ -224,7 +229,11 @@ - free(dir); - return(0); - } -+#ifdef RUN_AS_EUID -+ if (st.st_uid != geteuid()) { -+#else - if (st.st_uid != getuid()) { -+#endif - gam_error(DEBUG_INFO, - "Socket directory %s has different owner\n", - dir); -@@ -301,7 +310,11 @@ - if (ret < 0) - return(0); - -+#ifdef RUN_AS_EUID -+ if (st.st_uid != geteuid()) { -+#else - if (st.st_uid != getuid()) { -+#endif - gam_error(DEBUG_INFO, - "Socket %s has different owner\n", - path); -@@ -428,10 +441,10 @@ - { - char data[2] = { 0, 0 }; - int written; --#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS) -- struct { -+#if defined(HAVE_CMSGCRED) && (!defined(LOCAL_CREDS) || defined(__FreeBSD__)) -+ union { - struct cmsghdr hdr; -- struct cmsgcred cred; -+ char cred[CMSG_SPACE (sizeof (struct cmsgcred))]; - } cmsg; - struct iovec iov; - struct msghdr msg; -@@ -443,16 +456,16 @@ - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - -- msg.msg_control = &cmsg; -- msg.msg_controllen = sizeof (cmsg); -+ msg.msg_control = (caddr_t) &cmsg; -+ msg.msg_controllen = CMSG_SPACE (sizeof (struct cmsgcred)); - memset (&cmsg, 0, sizeof (cmsg)); -- cmsg.hdr.cmsg_len = sizeof (cmsg); -+ cmsg.hdr.cmsg_len = CMSG_LEN (sizeof (struct cmsgcred)); - cmsg.hdr.cmsg_level = SOL_SOCKET; - cmsg.hdr.cmsg_type = SCM_CREDS; - #endif - - retry: --#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS) -+#if defined(HAVE_CMSGCRED) && (!defined(LOCAL_CREDS) || defined(__FreeBSD__)) - written = sendmsg(fd, &msg, 0); - #else - written = write(fd, &data[0], 1); -@@ -654,15 +667,20 @@ - gid_t c_gid; - - #ifdef HAVE_CMSGCRED -- struct { -+ struct cmsgcred *cred; -+ union { - struct cmsghdr hdr; -- struct cmsgcred cred; -+ char cred[CMSG_SPACE (sizeof (struct cmsgcred))]; - } cmsg; - #endif - -+#ifdef RUN_AS_EUID -+ s_uid = geteuid(); -+#else - s_uid = getuid(); -+#endif - --#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; -@@ -683,8 +701,8 @@ - - #ifdef HAVE_CMSGCRED - memset(&cmsg, 0, sizeof(cmsg)); -- msg.msg_control = &cmsg; -- msg.msg_controllen = sizeof(cmsg); -+ msg.msg_control = (caddr_t) &cmsg; -+ msg.msg_controllen = CMSG_SPACE (sizeof (struct cmsgcred)); - #endif - - retry: -@@ -701,7 +719,7 @@ - goto failed; - } - #ifdef HAVE_CMSGCRED -- if (cmsg.hdr.cmsg_len < sizeof(cmsg) || cmsg.hdr.cmsg_type != SCM_CREDS) { -+ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred)) || cmsg.hdr.cmsg_type != SCM_CREDS) { - GAM_DEBUG(DEBUG_INFO, - "Message from recvmsg() was not SCM_CREDS\n"); - goto failed; -@@ -727,9 +745,10 @@ - goto failed; - } - #elif defined(HAVE_CMSGCRED) -- c_pid = cmsg.cred.cmcred_pid; -- c_uid = cmsg.cred.cmcred_euid; -- c_gid = cmsg.cred.cmcred_groups[0]; -+ cred = (struct cmsgcred *) CMSG_DATA (&cmsg); -+ c_pid = cred->cmcred_pid; -+ c_uid = cred->cmcred_euid; -+ c_gid = cred->cmcred_groups[0]; - #else /* !SO_PEERCRED && !HAVE_CMSGCRED */ - GAM_DEBUG(DEBUG_INFO, - "Socket credentials not supported on this OS\n"); -@@ -1288,14 +1307,17 @@ - - // FIXME: drop and reacquire lock while blocked? - gamin_data_lock(conn); -- if (!gamin_data_event_ready(conn)) { -+ while ((ret = gamin_data_event_ready(conn)) == 0) { - if (gamin_read_data(conn, fc->fd, 1) < 0) { - gamin_try_reconnect(conn, fc->fd); - FAMErrno = FAM_CONNECT; - return (-1); - } - } -- ret = gamin_data_read_event(conn, fe); -+ -+ if (ret > 0) -+ ret = gamin_data_read_event(conn, fe); -+ - gamin_data_unlock(conn); - - if (ret < 0) { |