Fix merge of commit 4a0b9981513059755b9fd15b38fc198f46a0d6f2.
authorGuus Sliepen <guus@tinc-vpn.org>
Sat, 17 Apr 2010 10:33:15 +0000 (12:33 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sat, 17 Apr 2010 10:33:15 +0000 (12:33 +0200)
src/protocol_key.c

index 3baa580..4187538 100644 (file)
@@ -175,7 +175,7 @@ bool ans_key_h(connection_t *c, char *request) {
        int cipher, digest, maclength, compression, keylen;
        node_t *from, *to;
 
-       if(sscanf(request, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d %d",
+       if(sscanf(request, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d %d "MAX_STRING" "MAX_STRING,
                from_name, to_name, key, &cipher, &digest, &maclength,
                &compression, address, port) < 7) {
                logger(LOG_ERR, "Got bad %s from %s (%s)", "ANS_KEY", c->name,
@@ -216,6 +216,16 @@ bool ans_key_h(connection_t *c, char *request) {
                        return true;
                }
 
+               if(!*address) {
+                       char *address, *port;
+                       ifdebug(PROTOCOL) logger(LOG_DEBUG, "Appending reflexive UDP address to ANS_KEY from %s to %s", from->name, to->name);
+                       sockaddr2str(&from->address, &address, &port);
+                       send_request(to->nexthop->connection, "%s %s %s", request, address, port);
+                       free(address);
+                       free(port);
+                       return true;
+               }
+
                return send_request(to->nexthop->connection, "%s", request);
        }