diff options
author | Markus Friedl <markus@cvs.openbsd.org> | 2001-12-09 18:45:57 +0000 |
---|---|---|
committer | Markus Friedl <markus@cvs.openbsd.org> | 2001-12-09 18:45:57 +0000 |
commit | e6048604583f1ca20d2752afceb6b8946c51d1fc (patch) | |
tree | 63dd3d1ddee4fff2ece3273bae6f8d1e48198941 | |
parent | abee72dfaa8e8ca1e002c09c6414d6101ba6ad76 (diff) |
add auth2_challenge_stop(), simplifies cleanup of kbd-int sessions,
fixes memleak.
-rw-r--r-- | usr.bin/ssh/auth.h | 3 | ||||
-rw-r--r-- | usr.bin/ssh/auth2-chall.c | 35 | ||||
-rw-r--r-- | usr.bin/ssh/auth2.c | 10 |
3 files changed, 23 insertions, 25 deletions
diff --git a/usr.bin/ssh/auth.h b/usr.bin/ssh/auth.h index ffc9a004083..120213bab25 100644 --- a/usr.bin/ssh/auth.h +++ b/usr.bin/ssh/auth.h @@ -21,7 +21,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $OpenBSD: auth.h,v 1.22 2001/06/26 17:27:22 markus Exp $ + * $OpenBSD: auth.h,v 1.23 2001/12/09 18:45:56 markus Exp $ */ #ifndef AUTH_H #define AUTH_H @@ -127,6 +127,7 @@ void userauth_finish(Authctxt *, int, char *); int auth_root_allowed(char *); int auth2_challenge(Authctxt *, char *); +void auth2_challenge_stop(Authctxt *); int allowed_user(struct passwd *); diff --git a/usr.bin/ssh/auth2-chall.c b/usr.bin/ssh/auth2-chall.c index 5e6a691f808..4b97e47bddb 100644 --- a/usr.bin/ssh/auth2-chall.c +++ b/usr.bin/ssh/auth2-chall.c @@ -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.8 2001/09/27 15:31:17 markus Exp $"); +RCSID("$OpenBSD: auth2-chall.c,v 1.9 2001/12/09 18:45:56 markus Exp $"); #include "ssh2.h" #include "auth.h" @@ -156,6 +156,18 @@ auth2_challenge(Authctxt *authctxt, char *devs) return auth2_challenge_start(authctxt); } +/* unregister kbd-int callbacks and context */ +void +auth2_challenge_stop(Authctxt *authctxt) +{ + /* unregister callback */ + dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL); + if (authctxt->kbdintctxt != NULL) { + kbdint_free(authctxt->kbdintctxt); + authctxt->kbdintctxt = NULL; + } +} + /* side effect: sets authctxt->postponed if a reply was sent*/ static int auth2_challenge_start(Authctxt *authctxt) @@ -166,21 +178,18 @@ auth2_challenge_start(Authctxt *authctxt) kbdintctxt->devices ? kbdintctxt->devices : "<empty>"); if (kbdint_next_device(kbdintctxt) == 0) { - kbdint_free(kbdintctxt); - authctxt->kbdintctxt = NULL; + auth2_challenge_stop(authctxt); return 0; } debug("auth2_challenge_start: trying authentication method '%s'", kbdintctxt->device->name); if ((kbdintctxt->ctxt = kbdintctxt->device->init_ctx(authctxt)) == NULL) { - kbdint_free(kbdintctxt); - authctxt->kbdintctxt = NULL; + auth2_challenge_stop(authctxt); return 0; } if (send_userauth_info_request(authctxt) == 0) { - kbdint_free(kbdintctxt); - authctxt->kbdintctxt = NULL; + auth2_challenge_stop(authctxt); return 0; } dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, @@ -271,10 +280,8 @@ input_userauth_info_response(int type, int plen, void *ctxt) break; case 1: /* Authentication needs further interaction */ - authctxt->postponed = 1; - if (send_userauth_info_request(authctxt) == 0) { - authctxt->postponed = 0; - } + if (send_userauth_info_request(authctxt) == 1) + authctxt->postponed = 1; break; default: /* Failure! */ @@ -290,12 +297,8 @@ input_userauth_info_response(int type, int plen, void *ctxt) strlcat(method, kbdintctxt->device->name, len); if (!authctxt->postponed) { - /* unregister callback */ - dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL); - if (authenticated) { - kbdint_free(kbdintctxt); - authctxt->kbdintctxt = NULL; + auth2_challenge_stop(authctxt); } else { /* start next device */ /* may set authctxt->postponed */ diff --git a/usr.bin/ssh/auth2.c b/usr.bin/ssh/auth2.c index 079fa141015..59acf87c445 100644 --- a/usr.bin/ssh/auth2.c +++ b/usr.bin/ssh/auth2.c @@ -23,7 +23,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: auth2.c,v 1.74 2001/12/05 03:56:39 itojun Exp $"); +RCSID("$OpenBSD: auth2.c,v 1.75 2001/12/09 18:45:56 markus Exp $"); #include <openssl/evp.h> @@ -212,14 +212,8 @@ input_userauth_request(int type, int plen, void *ctxt) authctxt->user, authctxt->service, user, service); } /* reset state */ - dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, &protocol_error); + auth2_challenge_stop(authctxt); authctxt->postponed = 0; -#ifdef BSD_AUTH - if (authctxt->as) { - auth_close(authctxt->as); - authctxt->as = NULL; - } -#endif /* try to authenticate user */ m = authmethod_lookup(method); |