From 5442b491d0ee4bb82f6341ad0ee620ef3947f8c5 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 13 Nov 2020 04:53:12 +0000 Subject: upstream: prefix keyboard interactive prompts with (user@host) to make it easier to determine which connection they are associated with in cases like scp -3, ProxyJump, etc. bz#3224 ok dtucker OpenBSD-Commit-ID: 67e6189b04b46c867662f8a6759cf3ecb5f59170 --- sshconnect2.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'sshconnect2.c') diff --git a/sshconnect2.c b/sshconnect2.c index f0e62e14..6c31eeaf 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.334 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.335 2020/11/13 04:53:12 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1886,15 +1886,15 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) { Authctxt *authctxt = ssh->authctxt; char *name = NULL, *inst = NULL, *lang = NULL, *prompt = NULL; - char *response = NULL; + char *display_prompt = NULL, *response = NULL; u_char echo = 0; u_int num_prompts, i; int r; - debug2("input_userauth_info_req"); + debug2_f("entering"); if (authctxt == NULL) - fatal("input_userauth_info_req: no authentication context"); + fatal_f("no authentication context"); authctxt->info_req_seen = 1; @@ -1919,17 +1919,21 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) (r = sshpkt_put_u32(ssh, num_prompts)) != 0) goto out; - debug2("input_userauth_info_req: num_prompts %d", num_prompts); + debug2_f("num_prompts %d", num_prompts); for (i = 0; i < num_prompts; i++) { if ((r = sshpkt_get_cstring(ssh, &prompt, NULL)) != 0 || (r = sshpkt_get_u8(ssh, &echo)) != 0) goto out; - response = read_passphrase(prompt, echo ? RP_ECHO : 0); + xasprintf(&display_prompt, "(%s@%s) %s", + authctxt->server_user, options.host_key_alias ? + options.host_key_alias : authctxt->host, prompt); + response = read_passphrase(display_prompt, echo ? RP_ECHO : 0); if ((r = sshpkt_put_cstring(ssh, response)) != 0) goto out; freezero(response, strlen(response)); free(prompt); - response = prompt = NULL; + free(display_prompt); + display_prompt = response = prompt = NULL; } /* done with parsing incoming message. */ if ((r = sshpkt_get_end(ssh)) != 0 || @@ -1940,6 +1944,7 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) if (response) freezero(response, strlen(response)); free(prompt); + free(display_prompt); free(name); free(inst); free(lang); -- cgit v1.2.1