X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfatables%2Fcommands%2FAdd.py;h=e7657ffff79361667daae388972295c404b7580f;hb=f2c5cd033b7f43896a32fca67f79f2979af1c44f;hp=f5193eb6d8a7fe5ca558c2521b710baa7358a9f3;hpb=6c41d17ff2f98c362ad1db112d22bede960d8202;p=sfa.git diff --git a/sfatables/commands/Add.py b/sfatables/commands/Add.py index f5193eb6..e7657fff 100644 --- a/sfatables/commands/Add.py +++ b/sfatables/commands/Add.py @@ -4,12 +4,11 @@ from sfatables.command import Command from sfatables.globals import * class Add(Command): - options = [('-A','--add')] - help = 'Add a rule to a chain' - matches = True - targets = True - def __init__(self): + self.options = [('-A','--add')] + self.help = 'Add a rule to a chain' + self.matches = True + self.targets = True return def getnextfilename(self,type,chain): @@ -27,7 +26,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() @@ -42,7 +41,7 @@ class Add(Command): option_name = option['name'] option_value = getattr(options,option_name) - if (hasattr(options,option_name)): + if (hasattr(options,option_name) and getattr(options,option_name)): context = p.xpathEval("//rule[@element='%s' or @element='*']/argument[name='%s']"%(element, option_name)) if (not context): raise Exception('Unknown option %s for match %s and element %s'%(option,option['name'], element)) @@ -53,7 +52,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()