diff options
Diffstat (limited to 'src/providers/proxy/proxy_init.c')
-rw-r--r-- | src/providers/proxy/proxy_init.c | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/src/providers/proxy/proxy_init.c b/src/providers/proxy/proxy_init.c index 60ae4a950..70fe337cd 100644 --- a/src/providers/proxy/proxy_init.c +++ b/src/providers/proxy/proxy_init.c @@ -27,8 +27,7 @@ #include "util/sss_format.h" #include "providers/proxy/proxy.h" -static int client_registration(DBusMessage *message, - struct sbus_connection *conn); +static int client_registration(struct sbus_request *dbus_req); static struct data_provider_iface proxy_methods = { { &data_provider_iface_meta, 0 }, @@ -395,12 +394,11 @@ static void init_timeout(struct tevent_context *ev, */ } -static int client_registration(DBusMessage *message, - struct sbus_connection *conn) +static int client_registration(struct sbus_request *dbus_req) { dbus_uint16_t version = DATA_PROVIDER_VERSION; + struct sbus_connection *conn; struct proxy_client *proxy_cli; - DBusMessage *reply; DBusError dbus_error; dbus_uint16_t cli_ver; uint32_t cli_id; @@ -412,7 +410,9 @@ static int client_registration(DBusMessage *message, struct tevent_req *req; struct proxy_child_ctx *child_ctx; struct pc_init_ctx *init_ctx; + int ret; + conn = dbus_req->conn; data = sbus_conn_get_private_data(conn); proxy_cli = talloc_get_type(data, struct proxy_client); if (!proxy_cli) { @@ -427,7 +427,7 @@ static int client_registration(DBusMessage *message, dbus_error_init(&dbus_error); - dbret = dbus_message_get_args(message, &dbus_error, + dbret = dbus_message_get_args(dbus_req->message, &dbus_error, DBUS_TYPE_UINT16, &cli_ver, DBUS_TYPE_UINT32, &cli_id, DBUS_TYPE_INVALID); @@ -453,31 +453,19 @@ static int client_registration(DBusMessage *message, } /* reply that all is ok */ - reply = dbus_message_new_method_return(message); - if (!reply) { - DEBUG(SSSDBG_FATAL_FAILURE, "Dbus Out of memory!\n"); - return ENOMEM; - } - - dbret = dbus_message_append_args(reply, - DBUS_TYPE_UINT16, &version, - DBUS_TYPE_INVALID); - if (!dbret) { - DEBUG(SSSDBG_FATAL_FAILURE, "Failed to build dbus reply\n"); - dbus_message_unref(reply); + ret = sbus_request_return_and_finish(dbus_req, + DBUS_TYPE_UINT16, &version, + DBUS_TYPE_INVALID); + if (ret != EOK) { sbus_disconnect(conn); - return EIO; + return ret; } - /* send reply back */ - sbus_conn_send_reply(conn, reply); - dbus_message_unref(reply); - hret = hash_lookup(proxy_cli->proxy_auth_ctx->request_table, &key, &value); if (hret != HASH_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, "Hash error [%d][%s]\n", hret, hash_error_string(hret)); - sbus_disconnect(conn); + sbus_disconnect(dbus_req->conn); } /* Signal that the child is up and ready to receive the request */ @@ -496,7 +484,7 @@ static int client_registration(DBusMessage *message, } init_ctx = tevent_req_data(child_ctx->init_req, struct pc_init_ctx); - init_ctx->conn = conn; + init_ctx->conn = dbus_req->conn; tevent_req_done(child_ctx->init_req); child_ctx->init_req = NULL; |