diff options
Diffstat (limited to 'crypto/openssh/sshconnect2.c')
| -rw-r--r-- | crypto/openssh/sshconnect2.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/crypto/openssh/sshconnect2.c b/crypto/openssh/sshconnect2.c index 5a48c73edbef..d1555ee97274 100644 --- a/crypto/openssh/sshconnect2.c +++ b/crypto/openssh/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.386 2026/05/13 05:11:02 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.388 2026/07/06 07:49:58 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -83,7 +83,7 @@ extern Options options; */ static char *xxx_host; -static struct sockaddr *xxx_hostaddr; +static struct sockaddr_storage xxx_hostaddr; static const struct ssh_conn_info *xxx_conn_info; static int key_type_allowed(struct sshkey *, const char *); @@ -99,7 +99,7 @@ verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh) fatal("Server host key %s not in HostKeyAlgorithms", sshkey_ssh_name(hostkey)); } - if (verify_host_key(xxx_host, xxx_hostaddr, hostkey, + if (verify_host_key(xxx_host, (struct sockaddr *)&xxx_hostaddr, hostkey, xxx_conn_info) != 0) fatal("Host key verification failed."); return 0; @@ -216,16 +216,16 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port, } void -ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, - const struct ssh_conn_info *cinfo) +ssh_kex2(struct ssh *ssh, char *host, struct sockaddr_storage *hostaddr, + u_short port, const struct ssh_conn_info *cinfo) { char *myproposal[PROPOSAL_MAX]; char *all_key, *hkalgs = NULL; int r, use_known_hosts_order = 0; - xxx_host = host; - xxx_hostaddr = hostaddr; - xxx_conn_info = cinfo; + xxx_host = xstrdup(host); + xxx_hostaddr = *hostaddr; + xxx_conn_info = ssh_conn_info_dup(cinfo); if (options.rekey_limit || options.rekey_interval) ssh_packet_set_rekey_limits(ssh, options.rekey_limit, @@ -248,8 +248,10 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, fatal_fr(r, "kex_assemble_namelist"); free(all_key); - if (use_known_hosts_order) - hkalgs = order_hostkeyalgs(host, hostaddr, port, cinfo); + if (use_known_hosts_order) { + hkalgs = order_hostkeyalgs(host, (struct sockaddr *)hostaddr, + port, cinfo); + } kex_proposal_populate_entries(ssh, myproposal, options.kex_algorithms, options.ciphers, options.macs, @@ -1441,7 +1443,8 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) !fallback_sigtype) { if (sign_id->agent_fd != -1) loc = "agent "; - else if ((sign_id->key->flags & SSHKEY_FLAG_EXT) != 0) + else if (sign_id->key != NULL && + (sign_id->key->flags & SSHKEY_FLAG_EXT) != 0) loc = "token "; logit("%skey %s %s returned incorrect signature type", loc, sshkey_type(id->key), fp); |
