X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol.c;h=f8d72298e28162d01ec4d7bc1095f30683ab6cc6;hb=8309e9b869c25677d674f5cecb8b7ac5469d1758;hp=1359360294d4df3cf66e7b70ff70b13b6cefac2e;hpb=18c85caac36f7236454deef11b9eba74328dbd96;p=tinc diff --git a/src/protocol.c b/src/protocol.c index 13593602..f8d72298 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: protocol.c,v 1.28.4.16 2000/06/29 17:09:06 guus Exp $ + $Id: protocol.c,v 1.28.4.18 2000/06/30 12:41:06 guus Exp $ */ #include "config.h" @@ -391,6 +391,7 @@ cp int basic_info_h(conn_list_t *cl) { + conn_list_t *old; cp if(debug_lvl > 1) syslog(LOG_DEBUG, _("Got BASIC_INFO from %s"), cl->real_hostname); @@ -412,25 +413,29 @@ cp } if(cl->status.outgoing) - { - if(setup_vpn_connection(cl) < 0) - return -1; - send_basic_info(cl); - } - else { /* First check if the host we connected to is already in our connection list. If so, we are probably making a loop, which - is not desirable. It should not happen though. + is not desirable. */ - if(lookup_conn(cl->vpn_ip)) + if(old=lookup_conn(cl->vpn_ip)) { if(debug_lvl>0) - syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list, aborting connect"), + syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list"), cl->vpn_hostname, cl->real_hostname); - return -1; + cl->status.outgoing = 0; + old->status.outgoing = 1; + terminate_connection(cl); + return 0; } + + if(setup_vpn_connection(cl) < 0) + return -1; + send_basic_info(cl); + } + else + { if(setup_vpn_connection(cl) < 0) return -1; @@ -608,6 +613,15 @@ cp return 0; } + /* Connections lists are really messed up if this happens */ + if(vpn_ip == myself->vpn_ip) + { + syslog(LOG_ERR, _("Warning: got DEL_HOST from %s (%s) for ourself, restarting"), + cl->vpn_hostname, cl->real_hostname); + sighup = 1; + return 0; + } + if(debug_lvl > 1) syslog(LOG_DEBUG, _("Got DEL_HOST for %s (%s) from %s (%s)"), fw->vpn_hostname, fw->real_hostname, cl->vpn_hostname, cl->real_hostname); @@ -704,6 +718,15 @@ cp terminate_connection(old); } } + + /* Connections lists are really messed up if this happens */ + if(vpn_ip == myself->vpn_ip) + { + syslog(LOG_ERR, _("Warning: got ADD_HOST from %s (%s) for ourself, restarting"), + cl->vpn_hostname, cl->real_hostname); + sighup = 1; + return 0; + } ncn = new_conn_list(); ncn->real_ip = real_ip;