summaryrefslogtreecommitdiffstats
path: root/server/responder/common
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-08-05 14:11:12 -0400
committerStephen Gallagher <sgallagh@redhat.com>2009-08-10 09:42:20 -0400
commit11c621b5ee1a0cdc27610f8b172017764acc285e (patch)
tree181c9079440367711c66d7281fc0aecb458fee77 /server/responder/common
parentf1e4471551aa74015579bff0b64735cc9b085b74 (diff)
downloadsssd-11c621b5ee1a0cdc27610f8b172017764acc285e.tar.gz
sssd-11c621b5ee1a0cdc27610f8b172017764acc285e.tar.xz
sssd-11c621b5ee1a0cdc27610f8b172017764acc285e.zip
Simplify interfaces initialization
Make as much as possible static, and remove use of talloc_reference and allocation/deallocation of memory when not necessary. Fix also responder use of rctx->conn, was mistakenly used for both monitor and dp connections.
Diffstat (limited to 'server/responder/common')
-rw-r--r--server/responder/common/responder.h12
-rw-r--r--server/responder/common/responder_common.c30
-rw-r--r--server/responder/common/responder_dp.c24
3 files changed, 19 insertions, 47 deletions
diff --git a/server/responder/common/responder.h b/server/responder/common/responder.h
index 5bde42acf..0f0908317 100644
--- a/server/responder/common/responder.h
+++ b/server/responder/common/responder.h
@@ -64,16 +64,14 @@ struct resp_ctx {
const char *sock_name;
const char *priv_sock_name;
- struct sbus_connection *conn;
- struct sbus_method_ctx *sm_ctx;
+ struct sbus_connection *mon_conn;
+ struct sbus_connection *dp_conn;
struct sss_domain_info *domains;
- struct sbus_method *sss_sbus_methods;
struct sss_cmd_table *sss_cmds;
const char *sss_pipe_name;
const char *confdb_service_path;
- struct sbus_method *dp_methods;
struct sss_names_ctx *names;
@@ -100,12 +98,12 @@ struct sss_cmd_table {
int sss_process_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct confdb_ctx *cdb,
- struct sbus_method sss_sbus_methods[],
struct sss_cmd_table sss_cmds[],
const char *sss_pipe_name,
const char *sss_priv_pipe_name,
const char *confdb_service_path,
- struct sbus_method dp_methods[],
+ struct sbus_interface *dp_intf,
+ struct sbus_interface *monitor_intf,
struct resp_ctx **responder_ctx);
int sss_parse_name(TALLOC_CTX *memctx,
@@ -119,7 +117,7 @@ int sss_cmd_get_version(struct cli_ctx *cctx);
struct cli_protocol_version *register_cli_protocol_version(void);
/* responder_dp.c */
-int sss_dp_init(struct resp_ctx *rctx, struct sbus_method dp_methods[]);
+int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *intf);
#define NSS_DP_USER 1
#define NSS_DP_GROUP 2
diff --git a/server/responder/common/responder_common.c b/server/responder/common/responder_common.c
index c8e5d8181..f3df7c65c 100644
--- a/server/responder/common/responder_common.c
+++ b/server/responder/common/responder_common.c
@@ -285,7 +285,8 @@ static void accept_fd_handler(struct tevent_context *ev,
return;
}
-static int sss_sbus_init(struct resp_ctx *rctx)
+static int sss_monitor_init(struct resp_ctx *rctx,
+ struct sbus_interface *intf)
{
char *sbus_address;
int ret;
@@ -297,21 +298,8 @@ static int sss_sbus_init(struct resp_ctx *rctx)
return ret;
}
- ret = monitor_init_sbus_methods(rctx, rctx->sss_sbus_methods,
- &rctx->sm_ctx);
- if (ret != EOK) {
- DEBUG(0, ("Could not initialize SBUS methods.\n"));
- return ret;
- }
-
- /* FIXME: remove this */
- if (talloc_reference(rctx, rctx->sm_ctx) == NULL) {
- DEBUG(0, ("Failed to take memory reference\n"));
- return ENOMEM;
- }
-
ret = sbus_client_init(rctx, rctx->ev, sbus_address,
- rctx->sm_ctx, &rctx->conn,
+ intf, &rctx->mon_conn,
NULL, NULL);
if (ret != EOK) {
DEBUG(0, ("Failed to connect to monitor services.\n"));
@@ -455,12 +443,12 @@ failed:
int sss_process_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct confdb_ctx *cdb,
- struct sbus_method sss_sbus_methods[],
struct sss_cmd_table sss_cmds[],
const char *sss_pipe_name,
const char *sss_priv_pipe_name,
const char *confdb_service_path,
- struct sbus_method dp_methods[],
+ struct sbus_interface *dp_intf,
+ struct sbus_interface *monitor_intf,
struct resp_ctx **responder_ctx)
{
struct resp_ctx *rctx;
@@ -473,12 +461,10 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
}
rctx->ev = ev;
rctx->cdb = cdb;
- rctx->sss_sbus_methods = sss_sbus_methods;
rctx->sss_cmds = sss_cmds;
rctx->sock_name = sss_pipe_name;
rctx->priv_sock_name = sss_priv_pipe_name;
rctx->confdb_service_path = confdb_service_path;
- rctx->dp_methods = dp_methods;
ret = confdb_get_domains(rctx->cdb, rctx, &rctx->domains);
if (ret != EOK) {
@@ -486,18 +472,18 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
return ret;
}
- ret = sss_sbus_init(rctx);
+ ret = sss_monitor_init(rctx, monitor_intf);
if (ret != EOK) {
DEBUG(0, ("fatal error setting up message bus\n"));
return ret;
}
- ret = sss_dp_init(rctx, rctx->dp_methods);
+ ret = sss_dp_init(rctx, dp_intf);
if (ret != EOK) {
DEBUG(0, ("fatal error setting up backend connector\n"));
return ret;
}
- else if (!rctx->conn) {
+ else if (!rctx->dp_conn) {
DEBUG(0, ("Data Provider is not yet available. Retrying.\n"));
return EIO;
}
diff --git a/server/responder/common/responder_dp.c b/server/responder/common/responder_dp.c
index 547cb2729..dc810fd99 100644
--- a/server/responder/common/responder_dp.c
+++ b/server/responder/common/responder_dp.c
@@ -10,7 +10,7 @@
struct sss_dp_pvt_ctx {
struct resp_ctx *rctx;
- struct sbus_method *methods;
+ struct sbus_interface *intf;
time_t last_retry;
int retries;
};
@@ -49,20 +49,8 @@ static void sss_dp_conn_reconnect(struct sss_dp_pvt_ctx *pvt)
return;
}
- ret = dp_init_sbus_methods(rctx, pvt->methods, &rctx->sm_ctx);
- if (ret != EOK) {
- DEBUG(0, ("Could not initialize SBUS methods.\n"));
- return;
- }
-
- /* FIXME: remove this */
- if (talloc_reference(rctx, rctx->sm_ctx) == NULL) {
- DEBUG(0, ("Failed to take memory reference\n"));
- return;
- }
-
ret = sbus_client_init(rctx, rctx->ev, sbus_address,
- rctx->sm_ctx, &rctx->conn,
+ pvt->intf, &rctx->dp_conn,
sss_dp_conn_destructor, pvt);
if (ret != EOK) {
DEBUG(4, ("Failed to reconnect [%d(%s)]!\n", ret, strerror(ret)));
@@ -109,7 +97,7 @@ int sss_dp_conn_destructor(void *data)
return 0;
}
-int sss_dp_init(struct resp_ctx *rctx, struct sbus_method *dp_methods)
+int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *dp_intf)
{
struct sss_dp_pvt_ctx *pvt;
@@ -117,7 +105,7 @@ int sss_dp_init(struct resp_ctx *rctx, struct sbus_method *dp_methods)
if (!pvt) return ENOMEM;
pvt->rctx = rctx;
- pvt->methods = dp_methods;
+ pvt->intf = dp_intf;
sss_dp_conn_reconnect(pvt);
@@ -243,12 +231,12 @@ int nss_dp_send_acct_req(struct resp_ctx *rctx, TALLOC_CTX *memctx,
* in some pathological cases it may happen that nss starts up before
* dp connection code is actually able to establish a connection.
*/
- if (!rctx->conn) {
+ if (!rctx->dp_conn) {
DEBUG(1, ("The Data Provider connection is not available yet!"
" This maybe a bug, it shouldn't happen!\n"));
return EIO;
}
- dbus_conn = sbus_get_connection(rctx->conn);
+ dbus_conn = sbus_get_connection(rctx->dp_conn);
/* create the message */
msg = dbus_message_new_method_call(NULL,