def update_ossec_conf(new_conf=None): """ Replace wazuh configuration (ossec.conf) with the provided configuration. Parameters ---------- new_conf: str The new configuration to be applied. """ result = AffectedItemsWazuhResult( all_msg=f"Configuration was successfully updated" f"{' in specified node' if node_id != 'manager' else ''}", some_msg='Could not update configuration in some nodes', none_msg=f"Could not update configuration" f"{' in specified node' if node_id != 'manager' else ''}") backup_file = f'{common.ossec_conf}.backup' try: # Check a configuration has been provided if not new_conf: raise WazuhError(1125) # Check if the configuration is valid validate_wazuh_xml(new_conf, config_file=True) # Create a backup of the current configuration before attempting to replace it try: copyfile(common.ossec_conf, backup_file) except IOError: raise WazuhError(1019) # Write the new configuration and validate it write_ossec_conf(new_conf) is_valid = validate_ossec_conf() if not isinstance(is_valid, dict) or ('status' in is_valid and is_valid['status'] != 'OK'): raise WazuhError(1125) else: result.affected_items.append(node_id) exists(backup_file) and remove(backup_file) except WazuhError as e: result.add_failed_item(id_=node_id, error=e) finally: exists(backup_file) and safe_move(backup_file, common.ossec_conf) result.total_affected_items = len(result.affected_items) return result
def upload_decoder_file(filename: str, content: str, overwrite: bool = False) -> AffectedItemsWazuhResult: """Upload a new decoder file or update an existing one. Parameters ---------- filename : str Name of the decoder file. content : str Content of the file. It must be a valid XML file. overwrite : bool True for updating existing files. False otherwise. Returns ------- AffectedItemsWazuhResult """ result = AffectedItemsWazuhResult( all_msg='Decoder was successfully uploaded', none_msg='Could not upload decoder') full_path = join(common.user_decoders_path, filename) backup_file = '' try: if len(content) == 0: raise WazuhError(1112) validate_wazuh_xml(content) # If file already exists and overwrite is False, raise exception if not overwrite and exists(full_path): raise WazuhError(1905) elif overwrite and exists(full_path): backup_file = f'{full_path}.backup' delete_file_with_backup(backup_file, full_path, delete_decoder_file) upload_file(content, to_relative_path(full_path)) result.affected_items.append(to_relative_path(full_path)) result.total_affected_items = len(result.affected_items) backup_file and exists(backup_file) and remove(backup_file) except WazuhError as e: result.add_failed_item(id_=to_relative_path(full_path), error=e) finally: exists(backup_file) and safe_move( backup_file, full_path, permissions=0o0660) return result