コード例 #1
0
ファイル: config.py プロジェクト: DynamiteAI/dynamite-nsm
    def commit(self,
               out_file_path: Optional[str] = None,
               backup_directory: Optional[str] = None) -> None:
        """Write out an updated configuration file, and optionally backup the old one.
        Args:
            out_file_path: The path to the output file; if none given overwrites existing
            backup_directory: The path to the backup directory
        Returns:
            None
        """

        # Backup old configuration first
        out_file_name = os.path.basename(out_file_path)
        backup_file_name = out_file_name + '.backup'
        self.formatted_data = f'-Xms{self.initial_memory}\n-Xmx{self.maximum_memory}\n' + \
                              '\n'.join(self._raw_extra_params)
        if backup_directory:
            utilities.backup_configuration_file(
                out_file_path,
                backup_directory,
                destination_file_prefix=backup_file_name)
        try:
            with open(out_file_path, 'w') as config_raw_f:
                config_raw_f.write(self.formatted_data)
        except IOError:
            raise general_exceptions.WriteConfigError(
                'An error occurred while writing the configuration file to disk.'
            )
        utilities.set_permissions_of_file(out_file_path, 644)
コード例 #2
0
ファイル: config.py プロジェクト: DynamiteAI/dynamite-nsm
    def commit(self,
               out_file_path: Optional[str] = None,
               backup_directory: Optional[str] = None) -> None:
        """Write out an updated configuration file, and optionally backup the old one.
        Args:
            out_file_path: The path to the output file; if none given overwrites existing
            backup_directory: The path to the backup directory
        Returns:
            None
        """

        # Backup old configuration first
        out_file_name = os.path.basename(out_file_path)
        backup_file_name = out_file_name + '.backup'
        if backup_directory:
            utilities.backup_configuration_file(
                out_file_path,
                backup_directory,
                destination_file_prefix=backup_file_name)
        try:
            with open(out_file_path, 'w') as config_raw_f:
                config_raw_f.write(self.formatted_data)
        except IOError:
            raise general_exceptions.WriteConfigError(
                'An error occurred while writing the configuration file to disk.'
            )
        utilities.set_permissions_of_file(out_file_path, 644)
        self.logger.warning(
            'Configuration updated. Restart this service to apply.')
コード例 #3
0
ファイル: config.py プロジェクト: tutugreen/dynamite-nsm
    def write_config(self):
        source_configuration_file_path = os.path.join(self.install_directory,
                                                      'etc', 'networks.cfg')
        if self.backup_configuration_directory:
            destination_configuration_path = os.path.join(
                self.backup_configuration_directory, 'networks.cfg.d')
            try:
                utilities.backup_configuration_file(
                    source_configuration_file_path,
                    destination_configuration_path,
                    destination_file_prefix='networks.cfg.backup')
            except general_exceptions.WriteConfigError:
                raise zeek_exceptions.WriteZeekConfigError(
                    'Zeek configuration failed to write [networks.cfg].')
            except general_exceptions.ReadConfigError:
                raise zeek_exceptions.ReadsZeekConfigError(
                    'Zeek configuration failed to read [networks.cfg].')

        try:
            with open(source_configuration_file_path, 'w') as net_config:
                lines = []
                for k, v in self.network_config.items():
                    if v:
                        line = '{0: <64} {1}\n'.format(k, v)
                    else:
                        line = '{0: <64} {1}\n'.format(k,
                                                       'Undocumented network')
                    lines.append(line)
                net_config.writelines(lines)
        except IOError as e:
            raise zeek_exceptions.WriteZeekConfigError(
                "General error while attempting to write new networks.cfg file to {}; {}"
                .format(self.install_directory, e))
