From: Barış Metin Date: Fri, 2 Oct 2009 14:24:39 +0000 (+0000) Subject: - fix writing sfatables rules X-Git-Tag: sfa-0.9-3~10 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=b940fd55d99f2929cd0d6b47dd6d75db714c90cd - fix writing sfatables rules - fix displaying empty element targets (like REJECT/ACCEPT) --- diff --git a/sfatables/commands/Add.py b/sfatables/commands/Add.py index f5193eb6..da02e869 100644 --- a/sfatables/commands/Add.py +++ b/sfatables/commands/Add.py @@ -27,7 +27,7 @@ class Add(Command): return "sfatables-%d-%s"%(last_rule_number+1,type) def call_gen(self, chain, type, dir, options): - filename = dir + "/"+options.name+".xml" + filename = os.path.join(dir, options.name+".xml") xmldoc = libxml2.parseFile(filename) p = xmldoc.xpathNewContext() @@ -53,7 +53,9 @@ class Add(Command): context[0].addChild(valueNode) filename = self.getnextfilename(type,chain) - file_path = sfatables_config + '/' + chain + '/' + filename + file_path = os.path.join(sfatables_config, chain, filename) + if not os.path.isdir(os.path.dirname(file_path)): + os.makedirs(os.path.dirname(file_path)) xmldoc.saveFile(file_path) p.xpathFreeContext() xmldoc.freeDoc() diff --git a/sfatables/commands/List.py b/sfatables/commands/List.py index b841a933..fcb14138 100644 --- a/sfatables/commands/List.py +++ b/sfatables/commands/List.py @@ -27,18 +27,22 @@ class List(Command): value_nodes = p.xpathEval("//rule/argument[value!='']/value") element_nodes = p.xpathEval("//argument[value!='']/parent::rule/@element") + print element_nodes, type, xmlextension_path if (len(element_nodes)>1): raise Exception("Invalid rule %s contains multiple elements."%xmlextension_path) - element = element_nodes[0].content + element = [] + argument_str = "" + if element_nodes: + element = element_nodes[0].content - names = [n.content for n in name_nodes] - values = [v.content for v in value_nodes] + names = [n.content for n in name_nodes] + values = [v.content for v in value_nodes] - name_values = zip(names,values) - name_value_pairs = map(lambda (n,v):n+'='+v, name_values) + name_values = zip(names,values) + name_value_pairs = map(lambda (n,v):n+'='+v, name_values) - argument_str = ",".join(name_value_pairs) + argument_str = ",".join(name_value_pairs) p.xpathFreeContext() xmldoc.freeDoc() @@ -65,7 +69,7 @@ class List(Command): return chain = command_options.args[0] - chain_dir = sfatables_config + "/" + chain + chain_dir = os.path.join(sfatables_config, chain) rule_list = self.get_rule_list(chain_dir) @@ -77,16 +81,20 @@ class List(Command): match_path = sfatables_config + '/' + chain + '/' + match_file target_path = sfatables_config + '/' + chain + '/' + target_file - + match_info = self.get_info ('match',match_path) target_info = self.get_info ('target',target_path) - pretty.push_row(["%d"%number, match_info['name'], match_info['arguments'], target_info['name'], target_info['element'], target_info['arguments']]) - - + pretty.push_row(["%d"%number, + match_info['name'], + match_info['arguments'], + target_info['name'], + target_info['element'], + target_info['arguments']]) + pretty.pprint() - +