projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't forget to read public RSA key when making an outgoing connection.
[tinc]
/
src
/
protocol.c
diff --git
a/src/protocol.c
b/src/protocol.c
index
2744592
..
6cb8037
100644
(file)
--- 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.
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.11
3 2001/10/30 12:59:12
guus Exp $
+ $Id: protocol.c,v 1.28.4.11
6 2001/10/31 20:02:06
guus Exp $
*/
#include "config.h"
*/
#include "config.h"
@@
-232,11
+232,11
@@
cp
syslog(LOG_ERR, _("Peer %s had unknown identity (%s)"), c->hostname, c->name);
return -1;
}
syslog(LOG_ERR, _("Peer %s had unknown identity (%s)"), c->hostname, c->name);
return -1;
}
+ }
- if(read_rsa_public_key(c))
- {
- return -1;
- }
+ if(read_rsa_public_key(c))
+ {
+ return -1;
}
c->allow_request = METAKEY;
}
c->allow_request = METAKEY;
@@
-606,7
+606,7
@@
cp
*/
*/
- /* Create a edge_t for this connection */
+ /* Create a
n
edge_t for this connection */
c->edge = new_edge();
c->edge = new_edge();
@@
-682,7
+682,7
@@
cp
/* Run MST and SSSP algorithms */
mst_kruskal();
/* Run MST and SSSP algorithms */
mst_kruskal();
- sssp_bfs();
+ sssp_bfs(
0
);
cp
return 0;
}
cp
return 0;
}
@@
-874,6
+874,11
@@
cp
if(n)
{
/* Check if it matches */
if(n)
{
/* Check if it matches */
+
+ if(n->address != address || n->port != port)
+ syslog(LOG_DEBUG, _("Got %s from %s (%s) for %s which does not match existing entry"), "ADD_NODE", c->name, c->hostname, n->name);
+
+ return 0;
}
else
{
}
else
{
@@
-951,8
+956,7
@@
cp
if(address != n->address || port != n->port)
{
if(address != n->address || port != n->port)
{
- syslog(LOG_WARNING, _("Got %s from %s (%s) for %s which doesn't match"), "DEL_NODE", c->name, c->hostname, n->name);
- return 0;
+ syslog(LOG_WARNING, _("Got %s from %s (%s) for %s which does not match existing entry"), "DEL_NODE", c->name, c->hostname, n->name);
}
/* Tell the rest about the deleted node */
}
/* Tell the rest about the deleted node */
@@
-967,6
+971,9
@@
cp
/* Delete the node */
node_del(n);
/* Delete the node */
node_del(n);
+
+ mst_kruskal();
+ sssp_bfs(0);
cp
return 0;
}
cp
return 0;
}
@@
-1029,13
+1036,19
@@
cp
return -1;
}
return -1;
}
- /* Check if
nod
e already exists */
+ /* Check if
edg
e already exists */
e = lookup_edge(from, to);
if(e)
{
e = lookup_edge(from, to);
if(e)
{
- /* Check if it matches */
+ if(e->weight != weight || e->options != options)
+ {
+ syslog(LOG_ERR, _("Got %s from %s (%s) which does not match existing entry"), "ADD_EDGE", c->name, c->hostname);
+ return -1;
+ }
+
+ return 0;
}
else
{
}
else
{
@@
-1059,7
+1072,7
@@
cp
/* Run MST before or after we tell the rest? */
mst_kruskal();
/* Run MST before or after we tell the rest? */
mst_kruskal();
- sssp_bfs();
+ sssp_bfs(
0
);
cp
return 0;
}
cp
return 0;
}
@@
-1067,8
+1080,8
@@
cp
int send_del_edge(connection_t *c, edge_t *e)
{
cp
int send_del_edge(connection_t *c, edge_t *e)
{
cp
- return send_request(c, "%d %s %s %lx", DEL_EDGE,
- e->from->name, e->to->name, e->options);
+ return send_request(c, "%d %s %s %lx
%d
", DEL_EDGE,
+ e->from->name, e->to->name, e->options
, e->weight
);
}
int del_edge_h(connection_t *c)
}
int del_edge_h(connection_t *c)
@@
-1078,10
+1091,11
@@
int del_edge_h(connection_t *c)
char to_name[MAX_STRING_SIZE];
node_t *from, *to;
long int options;
char to_name[MAX_STRING_SIZE];
node_t *from, *to;
long int options;
+ int weight;
connection_t *other;
avl_node_t *node;
cp
connection_t *other;
avl_node_t *node;
cp
- if(sscanf(c->buffer, "%*d "MAX_STRING" "MAX_STRING" %lx
", from_name, to_name, &options) != 3
)
+ if(sscanf(c->buffer, "%*d "MAX_STRING" "MAX_STRING" %lx
%d", from_name, to_name, &options, &weight) != 4
)
{
syslog(LOG_ERR, _("Got bad %s from %s (%s)"), "DEL_EDGE",
c->name, c->hostname);
{
syslog(LOG_ERR, _("Got bad %s from %s (%s)"), "DEL_EDGE",
c->name, c->hostname);
@@
-1126,7
+1140,11
@@
cp
if(e)
{
if(e)
{
- /* Check if it matches */
+ if(e->weight != weight || e->options != options)
+ {
+ syslog(LOG_ERR, _("Got %s from %s (%s) which does not match existing entry"), "ADD_EDGE", c->name, c->hostname);
+ return -1;
+ }
}
else
{
}
else
{
@@
-1150,7
+1168,7
@@
cp
/* Run MST before or after we tell the rest? */
mst_kruskal();
/* Run MST before or after we tell the rest? */
mst_kruskal();
- sssp_bfs();
+ sssp_bfs(
1
);
cp
return 0;
}
cp
return 0;
}