#!/usr/bin/env python """ Countermeasures production driver - executes one or more countermeasures Copyright 2023 Fortinet, Inc. All Rights Reserved. fm-ops@fortinet.com """ 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()