summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2011-05-02 10:04:44 -0400
committerStephen Gallagher <sgallagh@redhat.com>2011-05-06 10:24:36 -0400
commit28a410f423bf9bcdf43ed14cd4c50634753b51f3 (patch)
treede0eaa4cb0dccc5147d070ad8b76d8226c27a38b
parent222072fd4383f742e0a1b1722946d4586fe37de7 (diff)
downloadsssd_unused-28a410f423bf9bcdf43ed14cd4c50634753b51f3.tar.gz
sssd_unused-28a410f423bf9bcdf43ed14cd4c50634753b51f3.tar.xz
sssd_unused-28a410f423bf9bcdf43ed14cd4c50634753b51f3.zip
Create common sss_monitor_init()
This was implemented almost identically for both the responders and the providers. It is easier to maintain as a single routine. This patch also adds the ability to provide a private context to attach to the sbus_connection for later use.
-rw-r--r--src/monitor/monitor_interfaces.h7
-rw-r--r--src/monitor/monitor_sbus.c42
-rw-r--r--src/providers/data_provider_be.c38
-rw-r--r--src/responder/common/responder_common.c37
4 files changed, 55 insertions, 69 deletions
diff --git a/src/monitor/monitor_interfaces.h b/src/monitor/monitor_interfaces.h
index 4830f678..8ec6d89b 100644
--- a/src/monitor/monitor_interfaces.h
+++ b/src/monitor/monitor_interfaces.h
@@ -56,3 +56,10 @@ int monitor_common_res_init(DBusMessage *message,
int monitor_common_rotate_logs(DBusMessage *message,
struct sbus_connection *conn);
+errno_t sss_monitor_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_interface *intf,
+ const char *svc_name,
+ uint16_t svc_version,
+ void *pvt,
+ struct sbus_connection **mon_conn);
diff --git a/src/monitor/monitor_sbus.c b/src/monitor/monitor_sbus.c
index c2106e86..3d0d9d31 100644
--- a/src/monitor/monitor_sbus.c
+++ b/src/monitor/monitor_sbus.c
@@ -27,6 +27,7 @@
#include "util/util.h"
#include "confdb/confdb.h"
#include "sbus/sssd_dbus.h"
+#include "sbus/sbus_client.h"
#include "monitor/monitor_interfaces.h"
int monitor_get_sbus_address(TALLOC_CTX *mem_ctx, char **address)
@@ -191,3 +192,44 @@ int monitor_common_rotate_logs(DBusMessage *message,
return monitor_common_pong(message, conn);
}
+
+errno_t sss_monitor_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_interface *intf,
+ const char *svc_name,
+ uint16_t svc_version,
+ void *pvt,
+ struct sbus_connection **mon_conn)
+{
+ errno_t ret;
+ char *sbus_address;
+ struct sbus_connection *conn;
+
+ /* Set up SBUS connection to the monitor */
+ ret = monitor_get_sbus_address(NULL, &sbus_address);
+ if (ret != EOK) {
+ DEBUG(0, ("Could not locate monitor address.\n"));
+ return ret;
+ }
+
+ ret = sbus_client_init(mem_ctx, ev, sbus_address,
+ intf, &conn,
+ NULL, pvt);
+ if (ret != EOK) {
+ DEBUG(0, ("Failed to connect to monitor services.\n"));
+ talloc_free(sbus_address);
+ return ret;
+ }
+ talloc_free(sbus_address);
+
+ /* Identify ourselves to the monitor */
+ ret = monitor_common_send_id(conn, svc_name, svc_version);
+ if (ret != EOK) {
+ DEBUG(0, ("Failed to identify to the monitor!\n"));
+ return ret;
+ }
+
+ *mon_conn = conn;
+
+ return EOK;
+}
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 01d28558..0fbf809e 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -868,40 +868,6 @@ static int be_srv_init(struct be_ctx *ctx)
return EOK;
}
-/* mon_cli_init
- * sbus channel to the monitor daemon */
-static int mon_cli_init(struct be_ctx *ctx)
-{
- char *sbus_address;
- int ret;
-
- /* Set up SBUS connection to the monitor */
- ret = monitor_get_sbus_address(ctx, &sbus_address);
- if (ret != EOK) {
- DEBUG(0, ("Could not locate monitor address.\n"));
- return ret;
- }
-
- ret = sbus_client_init(ctx, ctx->ev, sbus_address,
- &monitor_be_interface, &ctx->mon_conn,
- NULL, ctx);
- if (ret != EOK) {
- DEBUG(0, ("Failed to connect to monitor services.\n"));
- return ret;
- }
-
- /* Identify ourselves to the monitor */
- ret = monitor_common_send_id(ctx->mon_conn,
- ctx->identity,
- DATA_PROVIDER_VERSION);
- if (ret != EOK) {
- DEBUG(0, ("Failed to identify to the monitor!\n"));
- return ret;
- }
-
- return EOK;
-}
-
static void be_target_access_permit(struct be_req *be_req)
{
struct pam_data *pd = talloc_get_type(be_req->req_data, struct pam_data);
@@ -1138,7 +1104,9 @@ int be_process_init(TALLOC_CTX *mem_ctx,
return ret;
}
- ret = mon_cli_init(ctx);
+ ret = sss_monitor_init(ctx, ctx->ev, &monitor_be_interface,
+ ctx->identity, DATA_PROVIDER_VERSION,
+ ctx, &ctx->mon_conn);
if (ret != EOK) {
DEBUG(0, ("fatal error setting up monitor bus\n"));
return ret;
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 2a4a5d20..4ddb549c 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -362,39 +362,6 @@ static void accept_fd_handler(struct tevent_context *ev,
return;
}
-static int sss_monitor_init(struct resp_ctx *rctx,
- struct sbus_interface *intf,
- const char *svc_name,
- uint16_t svc_version)
-{
- char *sbus_address;
- int ret;
-
- /* Set up SBUS connection to the monitor */
- ret = monitor_get_sbus_address(rctx, &sbus_address);
- if (ret != EOK) {
- DEBUG(0, ("Could not locate monitor address.\n"));
- return ret;
- }
-
- ret = sbus_client_init(rctx, rctx->ev, sbus_address,
- intf, &rctx->mon_conn,
- NULL, NULL);
- if (ret != EOK) {
- DEBUG(0, ("Failed to connect to monitor services.\n"));
- return ret;
- }
-
- /* Identify ourselves to the monitor */
- ret = monitor_common_send_id(rctx->mon_conn, svc_name, svc_version);
- if (ret != EOK) {
- DEBUG(0, ("Failed to identify to the monitor!\n"));
- return ret;
- }
-
- return EOK;
-}
-
static int sss_dp_init(struct resp_ctx *rctx,
struct sbus_interface *intf,
const char *cli_name,
@@ -620,7 +587,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
return ret;
}
- ret = sss_monitor_init(rctx, monitor_intf, svc_name, svc_version);
+ ret = sss_monitor_init(rctx, rctx->ev, monitor_intf,
+ svc_name, svc_version, rctx,
+ &rctx->mon_conn);
if (ret != EOK) {
DEBUG(0, ("fatal error setting up message bus\n"));
return ret;