Fix the forwardingrule databag

This commit is contained in:
Hugo Trippaers 2014-08-21 10:32:37 +02:00 committed by wilderrodrigues
parent 7fc3365459
commit 8c5dba31d0
2 changed files with 47 additions and 17 deletions

View File

@ -5,29 +5,56 @@ def merge(dbag, rules):
source_ip = rule["source_ip_address"]
destination_ip = rule["destination_ip_address"]
revoke = rule["revoke"]
newrule = dict()
newrule["public_ip"] = source_ip
newrule["internal_ip"] = destination_ip
if rules["type"] == "staticnatrules":
newrule["type"] = "staticnat"
elif rules["type"] == "forwardrules":
newrule["type"] = "forward"
newrule["public_ports"] = rule["source_port_range"]
newrule["internal_ports"] = rule["destination_port_range"]
newrule["protocol"] = rule["protocol"]
if not revoke:
if rules["type"] == "staticnatrules":
snatrule = dict()
snatrule["type"] = "staticnat"
snatrule["public_ip"] = source_ip
snatrule["internal_ip"] = destination_ip
dbag[source_ip] = ( snatrule )
dbag[source_ip] = [ newrule ]
elif rules["type"] == "forwardrules":
pfrule = dict()
pfrule["type"] = "forward"
pfrule["public_ip"] = source_ip
pfrule["public_ports"] = rule["source_port_range"]
pfrule["internal_ip"] = destination_ip
pfrule["interal_ports"] = rule["destination_port_range"]
pfrule["prootocol"] = rule["protocol"]
index = -1
if source_ip in dbag.keys():
for forward in dbag[source_ip]:
print "find duplicate here"
if ruleCompare(forward, newrule):
index = dbag[source_ip].index(forward)
if not index == -1:
dbag[source_ip][index] = newrule
else:
dbag[source_ip].append(newrule)
else:
dbag[source_ip] = ( pfrule )
elif revoke:
dbag[source_ip] = [ newrule ]
else:
if rules["type"] == "staticnatrules":
if source_ip in dbag.keys():
del dbag[source_ip]
elif rules["type"] == "forwardrules":
if source_ip in dbag.keys():
index = -1
for forward in dbag[source_ip]:
if ruleCompare(forward, newrule):
index = dbag[source_ip].index(forward)
print "removing index %s" % str(index)
if not index == -1:
del dbag[source_ip][index]
return dbag
# Compare function checks only the public side, those must be equal the internal details could change
def ruleCompare(ruleA, ruleB):
if not ruleA["type"] == ruleB["type"]:
return False
if ruleA["type"] == "staticnat":
return ruleA["public_ip"] == ruleB["public_ip"]
elif ruleA["type"] == "forward":
return ruleA["public_ip"] == ruleB["public_ip"] and ruleA["public_ports"] == ruleB["public_ports"] and ruleA["protocol"] == ruleB["protocol"]

View File

@ -65,7 +65,10 @@ class updateDataBag:
def process(self):
self.db = dataBag()
self.db.setKey( self.qFile.type )
if ( self.qFile.type == "staticnatrules" or self.qFile.type == "forwardrules"):
self.db.setKey("forwardingrules")
else:
self.db.setKey( self.qFile.type )
dbag = self.db.load( )
logging.info("Command of type %s received", self.qFile.type)