summaryrefslogtreecommitdiffstats
path: root/PICA_node.c
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-12-05 00:34:53 +0000
committerAnton <anton@picapica>2014-12-05 04:35:38 +0400
commit540e7dc57888fcdac1e15c5cf971b3d62a8d7307 (patch)
tree20ab1785379e6f35f29a0d82953006265fe8c0dc /PICA_node.c
parent618cd7077bd8266bf3dfd26ddb752ab471af0d74 (diff)
downloadpica-pica-540e7dc57888fcdac1e15c5cf971b3d62a8d7307.tar.gz
pica-pica-540e7dc57888fcdac1e15c5cf971b3d62a8d7307.zip
new config option for node - disable_reserved_addrs
git-svn-id: svn://localhost/project_picapica/trunk@337 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'PICA_node.c')
-rwxr-xr-xPICA_node.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/PICA_node.c b/PICA_node.c
index 22e9f07..62dde61 100755
--- a/PICA_node.c
+++ b/PICA_node.c
@@ -635,10 +635,18 @@ switch (buf[0])
if (nodelink_search_by_ipv4addr(na_ipv4.addr, na_ipv4.port)) //connection with this node is already established
{
- PICA_debug3("disconnecting node %.16s:%hu - connection with this node is already established", inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port));
+ PICA_debug1("disconnecting node %.16s:%hu - connection with this node is already established", inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port));
return 0;
}
+ if (nodecfg.disable_reserved_addrs && PICA_is_reserved_addr_ipv4(na_ipv4.addr))
+ {
+ PICA_debug1("disconnecting node %.16s:%hu - private IP ranges are rejected by node configuration",
+ inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port)
+ );
+ return 0;
+ }
+
sprintf(na.addr,"%.16s",inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
na.port = ntohs(na_ipv4.port);
@@ -769,6 +777,7 @@ while(listleft)
//char addr[256];
struct newconn nc;
struct nodelink *nlp;
+ int skip_save = 0;
memset(na.addr,0,256);
memset(&nc,0,sizeof(struct newconn));
@@ -793,12 +802,20 @@ while(listleft)
// PICA_debug1("LINKED NODE:%s\n",inet_ntoa(*(struct in_addr*)&na_ipv4.addr));
// }
+ PICA_debug3("NODELIST item %.16s:%hu", inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port));
-
+ if (nodecfg.disable_reserved_addrs && PICA_is_reserved_addr_ipv4(na_ipv4.addr))
+ {
+ skip_save = 1;
+ PICA_debug1("Received NODELIST item %.16s:%hu is in private range, skipping",
+ inet_ntoa(*(struct in_addr*)&na_ipv4.addr), ntohs(na_ipv4.port)
+ );
+ }
listleft-=PICA_PROTO_NODELIST_ITEM_IPV4_SIZE;
break;
}
- PICA_nodeaddr_save(nodecfg.nodes_db_file, &na);//CONF filename
+ if (!skip_save)
+ PICA_nodeaddr_save(nodecfg.nodes_db_file, &na);//CONF filename
}
}
@@ -2907,6 +2924,12 @@ while(nap)
PICA_debug3("Skipping self address %.255s port %u", nap->addr, nap->port);
skip = 1;
}
+
+ if (nodecfg.disable_reserved_addrs && INADDR_NONE != inet_addr(nap->addr) && PICA_is_reserved_addr_ipv4(inet_addr(nap->addr)))
+ {
+ PICA_debug3("Skipping IP from private range %.255s port %u", nap->addr, nap->port);
+ skip = 1;
+ }
nl = nodelink_list_head;
//check if connection to node with current address is already established
@@ -2958,16 +2981,24 @@ PICA_debug1("nodecfg.config_file = %s", nodecfg.config_file);
PICA_debug1("nodecfg.announced_addr = %s",nodecfg.announced_addr);
PICA_debug1("nodecfg.listen_port = %s",nodecfg.listen_port);
PICA_debug1("nodecfg.nodes_db_file = %s",nodecfg.nodes_db_file);
+PICA_debug1("nodecfg.disable_reserved_addrs = %s", nodecfg.disable_reserved_addrs ? "yes" : "no");
if (!PICA_node_init())
return -1;
if (INADDR_NONE == inet_addr(nodecfg.announced_addr) || INADDR_ANY == inet_addr(nodecfg.announced_addr))
{
- PICA_fatal("announced_addr (%.16s) is invalid or not configured. Please set correct public IP address of your pica-node instance in config file",
+ PICA_fatal("announced_addr (%.16s) is invalid or not configured. Please set correct public IP address of your pica-node instance in config file.",
nodecfg.announced_addr
);
}
+
+if (nodecfg.disable_reserved_addrs && PICA_is_reserved_addr_ipv4(inet_addr(nodecfg.announced_addr)))
+ {
+ PICA_fatal("announced_addr (%.16s) is in private range and is unacceptable for global Internet. Private ranges are disabled by node configuration.",
+ nodecfg.announced_addr
+ );
+ }
PICA_node_joinskynet(nodecfg.nodes_db_file, nodecfg.announced_addr);//CONF-CONF имя файла с адресами узлов, свой адрес