summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-20 15:11:53 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-07-20 15:11:53 -0700
commit38d34a74954cff473da68439c585d191dffe74c3 (patch)
tree71b07d829a013d41979df38c0acd8db0535063b6 /controller
parentfb4c3dd8d446efc2ca3324da2d8cefda88e402b0 (diff)
downloadinfinitytier-38d34a74954cff473da68439c585d191dffe74c3.tar.gz
infinitytier-38d34a74954cff473da68439c585d191dffe74c3.zip
Proper handling of NULL entry for etherType in rules table.
Diffstat (limited to 'controller')
-rw-r--r--controller/SqliteNetworkController.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/controller/SqliteNetworkController.cpp b/controller/SqliteNetworkController.cpp
index 537548c4..307646d1 100644
--- a/controller/SqliteNetworkController.cpp
+++ b/controller/SqliteNetworkController.cpp
@@ -415,9 +415,15 @@ NetworkController::ResultCode SqliteNetworkController::doNetworkConfigRequest(co
sqlite3_reset(_sGetEtherTypesFromRuleTable);
sqlite3_bind_text(_sGetEtherTypesFromRuleTable,1,network.id,16,SQLITE_STATIC);
while (sqlite3_step(_sGetEtherTypesFromRuleTable) == SQLITE_ROW) {
- int et = sqlite3_column_int(_sGetEtherTypesFromRuleTable,0);
- if ((et >= 0)&&(et <= 0xffff))
- allowedEtherTypes.push_back(et);
+ if (sqlite3_column_type(_sGetEtherTypesFromRuleTable,0) == SQLITE_NULL) {
+ allowedEtherTypes.clear();
+ allowedEtherTypes.push_back(0); // NULL 'allow' matches ANY
+ break;
+ } else {
+ int et = sqlite3_column_int(_sGetEtherTypesFromRuleTable,0);
+ if ((et >= 0)&&(et <= 0xffff))
+ allowedEtherTypes.push_back(et);
+ }
}
std::sort(allowedEtherTypes.begin(),allowedEtherTypes.end());
allowedEtherTypes.erase(std::unique(allowedEtherTypes.begin(),allowedEtherTypes.end()),allowedEtherTypes.end());