diff options
author | Damien Miller <djm@cvs.openbsd.org> | 2019-01-04 03:27:51 +0000 |
---|---|---|
committer | Damien Miller <djm@cvs.openbsd.org> | 2019-01-04 03:27:51 +0000 |
commit | aa1c5f1ad2042feee61db107850fde997fe9eccf (patch) | |
tree | 7e34adaf076af79cad740cb71b3d2020e3a51f3c | |
parent | 6d6bbaf2f1fcc411b9686f8c642a4f5b8d15a8e7 (diff) |
eliminate function-static attempt counters for passwd/kbdint
authmethods by moving them to the client authctxt;
Patch from Markus Schmidt, ok markus@
-rw-r--r-- | usr.bin/ssh/sshconnect2.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/usr.bin/ssh/sshconnect2.c b/usr.bin/ssh/sshconnect2.c index c13c2715d0e..ba7a227da41 100644 --- a/usr.bin/ssh/sshconnect2.c +++ b/usr.bin/ssh/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.291 2018/12/27 03:25:25 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.292 2019/01/04 03:27:50 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -256,7 +256,6 @@ struct cauthctxt { struct cauthmethod *method; sig_atomic_t success; char *authlist; - int attempt; /* pubkey */ struct idlist keys; int agent_fd; @@ -266,6 +265,9 @@ struct cauthctxt { const char *active_ktype; /* kbd-interactive */ int info_req_seen; + int attempt_kbdint; + /* password */ + int attempt_passwd; /* generic */ void *methoddata; }; @@ -377,6 +379,8 @@ ssh_userauth2(struct ssh *ssh, const char *local_user, authctxt.sensitive = sensitive; authctxt.active_ktype = authctxt.oktypes = authctxt.ktypes = NULL; authctxt.info_req_seen = 0; + authctxt.attempt_kbdint = 0; + authctxt.attempt_passwd = 0; authctxt.agent_fd = -1; pubkey_prepare(&authctxt); if (authctxt.method == NULL) { @@ -946,16 +950,15 @@ int userauth_passwd(Authctxt *authctxt) { struct ssh *ssh = active_state; /* XXX */ - static int attempt = 0; char *password, *prompt = NULL; const char *host = options.host_key_alias ? options.host_key_alias : authctxt->host; int r; - if (attempt++ >= options.number_of_password_prompts) + if (authctxt->attempt_passwd++ >= options.number_of_password_prompts) return 0; - if (attempt != 1) + if (authctxt->attempt_passwd != 1) error("Permission denied, please try again."); xasprintf(&prompt, "%s@%s's password: ", authctxt->server_user, host); @@ -1697,13 +1700,12 @@ int userauth_kbdint(Authctxt *authctxt) { struct ssh *ssh = active_state; /* XXX */ - static int attempt = 0; int r; - if (attempt++ >= options.number_of_password_prompts) + if (authctxt->attempt_kbdint++ >= options.number_of_password_prompts) return 0; /* disable if no SSH2_MSG_USERAUTH_INFO_REQUEST has been seen */ - if (attempt > 1 && !authctxt->info_req_seen) { + if (authctxt->attempt_kbdint > 1 && !authctxt->info_req_seen) { debug3("userauth_kbdint: disable: no info_req_seen"); ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_INFO_REQUEST, NULL); return 0; |