summaryrefslogtreecommitdiffstats
path: root/server/responder/pam/pamsrv.c
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-08-17 04:29:47 -0400
committerStephen Gallagher <sgallagh@redhat.com>2009-08-17 09:39:01 -0400
commitc0f3393d4ab923e2eedab0fad88a864e2aae9fc9 (patch)
tree1a31b6e55879396897441545ac5d0278e7371c49 /server/responder/pam/pamsrv.c
parent7385f34a3c8c68cf0f87d64e55e0ca44f46fdeaa (diff)
downloadsssd-c0f3393d4ab923e2eedab0fad88a864e2aae9fc9.tar.gz
sssd-c0f3393d4ab923e2eedab0fad88a864e2aae9fc9.tar.xz
sssd-c0f3393d4ab923e2eedab0fad88a864e2aae9fc9.zip
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.
Diffstat (limited to 'server/responder/pam/pamsrv.c')
-rw-r--r--server/responder/pam/pamsrv.c100
1 files changed, 55 insertions, 45 deletions
diff --git a/server/responder/pam/pamsrv.c b/server/responder/pam/pamsrv.c
index 6f92eb96f..c751528f7 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);