コード例 #4
0
    def write_config(self):

        def update_dict_from_path(path, value):
            """
            :param path: A tuple representing each level of a nested path in the yaml document
                        ('vars', 'address-groups', 'HOME_NET') = /vars/address-groups/HOME_NET
            :param value: The new value
            :return: None
            """
            partial_config_data = self.config_data
            for i in range(0, len(path) - 1):
                try:
                    partial_config_data = partial_config_data[path[i]]
                except KeyError:
                    pass
            partial_config_data.update({path[-1]: value})

        # Backup old configuration first
        source_configuration_file_path = os.path.join(self.install_directory, 'filebeat.yml')
        if self.backup_configuration_directory:
            destination_configuration_path = os.path.join(self.backup_configuration_directory, 'filebeat.yml.d')
            try:
                utilities.backup_configuration_file(source_configuration_file_path, destination_configuration_path,
                                                    destination_file_prefix='filebeat.yml.backup')
            except general_exceptions.WriteConfigError:
                raise filebeat_exceptions.WriteFilebeatConfigError(
                    'Suricata configuration failed to write [filebeat.yml].')
            except general_exceptions.ReadConfigError:
                raise filebeat_exceptions.ReadFilebeatConfigError(
                    'Suricata configuration failed to read [filebeat.yml].')

        for k, v in vars(self).items():
            if k not in self.tokens:
                continue
            token_path = self.tokens[k]
            update_dict_from_path(token_path, v)
        try:
            with open(source_configuration_file_path, 'w') as configyaml:
                dump(self.config_data, configyaml, default_flow_style=False)
                utilities.set_permissions_of_file(source_configuration_file_path, 744)
        except IOError:
            raise filebeat_exceptions.WriteFilebeatConfigError("Could not locate {}".format(self.install_directory))
        except Exception as e:
            raise filebeat_exceptions.WriteFilebeatConfigError(
                "General error while attempting to write new filebeat.yml file to {}; {}".format(
                    self.install_directory, e))
コード例 #5
0
ファイル: config.py プロジェクト: tutugreen/dynamite-nsm
    def write_config(self):
        """
        Overwrite the existing local.zeek config with changed values
        """
        output_str = ''

        # Backup old configuration first
        source_configuration_file_path = os.path.join(
            self.configuration_directory, 'site', 'local.zeek')
        if self.backup_configuration_directory:
            destination_configuration_path = os.path.join(
                self.backup_configuration_directory, 'local.zeek.d')
            try:
                utilities.backup_configuration_file(
                    source_configuration_file_path,
                    destination_configuration_path,
                    destination_file_prefix='local.zeek.backup')
            except general_exceptions.WriteConfigError:
                raise zeek_exceptions.WriteZeekConfigError(
                    'Zeek configuration failed to write [local.zeek].')
            except general_exceptions.ReadConfigError:
                raise zeek_exceptions.ReadsZeekConfigError(
                    'Zeek configuration failed to read [local.zeek].')
        for e_script in self.list_enabled_scripts():
            output_str += '@load {}\n'.format(e_script)
        for d_script in self.list_disabled_scripts():
            output_str += '#@load {}\n'.format(d_script)
        for e_sig in self.list_enabled_sigs():
            output_str += '@load-sigs {}\n'.format(e_sig)
        for d_sig in self.list_disabled_sigs():
            output_str += '@load-sigs {}\n'.format(d_sig)
        for rdef, val in self.list_redefinitions():
            output_str += 'redef {} = {}\n'.format(rdef, val)
        try:
            with open(source_configuration_file_path, 'w') as f:
                f.write(output_str)
        except IOError:
            raise zeek_exceptions.WriteZeekConfigError(
                "Could not locate {}".format(self.configuration_directory))
        except Exception as e:
            raise zeek_exceptions.WriteZeekConfigError(
                "General error while attempting to write new local.zeek file to {}; {}"
                .format(self.configuration_directory, e))
