def read_config(self, *args, **kwargs): try: serialized = self.core.config_manager.get(self.MASTER_KEY) except (ConfigError, KeyError): self.warning(tr('Syslog export not configured, default values loaded.')) self.syslog_export_cfg = SyslogExportConf() else: self.syslog_export_cfg = SyslogExportConf.deserialize(serialized)
def service_setSyslogExportConfig(self, context, serialized, message): self.syslog_export_cfg = SyslogExportConf.deserialize(serialized) valid, error_message = self.syslog_export_cfg.isValidWithMsg() if not valid: raise NuConfError(SYSLOG_EXPORT_BAD_CONFIGURATION, tr("Error in syslog export configuration.") + " " + error_message) self.save_config(message, context)
class SyslogExportComponent(ConfigServiceComponent): """ Export logs (firewall logs for now) through syslog. """ NAME = "syslog_export" MASTER_KEY = NAME VERSION = "1.0" ACLS = {} CONFIG_DEPENDS = () REQUIRES = ('config', ) if EDENWALL: REQUIRES += ('license',) ROLES = { 'conf_read': set(('getSyslogExportConfig', 'runtimeFiles')), 'conf_write': set(('setSyslogExportConfig',)), } INIT_SCRIPT = "ulogd" TYPES = {} def init(self, core): ConfigServiceComponent.init(self, core) self.core = core try: self.sharedir = self.core.config.get('CORE', 'sharedir') except: self.sharedir = DEFAULT_SHAREDIR self.script_dir = os.path.join(self.sharedir, 'scripts') self.addConfFile(_ULOGD_CONF, 'root:root', '0644') self.addConfFile(_RSYSLOG_CONF, 'root:root', '0644') def read_config(self, *args, **kwargs): try: serialized = self.core.config_manager.get(self.MASTER_KEY) except (ConfigError, KeyError): self.warning(tr('Syslog export not configured, default values loaded.')) self.syslog_export_cfg = SyslogExportConf() else: self.syslog_export_cfg = SyslogExportConf.deserialize(serialized) def genConfigFiles(self, responsible): servers = self.syslog_export_cfg.servers for server in servers: server["proto_code"] = "@" try: if server["protocol"] == "tcp": server["proto_code"] = "@@" elif server["protocol"] == "relp": server["proto_code"] = ":omrelp:" except KeyError: pass if "port" not in server: server["port"] = 514 template_variables = { 'enabled': self.syslog_export_cfg.enabled, 'components': self.syslog_export_cfg.components, 'servers': servers, } self.generate_configfile(template_variables) def should_run(self, responsible): return True @inlineCallbacks def apply_config(self, responsible, arg, modified_paths): self.read_config() yield self.genConfigFiles(responsible) for initscript, daemon in ((self.get_initscript(), self.INIT_SCRIPT), ("/etc/init.d/rsyslog", 'rsyslog'),): cmd = (initscript, 'restart',) try: yield deferToThread(self.runCommandAsRootAndCheck, cmd) except RunCommandError: #Why do we ignore errors? self.error("Restart of %s server failed." % daemon) def save_config(self, message, context=None): with self.core.config_manager.begin(self, context) as cm: try: cm.delete(self.MASTER_KEY) except ConfigError: pass cm.set(self.MASTER_KEY, self.syslog_export_cfg.serialize()) cm.commit(message) def get_ports(self): return [] # Services: def service_getSyslogExportConfig(self, context): return self.syslog_export_cfg.serialize() def service_setSyslogExportConfig(self, context, serialized, message): self.syslog_export_cfg = SyslogExportConf.deserialize(serialized) valid, error_message = self.syslog_export_cfg.isValidWithMsg() if not valid: raise NuConfError(SYSLOG_EXPORT_BAD_CONFIGURATION, tr("Error in syslog export configuration.") + " " + error_message) self.save_config(message, context) def service_runtimeFiles(self, context): return {} def service_runtimeFilesModified(self, context): pass