]> andersk Git - openssh.git/blobdiff - auth2-chall.c
- markus@cvs.openbsd.org 2004/01/30 09:48:57
[openssh.git] / auth2-chall.c
index 38f955a022cf562b4df26c8c12f02b01c2e701c9..aacbf0bccebb19509760f91c4998f4a034fe9860 100644 (file)
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "includes.h"
-RCSID("$OpenBSD: auth2-chall.c,v 1.17 2002/03/18 17:50:31 provos Exp $");
+RCSID("$OpenBSD: auth2-chall.c,v 1.20 2002/06/30 21:59:45 deraadt Exp $");
 
 #include "ssh2.h"
 #include "auth.h"
@@ -41,6 +41,9 @@ static void input_userauth_info_response(int, u_int32_t, void *);
 #ifdef BSD_AUTH
 extern KbdintDevice bsdauth_device;
 #else
+#ifdef USE_PAM
+extern KbdintDevice sshpam_device;
+#endif
 #ifdef SKEY
 extern KbdintDevice skey_device;
 #endif
@@ -50,6 +53,9 @@ KbdintDevice *devices[] = {
 #ifdef BSD_AUTH
        &bsdauth_device,
 #else
+#ifdef USE_PAM
+       &sshpam_device,
+#endif
 #ifdef SKEY
        &skey_device,
 #endif
@@ -63,6 +69,7 @@ struct KbdintAuthctxt
        char *devices;
        void *ctxt;
        KbdintDevice *device;
+       u_int nreq;
 };
 
 static KbdintAuthctxt *
@@ -90,6 +97,7 @@ kbdint_alloc(const char *devs)
        debug("kbdint_alloc: devices '%s'", kbdintctxt->devices);
        kbdintctxt->ctxt = NULL;
        kbdintctxt->device = NULL;
+       kbdintctxt->nreq = 0;
 
        return kbdintctxt;
 }
@@ -209,26 +217,26 @@ send_userauth_info_request(Authctxt *authctxt)
        KbdintAuthctxt *kbdintctxt;
        char *name, *instr, **prompts;
        int i;
-       u_int numprompts, *echo_on;
+       u_int *echo_on;
 
        kbdintctxt = authctxt->kbdintctxt;
        if (kbdintctxt->device->query(kbdintctxt->ctxt,
-           &name, &instr, &numprompts, &prompts, &echo_on))
+           &name, &instr, &kbdintctxt->nreq, &prompts, &echo_on))
                return 0;
 
        packet_start(SSH2_MSG_USERAUTH_INFO_REQUEST);
        packet_put_cstring(name);
        packet_put_cstring(instr);
-       packet_put_cstring("");         /* language not used */
-       packet_put_int(numprompts);
-       for (i = 0; i < numprompts; i++) {
+       packet_put_cstring("");         /* language not used */
+       packet_put_int(kbdintctxt->nreq);
+       for (i = 0; i < kbdintctxt->nreq; i++) {
                packet_put_cstring(prompts[i]);
                packet_put_char(echo_on[i]);
        }
        packet_send();
        packet_write_wait();
 
-       for (i = 0; i < numprompts; i++)
+       for (i = 0; i < kbdintctxt->nreq; i++)
                xfree(prompts[i]);
        xfree(prompts);
        xfree(echo_on);
@@ -256,8 +264,12 @@ input_userauth_info_response(int type, u_int32_t seq, void *ctxt)
 
        authctxt->postponed = 0;        /* reset */
        nresp = packet_get_int();
+       if (nresp != kbdintctxt->nreq)
+               fatal("input_userauth_info_response: wrong number of replies");
+       if (nresp > 100)
+               fatal("input_userauth_info_response: too many replies");
        if (nresp > 0) {
-               response = xmalloc(nresp * sizeof(char*));
+               response = xmalloc(nresp * sizeof(char *));
                for (i = 0; i < nresp; i++)
                        response[i] = packet_get_string(NULL);
        }
@@ -314,18 +326,27 @@ input_userauth_info_response(int type, u_int32_t seq, void *ctxt)
 void
 privsep_challenge_enable(void)
 {
+#if defined(BSD_AUTH) || defined(USE_PAM) || defined(SKEY)
+       int n = 0;
+#endif
 #ifdef BSD_AUTH
        extern KbdintDevice mm_bsdauth_device;
 #endif
+#ifdef USE_PAM
+       extern KbdintDevice mm_sshpam_device;
+#endif
 #ifdef SKEY
        extern KbdintDevice mm_skey_device;
 #endif
-       /* As long as SSHv1 has devices[0] hard coded this is fine */
+
 #ifdef BSD_AUTH
-       devices[0] = &mm_bsdauth_device;
+       devices[n++] = &mm_bsdauth_device;
 #else
+#ifdef USE_PAM
+       devices[n++] = &mm_sshpam_device;
+#endif
 #ifdef SKEY
-       devices[0] = &mm_skey_device;
+       devices[n++] = &mm_skey_device;
 #endif
 #endif
 }
This page took 0.155723 seconds and 4 git commands to generate.