GDBusAuthObserver

GDBusAuthObserver — Object used for authenticating connections

Synopsis

#include <gio/gio.h>

                    GDBusAuthObserver;
                    GDBusAuthObserverClass;
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

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


GDBusAuthObserverClass

typedef struct {
  /* Signals */
  gboolean (*authorize_authenticated_peer) (GDBusAuthObserver  *observer,
                                            GIOStream          *stream,
                                            GCredentials       *credentials);
} GDBusAuthObserverClass;

Class structure for GDBusAuthObserverClass.

authorize_authenticated_peer ()

Signal class handler for the "authorize-authenticated-peer" signal.

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