Prevent tinc from forgeting e->local_address
If ADD_EDGE came from tinc version 1.0.x local_address.sa.sa_family is set to 0. If it came from tinc version 1.1.x forwarded for older verion it will be 255 - AF_UNKNOWN.
This commit is contained in:
parent
1e7ef38198
commit
3c54765bcd
1 changed files with 5 additions and 1 deletions
|
@ -158,8 +158,11 @@ bool add_edge_h(connection_t *c, const char *request) {
|
||||||
// Otherwise, just ignore it.
|
// Otherwise, just ignore it.
|
||||||
sockaddrfree(&local_address);
|
sockaddrfree(&local_address);
|
||||||
return true;
|
return true;
|
||||||
} else if(local_address.sa.sa_family) {
|
} else if(local_address.sa.sa_family && local_address.sa.sa_family != AF_UNKNOWN) {
|
||||||
// We learned a new local address for this edge.
|
// We learned a new local address for this edge.
|
||||||
|
// local_address.sa.sa_family will be 0 if we got it from older tinc versions
|
||||||
|
// local_address.sa.sa_family will be 255 (AF_UNKNOWN) if we got it from newer versions
|
||||||
|
// but for edge which does not have local_address
|
||||||
sockaddrfree(&e->local_address);
|
sockaddrfree(&e->local_address);
|
||||||
e->local_address = local_address;
|
e->local_address = local_address;
|
||||||
|
|
||||||
|
@ -169,6 +172,7 @@ bool add_edge_h(connection_t *c, const char *request) {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
sockaddrfree(&local_address);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue