summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sbus/sssd_dbus_connection.c103
1 files changed, 57 insertions, 46 deletions
diff --git a/server/sbus/sssd_dbus_connection.c b/server/sbus/sssd_dbus_connection.c
index 7769188b3..d84dd2184 100644
--- a/server/sbus/sssd_dbus_connection.c
+++ b/server/sbus/sssd_dbus_connection.c
@@ -31,7 +31,8 @@ struct sbus_conn_timeout_ctx {
struct sbus_conn_ctx *top;
};
-static int _method_list_contains_path(struct sbus_method_ctx *list, struct sbus_method_ctx *method);
+static int _method_list_contains_path(struct sbus_method_ctx *list,
+ struct sbus_method_ctx *method);
static void sbus_unreg_object_paths(struct sbus_conn_ctx *dct_ctx);
static void sbus_dispatch(struct event_context *ev,
@@ -43,9 +44,7 @@ static void sbus_dispatch(struct event_context *ev,
DBusConnection *conn;
int ret;
- if (data == NULL) {
- return;
- }
+ if (data == NULL) return;
dct_ctx = talloc_get_type(data, struct sbus_conn_ctx);
@@ -54,7 +53,7 @@ static void sbus_dispatch(struct event_context *ev,
if((dct_ctx->disconnect) || (!dbus_connection_get_is_connected(conn))) {
DEBUG(0,("Connection is not open for dispatching.\n"));
- /*
+ /*
* Free the connection object.
* This will invoke the destructor for the connection
*/
@@ -81,7 +80,7 @@ static void sbus_dispatch(struct event_context *ev,
if (new_event == NULL) {
DEBUG(0,("Could not add dispatch event!\n"));
- /* TODO: Calling exit here is bad */
+ /* TODO: Calling exit here is bad */
exit(1);
}
}
@@ -145,7 +144,9 @@ static dbus_bool_t sbus_add_conn_watch(DBusWatch *watch, void *data)
if (event_flags == 0)
return FALSE;
- DEBUG(2,("%lX: %d, %d=%s\n", watch, conn_w_ctx->fd, event_flags, event_flags==EVENT_FD_READ?"READ":"WRITE"));
+ DEBUG(2,("%lX: %d, %d=%s\n",
+ watch, conn_w_ctx->fd, event_flags,
+ event_flags==EVENT_FD_READ?"READ":"WRITE"));
/* Add the file descriptor to the event loop */
conn_w_ctx->fde = event_add_fd(conn_w_ctx->top->ev, conn_w_ctx,
@@ -242,7 +243,8 @@ void sbus_toggle_conn_timeout(DBusTimeout *timeout, void *data)
* timed event to perform the dispatch during the next iteration
* through the mainloop
*/
-static void sbus_conn_wakeup_main(void *data) {
+static void sbus_conn_wakeup_main(void *data)
+{
struct sbus_conn_ctx *dct_ctx;
struct timeval tv;
struct timed_event *te;
@@ -280,13 +282,13 @@ int sbus_add_connection(TALLOC_CTX *ctx,
dt_ctx->connection_type = connection_type;
dt_ctx->disconnect = 0;
/* This will be replaced on the first call to sbus_conn_add_method_ctx() */
- dt_ctx->method_ctx_list = NULL;
-
+ dt_ctx->method_ctx_list = NULL;
+
/*
* Set the default destructor
- * Connections can override this with
+ * Connections can override this with
* sbus_conn_set_destructor
- */
+ */
sbus_conn_set_destructor(dt_ctx, NULL);
/* Set up DBusWatch functions */
@@ -316,7 +318,7 @@ int sbus_add_connection(TALLOC_CTX *ctx,
dbus_connection_set_wakeup_main_function(dt_ctx->conn,
sbus_conn_wakeup_main,
dt_ctx, NULL);
-
+
/* Set up any method_contexts passed in */
/* Attempt to dispatch immediately in case of opportunistic
@@ -335,8 +337,9 @@ int sbus_add_connection(TALLOC_CTX *ctx,
/*int sbus_new_connection(struct sbus_method_ctx *ctx, const char *address,
DBusConnection **connection,
sbus_conn_destructor_fn destructor)*/
-int sbus_new_connection(TALLOC_CTX *ctx, struct event_context *ev, const char *address,
- struct sbus_conn_ctx **dct_ctx,
+int sbus_new_connection(TALLOC_CTX *ctx, struct event_context *ev,
+ const char *address,
+ struct sbus_conn_ctx **dct_ctx,
sbus_conn_destructor_fn destructor)
{
DBusConnection *dbus_conn;
@@ -353,13 +356,14 @@ int sbus_new_connection(TALLOC_CTX *ctx, struct event_context *ev, const char *a
return EIO;
}
- ret = sbus_add_connection(ctx, ev, dbus_conn, dct_ctx, SBUS_CONN_TYPE_SHARED);
+ ret = sbus_add_connection(ctx, ev, dbus_conn,
+ dct_ctx, SBUS_CONN_TYPE_SHARED);
if (ret != EOK) {
/* FIXME: release resources */
}
dbus_connection_set_exit_on_disconnect((*dct_ctx)->conn, FALSE);
-
+
/* Set connection destructor */
sbus_conn_set_destructor(*dct_ctx, destructor);
@@ -377,16 +381,16 @@ int sbus_new_connection(TALLOC_CTX *ctx, struct event_context *ev, const char *a
* this will reset the connection to the default destructor.
*/
void sbus_conn_set_destructor(struct sbus_conn_ctx *dct_ctx,
- sbus_conn_destructor_fn destructor) {
- if (!dct_ctx) {
- return;
- }
-
+ sbus_conn_destructor_fn destructor)
+{
+ if (!dct_ctx) return;
+
dct_ctx->destructor = destructor;
/* TODO: Should we try to handle the talloc_destructor too? */
}
-int sbus_default_connection_destructor(void *ctx) {
+int sbus_default_connection_destructor(void *ctx)
+{
struct sbus_conn_ctx *dct_ctx;
dct_ctx = talloc_get_type(ctx, struct sbus_conn_ctx);
@@ -402,11 +406,10 @@ int sbus_default_connection_destructor(void *ctx) {
DEBUG(0,("Critical Error, connection_type is neither shared nor private!\n"));
return -1;
}
-
+
/* Remove object path */
/* TODO: Remove object paths */
-
-
+
dbus_connection_unref(dct_ctx->conn);
return 0;
}
@@ -416,11 +419,13 @@ int sbus_default_connection_destructor(void *ctx) {
* Utility function to retreive the DBusConnection object
* from a sbus_conn_ctx
*/
-DBusConnection *sbus_get_connection(struct sbus_conn_ctx *dct_ctx) {
+DBusConnection *sbus_get_connection(struct sbus_conn_ctx *dct_ctx)
+{
return dct_ctx->conn;
}
-void sbus_disconnect (struct sbus_conn_ctx *dct_ctx) {
+void sbus_disconnect (struct sbus_conn_ctx *dct_ctx)
+{
if (dct_ctx == NULL) {
return;
}
@@ -428,12 +433,12 @@ void sbus_disconnect (struct sbus_conn_ctx *dct_ctx) {
DEBUG(2,("Disconnecting %lX\n", dct_ctx->conn));
dbus_connection_ref(dct_ctx->conn);
dct_ctx->disconnect = 1;
-
+
/* Invoke the custom destructor, if it exists */
if(dct_ctx->destructor) {
dct_ctx->destructor(dct_ctx);
}
-
+
/* Unregister object paths */
sbus_unreg_object_paths(dct_ctx);
@@ -448,7 +453,7 @@ void sbus_disconnect (struct sbus_conn_ctx *dct_ctx) {
/* Disable dispatch status function */
dbus_connection_set_dispatch_status_function(dct_ctx->conn, NULL, NULL, NULL);
-
+
/* Disable wakeup main function */
dbus_connection_set_wakeup_main_function(dct_ctx->conn, NULL, NULL, NULL);
@@ -496,7 +501,7 @@ static DBusHandlerResult message_handler(DBusConnection *conn,
}
/* FIXME: check if we didn't find any matching method */
}
-
+
DEBUG(2, ("Method %s complete. Reply was %srequested.\n", method, reply?"":"not "));
if (reply) {
@@ -511,13 +516,15 @@ static DBusHandlerResult message_handler(DBusConnection *conn,
/* Adds a new D-BUS path message handler to the connection
* Note: this must be a unique path.
*/
-int sbus_conn_add_method_ctx(struct sbus_conn_ctx *dct_ctx, struct sbus_method_ctx *method_ctx) {
+int sbus_conn_add_method_ctx(struct sbus_conn_ctx *dct_ctx,
+ struct sbus_method_ctx *method_ctx)
+{
DBusObjectPathVTable *connection_vtable;
dbus_bool_t dbret;
if (!method_ctx) {
return EINVAL;
}
-
+
if (_method_list_contains_path(dct_ctx->method_ctx_list, method_ctx)) {
return EINVAL;
}
@@ -531,38 +538,42 @@ int sbus_conn_add_method_ctx(struct sbus_conn_ctx *dct_ctx, struct sbus_method_c
} else {
connection_vtable->message_function = message_handler;
}
-
- dbret = dbus_connection_register_object_path(dct_ctx->conn, method_ctx->path, connection_vtable, method_ctx);
+
+ dbret = dbus_connection_register_object_path(dct_ctx->conn, method_ctx->path,
+ connection_vtable, method_ctx);
if (!dbret) {
- return ENOMEM;
+ return ENOMEM;
}
-
+
return EOK;
}
-static int _method_list_contains_path(struct sbus_method_ctx *list, struct sbus_method_ctx *method) {
+static int _method_list_contains_path(struct sbus_method_ctx *list,
+ struct sbus_method_ctx *method)
+{
struct sbus_method_ctx *iter;
-
+
if (!list || !method) {
return 0; /* FALSE */
}
-
+
iter = list;
while (iter != NULL) {
if (strcmp(iter->path, method->path) == 0)
return 1; /* TRUE */
-
+
iter = iter->next;
}
-
+
return 0; /* FALSE */
}
-static void sbus_unreg_object_paths(struct sbus_conn_ctx *dct_ctx) {
+static void sbus_unreg_object_paths(struct sbus_conn_ctx *dct_ctx)
+{
struct sbus_method_ctx *iter = dct_ctx->method_ctx_list;
struct sbus_method_ctx *purge;
-
- while(iter != NULL) {
+
+ while (iter != NULL) {
dbus_connection_unregister_object_path(dct_ctx->conn, iter->path);
DLIST_REMOVE(dct_ctx->method_ctx_list, iter);
purge = iter;