return "sfatables-%d-%s"%(last_rule_number+1,type)
- def call(self, command_options, match_options, target_options):
- filename = match_dir + "/"+match_options.match_name+".xml"
+ def call_gen(self, dir, options):
+ filename = dir + "/"+options.name+".xml"
xmldoc = libxml2.parseFile(filename)
p = xmldoc.xpathNewContext()
- supplied_arguments = match_options.arguments
+ supplied_arguments = options.arguments
for option in supplied_arguments:
option_name = option['name']
- option_value = getattr(match_options,option_name)
+ option_value = getattr(options,option_name)
- if (hasattr(match_options,option_name)):
+ if (hasattr(options,option_name)):
context = p.xpathEval("//rule/argument[name='%s']"%option_name)
if (not context):
raise Exception('Unknown option %s for match %s'%(option,option['name']))
xmldoc.freeDoc()
return True
+
+ def call(self, command_options, match_options, target_options):
+ ret = self.call_gen(match_dir, match_options)
+ if (ret):
+ ret = self.call_gen(target_dir, target_options)
+
+ return ret
from optparse import OptionParser
from sfatables import commands, matches, targets
from sfatables.xmlextension import Xmlextension
+from sfatables.globals import *
def load_commands(module, list):
command_dict={}
return command_dict
-def load_xml_extensions(module, list):
+def load_xml_extensions(module, dir, list):
ext_dict={}
for ext_name in list:
- module = Xmlextension(ext_name)
+ module = Xmlextension(dir, ext_name)
ext_dict[ext_name]=module
return ext_dict
if (command.matches):
if (len(pargs)<2):
raise Exception("Must specify match for this command")
- match_dict = load_xml_extensions("sfatables.matches",matches.all)
+ match_dict = load_xml_extensions("sfatables.matches",match_dir, matches.all)
match_parser = create_parser_xml_ext(match_dict)
matches_str = ",".join(match_dict.keys())
- match_parser.add_option('-m','--match',dest='match_name',help='Match name (one of %s)'%matches_str, metavar = 'MATCH')
+ match_parser.add_option('-m','--match',dest='name',help='Match name (one of %s)'%matches_str, metavar = 'MATCH')
(match_options, args) = match_parser.parse_args(pargs[1])
try:
- match_name = match_options.match_name
+ name = match_options.name
except Exception:
print "Must specify match name with -m"
- if (match_dict.has_key(match_name)):
- setattr(match_options, 'arguments', match_dict[match_name].arguments)
+ if (match_dict.has_key(name)):
+ setattr(match_options, 'arguments', match_dict[name].arguments)
else:
- raise Exception('Match %s not found'%match_name)
+ raise Exception('Match %s not found'%name)
else:
match_options=None
if (command.targets):
if (len(pargs)<3):
raise Exception("Must specify a target for this command")
- target_dict = load_xml_extensions("sfatables.targets",targets.all)
+ target_dict = load_xml_extensions("sfatables.targets",target_dir,targets.all)
target_parser = create_parser_xml_ext(target_dict)
targets_str = ",".join(target_dict.keys())
target_parser.add_option('-j','--jump',dest='target_name',help='Target name (one of %s)'%targets, metavar = 'TARGET')
except Exception:
print "Must specify target name with -m"
-# if (target_dict.has_key(target_name)):
-# setattr(target_options, 'arguments', target_dict[target_name].arguments)
-# else:
-# raise Exception('Target %s not found'%target_name)
+ if (target_dict.has_key(target_name)):
+ setattr(target_options, 'arguments', target_dict[target_name].arguments)
+ else:
+ raise Exception('Target %s not found'%target_name)
else:
target_options = None
if __name__=='__main__':
main()
+if __name__=='__main__':
+ main()
context = {'match':None,'target':None}
def load_xml_extension (self, type, chain, rule_number):
- filename = sfatables_config+"/"+chain+"/"+"sfatables-%d-%s.xml"%(rule_number,type)
+ filename = sfatables_config+"/"+chain+"/"+"sfatables-%d-%s"%(rule_number,type)
self.xmldoc = libxml2.parseFile(filename)
p = self.xmldoc.xpathNewContext()
processor = p.xpathEval('//processor/@filename')
- self.processor[type] = processor[0].content
+ self.processors[type] = processor[0].content
self.arguments[type] = p.xpathEval('//rule')
p.xpathFreeContext()