diff options
author | Sumit Bose <sbose@redhat.com> | 2009-03-06 13:33:40 +0100 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2009-03-10 09:41:15 -0400 |
commit | b8919e480b4ad25fa03fa3961043e6dcfa28991b (patch) | |
tree | c0fd30ee68503326a3a9ab331b564c5dc8756c70 /server/responder/pam/pamsrv_dp.c | |
parent | d0e33c2a035c4c877b9f624b6999899666cb6385 (diff) | |
download | sssd-b8919e480b4ad25fa03fa3961043e6dcfa28991b.tar.gz sssd-b8919e480b4ad25fa03fa3961043e6dcfa28991b.tar.bz2 sssd-b8919e480b4ad25fa03fa3961043e6dcfa28991b.zip |
added generic PAM return messages and a false login delay
Diffstat (limited to 'server/responder/pam/pamsrv_dp.c')
-rw-r--r-- | server/responder/pam/pamsrv_dp.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/server/responder/pam/pamsrv_dp.c b/server/responder/pam/pamsrv_dp.c index 5abe0e5d..a679acd3 100644 --- a/server/responder/pam/pamsrv_dp.c +++ b/server/responder/pam/pamsrv_dp.c @@ -34,10 +34,12 @@ struct pam_reply_ctx { struct cli_ctx *cctx; + struct pam_data *pd; pam_dp_callback_t callback; }; -static void pam_process_dp_reply(DBusPendingCall *pending, void *ptr) { +static void pam_process_dp_reply(DBusPendingCall *pending, void *ptr) +{ DBusError dbus_error; DBusMessage* msg; int ret; @@ -54,7 +56,7 @@ static void pam_process_dp_reply(DBusPendingCall *pending, void *ptr) { msg = dbus_pending_call_steal_reply(pending); if (msg == NULL) { DEBUG(0, ("Severe error. A reply callback was called but no reply was received and no timeout occurred\n")); - pam_status = PAM_SYSTEM_ERR; + rctx->pd->pam_status = PAM_SYSTEM_ERR; goto done; } @@ -68,11 +70,13 @@ static void pam_process_dp_reply(DBusPendingCall *pending, void *ptr) { DBUS_TYPE_INVALID); if (!ret) { DEBUG(0, ("Failed to parse reply.\n")); - pam_status = PAM_SYSTEM_ERR; - domain = ""; + rctx->pd->pam_status = PAM_SYSTEM_ERR; + domain = NULL; goto done; } DEBUG(4, ("received: [%d][%s]\n", pam_status, domain)); + rctx->pd->pam_status = pam_status; + rctx->pd->domain = talloc_strdup(rctx->cctx, domain); break; case DBUS_MESSAGE_TYPE_ERROR: DEBUG(0, ("Reply error.\n")); @@ -87,12 +91,15 @@ static void pam_process_dp_reply(DBusPendingCall *pending, void *ptr) { done: dbus_pending_call_unref(pending); dbus_message_unref(msg); - rctx->callback(rctx->cctx, pam_status, domain); + rctx->callback(rctx->pd); + + talloc_free(rctx); } int pam_dp_send_req(struct cli_ctx *cctx, pam_dp_callback_t callback, - int timeout, struct pam_data *pd) { + int timeout, struct pam_data *pd) +{ DBusMessage *msg; DBusPendingCall *pending_reply; DBusConnection *conn; @@ -105,8 +112,9 @@ int pam_dp_send_req(struct cli_ctx *cctx, DEBUG(0,("Out of memory?!\n")); return ENOMEM; } - rctx->cctx=cctx; - rctx->callback=callback; + rctx->cctx = cctx; + rctx->callback = callback; + rctx->pd = pd; if (pd->domain==NULL || pd->user==NULL || @@ -204,7 +212,8 @@ static int pam_dp_identity(DBusMessage *message, struct sbus_conn_ctx *sconn) return EOK; } -struct sbus_method *register_pam_dp_methods(void) { +struct sbus_method *register_pam_dp_methods(void) +{ static struct sbus_method pam_dp_methods[] = { { DP_CLI_METHOD_IDENTITY, pam_dp_identity }, { NULL, NULL } |