Although we delete invitation files when blacklisting a node, there is a
race condition where an invitation connection is created right before the
invitee is blacklisted. So check that the node is blacklisted right before
committing the node config file to disk.
}
static bool commit_invitation(meshlink_handle_t *mesh, connection_t *c, const void *data) {
}
static bool commit_invitation(meshlink_handle_t *mesh, connection_t *c, const void *data) {
+ // Check if the node is known
+ node_t *n = lookup_node(mesh, c->name);
+
+ if(n) {
+ if(n->status.blacklisted) {
+ logger(mesh, MESHLINK_ERROR, "Invitee %s is blacklisted", c->name);
+ } else {
+ logger(mesh, MESHLINK_ERROR, "Invitee %s already known", c->name);
+ }
+
+ return false;
+ }
+
- node_t *n = new_node();
n->name = xstrdup(c->name);
n->devclass = DEV_CLASS_UNKNOWN;
n->ecdsa = ecdsa_set_public_key(data);
n->name = xstrdup(c->name);
n->devclass = DEV_CLASS_UNKNOWN;
n->ecdsa = ecdsa_set_public_key(data);