summaryrefslogtreecommitdiff
path: root/sysutils
diff options
context:
space:
mode:
authorbjs <bjs>2008-02-08 23:15:16 +0000
committerbjs <bjs>2008-02-08 23:15:16 +0000
commitf04fa27eddb41f903d2db3a459a8c4d7d0808ab0 (patch)
tree9b1876f16a5631c311bc4819cb0598c3e3441ab9 /sysutils
parentb2990c85f3bdf28789de5966ab0342e49f22b34e (diff)
downloadpkgsrc-f04fa27eddb41f903d2db3a459a8c4d7d0808ab0.tar.gz
Add patch supporting socket credentials for NetBSD, courtesy of
jmcneill@. Bump rev.
Diffstat (limited to 'sysutils')
-rw-r--r--sysutils/dbus/Makefile4
-rw-r--r--sysutils/dbus/distinfo4
-rw-r--r--sysutils/dbus/patches/patch-ab107
3 files changed, 109 insertions, 6 deletions
diff --git a/sysutils/dbus/Makefile b/sysutils/dbus/Makefile
index 9c53e665d32..2d7f67d17de 100644
--- a/sysutils/dbus/Makefile
+++ b/sysutils/dbus/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.25 2008/02/05 22:08:29 tnn Exp $
+# $NetBSD: Makefile,v 1.26 2008/02/08 23:15:16 bjs Exp $
#
DISTNAME= dbus-1.0.2
-PKGREVISION= 3
+PKGREVISION= 4
CATEGORIES= sysutils
MASTER_SITES= http://dbus.freedesktop.org/releases/dbus/
diff --git a/sysutils/dbus/distinfo b/sysutils/dbus/distinfo
index c0a2644c47c..6117ad0d358 100644
--- a/sysutils/dbus/distinfo
+++ b/sysutils/dbus/distinfo
@@ -1,9 +1,9 @@
-$NetBSD: distinfo,v 1.17 2008/02/05 22:03:02 tnn Exp $
+$NetBSD: distinfo,v 1.18 2008/02/08 23:15:16 bjs Exp $
SHA1 (dbus-1.0.2.tar.gz) = 2870efd6ea0b5b0d14e52195f560238a74bb1e0e
RMD160 (dbus-1.0.2.tar.gz) = d5eddfb058c4c026d4a9f091ad90abcc6e54861a
Size (dbus-1.0.2.tar.gz) = 1400278 bytes
SHA1 (patch-aa) = 71c903a268e8ece66c39f48937c9544b7c82d1b3
-SHA1 (patch-ab) = ecda96c45e9782dc8611f843f940c8e7c4a4b510
+SHA1 (patch-ab) = 7b04aa9007c1616e954db72538b179130d98234a
SHA1 (patch-ac) = eae0564535d36cb0082dd2e66d74fea808800d4e
SHA1 (patch-ag) = 469993db97a74da50c61449454c02c8a7c69e7bd
diff --git a/sysutils/dbus/patches/patch-ab b/sysutils/dbus/patches/patch-ab
index d344f0f0adb..24f8f602525 100644
--- a/sysutils/dbus/patches/patch-ab
+++ b/sysutils/dbus/patches/patch-ab
@@ -1,8 +1,111 @@
-$NetBSD: patch-ab,v 1.7 2008/02/05 22:03:02 tnn Exp $
+$NetBSD: patch-ab,v 1.8 2008/02/08 23:15:16 bjs Exp $
--- dbus/dbus-sysdeps-unix.c.orig 2006-12-11 14:21:09.000000000 -0500
+++ dbus/dbus-sysdeps-unix.c
-@@ -2311,8 +2311,18 @@ int
+@@ -22,6 +22,10 @@
+ *
+ */
+
++#ifdef __NetBSD__
++#define _NETBSD_SOURCE
++#endif
++
+ #include "dbus-internals.h"
+ #include "dbus-sysdeps.h"
+ #include "dbus-sysdeps-unix.h"
+@@ -67,6 +71,10 @@
+ #include <ucred.h>
+ #endif
+
++#ifdef __NetBSD__
++#include <sys/un.h>
++#endif
++
+ #ifndef O_BINARY
+ #define O_BINARY 0
+ #endif
+@@ -75,6 +83,33 @@
+ #define socklen_t int
+ #endif
+
++#ifdef LOCAL_PEEREID
++static dbus_bool_t
++dbus_nb_getpeereid(int fd, pid_t *pid, uid_t *uid, gid_t *gid)
++{
++ struct unpcbid cred;
++ socklen_t len = sizeof(cred);
++
++ _dbus_verbose ("dbus_nb_getpeereid: enter, fd=%d\n", fd);
++
++ if (getsockopt(fd, 0, LOCAL_PEEREID, &cred, &len) < 0)
++ {
++ _dbus_verbose ("dbus_nb_getpeereid: getsockopt LOCAL_PEEREID failed: %s\n", strerror(errno));
++ return FALSE;
++ }
++ if (pid)
++ *pid = cred.unp_pid;
++ if (uid)
++ *uid = cred.unp_euid;
++ if (gid)
++ *gid = cred.unp_egid;
++
++ _dbus_verbose ("dbus_nb_getpeereid: returning TRUE, pid=%d uid=%d gid=%d\n",
++ cred.unp_pid, cred.unp_euid, cred.unp_egid);
++ return TRUE;
++}
++#endif
++
+ static dbus_bool_t
+ _dbus_open_socket (int *fd,
+ int domain,
+@@ -517,7 +552,7 @@ _dbus_set_local_creds (int fd, dbus_bool
+ {
+ dbus_bool_t retval = TRUE;
+
+-#if defined(HAVE_CMSGCRED)
++#if defined(HAVE_CMSGCRED) || defined(LOCAL_PEEREID)
+ /* NOOP just to make sure only one codepath is used
+ * and to prefer CMSGCRED
+ */
+@@ -955,7 +990,7 @@ _dbus_read_credentials_unix_socket (int
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+
+-#if defined(HAVE_CMSGCRED) || defined(LOCAL_CREDS)
++#if (defined(HAVE_CMSGCRED) || defined(LOCAL_CREDS)) && !defined(LOCAL_PEEREID)
+ memset (&cmsg, 0, sizeof (cmsg));
+ msg.msg_control = &cmsg;
+ msg.msg_controllen = sizeof (cmsg);
+@@ -980,7 +1015,7 @@ _dbus_read_credentials_unix_socket (int
+ return FALSE;
+ }
+
+-#if defined(HAVE_CMSGCRED) || defined(LOCAL_CREDS)
++#if (defined(HAVE_CMSGCRED) || defined(LOCAL_CREDS)) && !defined(LOCAL_PEEREID)
+ if (cmsg.hdr.cmsg_len < sizeof (cmsg) || cmsg.hdr.cmsg_type != SCM_CREDS)
+ {
+ dbus_set_error (error, DBUS_ERROR_FAILED,
+@@ -1012,6 +1047,19 @@ _dbus_read_credentials_unix_socket (int
+ credentials->pid = cmsg.cred.cmcred_pid;
+ credentials->uid = cmsg.cred.cmcred_euid;
+ credentials->gid = cmsg.cred.cmcred_groups[0];
++#elif defined(LOCAL_PEEREID)
++ pid_t sockpid, sockuid, sockgid;
++ if (dbus_nb_getpeereid(client_fd, &sockpid, &sockuid, &sockgid) == TRUE)
++ {
++ credentials->pid = sockpid;
++ credentials->uid = sockuid;
++ credentials->gid = sockgid;
++ }
++ else
++ {
++ _dbus_verbose ("Failed to dbus_nb_getpeereid() credentials\n");
++ }
++
+ #elif defined(LOCAL_CREDS)
+ credentials->pid = DBUS_PID_UNSET;
+ credentials->uid = cmsg.cred.sc_uid;
+@@ -2311,8 +2359,18 @@ int
_dbus_printf_string_upper_bound (const char *format,
va_list args)
{