summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-07-12 15:00:30 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-07-12 15:00:30 -0700
commit89125150112fecca2372e5531bfefe6becd91129 (patch)
tree417c57c2b962aa7c5053a7422ecc510965ac7681
parent6ec3464ee94dc9059477c6ef8f7c4d7e4045b914 (diff)
downloadinfinitytier-89125150112fecca2372e5531bfefe6becd91129.tar.gz
infinitytier-89125150112fecca2372e5531bfefe6becd91129.zip
Fix to fix to GitHub issue #352
-rw-r--r--service/OneService.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/service/OneService.cpp b/service/OneService.cpp
index 71bf8e68..13820f5c 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -1092,6 +1092,16 @@ public:
}
}
+ // Match only an IP from a vector of IPs -- used in syncManagedStuff()
+ bool matchIpOnly(const std::vector<InetAddress> &ips,const InetAddress &ip) const
+ {
+ for(std::vector<InetAddress>::const_iterator i(ips.begin());i!=ips.end();++i) {
+ if (i->ipsEqual(ip))
+ return true;
+ }
+ return false;
+ }
+
// Apply or update managed IPs for a configured network (be sure n.tap exists)
void syncManagedStuff(NetworkState &n,bool syncIps,bool syncRoutes)
{
@@ -1136,7 +1146,7 @@ public:
// Nuke applied routes that are no longer in n.config.routes[] and/or are not allowed
for(std::list<ManagedRoute>::iterator mr(n.managedRoutes.begin());mr!=n.managedRoutes.end();) {
bool haveRoute = false;
- if ( (checkIfManagedIsAllowed(n,mr->target())) && ((!mr->via())||(std::find(myIps.begin(),myIps.end(),mr->via()) == myIps.end())) ) {
+ if ( (checkIfManagedIsAllowed(n,mr->target())) && ((mr->via().ss_family != mr->target().ss_family)||(!matchIpOnly(myIps,mr->via()))) ) {
for(unsigned int i=0;i<n.config.routeCount;++i) {
const InetAddress *const target = reinterpret_cast<const InetAddress *>(&(n.config.routes[i].target));
const InetAddress *const via = reinterpret_cast<const InetAddress *>(&(n.config.routes[i].via));
@@ -1158,7 +1168,7 @@ public:
const InetAddress *const target = reinterpret_cast<const InetAddress *>(&(n.config.routes[i].target));
const InetAddress *const via = reinterpret_cast<const InetAddress *>(&(n.config.routes[i].via));
- if ( (!checkIfManagedIsAllowed(n,*target)) || ((via->ss_family == target->ss_family)&&(std::find(myIps.begin(),myIps.end(),*via) != myIps.end())) )
+ if ( (!checkIfManagedIsAllowed(n,*target)) || ((via->ss_family == target->ss_family)&&(matchIpOnly(myIps,*via))) )
continue;
bool haveRoute = false;