diff options
Diffstat (limited to 'devel/gamin/files/patch-server_gam_channel.c')
-rw-r--r-- | devel/gamin/files/patch-server_gam_channel.c | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/devel/gamin/files/patch-server_gam_channel.c b/devel/gamin/files/patch-server_gam_channel.c deleted file mode 100644 index 7b5fb8aee..000000000 --- a/devel/gamin/files/patch-server_gam_channel.c +++ /dev/null @@ -1,127 +0,0 @@ ---- server/gam_channel.c.orig Tue Aug 9 12:17:39 2005 -+++ server/gam_channel.c Fri Feb 10 01:22:46 2006 -@@ -7,6 +7,7 @@ - #include <sys/stat.h> - #include <sys/un.h> - #include <sys/uio.h> -+#include <string.h> - #include "gam_error.h" - #include "gam_connection.h" - #include "gam_channel.h" -@@ -30,10 +31,10 @@ gam_client_conn_send_cred(int fd) - { - 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; -@@ -45,16 +46,16 @@ gam_client_conn_send_cred(int fd) - 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); -@@ -95,15 +96,16 @@ gam_client_conn_check_cred(GIOChannel * - 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 - - s_uid = getuid(); - --#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; -@@ -124,8 +126,8 @@ gam_client_conn_check_cred(GIOChannel * - - #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: -@@ -142,7 +144,7 @@ gam_client_conn_check_cred(GIOChannel * - 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; -@@ -168,9 +170,10 @@ gam_client_conn_check_cred(GIOChannel * - 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"); -@@ -620,6 +621,7 @@ gam_listen_unix_socket(const char *path) - { - int fd; - struct sockaddr_un addr; -+ struct stat st; - - fd = socket(PF_UNIX, SOCK_STREAM, 0); - if (fd < 0) { -@@ -640,8 +642,18 @@ gam_listen_unix_socket(const char *path) - * some extra protection checks. Also make sure the socket is created - * with restricted mode - */ -- if (!gam_check_secure_path(path)) { -+ if (!gam_check_secure_dir()) { -+ close(fd); - return (-1); -+ } -+ -+ if (stat(path, &st) == 0) { -+ /* bind() will fail if the socket already exists */ -+ if (unlink(path) < 0) { -+ GAM_DEBUG(DEBUG_INFO, "Failed to remove %s\n", path); -+ close(fd); -+ return (-1); -+ } - } - strncpy(&addr.sun_path[0], path, (sizeof(addr) - 4) - 1); - umask(0077); |