| GIO Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Signals | ||||
#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);
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);
typedef struct _GDBusAuthObserver GDBusAuthObserver;
The GDBusAuthObserver structure contains only private data and should only be accessed using the provided API.
Since 2.26
typedef struct {
/* Signals */
gboolean (*authorize_authenticated_peer) (GDBusAuthObserver *observer,
GIOStream *stream,
GCredentials *credentials);
} GDBusAuthObserverClass;
Class structure for GDBusAuthObserverClass.
| Signal class handler for the "authorize-authenticated-peer" signal. |
Since 2.26
GDBusAuthObserver * g_dbus_auth_observer_new (void);
Creates a new GDBusAuthObserver object.
Returns : |
A GDBusAuthObserver. Free with g_object_unref().
|
Since 2.26
gboolean g_dbus_auth_observer_authorize_authenticated_peer (GDBusAuthObserver *observer,GIOStream *stream,GCredentials *credentials);
Emits the "authorize-authenticated-peer" signal on observer.
|
A GDBusAuthObserver. |
|
A GIOStream for the GDBusConnection. |
|
Credentials received from the peer or NULL.
|
Returns : |
TRUE if the peer should be denied, FALSE otherwise.
|
Since 2.26
"authorize-authenticated-peer" signalgboolean 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.
|
The GDBusAuthObserver emitting the signal. |
|
A GIOStream for the GDBusConnection. |
|
Credentials received from the peer or NULL.
|
|
user data set when the signal handler was connected. |
Returns : |
TRUE if the peer is authorized, FALSE if not.
|
Since 2.26