mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-21 14:24:09 +01:00
connectd: give user a hint when wrong key is used.
When the wrong key is used, the remote end simply hangs up. We used to get a random errno, which tends to be "Operation now in progress." Now it's defined to be 0, detect and provide a better error. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
cd8446f081
commit
09b33015c4
2 changed files with 10 additions and 2 deletions
|
@ -20,6 +20,7 @@
|
||||||
#include <ccan/list/list.h>
|
#include <ccan/list/list.h>
|
||||||
#include <ccan/mem/mem.h>
|
#include <ccan/mem/mem.h>
|
||||||
#include <ccan/noerr/noerr.h>
|
#include <ccan/noerr/noerr.h>
|
||||||
|
#include <ccan/str/str.h>
|
||||||
#include <ccan/take/take.h>
|
#include <ccan/take/take.h>
|
||||||
#include <ccan/tal/str/str.h>
|
#include <ccan/tal/str/str.h>
|
||||||
#include <common/bech32.h>
|
#include <common/bech32.h>
|
||||||
|
@ -566,11 +567,18 @@ static void PRINTF_FMT(5,6)
|
||||||
static void destroy_io_conn(struct io_conn *conn, struct connecting *connect)
|
static void destroy_io_conn(struct io_conn *conn, struct connecting *connect)
|
||||||
{
|
{
|
||||||
/*~ tal_append_fmt appends to a tal string. It's terribly convenient */
|
/*~ tal_append_fmt appends to a tal string. It's terribly convenient */
|
||||||
|
const char *errstr = strerror(errno);
|
||||||
|
/* errno 0 means they hung up on us. */
|
||||||
|
if (errno == 0) {
|
||||||
|
errstr = "peer closed connection";
|
||||||
|
if (streq(connect->connstate, "Cryptographic handshake"))
|
||||||
|
errstr = "peer closed connection (wrong key?)";
|
||||||
|
}
|
||||||
tal_append_fmt(&connect->errors,
|
tal_append_fmt(&connect->errors,
|
||||||
"%s: %s: %s. ",
|
"%s: %s: %s. ",
|
||||||
type_to_string(tmpctx, struct wireaddr_internal,
|
type_to_string(tmpctx, struct wireaddr_internal,
|
||||||
&connect->addrs[connect->addrnum]),
|
&connect->addrs[connect->addrnum]),
|
||||||
connect->connstate, strerror(errno));
|
connect->connstate, errstr);
|
||||||
connect->addrnum++;
|
connect->addrnum++;
|
||||||
try_connect_one_addr(connect);
|
try_connect_one_addr(connect);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ def test_connect(node_factory):
|
||||||
l1.rpc.connect('032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e', 'localhost', 1)
|
l1.rpc.connect('032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e', 'localhost', 1)
|
||||||
|
|
||||||
# Should get reasonable error if wrong key for peer.
|
# Should get reasonable error if wrong key for peer.
|
||||||
with pytest.raises(RpcError, match=r'Cryptographic handshake: '):
|
with pytest.raises(RpcError, match=r'Cryptographic handshake: peer closed connection \(wrong key\?\)'):
|
||||||
l1.rpc.connect('032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e', 'localhost', l2.port)
|
l1.rpc.connect('032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e', 'localhost', l2.port)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue