/* * This is an auditd plugin for sending auditd data * to clickhouse DB. * Copyright (C) 2020 Aleksei Nikiforov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP #define AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP #include #include #include std::string string_or_null(const char *data); std::string string_or_null_and_free(const char *data); std::string sanitize_column_name(const std::string &name); bool is_valid_table_name(const std::string &value); template std::shared_ptr ensure_not_null(const std::shared_ptr &value) { if (!value) { throw std::runtime_error("Invalid pointer cast"); } return value; } template bool always_true(const T &) { return true; } template void optional_set(T &value, const boost::property_tree::ptree &tree, const char *element_name, bool (*check_function)(const T &)) { auto element = tree.get_child_optional(element_name); if (element) { if (check_function(element->get_value())) { value = element->get_value(); } else { throw std::runtime_error(std::string("Invalid value for option '") + std::string(element_name) + std::string("'")); } } } template void optional_set(T &value, const boost::property_tree::ptree &tree, const char *element_name) { optional_set(value, tree, element_name, &always_true); } #endif /* AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP */