int main()

in auomsctl.cpp [1757:1898]


int main(int argc, char**argv) {
    if (argc < 2 || strlen(argv[1]) < 2) {
        usage();
        exit(1);
    }

    Signals::Init();
    Signals::Start();
    Signals::SetExitHandler([](){ exit(1); });

    if (strcmp(argv[1], "-v") == 0) {
        std::cout << std::string(AUOMS_VERSION) << std::endl;
        return 0;
    } else if (strcmp(argv[1], "-s") == 0) {
        return show_audit_status();
    } else if (strcmp(argv[1], "-bl") == 0) {
        if (argc < 3) {
            usage();
            exit(1);
        }
        return set_backlog_limit(argv[2]);
    } else if (strcmp(argv[1], "-bwt") == 0) {
        if (argc < 3) {
            usage();
            exit(1);
        }
        return set_backlog_wait_time(argv[2]);
    } else if (strcmp(argv[1], "-l") == 0) {
        std::string key;
        if (argc > 2) {
            key = argv[2];
        }
        return list_rules(false, key);
    } else if (strcmp(argv[1], "-rl") == 0) {
        std::string key;
        if (argc > 2) {
            key = argv[2];
        }
        return list_rules(true, key);
    } else if (strcmp(argv[1], "-D") == 0) {
        std::string key;
        if (argc > 2) {
            key = argv[2];
        }
        return delete_rules(key);
    } else if (strcmp(argv[1], "-R") == 0) {
        if (argc < 3) {
            usage();
            exit(1);
        }
        return load_rules(argv[2]);
    } else if (strcmp(argv[1], "-p") == 0) {
        if (argc < 3) {
            usage();
            exit(1);
        }
        return print_rules(argv[2]);
    } else if (strcmp(argv[1], "-m") == 0) {
        if (argc < 4) {
            usage();
            exit(1);
        }
        return merge_rules(argv[2], argv[3]);
    } else if (strcmp(argv[1], "-d") == 0) {
        if (argc < 4) {
            usage();
            exit(1);
        }
        return diff_rules(argv[2], argv[3]);
    } else if (strcmp(argv[1], "state") == 0) {
        return show_auoms_state();
    } else if (strcmp(argv[1], "status") == 0) {
        return show_auoms_status();
    } else if (strcmp(argv[1], "is-enabled") == 0) {
        try {
            if (is_service_enabled()) {
                std::cout << "enabled" << std::endl;
                return 0;
            } else {
                std::cout << "disabled" << std::endl;
                return 1;
            }
        } catch (std::exception& ex) {
            std::cerr << ex.what() << std::endl;
            return 2;
        }
    } else if (strcmp(argv[1], "enable") == 0) {
        return enable_auoms();
    } else if (strcmp(argv[1], "disable") == 0) {
        return disable_auoms();
    } else if (strcmp(argv[1], "start") == 0) {
        bool all = false;
        if (argc > 2 && strcmp(argv[2], "all") == 0) {
            all = true;
        }
        return start_auoms(all);
    } else if (strcmp(argv[1], "restart") == 0) {
        bool all = false;
        if (argc > 2 && strcmp(argv[2], "all") == 0) {
            all = true;
        }
        return restart_auoms(all);
    } else if (strcmp(argv[1], "stop") == 0) {
        bool all = false;
        if (argc > 2 && strcmp(argv[2], "all") == 0) {
            all = true;
        }
        return stop_auoms(all);
    } else if (strcmp(argv[1], "tap") == 0) {
        if (argc > 2 && strcmp(argv[2], "multicast") == 0) {
            return tap_audit_multicast();
        }
        return tap_audit();
    } else if (strcmp(argv[1], "monitor") == 0) {
        return monitor_auoms_events();
    } else if (strcmp(argv[1], "reload") == 0) {
        return reload_auoms();
    } else if (strcmp(argv[1], "setrules") == 0) {
        return set_rules();
    } else if (strcmp(argv[1], "loadrules") == 0) {
        return load_rules();
    } else if (strcmp(argv[1], "upgrade") == 0) {
        return upgrade();
    } else if (strcmp(argv[1], "spam_netlink") == 0) {
        if (argc < 4) {
            usage();
            exit(1);
        }
        return spam_netlink(argv[2], argv[3]);
    } else if (strcmp(argv[1], "test_redaction") == 0) {
        if (argc < 3) {
            usage();
            exit(1);
        }
        std::string dir;
        dir = argv[2];
        return test_redaction(dir);
    }

    usage();
    exit(1);
}