コード例 #6
0
ファイル: config.py プロジェクト: tutugreen/dynamite-nsm
    def write_config(self):
        """
        Overwrite the existing node.cfg with changed values
        """
        source_configuration_file_path = os.path.join(self.install_directory,
                                                      'etc', 'node.cfg')
        if self.backup_configuration_directory:
            destination_configuration_path = os.path.join(
                self.backup_configuration_directory, 'node.cfg.d')
            try:
                utilities.backup_configuration_file(
                    source_configuration_file_path,
                    destination_configuration_path,
                    destination_file_prefix='node.cfg.backup')
            except general_exceptions.WriteConfigError:
                raise zeek_exceptions.WriteZeekConfigError(
                    'Zeek configuration failed to write [node.cfg].')
            except general_exceptions.ReadConfigError:
                raise zeek_exceptions.ReadsZeekConfigError(
                    'Zeek configuration failed to read [node.cfg].')

        config = ConfigParser()
        for section in self.node_config.keys():
            for k, v in self.node_config[section].items():
                try:
                    config.add_section(section)
                except Exception:  # Duplicate section
                    pass
                config.set(section, k, str(v))
        try:
            with open(source_configuration_file_path, 'w') as configfile:
                config.write(configfile)
        except IOError:
            raise zeek_exceptions.WriteZeekConfigError(
                "Could not locate {}".format(self.install_directory))
        except Exception as e:
            raise zeek_exceptions.WriteZeekConfigError(
                "General error while attempting to write new node.cfg file to {}; {}"
                .format(self.install_directory, e))
コード例 #7
0
ファイル: config.py プロジェクト: DynamiteAI/dynamite-nsm
    def commit(self,
               out_file_path: Optional[str] = None,
               backup_directory: Optional[str] = None,
               top_text: Optional[str] = None) -> None:
        """Write out an updated configuration file, and optionally backup the old one.
        Args:
            out_file_path: The path to the output file; if none given overwrites existing
            backup_directory: The path to the backup directory
            top_text: The text to be appended at the top of the config file (typically used for YAML version header)
        Returns:
            None
        """
        out_file_name = os.path.basename(out_file_path)
        backup_file_name = out_file_name + '.backup'

        def update_dict_from_path(path, value) -> None:
            """Update the internal YAML dictionary object with the new values from our config
            Args:
                path: A tuple representing each level of a nested path in the yaml document ('vars', 'address-groups', 'HOME_NET') = /vars/address-groups/HOME_NET
                value: The new value
            Returns:
                 None
            """
            partial_config_data = self.config_data
            if len(path) > 1:
                for i in range(0, len(path) - 1):
                    k = path[i]
                    if isinstance(partial_config_data, dict):
                        partial_config_data = partial_config_data[k]
                    elif isinstance(partial_config_data, list):
                        for list_entry in partial_config_data:
                            if isinstance(list_entry, dict):
                                if k in list_entry.keys():
                                    partial_config_data = list_entry[k]
                    else:
                        break
            if value is None:
                return
            partial_config_data.update({path[-1]: value})

        # Backup old configuration first
        if backup_directory:
            utilities.backup_configuration_file(
                out_file_path,
                backup_directory,
                destination_file_prefix=backup_file_name)

        for k, v in vars(self).items():
            if k not in self.extract_tokens:
                continue
            token_path = self.extract_tokens[k]
            update_dict_from_path(token_path, v)
        try:
            with open(out_file_path, 'w') as config_yaml_f:
                if top_text:
                    config_yaml_f.write(f'{top_text}\n')
                try:
                    dump(self.config_data,
                         config_yaml_f,
                         default_flow_style=False,
                         Dumper=NoAliasDumper)
                except RecursionError:
                    dump(self.config_data,
                         config_yaml_f,
                         default_flow_style=False)
        except IOError:
            raise general_exceptions.WriteConfigError(
                'An error occurred while writing the configuration file to disk.'
            )
        utilities.set_permissions_of_file(out_file_path, 644)
        self.logger.warning(
            'Configuration updated. Restart this service to apply.')