diff options
author | John (J5) Palmieri <johnp@redhat.com> | 2005-10-12 22:15:37 +0000 |
---|---|---|
committer | John (J5) Palmieri <johnp@redhat.com> | 2005-10-12 22:15:37 +0000 |
commit | 8d2fe98783ca1747db920fa702de66a2910d3cd1 (patch) | |
tree | 3a6ac2b7c25540dd626cd3399b1dbdabd3d8e846 | |
parent | f9e96c54cd2bad250179b2992870f8c27ae7e65d (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-- | ChangeLog | 19 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | dbus/dbus-connection.c | 16 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.c | 32 |
4 files changed, 62 insertions, 6 deletions
@@ -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 } |