GDBusAuthObserver

GDBusAuthObserver — Object used for authenticating connections

Synopsis

#include <gio/gio.h>

                    GDBusAuthObserver;
GDBusAuthObserver * g_dbus_auth_observer_new            (void);
gboolean            g_dbus_auth_observer_authorize_authenticated_peer
                                                        (GDBusAuthObserver *observer,
                                                         GIOStream *stream,
                                                         GCredentials *credentials);

Object Hierarchy

  GObject
   +----GDBusAuthObserver

Signals

  "authorize-authenticated-peer"                   : Run Last

Description

The GDBusAuthObserver type provides a mechanism for participating in how a GDBusServer (or a GDBusConnection) authenticates remote peers. Simply instantiate a GDBusAuthObserver and connect to the signals you are interested in. Note that new signals may be added in the future

For example, if you only want to allow D-Bus connections from processes owned by the same uid as the server, you would do this:

Example 7. Controlling Authentication

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
static gboolean
on_authorize_authenticated_peer (GDBusAuthObserver *observer,
                                 GIOStream         *stream,
                                 GCredentials      *credentials,
                                 gpointer           user_data)
{
  GCredentials *me;
  gboolean authorized;

  authorized = FALSE;
  me = g_credentials_new ();

  if (credentials != NULL &&
      !g_credentials_is_same_user (credentials, me))
    authorized = TRUE;

  g_object_unref (me);

  return authorized;
}

static gboolean
on_new_connection (GDBusServer     *server,
                   GDBusConnection *connection,
                   gpointer         user_data)
{
  /* Guaranteed here that @connection is from a process owned by the same user */
}

[...]

GDBusAuthObserver *observer;
GDBusServer *server;
GError *error;

error = NULL;
observer = g_dbus_auth_observer_new ();
server = g_dbus_server_new_sync ("unix:tmpdir=/tmp/my-app-name",
                                 G_DBUS_SERVER_FLAGS_NONE,
                                 observer,
                                 NULL, /* GCancellable */
                                 &error);
g_signal_connect (observer,
                  "authorize-authenticated-peer",
                  G_CALLBACK (on_authorize_authenticated_peer),
                  NULL);
g_signal_connect (server,
                  "new-connection",
                  G_CALLBACK (on_new_connection),
                  NULL);
g_object_unref (observer);
g_dbus_server_start (server);


Details

GDBusAuthObserver

typedef struct _GDBusAuthObserver GDBusAuthObserver;

The GDBusAuthObserver structure contains only private data and should only be accessed using the provided API.

Since 2.26


g_dbus_auth_observer_new ()

GDBusAuthObserver * g_dbus_auth_observer_new            (void);

Creates a new GDBusAuthObserver object.

Returns :

A GDBusAuthObserver. Free with g_object_unref().

Since 2.26


g_dbus_auth_observer_authorize_authenticated_peer ()

gboolean            g_dbus_auth_observer_authorize_authenticated_peer
                                                        (GDBusAuthObserver *observer,
                                                         GIOStream *stream,
                                                         GCredentials *credentials);

Emits the "authorize-authenticated-peer" signal on observer.

observer :

A GDBusAuthObserver.

stream :

A GIOStream for the GDBusConnection.

credentials :

Credentials received from the peer or NULL.

Returns :

TRUE if the peer should be denied, FALSE otherwise.

Since 2.26

Signal Details

The "authorize-authenticated-peer" signal

gboolean            user_function                      (GDBusAuthObserver *observer,
                                                        GIOStream         *stream,
                                                        GCredentials      *credentials,
                                                        gpointer           user_data)        : Run Last

Emitted to check if a peer that is successfully authenticated is authorized.

observer :

The GDBusAuthObserver emitting the signal.

stream :

A GIOStream for the GDBusConnection.

credentials :

Credentials received from the peer or NULL.

user_data :

user data set when the signal handler was connected.

Returns :

TRUE if the peer is authorized, FALSE if not.

Since 2.26