diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2008-11-20 15:11:27 -0500 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2008-11-20 16:22:21 -0500 |
commit | 2671d14d8068f8f0ee43cab529f10163a4b7dee1 (patch) | |
tree | 9eb2ba6a6199095d321455b245fd2fdf2cbf7643 /server/util/service_helpers.c | |
parent | ed52202447ff9e80daa64864df271988bc5332ae (diff) | |
download | sssd-2671d14d8068f8f0ee43cab529f10163a4b7dee1.tar.gz sssd-2671d14d8068f8f0ee43cab529f10163a4b7dee1.tar.bz2 sssd-2671d14d8068f8f0ee43cab529f10163a4b7dee1.zip |
Created a helper function sssd_service_sbus_init() to simplify creating the initial connection to the monitor service within the child services. It will create the D-BUS connection to the monitor and configure the service to handle the mandatory getIdentity and ping methods.
Diffstat (limited to 'server/util/service_helpers.c')
-rw-r--r-- | server/util/service_helpers.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/server/util/service_helpers.c b/server/util/service_helpers.c new file mode 100644 index 00000000..9f16d9b1 --- /dev/null +++ b/server/util/service_helpers.c @@ -0,0 +1,99 @@ +/* + SSSD + + Service monitor + + Copyright (C) Stephen Gallagher 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "util/util.h" +#include "talloc.h" +#include "events.h" +#include "sbus/sssd_dbus.h" +#include "confdb/confdb.h" +#include "service_helpers.h" +#include "sbus_interfaces.h" + +/* + * Set up an SBUS connection to the monitor + */ +struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx, + struct event_context *ev, + struct confdb_ctx *cdb, + sbus_msg_handler_fn get_identity, + sbus_msg_handler_fn ping) +{ + struct service_sbus_ctx *ss_ctx; + struct sbus_method_ctx *sm_ctx; + TALLOC_CTX *ctx; + char *sbus_address; + DBusConnection *conn; + int ret; + + ctx = talloc_new(mem_ctx); + if (ctx == NULL) goto error; + + ss_ctx = talloc_zero(ctx, struct service_sbus_ctx); + if (ss_ctx == NULL) return NULL; + + ret = confdb_get_string(cdb, ctx, + "config/services/monitor", "sbusAddress", + DEFAULT_SBUS_ADDRESS, &sbus_address); + if (ret != EOK) goto error; + ss_ctx->ev = ev; + + ret = sbus_new_connection(ss_ctx, ss_ctx->ev, + sbus_address, &ss_ctx->scon_ctx, + NULL); + if (ret != EOK) goto error; + + conn = sbus_get_connection(ss_ctx->scon_ctx); + + /* set up handler for service methods */ + sm_ctx = talloc_zero(ss_ctx, struct sbus_method_ctx); + if (sm_ctx == NULL) goto error; + + sm_ctx->interface = talloc_strdup(sm_ctx, SERVICE_INTERFACE); + sm_ctx->path = talloc_strdup(sm_ctx, SERVICE_PATH); + if (!sm_ctx->interface || !sm_ctx->path) goto error; + + /* Set up required monitor methods */ + sm_ctx->methods = talloc_array(sm_ctx, struct sbus_method, 3); + if (sm_ctx->methods == NULL) goto error; + + /* Handle getIdentity */ + sm_ctx->methods[0].method = SERVICE_METHOD_IDENTITY; + sm_ctx->methods[0].fn = get_identity; + + /* Handle ping */ + sm_ctx->methods[1].method = SERVICE_METHOD_PING; + sm_ctx->methods[1].fn = ping; + + /* Terminate the list */ + sm_ctx->methods[2].method = NULL; + sm_ctx->methods[2].fn = NULL; + + sm_ctx->message_handler = sbus_message_handler; + sbus_conn_add_method_ctx(ss_ctx->scon_ctx, sm_ctx); + + talloc_steal(mem_ctx,ss_ctx); + talloc_free(ctx); + return ss_ctx; + +error: + talloc_free(ctx); + return NULL; +} |