summaryrefslogtreecommitdiffstats
path: root/src/responder/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/responder/common')
-rw-r--r--src/responder/common/responder.h18
-rw-r--r--src/responder/common/responder_common.c27
2 files changed, 31 insertions, 14 deletions
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index 3cf80151..479cd4c5 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -70,7 +70,6 @@ struct be_conn {
struct sss_domain_info *domain;
char *sbus_address;
- struct sbus_interface *intf;
struct sbus_connection *conn;
};
@@ -144,7 +143,16 @@ struct sss_cmd_table {
int (*fn)(struct cli_ctx *cctx);
};
-/* responder_common.c */
+/* from generated code */
+struct mon_cli_iface;
+
+/*
+ * responder_common.c
+ *
+ * NOTE: We would like to use more strong typing for the @dp_vtable argument
+ * but can't since it accepts either a struct data_provider_iface
+ * or struct data_provider_rev_iface. So pass the base struct: sbus_vtable
+ */
int sss_process_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct confdb_ctx *cdb,
@@ -154,9 +162,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
const char *confdb_service_path,
const char *svc_name,
uint16_t svc_version,
- struct sbus_interface *monitor_intf,
+ struct mon_cli_iface *monitor_intf,
const char *cli_name,
- struct sbus_interface *dp_intf,
+ struct sbus_vtable *dp_intf,
struct resp_ctx **responder_ctx);
int sss_dp_get_domain_conn(struct resp_ctx *rctx, const char *domain,
@@ -207,7 +215,7 @@ struct dp_callback_ctx {
void handle_requests_after_reconnect(struct resp_ctx *rctx);
-int responder_logrotate(struct sbus_request *dbus_req);
+int responder_logrotate(struct sbus_request *dbus_req, void *data);
/* Each responder-specific request must create a constructor
* function that creates a DBus Message that would be sent to
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 209bf5b0..9abda18d 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -535,10 +535,11 @@ static void idle_handler(struct tevent_context *ev,
}
static int sss_dp_init(struct resp_ctx *rctx,
- struct sbus_interface *intf,
+ struct sbus_vtable *dp_intf,
const char *cli_name,
struct sss_domain_info *domain)
{
+ struct sbus_interface *intf;
struct be_conn *be_conn;
int ret;
@@ -547,7 +548,6 @@ static int sss_dp_init(struct resp_ctx *rctx,
be_conn->cli_name = cli_name;
be_conn->domain = domain;
- be_conn->intf = intf;
be_conn->rctx = rctx;
/* Set up SBUS connection to the monitor */
@@ -558,13 +558,23 @@ static int sss_dp_init(struct resp_ctx *rctx,
}
ret = sbus_client_init(rctx, rctx->ev,
be_conn->sbus_address,
- intf, &be_conn->conn,
- NULL, rctx);
+ &be_conn->conn);
if (ret != EOK) {
DEBUG(SSSDBG_FATAL_FAILURE, "Failed to connect to monitor services.\n");
return ret;
}
+ intf = sbus_new_interface(rctx, DP_PATH, dp_intf, rctx);
+ if (!intf) {
+ ret = ENOMEM;
+ } else {
+ ret = sbus_conn_add_interface(be_conn->conn, intf);
+ }
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE, "Failed to export data provider.\n");
+ return ret;
+ }
+
DLIST_ADD_END(rctx->be_conns, be_conn, struct be_conn *);
/* Identify ourselves to the DP */
@@ -763,9 +773,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
const char *confdb_service_path,
const char *svc_name,
uint16_t svc_version,
- struct sbus_interface *monitor_intf,
+ struct mon_cli_iface *monitor_intf,
const char *cli_name,
- struct sbus_interface *dp_intf,
+ struct sbus_vtable *dp_intf,
struct resp_ctx **responder_ctx)
{
struct resp_ctx *rctx;
@@ -990,11 +1000,10 @@ done:
return ret;
}
-int responder_logrotate(struct sbus_request *dbus_req)
+int responder_logrotate(struct sbus_request *dbus_req, void *data)
{
errno_t ret;
- struct resp_ctx *rctx = talloc_get_type(sbus_conn_get_private_data(dbus_req->conn),
- struct resp_ctx);
+ struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx);
ret = monitor_common_rotate_logs(rctx->cdb, rctx->confdb_service_path);
if (ret != EOK) return ret;