X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fprotocol_auth.c;h=9cb96b6590aecd6dd47f1af1fb23fc2ca694178c;hb=98b9d73682733072d66d6db3beb15e7309805cf5;hp=d359b9b638c9aae8e9699201317bc5d470bb285f;hpb=f3dae7d32467b2ed28c1f62bfa2f5929f2611284;p=meshlink diff --git a/src/protocol_auth.c b/src/protocol_auth.c index d359b9b6..9cb96b65 100644 --- a/src/protocol_auth.c +++ b/src/protocol_auth.c @@ -329,11 +329,20 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { logger(mesh, MESHLINK_ERROR, "Peer %s had unknown identity (%s)", c->hostname, c->name); return false; } + } - read_ecdsa_public_key(mesh, c); - } else { - if(c->protocol_minor && !ecdsa_active(c->ecdsa)) - c->protocol_minor = 1; + read_ecdsa_public_key(mesh, c); + + if(!ecdsa_active(c->ecdsa)) { + logger(mesh, MESHLINK_ERROR, "No key known for peer %s (%s)", c->name, c->hostname); + + node_t *n = lookup_node(mesh, c->name); + if(n && !n->status.waitingforkey) { + logger(mesh, MESHLINK_INFO, "Requesting key from peer %s (%s)", c->name, c->hostname); + send_req_key(mesh, n); + } + + return false; } /* Forbid version rollback for nodes whose ECDSA key we know */