2020-01-10 11:49:59 +03:00
/*
* This is an auditd plugin for sending auditd data
* to clickhouse DB .
* Copyright ( C ) 2020 Aleksei Nikiforov < darktemplar @ basealt . ru >
*
* 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 < https : //www.gnu.org/licenses/>.
*
*/
# ifndef AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP
# define AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP
# include <string>
2020-01-14 11:13:38 +03:00
# include <memory>
2020-01-14 11:55:05 +03:00
# include <boost/property_tree/ptree.hpp>
2020-01-10 11:49:59 +03:00
std : : string string_or_null ( const char * data ) ;
2020-01-23 17:40:54 +03:00
std : : string string_or_null_and_free ( const char * data ) ;
2020-01-14 11:55:05 +03:00
std : : string sanitize_column_name ( const std : : string & name ) ;
bool is_valid_table_name ( const std : : string & value ) ;
2020-01-10 11:49:59 +03:00
2020-01-14 11:13:38 +03:00
template < typename T >
std : : shared_ptr < T > ensure_not_null ( const std : : shared_ptr < T > & value )
{
if ( ! value )
{
throw std : : runtime_error ( " Invalid pointer cast " ) ;
}
return value ;
}
2020-01-14 11:55:05 +03:00
template < typename T >
bool always_true ( const T & )
{
return true ;
}
template < typename T >
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 < T > ( ) ) )
{
value = element - > get_value < T > ( ) ;
}
else
{
throw std : : runtime_error ( std : : string ( " Invalid value for option ' " ) + std : : string ( element_name ) + std : : string ( " ' " ) ) ;
}
}
}
template < typename T >
void optional_set ( T & value , const boost : : property_tree : : ptree & tree , const char * element_name )
{
optional_set ( value , tree , element_name , & always_true < T > ) ;
}
2020-01-10 11:49:59 +03:00
# endif /* AUDITD_PLUGIN_CLICKHOUSE_UTILS_HPP */