diff --git a/bus/driver.c b/bus/driver.c
index 5c4e9a2..7cd87e4 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -1536,6 +1536,14 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
DBusMessageIter array_iter;
unsigned long ulong_val;
const char *service;
+#if 0
+ /* only used by unfinished bits - Solaris/SELinux */
+ DBusMessageIter entry_iter;
+ DBusMessageIter var_iter;
+ void *adt_data;
+ dbus_uint32_t adt_size;
+ BusSELinuxID *sid;
+#endif
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
@@ -1567,6 +1575,71 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
goto oom;
}
+ /* FIXME: untested, someone on a Solaris system needs to test this */
+#if 0
+ if (dbus_connection_get_adt_audit_session_data (conn, &adt_data,
+ &adt_size) &&
+ adt_size <= _DBUS_INT_MAX)
+ {
+ if (!_dbus_asv_open_entry (&array_iter, &entry_iter,
+ "ADTAuditSessionData", "ay",
+ &var_iter))
+ goto oom;
+
+ if (!dbus_message_iter_append_fixed_array (&var_iter, DBUS_TYPE_BYTE,
+ adt_data, adt_size))
+ {
+ _dbus_asv_abandon_entry (&array_iter, &entry_iter, &var_iter);
+ goto oom;
+ }
+
+ if (!_dbus_asv_close_entry (&array_iter, &entry_iter, &var_iter))
+ goto oom;
+ }
+#endif
+
+ /* FIXME: someone on a SELinux system needs to implement and test this */
+#if 0
+ sid = bus_connection_get_selinux_id (conn);
+
+ if (sid != NULL)
+ {
+ /* FIXME: get context from sid, similar to
+ * bus_selinux_append_context() */
+
+ if (!_dbus_asv_open_entry (&array_iter, &entry_iter,
+ "SELinuxSecurityContext", "ay",
+ &var_iter))
+ goto oom;
+
+ if (!dbus_message_iter_append_fixed_array (&var_iter, DBUS_TYPE_BYTE,
+ context, strlen (context)))
+ {
+ _dbus_asv_abandon_entry (&array_iter, &entry_iter, &var_iter);
+ goto oom;
+ }
+
+ if (!_dbus_asv_close_entry (&array_iter, &entry_iter, &var_iter))
+ goto oom;
+ }
+#endif
+
+#ifdef DBUS_WIN
+ {
+ char *windows_sid = NULL;
+ _dbus_getsid(&windows_sid);
+
+ if (windows_sid != NULL)
+ {
+ if (!_dbus_asv_add_string (&array_iter, "WindowsSID", windows_sid))
+ {
+ LocalFree(windows_sid);
+ goto oom;
+ }
+ LocalFree(windows_sid);
+ }
+ }
+#endif
if (!_dbus_asv_close (&reply_iter, &array_iter))
goto oom;
diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c
index 397520a..c6340fc 100644
--- a/dbus/dbus-sysdeps-win.c
+++ b/dbus/dbus-sysdeps-win.c
@@ -744,7 +744,7 @@ _dbus_pid_for_log (void)
* @param points to sid buffer, need to be freed with LocalFree()
* @returns process sid
*/
-static dbus_bool_t
+dbus_bool_t
_dbus_getsid(char **sid)
{
HANDLE process_token = INVALID_HANDLE_VALUE;
diff --git a/doc/dbus-specification.xml b/doc/dbus-specification.xml
index e59a5e5..4f23701 100644
--- a/doc/dbus-specification.xml
+++ b/doc/dbus-specification.xml
@@ -5645,6 +5645,28 @@
UINT32
The numeric Unix process ID, as defined by POSIX
+
+ WindowsSID
+ STRING
+ The Windows security identifier in its string form,
+ e.g. "S-1-5-21-3623811015-3361044348-30300820-1013" for
+ domain or local computer user or "S-1-5-18" for the
+ LOCAL_SYSTEM user
+
+
+
diff --git a/test/dbus-daemon.c b/test/dbus-daemon.c
index 5f9a6a4..83411cb 100644
--- a/test/dbus-daemon.c
+++ b/test/dbus-daemon.c
@@ -414,6 +414,35 @@ test_creds (Fixture *f,
g_assert_not_reached ();
#endif
}
+ else if (g_strcmp0 (name, "SELinuxSecurityContext") == 0)
+ {
+#ifdef __linux__
+ g_assert_cmpuint (dbus_message_iter_get_arg_type (&var_iter), ==,
+ DBUS_TYPE_ARRAY);
+ /* FIXME: get byte array, print it, and assert that it's right */
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ else if (g_strcmp0 (name, "ADTAuditSessionData") == 0)
+ {
+ /* ... */
+ }
+ else if (g_strcmp0 (name, "WindowsSID") == 0)
+ {
+#ifdef G_OS_WIN32
+ const gchar *sid;
+
+ g_assert_cmpuint (dbus_message_iter_get_arg_type (&var_iter), ==,
+ DBUS_TYPE_STRING);
+ dbus_message_iter_get_basic (&var_iter, &sid);
+ g_message ("%s of this process is %s", name, sid);
+ /* FIXME: assert that it's correct */
+ seen |= SEEN_WINDOWS_SID;
+#else
+ g_assert_not_reached ();
+#endif
+ }
dbus_message_iter_next (&arr_iter);
}