Add stricter checks for netnames.
[tinc] / src / protocol_key.c
index 83851f2..d24d4ac 100644 (file)
@@ -36,6 +36,7 @@
 static bool mykeyused = false;
 
 void send_key_changed(void) {
+#ifndef DISABLE_LEGACY
        send_request(everyone, "%d %x %s", KEY_CHANGED, rand(), myself->name);
 
        /* Immediately send new keys to directly connected nodes to keep UDP mappings alive */
@@ -43,6 +44,7 @@ void send_key_changed(void) {
        for list_each(connection_t, c, connection_list)
                if(c->edge && c->node && c->node->status.reachable && !c->node->status.sptps)
                        send_ans_key(c->node);
+#endif
 
        /* Force key exchange for connections using SPTPS */
 
@@ -398,7 +400,7 @@ bool ans_key_h(connection_t *c, const char *request) {
                        return true;
                }
 
-               if(!*address && from->address.sa.sa_family != AF_UNSPEC) {
+               if(!*address && from->address.sa.sa_family != AF_UNSPEC && to->minmtu) {
                        char *address, *port;
                        logger(DEBUG_PROTOCOL, LOG_DEBUG, "Appending reflexive UDP address to ANS_KEY from %s to %s", from->name, to->name);
                        sockaddr2str(&from->address, &address, &port);
@@ -416,7 +418,7 @@ bool ans_key_h(connection_t *c, const char *request) {
        cipher_close(from->outcipher);
        digest_close(from->outdigest);
 #endif
-       from->status.validkey = false;
+       if (!from->status.sptps) from->status.validkey = false;
 
        if(compression < 0 || compression > 11) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Node %s (%s) uses bogus compression level!", from->name, from->hostname);