summaryrefslogtreecommitdiff
path: root/monitor_wrap.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2003-05-10 19:28:02 +1000
committerDamien Miller <djm@mindrot.org>2003-05-10 19:28:02 +1000
commit4f9f42a9bb6a6aa8f6100d873dc6344f2f9994de (patch)
treef81c39146e1cfabb4b198f57f60453b2dcaac299 /monitor_wrap.c
parentc437cda328b4733b59a7ed028b72e6b7f58f86e6 (diff)
- (djm) Merge FreeBSD PAM code: replaces PAM password auth kludge with
proper challenge-response module
Diffstat (limited to 'monitor_wrap.c')
-rw-r--r--monitor_wrap.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/monitor_wrap.c b/monitor_wrap.c
index 183ae8d0e..a83413a5f 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -677,6 +677,88 @@ mm_start_pam(char *user)
677 677
678 buffer_free(&m); 678 buffer_free(&m);
679} 679}
680
681void *
682mm_sshpam_init_ctx(Authctxt *authctxt)
683{
684 Buffer m;
685 int success;
686
687 debug3("%s", __func__);
688 buffer_init(&m);
689 buffer_put_cstring(&m, authctxt->user);
690 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PAM_INIT_CTX, &m);
691 debug3("%s: waiting for MONITOR_ANS_PAM_INIT_CTX", __func__);
692 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PAM_INIT_CTX, &m);
693 success = buffer_get_int(&m);
694 if (success == 0) {
695 debug3("%s: pam_init_ctx failed", __func__);
696 buffer_free(&m);
697 return (NULL);
698 }
699 buffer_free(&m);
700 return (authctxt);
701}
702
703int
704mm_sshpam_query(void *ctx, char **name, char **info,
705 u_int *num, char ***prompts, u_int **echo_on)
706{
707 Buffer m;
708 int i, ret;
709
710 debug3("%s", __func__);
711 buffer_init(&m);
712 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PAM_QUERY, &m);
713 debug3("%s: waiting for MONITOR_ANS_PAM_QUERY", __func__);
714 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PAM_QUERY, &m);
715 ret = buffer_get_int(&m);
716 debug3("%s: pam_query returned %d", __func__, ret);
717 *name = buffer_get_string(&m, NULL);
718 *info = buffer_get_string(&m, NULL);
719 *num = buffer_get_int(&m);
720 *prompts = xmalloc((*num + 1) * sizeof(char *));
721 *echo_on = xmalloc((*num + 1) * sizeof(u_int));
722 for (i = 0; i < *num; ++i) {
723 (*prompts)[i] = buffer_get_string(&m, NULL);
724 (*echo_on)[i] = buffer_get_int(&m);
725 }
726 buffer_free(&m);
727 return (ret);
728}
729
730int
731mm_sshpam_respond(void *ctx, u_int num, char **resp)
732{
733 Buffer m;
734 int i, ret;
735
736 debug3("%s", __func__);
737 buffer_init(&m);
738 buffer_put_int(&m, num);
739 for (i = 0; i < num; ++i)
740 buffer_put_cstring(&m, resp[i]);
741 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PAM_RESPOND, &m);
742 debug3("%s: waiting for MONITOR_ANS_PAM_RESPOND", __func__);
743 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PAM_RESPOND, &m);
744 ret = buffer_get_int(&m);
745 debug3("%s: pam_respond returned %d", __func__, ret);
746 buffer_free(&m);
747 return (ret);
748}
749
750void
751mm_sshpam_free_ctx(void *ctxtp)
752{
753 Buffer m;
754
755 debug3("%s", __func__);
756 buffer_init(&m);
757 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PAM_FREE_CTX, &m);
758 debug3("%s: waiting for MONITOR_ANS_PAM_FREE_CTX", __func__);
759 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PAM_FREE_CTX, &m);
760 buffer_free(&m);
761}
680#endif /* USE_PAM */ 762#endif /* USE_PAM */
681 763
682/* Request process termination */ 764/* Request process termination */