]> git.meshlink.io Git - meshlink/blobdiff - src/protocol_auth.c
Fix deleting configuration directories with hidden files.
[meshlink] / src / protocol_auth.c
index 7bf121989b308558a0305d29cb0478a943818e07..1f2e24a2ce8d9d6def723ee1a851ac4b5928ccef 100644 (file)
@@ -48,8 +48,21 @@ bool send_id(meshlink_handle_t *mesh, connection_t *c) {
 }
 
 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;
+       }
+
        // Create a new node
-       node_t *n = new_node();
+       n = new_node();
        n->name = xstrdup(c->name);
        n->devclass = DEV_CLASS_UNKNOWN;
        n->ecdsa = ecdsa_set_public_key(data);
@@ -254,11 +267,6 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
                return false;
        }
 
-       if(n->status.blacklisted) {
-               logger(mesh, MESHLINK_WARNING, "Peer %s is blacklisted", c->name);
-               return false;
-       }
-
        if(!node_read_public_key(mesh, n)) {
                logger(mesh, MESHLINK_ERROR, "No key known for peer %s", c->name);
 
@@ -296,6 +304,13 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
 }
 
 bool send_ack(meshlink_handle_t *mesh, connection_t *c) {
+       node_t *n = lookup_node(mesh, c->name);
+
+       if(n && n->status.blacklisted) {
+               logger(mesh, MESHLINK_WARNING, "Peer %s is blacklisted", c->name);
+               return send_error(mesh, c, BLACKLISTED, "blacklisted");
+       }
+
        c->last_ping_time = mesh->loop.now.tv_sec;
        return send_request(mesh, c, NULL, "%d %s %d %x", ACK, mesh->myport, mesh->devclass, OPTION_PMTU_DISCOVERY | (PROT_MINOR << 24));
 }