check_sys/core/config.py

104 lines
3.5 KiB
Python

#!/usr/bin/env python3
import yaml
from utils import ConfigError
# Constantes
HIGH = "high"
MEDIUM = "medium"
LOW = "low"
AUDIT_SYSTEM = [
"sysctl",
"postfix",
]
AUDIT_APPLICATION = [
'keywords',
'calls',
]
def generateConfig() -> dict:
config = dict()
# System
config["system"] = dict()
config["system"]["postfix"] = dict()
config["system"]["postfix"]["postfix_file"] = "/etc/postfix/main.cf"
config["system"]["sysctl"] = dict()
config["system"]["sysctl"]["sysctl_file"] = "/etc/sysctl.conf"
config["system"]["exclude_plugins"] = list()
# Application
config["application"] = dict()
config["application"]["pattern_file"] = list()
return config
def _get_exclude_plugins():
pass
def parsingConfigFile(filename, configs):
# This function overwrite the config
try:
if not filename.endswith(".yaml"):
raise ConfigError(
"You must specified a YAML config file",
filename
)
with open(filename, 'rb') as f:
yamlConfig = yaml.safe_load(f)
# Mapping config file to the config dict
# TODO: recursive function
for category in yamlConfig:
if "system" in category:
for plugin in yamlConfig["system"]:
if plugin not in configs["system"]:
raise ConfigError(
f"{plugin} unknown",
filename
)
for flag in yamlConfig["system"][plugin]:
try:
if flag is not None:
if isinstance(configs["system"][plugin], list):
configs["system"][plugin].append(flag)
else:
if flag not in configs["system"][plugin]:
raise ConfigError(
f"{flag} unknown",
filename
)
configs["system"][plugin][flag] = yamlConfig["system"][plugin][flag]
except TypeError as e:
raise e
#if "application" in category:
# for plugin in yamlConfig["application"]:
# for flag in yamlConfig["application"][plugin]:
# try:
# configs["application"][plugin][flag] = yamlConfig["application"][plugin][flag]
# except TypeError:
# pass
#fdata = f.read()
#lines = fdata.splitlines()
#for line in lines:
# line = line.decode('utf-8')
# try:
# sLine = line.split("=")
# flag = sLine[0].strip()
# value = sLine[1].strip()
# if flag in configs:
# if flag == "exclude_plugins":
# value = value.replace("\"", "")
# value = value.split(",")
# configs[flag] = value
# except IndexError:
# pass
except FileNotFoundError:
print(f"Config file {filename} not found. Bypass it")