summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/nss/nsssrv.c2
-rw-r--r--server/providers/data_provider.c2
-rw-r--r--server/providers/data_provider_be.c2
-rw-r--r--server/sbus/sssd_dbus_connection.c6
-rw-r--r--server/util/service_helpers.c5
-rw-r--r--server/util/service_helpers.h3
6 files changed, 13 insertions, 7 deletions
diff --git a/server/nss/nsssrv.c b/server/nss/nsssrv.c
index a3fd6726..4e911254 100644
--- a/server/nss/nsssrv.c
+++ b/server/nss/nsssrv.c
@@ -252,7 +252,7 @@ static int nss_sbus_init(struct nss_ctx *nctx)
/* Set up SBUS connection to the monitor */
ss_ctx = sssd_service_sbus_init(nctx, nctx->ev, nctx->cdb,
- nss_sbus_methods);
+ nss_sbus_methods, NULL);
if (ss_ctx == NULL) {
DEBUG(0, ("Could not initialize D-BUS.\n"));
return ENOMEM;
diff --git a/server/providers/data_provider.c b/server/providers/data_provider.c
index 150c6f6a..40012808 100644
--- a/server/providers/data_provider.c
+++ b/server/providers/data_provider.c
@@ -133,7 +133,7 @@ static int dp_monitor_init(struct dp_ctx *dpctx)
/* Set up SBUS connection to the monitor */
ss_ctx = sssd_service_sbus_init(dpctx, dpctx->ev, dpctx->cdb,
- mon_sbus_methods);
+ mon_sbus_methods, NULL);
if (ss_ctx == NULL) {
DEBUG(0, ("Could not initialize D-BUS.\n"));
return ENOMEM;
diff --git a/server/providers/data_provider_be.c b/server/providers/data_provider_be.c
index cce4446f..982978aa 100644
--- a/server/providers/data_provider_be.c
+++ b/server/providers/data_provider_be.c
@@ -191,7 +191,7 @@ static int mon_cli_init(struct be_ctx *ctx)
/* Set up SBUS connection to the monitor */
ss_ctx = sssd_service_sbus_init(ctx, ctx->ev, ctx->cdb,
- mon_sbus_methods);
+ mon_sbus_methods, NULL);
if (ss_ctx == NULL) {
DEBUG(0, ("Could not initialize D-BUS.\n"));
return ENOMEM;
diff --git a/server/sbus/sssd_dbus_connection.c b/server/sbus/sssd_dbus_connection.c
index e4e12264..79f138ab 100644
--- a/server/sbus/sssd_dbus_connection.c
+++ b/server/sbus/sssd_dbus_connection.c
@@ -533,6 +533,7 @@ int sbus_conn_add_method_ctx(struct sbus_conn_ctx *dct_ctx,
{
DBusObjectPathVTable *connection_vtable;
struct sbus_message_handler_ctx *msg_handler_ctx;
+ TALLOC_CTX *tmp_ctx;
dbus_bool_t dbret;
if (!dct_ctx||!method_ctx) {
@@ -548,7 +549,10 @@ int sbus_conn_add_method_ctx(struct sbus_conn_ctx *dct_ctx,
}
DLIST_ADD(dct_ctx->method_ctx_list, method_ctx);
- talloc_reference(dct_ctx, method_ctx);
+ if((tmp_ctx = talloc_reference(dct_ctx, method_ctx))!=method_ctx) {
+ /* talloc_reference only fails on insufficient memory */
+ return ENOMEM;
+ }
/* Set up the vtable for the object path */
connection_vtable = talloc_zero(dct_ctx, DBusObjectPathVTable);
diff --git a/server/util/service_helpers.c b/server/util/service_helpers.c
index 1630946f..0c5661b2 100644
--- a/server/util/service_helpers.c
+++ b/server/util/service_helpers.c
@@ -33,7 +33,8 @@
struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx,
struct event_context *ev,
struct confdb_ctx *cdb,
- struct sbus_method *methods)
+ struct sbus_method *methods,
+ sbus_conn_destructor_fn destructor)
{
struct service_sbus_ctx *ss_ctx;
struct sbus_method_ctx *sm_ctx;
@@ -61,7 +62,7 @@ struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx,
ret = sbus_new_connection(ss_ctx, ss_ctx->ev,
sbus_address, &ss_ctx->scon_ctx,
- NULL);
+ destructor);
if (ret != EOK) goto error;
conn = sbus_get_connection(ss_ctx->scon_ctx);
diff --git a/server/util/service_helpers.h b/server/util/service_helpers.h
index f2701d51..05777ea2 100644
--- a/server/util/service_helpers.h
+++ b/server/util/service_helpers.h
@@ -33,6 +33,7 @@ struct service_sbus_ctx {
struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx,
struct event_context *ev,
struct confdb_ctx *cdb,
- struct sbus_method *methods);
+ struct sbus_method *methods,
+ sbus_conn_destructor_fn destructor);
#endif /*SERVICE_HELPERS_H_*/