summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2005-10-12 22:15:37 +0000
committerJohn (J5) Palmieri <johnp@redhat.com>2005-10-12 22:15:37 +0000
commit8d2fe98783ca1747db920fa702de66a2910d3cd1 (patch)
tree3a6ac2b7c25540dd626cd3399b1dbdabd3d8e846
parentf9e96c54cd2bad250179b2992870f8c27ae7e65d (diff)
patches from Michael Krivoruchko <misha at sun.com>:
* dbus/dbus-connection.c (_dbus_connection_queue_received_message_link, _dbus_connection_message_sent, _dbus_connection_send_preallocated_unlocked_no_update, _dbus_connection_pop_message_link_unlocked): handle the case when path is NULL when calling _dbus_verbose * configure.in: check for functions getpeerucred and getpeereid * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): provides support of auth EXTERNAL on Solaris 10+ (getpeerucred), FreeBSD 4.6+, OpenBSD 3.0+ and FreeBSD 5.0+ as well as MacOSX 10.2+ (getpeereid). Patch was only tested on Solaris 10 x86 so it might be issues with other platforms (i.e. BSDs and MacOSX)
-rw-r--r--ChangeLog19
-rw-r--r--configure.in1
-rw-r--r--dbus/dbus-connection.c16
-rw-r--r--dbus/dbus-sysdeps.c32
4 files changed, 62 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index fdcbe5a4..0f71e79f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2005-10-12 John (J5) Palmieri <johnp@redhat.com>
+
+ patches from Michael Krivoruchko <misha at sun.com>:
+
+ * dbus/dbus-connection.c (_dbus_connection_queue_received_message_link,
+ _dbus_connection_message_sent,
+ _dbus_connection_send_preallocated_unlocked_no_update,
+ _dbus_connection_pop_message_link_unlocked): handle the case when path
+ is NULL when calling _dbus_verbose
+
+ * configure.in: check for functions getpeerucred and getpeereid
+
+ * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): provides
+ support of auth EXTERNAL on Solaris 10+ (getpeerucred), FreeBSD 4.6+,
+ OpenBSD 3.0+ and FreeBSD 5.0+ as well as MacOSX 10.2+ (getpeereid).
+ Patch was only tested on Solaris 10 x86 so it might be issues
+ with other platforms (i.e. BSDs and MacOSX)
+
+
2005-10-05 John (J5) Palmieri <johnp@redhat.com>
* glib/dbus-gvalue.c (marshal_variant): call _dbus_gvalue_marshal
diff --git a/configure.in b/configure.in
index aede5818..302475b2 100644
--- a/configure.in
+++ b/configure.in
@@ -653,6 +653,7 @@ if test x$dbus_have_struct_cmsgcred = xyes; then
AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
fi
+AC_CHECK_FUNCS(getpeerucred getpeereid)
#### Abstract sockets
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index 1e699617..31aea4c9 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -391,7 +391,9 @@ _dbus_connection_queue_received_message_link (DBusConnection *connection,
_dbus_verbose ("Message %p (%d %s %s %s '%s' reply to %u) added to incoming queue %p, %d incoming\n",
message,
dbus_message_get_type (message),
- dbus_message_get_path (message),
+ dbus_message_get_path (message) ?
+ dbus_message_get_path (message) :
+ "no path",
dbus_message_get_interface (message) ?
dbus_message_get_interface (message) :
"no interface",
@@ -515,7 +517,9 @@ _dbus_connection_message_sent (DBusConnection *connection,
_dbus_verbose ("Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n",
message,
dbus_message_get_type (message),
- dbus_message_get_path (message),
+ dbus_message_get_path (message) ?
+ dbus_message_get_path (message) :
+ "no path",
dbus_message_get_interface (message) ?
dbus_message_get_interface (message) :
"no interface",
@@ -2163,7 +2167,9 @@ _dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *con
_dbus_verbose ("Message %p (%d %s %s %s '%s') for %s added to outgoing queue %p, %d pending to send\n",
message,
dbus_message_get_type (message),
- dbus_message_get_path (message),
+ dbus_message_get_path (message) ?
+ dbus_message_get_path (message) :
+ "no path",
dbus_message_get_interface (message) ?
dbus_message_get_interface (message) :
"no interface",
@@ -3046,7 +3052,9 @@ _dbus_connection_pop_message_link_unlocked (DBusConnection *connection)
_dbus_verbose ("Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n",
link->data,
dbus_message_get_type (link->data),
- dbus_message_get_path (link->data),
+ dbus_message_get_path (link->data) ?
+ dbus_message_get_path (link->data) :
+ "no path",
dbus_message_get_interface (link->data) ?
dbus_message_get_interface (link->data) :
"no interface",
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c
index 4ad4497d..1b7cd906 100644
--- a/dbus/dbus-sysdeps.c
+++ b/dbus/dbus-sysdeps.c
@@ -57,7 +57,9 @@
#ifdef HAVE_BACKTRACE
#include <execinfo.h>
#endif
-
+#ifdef HAVE_GETPEERUCRED
+#include <ucred.h>
+#endif
#ifndef O_BINARY
#define O_BINARY 0
@@ -923,7 +925,33 @@ _dbus_read_credentials_unix_socket (int client_fd,
credentials->pid = cmsg.cred.cmcred_pid;
credentials->uid = cmsg.cred.cmcred_euid;
credentials->gid = cmsg.cred.cmcred_groups[0];
-#else /* !SO_PEERCRED && !HAVE_CMSGCRED */
+#elif defined(HAVE_GETPEEREID)
+ uid_t euid;
+ gid_t egid;
+ if (getpeereid (client_fd, &euid, &egid) == 0)
+ {
+ credentials->uid = euid;
+ credentials->gid = egid;
+ }
+ else
+ {
+ _dbus_verbose ("Failed to getpeereid() credentials: %s\n", _dbus_strerror (errno));
+ }
+#elif defined(HAVE_GETPEERUCRED)
+ ucred_t * ucred = NULL;
+ if (getpeerucred (client_fd, &ucred) == 0)
+ {
+ credentials->pid = ucred_getpid (ucred);
+ credentials->uid = ucred_geteuid (ucred);
+ credentials->gid = ucred_getegid (ucred);
+ }
+ else
+ {
+ _dbus_verbose ("Failed to getpeerucred() credentials: %s\n", _dbus_strerror (errno));
+ }
+ if (ucred != NULL)
+ ucred_free (ucred);
+#else /* !SO_PEERCRED && !HAVE_CMSGCRED && !HAVE_GETPEEREID && !HAVE_GETPEERUCRED */
_dbus_verbose ("Socket credentials not supported on this OS\n");
#endif
}