diff options
author | djm <djm> | 2003-05-10 09:28:02 +0000 |
---|---|---|
committer | djm <djm> | 2003-05-10 09:28:02 +0000 |
commit | e4bb690dfae46e4fd244721923b29abdf8123115 (patch) | |
tree | e6ad91cd72b7f82b0b4835c82de740ff6845b9b0 /auth-chall.c | |
parent | caa0152d3bc5e6a658c862a3555318d4f79a58b4 (diff) | |
download | openssh-e4bb690dfae46e4fd244721923b29abdf8123115.tar.gz |
- (djm) Merge FreeBSD PAM code: replaces PAM password auth kludge withAFTER_FREEBSD_PAM_MERGE
proper challenge-response module
Diffstat (limited to 'auth-chall.c')
-rw-r--r-- | auth-chall.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/auth-chall.c b/auth-chall.c index 45e0c345..6b7c8bd1 100644 --- a/auth-chall.c +++ b/auth-chall.c @@ -76,7 +76,33 @@ verify_response(Authctxt *authctxt, const char *response) return 0; resp[0] = (char *)response; res = device->respond(authctxt->kbdintctxt, 1, resp); + if (res == 1) { + /* postponed - send a null query just in case */ + char *name, *info, **prompts; + u_int i, numprompts, *echo_on; + + res = device->query(authctxt->kbdintctxt, &name, &info, + &numprompts, &prompts, &echo_on); + if (res == 0) { + for (i = 0; i < numprompts; i++) + xfree(prompts[i]); + xfree(prompts); + xfree(name); + xfree(echo_on); + xfree(info); + } + /* if we received more prompts, we're screwed */ + res = (numprompts != 0); + } device->free_ctx(authctxt->kbdintctxt); authctxt->kbdintctxt = NULL; return res ? 0 : 1; } +void +abandon_challenge_response(Authctxt *authctxt) +{ + if (authctxt->kbdintctxt != NULL) { + device->free_ctx(authctxt->kbdintctxt); + authctxt->kbdintctxt = NULL; + } +} |