From c0f3393d4ab923e2eedab0fad88a864e2aae9fc9 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 17 Aug 2009 04:29:47 -0400 Subject: Fix reconnection code Remove redundant reconnection code that was interfeering with the sbus reconnection code. Consolidate include files for sbus relates operations. Make pamsrv code similar to nsssrv code. --- server/responder/pam/pamsrv.c | 100 +++++++++++++++++++++----------------- server/responder/pam/pamsrv.h | 2 +- server/responder/pam/pamsrv_cmd.c | 2 +- server/responder/pam/pamsrv_dp.c | 1 - 4 files changed, 57 insertions(+), 48 deletions(-) (limited to 'server/responder/pam') diff --git a/server/responder/pam/pamsrv.c b/server/responder/pam/pamsrv.c index 6f92eb96..c751528f 100644 --- a/server/responder/pam/pamsrv.c +++ b/server/responder/pam/pamsrv.c @@ -40,7 +40,6 @@ #include "util/btreemap.h" #include "responder/common/responder_packet.h" #include "providers/data_provider.h" -#include "monitor/monitor_sbus.h" #include "monitor/monitor_interfaces.h" #include "sbus/sbus_client.h" #include "responder/pam/pamsrv.h" @@ -78,14 +77,43 @@ static int service_reload(DBusMessage *message, struct sbus_connection *conn) { return monitor_common_pong(message, conn); } +static void pam_shutdown(struct resp_ctx *rctx) +{ + /* TODO: Do clean-up here */ + + /* Nothing left to do but exit() */ + exit(0); +} + +static struct sbus_method pam_dp_methods[] = { + { NULL, NULL } +}; + +struct sbus_interface pam_dp_interface = { + DP_CLI_INTERFACE, + DP_CLI_PATH, + SBUS_DEFAULT_VTABLE, + pam_dp_methods, + NULL +}; + + static void pam_dp_reconnect_init(struct sbus_connection *conn, int status, void *pvt) { struct resp_ctx *rctx = talloc_get_type(pvt, struct resp_ctx); + int ret; /* Did we reconnect successfully? */ if (status == SBUS_RECONNECT_SUCCESS) { DEBUG(1, ("Reconnected to the Data Provider.\n")); - return; + + /* Identify ourselves to the data provider */ + ret = dp_common_send_id(conn, + DP_CLI_FRONTEND, + DATA_PROVIDER_VERSION, + "PAM", ""); + /* all fine */ + if (ret == EOK) return; } /* Handle failure */ @@ -94,20 +122,32 @@ static void pam_dp_reconnect_init(struct sbus_connection *conn, int status, void pam_shutdown(rctx); } -static void pam_shutdown(struct resp_ctx *rctx) -{ - /* TODO: Do clean-up here */ - - /* Nothing left to do but exit() */ - exit(0); -} - - -static int pam_process_init(struct main_context *main_ctx, - struct resp_ctx *rctx) +static int pam_process_init(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct confdb_ctx *cdb) { + struct sss_cmd_table *pam_cmds; + struct resp_ctx *rctx; int ret, max_retries; + pam_cmds = get_pam_cmds(); + ret = sss_process_init(mem_ctx, ev, cdb, + pam_cmds, + SSS_PAM_SOCKET_NAME, + SSS_PAM_PRIV_SOCKET_NAME, + PAM_SRV_CONFIG, + PAM_SBUS_SERVICE_NAME, + PAM_SBUS_SERVICE_VERSION, + &monitor_pam_interface, + DP_CLI_FRONTEND, + DATA_PROVIDER_VERSION, + "PAM", "", + &pam_dp_interface, + &rctx); + if (ret != EOK) { + return ret; + } + /* Enable automatic reconnection to the Data Provider */ /* FIXME: "retries" is too generic, either get it from a global config @@ -125,26 +165,12 @@ static int pam_process_init(struct main_context *main_ctx, return EOK; } -static struct sbus_method pam_dp_methods[] = { - { NULL, NULL } -}; - -struct sbus_interface pam_dp_interface = { - DP_CLI_INTERFACE, - DP_CLI_PATH, - SBUS_DEFAULT_VTABLE, - pam_dp_methods, - NULL -}; - int main(int argc, const char *argv[]) { int opt; poptContext pc; struct main_context *main_ctx; int ret; - struct sss_cmd_table *sss_cmds; - struct resp_ctx *rctx; struct poptOption long_options[] = { POPT_AUTOHELP @@ -175,27 +201,11 @@ int main(int argc, const char *argv[]) DEBUG(2, ("Could not set up to exit when parent process does\n")); } - sss_cmds = register_sss_cmds(); - ret = sss_process_init(main_ctx, + ret = pam_process_init(main_ctx, main_ctx->event_ctx, - main_ctx->confdb_ctx, - sss_cmds, - SSS_PAM_SOCKET_NAME, - SSS_PAM_PRIV_SOCKET_NAME, - PAM_SRV_CONFIG, - PAM_SBUS_SERVICE_NAME, - PAM_SBUS_SERVICE_VERSION, - &monitor_pam_interface, - DP_CLI_FRONTEND, - DATA_PROVIDER_VERSION, - "PAM", "", - &pam_dp_interface, - &rctx); + main_ctx->confdb_ctx); if (ret != EOK) return 3; - ret = pam_process_init(main_ctx, rctx); - if (ret != EOK) return 4; - /* loop on main */ server_loop(main_ctx); diff --git a/server/responder/pam/pamsrv.h b/server/responder/pam/pamsrv.h index 67261157..00b36586 100644 --- a/server/responder/pam/pamsrv.h +++ b/server/responder/pam/pamsrv.h @@ -22,7 +22,7 @@ struct pam_auth_req { void *data; }; -struct sss_cmd_table *register_sss_cmds(void); +struct sss_cmd_table *get_pam_cmds(void); int pam_dp_send_req(struct pam_auth_req *preq, int timeout); diff --git a/server/responder/pam/pamsrv_cmd.c b/server/responder/pam/pamsrv_cmd.c index 39d71bb4..12625509 100644 --- a/server/responder/pam/pamsrv_cmd.c +++ b/server/responder/pam/pamsrv_cmd.c @@ -809,7 +809,7 @@ struct cli_protocol_version *register_cli_protocol_version(void) return pam_cli_protocol_version; } -struct sss_cmd_table *register_sss_cmds(void) +struct sss_cmd_table *get_pam_cmds(void) { static struct sss_cmd_table sss_cmds[] = { {SSS_GET_VERSION, sss_cmd_get_version}, diff --git a/server/responder/pam/pamsrv_dp.c b/server/responder/pam/pamsrv_dp.c index 3696d3d6..7ea2b7e4 100644 --- a/server/responder/pam/pamsrv_dp.c +++ b/server/responder/pam/pamsrv_dp.c @@ -29,7 +29,6 @@ #include "responder/common/responder_packet.h" #include "providers/data_provider.h" #include "sbus/sbus_client.h" -#include "providers/dp_sbus.h" #include "responder/pam/pamsrv.h" static void pam_dp_process_reply(DBusPendingCall *pending, void *ptr) -- cgit