#!/usr/bin/env python
"""
Countermeasures production driver - executes one or more countermeasures
Copyright 2023 Fortinet, Inc. All Rights Reserved.
[email protected]
"""
import os
import sys
platform = sys.platform.lower()
if "freebsd" in platform:
sys.path.insert(0, "/usr/local/fm-agent/lib/dependencies")
sys.path.insert(0, "/usr/local/fm-agent/lib/library")
sys.path.insert(0, "/usr/local/fm-agent/lib")
elif 'darwin' == platform:
filePath = os.path.realpath(__file__)
agent_bin = os.path.split(filePath)[0]
agent_version_dir = os.path.split(agent_bin)[0]
architecture = None
import subprocess
with subprocess.Popen('arch', shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
try:
stdout, stderr = p.communicate(timeout=5.0)
architecture = stdout.decode('utf-8').strip()
except subprocess.TimeoutExpired:
p.kill()
if architecture is None:
sys.stderr.write('Could not determine machine architecture\n')
sys.exit(-12)
sys_paths = [
'lib/dependencies',
'lib/library',
'lib'
]
if architecture:
sys_paths.append('lib/dependencies/python{}.{}/{}'.format(
sys.version_info.major,
sys.version_info.minor,
architecture
))
for sp in sys_paths:
sys.path.insert(
0,
os.path.join(agent_version_dir, sp)
)
else:
sys.path.insert(0, "/usr/lib/fm-agent")
sys.path.insert(0, "/usr/lib/fm-agent/dependencies")
# Add platform/version-specific dependency directory if present
version = sys.version_info
sys.path.insert(0, "/usr/lib/fm-agent/dependencies/%s/python%s.%s" % (sys.platform, version[0], version[1]))
# Add the main agent code directory
sys.path.insert(0, "/usr/lib/fm-agent/library")
import countermeasures.cm_driver as cm_driver
cm_driver.BRAND = "fm"
cm_driver.USER = "fm-agent"
cm_driver.PKG_DIR = "fm-agent"
if "freebsd" in platform:
cm_driver.BASE_CUSTOM_PLUGIN_DIR = "/usr/local/share/fm-agent/countermeasures"
cm_driver.BASE_CONFIG_DIR = "/usr/local/etc"
cm_driver.BIN_DIR = "/usr/local/fm-agent/bin"
cm_driver.LIB_DIR = "/usr/local/fm-agent/lib"
elif 'darwin' == platform:
base_dir = '/usr/local/FortiMonitor/agent'
cm_driver.BIN_DIR = os.path.join(base_dir, 'latest/bin')
cm_driver.BASE_CONFIG_DIR = os.path.join(base_dir, 'config')
cm_driver.BASE_CUSTOM_PLUGIN_DIR = os.path.join(base_dir, 'share', cm_driver.PKG_DIR, 'countermeasures')
cm_driver.BASE_DATA_DIR = os.path.join(base_dir, 'data')
cm_driver.BASE_LOG_DIR = os.path.join(base_dir, 'logs')
cm_driver.LIB_DIR = os.path.join(base_dir, 'latest/lib')
else:
cm_driver.BIN_DIR = "/usr/bin/fm-agent"
cm_driver.BASE_CONFIG_DIR = "/etc"
cm_driver.BASE_CUSTOM_PLUGIN_DIR = "/usr/share/fm-agent/countermeasures"
cm_driver.BASE_DATA_DIR = "/var/lib"
cm_driver.BASE_LOG_DIR = "/var/log"
cm_driver.LIB_DIR = "/usr/lib/fm-agent"
cm_driver.main()