diff options
Diffstat (limited to 'src/responder')
-rw-r--r-- | src/responder/autofs/autofssrv.c | 23 | ||||
-rw-r--r-- | src/responder/common/responder.h | 18 | ||||
-rw-r--r-- | src/responder/common/responder_common.c | 27 | ||||
-rw-r--r-- | src/responder/nss/nsssrv.c | 41 | ||||
-rw-r--r-- | src/responder/pac/pacsrv.c | 17 | ||||
-rw-r--r-- | src/responder/pam/pamsrv.c | 17 | ||||
-rw-r--r-- | src/responder/ssh/sshsrv.c | 16 | ||||
-rw-r--r-- | src/responder/sudo/sudosrv.c | 16 |
8 files changed, 56 insertions, 119 deletions
diff --git a/src/responder/autofs/autofssrv.c b/src/responder/autofs/autofssrv.c index b447a0634..9b5aa02dd 100644 --- a/src/responder/autofs/autofssrv.c +++ b/src/responder/autofs/autofssrv.c @@ -29,7 +29,7 @@ #include "providers/data_provider.h" #include "responder/autofs/autofs_private.h" -static int autofs_clean_hash_table(struct sbus_request *dbus_req); +static int autofs_clean_hash_table(struct sbus_request *dbus_req, void *data); struct mon_cli_iface monitor_autofs_methods = { { &mon_cli_iface_meta, 0 }, @@ -43,12 +43,6 @@ struct mon_cli_iface monitor_autofs_methods = { .clearEnumCache = autofs_clean_hash_table, }; -struct sbus_interface monitor_autofs_interface = { - MONITOR_PATH, - &monitor_autofs_methods.vtable, - NULL -}; - static struct data_provider_iface autofs_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -60,12 +54,6 @@ static struct data_provider_iface autofs_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface autofs_dp_interface = { - DP_PATH, - &autofs_dp_methods.vtable, - NULL -}; - static errno_t autofs_get_config(struct autofs_ctx *actx, struct confdb_ctx *cdb) @@ -111,10 +99,9 @@ autofs_dp_reconnect_init(struct sbus_connection *conn, be_conn->domain->name); } -static int autofs_clean_hash_table(struct sbus_request *dbus_req) +static int autofs_clean_hash_table(struct sbus_request *dbus_req, void *data) { - 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); struct autofs_ctx *actx = talloc_get_type(rctx->pvt_ctx, struct autofs_ctx); errno_t ret; @@ -148,9 +135,9 @@ autofs_process_init(TALLOC_CTX *mem_ctx, CONFDB_AUTOFS_CONF_ENTRY, SSS_AUTOFS_SBUS_SERVICE_NAME, SSS_AUTOFS_SBUS_SERVICE_VERSION, - &monitor_autofs_interface, + &monitor_autofs_methods, "autofs", - &autofs_dp_interface, + &autofs_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h index 3cf801516..479cd4c5e 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 209bf5b01..9abda18d0 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; diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c index 05bcdda07..ca4fbfd02 100644 --- a/src/responder/nss/nsssrv.c +++ b/src/responder/nss/nsssrv.c @@ -55,8 +55,8 @@ #define SHELL_REALLOC_INCREMENT 5 #define SHELL_REALLOC_MAX 50 -static int nss_clear_memcache(struct sbus_request *dbus_req); -static int nss_clear_netgroup_hash_table(struct sbus_request *dbus_req); +static int nss_clear_memcache(struct sbus_request *dbus_req, void *data); +static int nss_clear_netgroup_hash_table(struct sbus_request *dbus_req, void *data); struct mon_cli_iface monitor_nss_methods = { { &mon_cli_iface_meta, 0 }, @@ -70,18 +70,11 @@ struct mon_cli_iface monitor_nss_methods = { .clearEnumCache = nss_clear_netgroup_hash_table }; -struct sbus_interface monitor_nss_interface = { - MONITOR_PATH, - &monitor_nss_methods.vtable, - NULL, -}; - -static int nss_clear_memcache(struct sbus_request *dbus_req) +static int nss_clear_memcache(struct sbus_request *dbus_req, void *data) { errno_t ret; int memcache_timeout; - 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); struct nss_ctx *nctx = (struct nss_ctx*) rctx->pvt_ctx; ret = unlink(SSS_NSS_MCACHE_DIR"/"CLEAR_MC_FLAG); @@ -134,11 +127,10 @@ done: return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); } -static int nss_clear_netgroup_hash_table(struct sbus_request *dbus_req) +static int nss_clear_netgroup_hash_table(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); struct nss_ctx *nctx = (struct nss_ctx*) rctx->pvt_ctx; ret = nss_orphan_netgroups(nctx); @@ -304,10 +296,9 @@ done: return ret; } -static int nss_update_memcache(struct sbus_request *dbus_req) +static int nss_update_memcache(struct sbus_request *dbus_req, void *data) { - 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); struct nss_ctx *nctx = talloc_get_type(rctx->pvt_ctx, struct nss_ctx); nss_update_pw_memcache(nctx); @@ -316,10 +307,9 @@ static int nss_update_memcache(struct sbus_request *dbus_req) return EOK; } -static int nss_memcache_initgr_check(struct sbus_request *dbus_req) +static int nss_memcache_initgr_check(struct sbus_request *dbus_req, void *data) { - 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); struct nss_ctx *nctx = talloc_get_type(rctx->pvt_ctx, struct nss_ctx); DBusError dbus_error; dbus_bool_t dbret; @@ -359,13 +349,6 @@ static struct data_provider_rev_iface nss_dp_methods = { .initgrCheck = nss_memcache_initgr_check }; -struct sbus_interface nss_dp_interface = { - DP_PATH, - &nss_dp_methods.vtable, - NULL -}; - - static void nss_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) { @@ -417,8 +400,8 @@ int nss_process_init(TALLOC_CTX *mem_ctx, CONFDB_NSS_CONF_ENTRY, NSS_SBUS_SERVICE_NAME, NSS_SBUS_SERVICE_VERSION, - &monitor_nss_interface, - "NSS", &nss_dp_interface, + &monitor_nss_methods, + "NSS", &nss_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); diff --git a/src/responder/pac/pacsrv.c b/src/responder/pac/pacsrv.c index 04a6200e0..bff15058a 100644 --- a/src/responder/pac/pacsrv.c +++ b/src/responder/pac/pacsrv.c @@ -60,12 +60,6 @@ struct mon_cli_iface monitor_pac_methods = { .clearEnumCache = NULL, }; -struct sbus_interface monitor_pac_interface = { - MONITOR_PATH, - &monitor_pac_methods.vtable, - NULL -}; - static struct data_provider_iface pac_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -77,13 +71,6 @@ static struct data_provider_iface pac_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface pac_dp_interface = { - DP_PATH, - &pac_dp_methods.vtable, - NULL -}; - - /* TODO: check if this can be made generic for all responders */ static void pac_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) @@ -135,8 +122,8 @@ int pac_process_init(TALLOC_CTX *mem_ctx, CONFDB_PAC_CONF_ENTRY, PAC_SBUS_SERVICE_NAME, PAC_SBUS_SERVICE_VERSION, - &monitor_pac_interface, - "PAC", &pac_dp_interface, + &monitor_pac_methods, + "PAC", &pac_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); diff --git a/src/responder/pam/pamsrv.c b/src/responder/pam/pamsrv.c index 1fc9f6282..2823f01a0 100644 --- a/src/responder/pam/pamsrv.c +++ b/src/responder/pam/pamsrv.c @@ -59,12 +59,6 @@ struct mon_cli_iface monitor_pam_methods = { .clearEnumCache = NULL, }; -struct sbus_interface monitor_pam_interface = { - MONITOR_PATH, - &monitor_pam_methods.vtable, - NULL -}; - static struct data_provider_iface pam_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -76,13 +70,6 @@ static struct data_provider_iface pam_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface pam_dp_interface = { - DP_PATH, - &pam_dp_methods.vtable, - NULL -}; - - static void pam_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) { struct be_conn *be_conn = talloc_get_type(pvt, struct be_conn); @@ -131,8 +118,8 @@ static int pam_process_init(TALLOC_CTX *mem_ctx, CONFDB_PAM_CONF_ENTRY, SSS_PAM_SBUS_SERVICE_NAME, SSS_PAM_SBUS_SERVICE_VERSION, - &monitor_pam_interface, - "PAM", &pam_dp_interface, + &monitor_pam_methods, + "PAM", &pam_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); diff --git a/src/responder/ssh/sshsrv.c b/src/responder/ssh/sshsrv.c index fb0738f6c..30142ae0d 100644 --- a/src/responder/ssh/sshsrv.c +++ b/src/responder/ssh/sshsrv.c @@ -40,12 +40,6 @@ struct mon_cli_iface monitor_ssh_methods = { .clearEnumCache = NULL, }; -struct sbus_interface monitor_ssh_interface = { - MONITOR_PATH, - &monitor_ssh_methods.vtable, - NULL -}; - static struct data_provider_iface ssh_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -57,12 +51,6 @@ static struct data_provider_iface ssh_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface ssh_dp_interface = { - DP_PATH, - &ssh_dp_methods.vtable, - NULL -}; - static void ssh_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) { @@ -107,9 +95,9 @@ int ssh_process_init(TALLOC_CTX *mem_ctx, CONFDB_SSH_CONF_ENTRY, SSS_SSH_SBUS_SERVICE_NAME, SSS_SSH_SBUS_SERVICE_VERSION, - &monitor_ssh_interface, + &monitor_ssh_methods, "SSH", - &ssh_dp_interface, + &ssh_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); diff --git a/src/responder/sudo/sudosrv.c b/src/responder/sudo/sudosrv.c index 1ad260b35..a70d944a9 100644 --- a/src/responder/sudo/sudosrv.c +++ b/src/responder/sudo/sudosrv.c @@ -40,12 +40,6 @@ struct mon_cli_iface monitor_sudo_methods = { .clearEnumCache = NULL, }; -struct sbus_interface monitor_sudo_interface = { - MONITOR_PATH, - &monitor_sudo_methods.vtable, - NULL -}; - static struct data_provider_iface sudo_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -57,12 +51,6 @@ static struct data_provider_iface sudo_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface sudo_dp_interface = { - DP_PATH, - &sudo_dp_methods.vtable, - NULL -}; - static void sudo_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) @@ -108,9 +96,9 @@ int sudo_process_init(TALLOC_CTX *mem_ctx, CONFDB_SUDO_CONF_ENTRY, SSS_SUDO_SBUS_SERVICE_NAME, SSS_SUDO_SBUS_SERVICE_VERSION, - &monitor_sudo_interface, + &monitor_sudo_methods, "SUDO", - &sudo_dp_interface, + &sudo_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); |