# * store <acl> and <nat> identifier # * acl and nat identifier is now composed of two parts: # (rule identifier, ruleset identifier) # * <duration> rename attribute "duration" to "seconds" # * <periodicity> rename attributes date_from, date_to, time_from, # time_to to day_from, day_to, hour_from, hour_to # - "3.0dev4" # - "3.0m3": add custom rules # # Old versions, no more supported: # - "3.0": first file format version RULESET_VERSION = "3.0.1" VALID_VERSIONS = ("3.0m3", "3.0dev4", "3.0dev5", "3.0dev6", "3.0.0", RULESET_VERSION) # Ruleset name have to be a valid filename RULESET_NAME_REGEX = safeFilenameRegex(1, 100) DIRECTORIES = { "ruleset": ACL_DIR, "template": TEMPLATE_DIR, } def checkRulesetName(name): if not RULESET_NAME_REGEX.match(name): raise RulesetError( tr("Invalid rule set name: invalid length or characters (%s)!"), name) def rulesetFilename(filetype, name, check_existing=False): checkRulesetName(name) directory = DIRECTORIES[filetype]
from os import unlink import weakref import threading from glob import glob from ufwi_rpcd.common import tr from ufwi_rpcd.common.error import exceptionAsUnicode from ufwi_rpcd.common.tools import abstractmethod, safeFilenameRegex from ufwi_rpcd.backend import RpcdError from ufwi_rpcd.backend.component import Component from ufwi_rpcd.backend.cron import scheduleRepeat from ufwi_rpcd.backend.exceptions import ConfigError # Should be a valid filename KEY_REGEX = safeFilenameRegex(3) DEFAULT_VOLATILE_TIMEOUT = 60 # seconds CLEANUP_PERIOD = 60 # seconds class LockError(RpcdError): pass class AlreadyAcquired(LockError): """ by_other is True if lock have been acquired by other """ def __init__(self, by_other, *args, **kwargs): self.by_other = by_other LockError.__init__(self, *args, **kwargs)