mirror of git://anongit.mindrot.org/openssh.git
upstream: EXT_INFO negotiation of hostbound pubkey auth
the EXT_INFO packet gets a new publickey-hostbound@openssh.com to advertise the hostbound public key method. Client side support to parse this feature flag and set the kex->flags indicator if the expected version is offered (currently "0"). ok markus@ OpenBSD-Commit-ID: 4cdb2ca5017ec1ed7a9d33bda95c1d6a97b583b0
This commit is contained in:
parent
94ae0c6f0e
commit
3e16365a79
22
kex.c
22
kex.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: kex.c,v 1.169 2021/12/19 22:08:06 djm Exp $ */
|
/* $OpenBSD: kex.c,v 1.170 2021/12/19 22:13:12 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -436,9 +436,12 @@ kex_send_ext_info(struct ssh *ssh)
|
||||||
return SSH_ERR_ALLOC_FAIL;
|
return SSH_ERR_ALLOC_FAIL;
|
||||||
/* XXX filter algs list by allowed pubkey/hostbased types */
|
/* XXX filter algs list by allowed pubkey/hostbased types */
|
||||||
if ((r = sshpkt_start(ssh, SSH2_MSG_EXT_INFO)) != 0 ||
|
if ((r = sshpkt_start(ssh, SSH2_MSG_EXT_INFO)) != 0 ||
|
||||||
(r = sshpkt_put_u32(ssh, 1)) != 0 ||
|
(r = sshpkt_put_u32(ssh, 2)) != 0 ||
|
||||||
(r = sshpkt_put_cstring(ssh, "server-sig-algs")) != 0 ||
|
(r = sshpkt_put_cstring(ssh, "server-sig-algs")) != 0 ||
|
||||||
(r = sshpkt_put_cstring(ssh, algs)) != 0 ||
|
(r = sshpkt_put_cstring(ssh, algs)) != 0 ||
|
||||||
|
(r = sshpkt_put_cstring(ssh,
|
||||||
|
"publickey-hostbound@openssh.com")) != 0 ||
|
||||||
|
(r = sshpkt_put_cstring(ssh, "0")) != 0 ||
|
||||||
(r = sshpkt_send(ssh)) != 0) {
|
(r = sshpkt_send(ssh)) != 0) {
|
||||||
error_fr(r, "compose");
|
error_fr(r, "compose");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -498,6 +501,21 @@ kex_input_ext_info(int type, u_int32_t seq, struct ssh *ssh)
|
||||||
debug_f("%s=<%s>", name, val);
|
debug_f("%s=<%s>", name, val);
|
||||||
kex->server_sig_algs = val;
|
kex->server_sig_algs = val;
|
||||||
val = NULL;
|
val = NULL;
|
||||||
|
} else if (strcmp(name,
|
||||||
|
"publickey-hostbound@openssh.com") == 0) {
|
||||||
|
/* XXX refactor */
|
||||||
|
/* Ensure no \0 lurking in value */
|
||||||
|
if (memchr(val, '\0', vlen) != NULL) {
|
||||||
|
error_f("nul byte in %s", name);
|
||||||
|
return SSH_ERR_INVALID_FORMAT;
|
||||||
|
}
|
||||||
|
debug_f("%s=<%s>", name, val);
|
||||||
|
if (strcmp(val, "0") == 0)
|
||||||
|
kex->flags |= KEX_HAS_PUBKEY_HOSTBOUND;
|
||||||
|
else {
|
||||||
|
debug_f("unsupported version of %s extension",
|
||||||
|
name);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
debug_f("%s (unrecognised)", name);
|
debug_f("%s (unrecognised)", name);
|
||||||
free(name);
|
free(name);
|
||||||
|
|
Loading…
Reference in New Issue