Beispiel #1
0
def rulesetUpload(component, logger, filetype, input_filename, content, netcfg):

    # Extract ruleset name from the input filename
    name = basename(input_filename)
    if not name.lower().endswith(".xml"):
        raise RulesetError('File extension is not ".xml"!')
    name = name[:-4]

    # Ensure that the ruleset doesn't exist on disk
    rulesetFilename(filetype, name, check_existing=True)

    # Decode the content
    content = decodeFileContent(content)

    # Open the ruleset the check the consistency
    ruleset = Ruleset(component, logger, netcfg, read_only=True)
    ruleset.load(logger, filetype, name, content=content)
    if component.core.getMultisiteType() == MULTISITE_SLAVE:
        if exists(MULTISITE_TEMPLATE_FILENAME):
            template = MULTISITE_TEMPLATE_NAME
        else:
            template = None
        replaceTemplate(logger, ruleset, template)

    # Write the ruleset
    try:
        ruleset.save()
    except IOError, err:
        raise RulesetError(
            tr("Unable to write into the file %s (%s): %s!"),
            basename(ruleset.filename),
            ruleset.filetype,
            exceptionAsUnicode(err),
        )
Beispiel #2
0
def rulesetDownload(filetype, name):
    filename = rulesetFilename(filetype, name)
    try:
        with open(filename, "rb") as fp:
            content = fp.read()
    except IOError, err:
        raise RulesetError(tr('Unable to open "%s" (%s): %s!'), basename(filename), filetype, exceptionAsUnicode(err))
Beispiel #3
0
    def loadFile(self, ruleset_context, filetype, name,
    editable=False, from_template=None, action=None, ruleset_id=0,
    filename=None, content=None):
        # Log the action
        logger = ruleset_context.logger
        text = "Load %s: %s" % (filetype, name)
        if ruleset_id == 0:
            logger.info(text)
        else:
            logger.debug(text)

        if not content:
            # Get the filename
            if not filename:
                if filetype == "library":
                    filename = LIBRARY_FILENAME
                else:
                    filename = rulesetFilename(filetype, name)

            # Parse the XML file
            try:
                with open(filename) as fp:
                    ruleset = etree.parse(fp).getroot()
            except IOError, err:
                if err.errno == ENOENT:
                    if filetype == 'template':
                        message = tr('The "%s" template does not exist. It has been deleted or renamed.')
                    else:
                        message = tr('The "%s" rule set does not exist. It has been deleted or renamed.')
                    raise RulesetError(message, name)
                else:
                    raise RulesetError(
                        tr('Unable to open file "%s" (%s): %s'),
                        basename(filename), filetype, exceptionAsUnicode(err))
Beispiel #4
0
 def apply(self):
     self.error('Create ruleset "%s"' % self.name)
     logger = self.getLogger()
     ruleset = Ruleset(self.component, logger, self.netcfg)
     ruleset.create(logger, "ruleset", self.netcfg, base_template=MULTISITE_TEMPLATE_NAME)
     ruleset.saveAs(self.name)
     self.filename = rulesetFilename("ruleset", self.name)
Beispiel #5
0
 def __init__(self, logger, component, netcfg, ruleset, template, use_template):
     LoggerChild.__init__(self, logger)
     self.component = component
     self.netcfg = netcfg
     self.ruleset = ruleset  # Ruleset name (str)
     self.template = template
     self.use_template = use_template
     self.filename = rulesetFilename("ruleset", self.ruleset)
     self.old = File(self.filename + ".old", False)
Beispiel #6
0
 def prepare(self):
     self.filename = None
     index = 2
     name = "multisite"
     while exists( rulesetFilename("ruleset", name) ):
         name = "multisite-%s" % index
         index += 1
     self.name = name
     for callback in self.name_callbacks:
         callback(name)
Beispiel #7
0
def rulesetDelete(core, filetype, name):
    """
    Delete the specified ruleset.
    """
    if (filetype == "template") and (core.getMultisiteType() == MULTISITE_SLAVE):
        raise RulesetError(tr("Can not delete a template from a slave."))

    filename = rulesetFilename(filetype, name)
    try:
        unlink(filename)
    except IOError, err:
        raise RulesetError(tr("Unable to delete the file %s (%s): %s!"), name, filetype, exceptionAsUnicode(err))
Beispiel #8
0
    def load(self, logger, filetype, name, filename=None, content=None):
        self.name = name
        if filename:
            self.filename = filename
        else:
            self.filename = rulesetFilename(filetype, name)
        self.filetype = filetype
        self.is_template = (filetype == "template")

        loader_context = LoadRulesetContext(logger)
        # Load an existing ruleset/template
        self.loadFile(loader_context, self.filetype, self.name,
            editable=True, filename=self.filename, content=content,
            ruleset_id=0)
        self.updateFusion()
        return self.formatRuleset(loader_context)
Beispiel #9
0
 def saveAs(self, name):
     filename = rulesetFilename(self.filetype, name, check_existing=True)
     self.write(filename, name)
     return self.formatRuleset()