summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Miller <djm@cvs.openbsd.org>2019-01-04 03:27:51 +0000
committerDamien Miller <djm@cvs.openbsd.org>2019-01-04 03:27:51 +0000
commitaa1c5f1ad2042feee61db107850fde997fe9eccf (patch)
tree7e34adaf076af79cad740cb71b3d2020e3a51f3c
parent6d6bbaf2f1fcc411b9686f8c642a4f5b8d15a8e7 (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.c18
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;