]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: prefix keyboard interactive prompts with (user@host) to
authordjm@openbsd.org <djm@openbsd.org>
Fri, 13 Nov 2020 04:53:12 +0000 (04:53 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 13 Nov 2020 07:32:24 +0000 (18:32 +1100)
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

index f0e62e1425c3b60857831cc79138fe2dbbb457ef..6c31eeaf23f941be528df1f5737a3a6724804c84 100644 (file)
@@ -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);