[telepathy-gabble/master] tube-stream: fire_new_connection: send credentials if needed

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Thu May 7 06:37:19 PDT 2009


---
 src/tube-stream.c |   47 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/src/tube-stream.c b/src/tube-stream.c
index 0fb5be8..8679331 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -589,6 +589,30 @@ local_new_connection_cb (GibberListener *listener,
     }
 }
 
+static gboolean
+set_credentials_access_control_param (GValue *access_control_param,
+    GibberTransport *transport)
+{
+  guint8 credentials;
+
+  credentials = g_random_int_range (0, G_MAXUINT8);
+
+  /* The Credentials access control would have be rejected earlier if the
+   * socket type wasn't UNIX. */
+  if (!gibber_unix_transport_send_credentials (
+        GIBBER_UNIX_TRANSPORT (transport), &credentials, sizeof (guint8)))
+    {
+      DEBUG ("send_credentials failed");
+      return FALSE;
+    }
+
+  g_value_init (access_control_param,
+      G_TYPE_UCHAR);
+  g_value_set_uchar (access_control_param, credentials);
+
+  return TRUE;
+}
+
 static transport_connected_data *
 transport_connected_data_new (GabbleTubeStream *self,
     TpHandle contact)
@@ -610,15 +634,24 @@ fire_new_connection (GabbleTubeStream *self,
     GibberTransport *transport,
     TpHandle contact)
 {
+  GabbleTubeStreamPrivate *priv = GABBLE_TUBE_STREAM_GET_PRIVATE (self);
   GValue access_control_param = {0,};
 
-  /* set a dummy value */
-  /* FIXME: this param doesn't have a meaningful value with
-   * the Localhost access control which is the only one currently
-   * implemented. We should set a not-dummy value when we'll implement
-   * other access control mechanismes. */
-  g_value_init (&access_control_param, G_TYPE_INT);
-  g_value_set_int (&access_control_param, 0);
+  if (priv->access_control == TP_SOCKET_ACCESS_CONTROL_CREDENTIALS)
+    {
+      if (!set_credentials_access_control_param (&access_control_param,
+            transport))
+        {
+          gibber_transport_disconnect (transport);
+          return;
+        }
+    }
+  else
+    {
+      /* set a dummy value */
+      g_value_init (&access_control_param, G_TYPE_INT);
+      g_value_set_int (&access_control_param, 0);
+    }
 
   /* fire NewConnection D-Bus signal */
   gabble_svc_channel_type_stream_tube_emit_new_connection (self,
-- 
1.5.6.5




More information about the telepathy-commits mailing list