Fall back to SO_PEERCRED if credentials passing fails
authorAlexander Larsson <alexl@redhat.com>
Thu, 12 Apr 2012 14:50:20 +0000 (16:50 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 12 Apr 2012 14:50:20 +0000 (16:50 +0200)
Turns out libdbus doesn't send struct ucred credentials on linux, but
just relies on the SO_PEERCRED support. However, gdbus does send, and
expect to recieve a ucred credential. So, when libdbus talks to a
gdbus server the authentication fails to send the credentials.

We fix this by falling back to g_socket_get_credentials() if we don't
get any credential messages.

gio/gunixconnection.c

index cce009b262ea10d5e023960555af5c9b98ea519c..70a31a4e597412695f4ed1f8b631d459799b5046 100644 (file)
@@ -570,7 +570,9 @@ g_unix_connection_receive_credentials (GUnixConnection      *connection,
       goto out;
     }
 
-  if (g_unix_credentials_message_is_supported ())
+  if (g_unix_credentials_message_is_supported () &&
+      /* Fall back on get_credentials if the other side didn't send the credentials */
+      nscm > 0)
     {
       if (nscm != 1)
         {