30int main(
int argc,
char** argv) {
31 std::string config_file =
"/etc/bastionguard-secure-connectiond/default-config.json";
32 std::string rules_path_override;
33 std::string socket_override;
34 std::string log_file_override;
35 std::string fw_config_override;
36 std::string proc_monitor_method_override;
37 std::uint16_t queue_num_override = 0;
38 bool set_queue_num_override =
false;
39 bool intercept_unknown_override =
false;
40 bool set_intercept_override =
false;
41 bool log_utc_override =
true;
42 bool set_log_utc_override =
false;
43 bool log_micro_override =
false;
44 bool set_log_micro_override =
false;
45 int log_level_override = -1;
47 for (
int i = 1; i < argc; ++i) {
48 std::string arg = argv[i];
49 if ((
is_flag(arg,
"--config-file",
"-config-file")) && i + 1 < argc) config_file = argv[++i];
50 else if ((
is_flag(arg,
"--rules-path",
"-rules-path")) && i + 1 < argc) rules_path_override = argv[++i];
51 else if ((
is_flag(arg,
"--ui-socket",
"-ui-socket")) && i + 1 < argc) socket_override = argv[++i];
52 else if ((
is_flag(arg,
"--log-file",
"-log-file")) && i + 1 < argc) log_file_override = argv[++i];
53 else if ((
is_flag(arg,
"--fw-config-file",
"-fw-config-file")) && i + 1 < argc) fw_config_override = argv[++i];
54 else if ((
is_flag(arg,
"--process-monitor-method",
"-process-monitor-method")) && i + 1 < argc) proc_monitor_method_override = argv[++i];
55 else if ((
is_flag(arg,
"--queue-num",
"-queue-num")) && i + 1 < argc) {
56 queue_num_override =
static_cast<std::uint16_t
>(std::stoul(argv[++i]));
57 set_queue_num_override =
true;
59 else if (
is_flag(arg,
"--intercept-unknown",
"-intercept-unknown")) { intercept_unknown_override =
true; set_intercept_override =
true; }
60 else if (
is_flag(arg,
"--no-intercept-unknown",
"-no-intercept-unknown")) { intercept_unknown_override =
false; set_intercept_override =
true; }
61 else if (
is_flag(arg,
"--log-utc",
"-log-utc")) { log_utc_override =
true; set_log_utc_override =
true; }
62 else if (
is_flag(arg,
"--no-log-utc",
"-no-log-utc")) { log_utc_override =
false; set_log_utc_override =
true; }
63 else if (
is_flag(arg,
"--log-micro",
"-log-micro")) { log_micro_override =
true; set_log_micro_override =
true; }
64 else if (
is_flag(arg,
"--debug",
"-debug")) log_level_override = 0;
65 else if (
is_flag(arg,
"--warning",
"-warning")) log_level_override = 1;
66 else if (
is_flag(arg,
"--important",
"-important")) log_level_override = 2;
67 else if (
is_flag(arg,
"--error",
"-error")) log_level_override = 3;
68 else if (arg ==
"--version" || arg ==
"-version") { std::cout <<
"bsc-daemon-cpp 0.6\n";
return 0; }
69 else if (arg ==
"--help" || arg ==
"-help") {
71 <<
"Usage: bsc-daemon [--config-file PATH] [--rules-path DIR] [--ui-socket URI] [--log-file PATH]\n"
72 <<
" [--fw-config-file PATH] [--process-monitor-method proc|netlink|audit|ebpf]\n"
73 <<
" [--queue-num N] [--intercept-unknown|--no-intercept-unknown]\n";
79 cfg.source_path = config_file;
80 if (!rules_path_override.empty()) cfg.rules.path = rules_path_override;
81 if (!socket_override.empty()) cfg.server.address = socket_override;
82 if (!log_file_override.empty()) cfg.server.log_file = log_file_override;
83 if (!fw_config_override.empty()) cfg.fw_options.config_path = fw_config_override;
84 if (!proc_monitor_method_override.empty()) cfg.proc_monitor_method = proc_monitor_method_override;
85 if (set_queue_num_override) cfg.fw_options.queue_num = queue_num_override;
86 if (set_intercept_override) cfg.intercept_unknown = intercept_unknown_override;
87 if (set_log_utc_override) cfg.log_utc = log_utc_override;
88 if (set_log_micro_override) cfg.log_micro = log_micro_override;
89 if (log_level_override >= 0) cfg.log_level =
clamp_log_level(log_level_override);
93 log.set_utc(cfg.log_utc);
94 log.set_microseconds(cfg.log_micro);
95 log.set_log_file(cfg.server.log_file);
99 g_service = std::make_unique<bsc::service::DaemonService>(cfg);
bool is_flag(const std::string &arg, const std::string &long_name, const std::string &short_name={})
int clamp_log_level(int lvl)
static std::unique_ptr< bsc::service::DaemonService > g_service
static void on_signal(int)