Masking: Add large_payload parameter

The masking filter will assume payloads less than 2^24 - 1. The
behaviour if payloads larger than than are encountered can be
configured.

The actual implementation follows in a subsequent change.
This commit is contained in:
Johan Wikman
2017-01-12 15:47:41 +02:00
parent 16a76fcd28
commit 969e423eb2
5 changed files with 110 additions and 28 deletions

View File

@ -85,11 +85,12 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE()
NULL, /* Thread finish. */
{
{ Config::rules_file_name, MXS_MODULE_PARAM_STRING, NULL, MXS_MODULE_OPT_REQUIRED },
{
Config::warn_type_mismatch_name,
MXS_MODULE_PARAM_ENUM, Config::warn_type_mismatch_default,
MXS_MODULE_OPT_NONE, Config::warn_type_mismatch_values
},
{ Config::warn_type_mismatch_name,
MXS_MODULE_PARAM_ENUM, Config::warn_type_mismatch_default,
MXS_MODULE_OPT_NONE, Config::warn_type_mismatch_values },
{ Config::large_payload_name,
MXS_MODULE_PARAM_ENUM, Config::large_payload_default,
MXS_MODULE_OPT_NONE, Config::large_payload_values },
{ MXS_END_MODULE_PARAMS }
}
};
@ -117,10 +118,7 @@ MaskingFilter* MaskingFilter::create(const char* zName, char** pzOptions, CONFIG
{
MaskingFilter* pFilter = NULL;
MaskingFilter::Config config(zName);
config.set_warn_type_mismatch(Config::get_warn_type_mismatch(pParams));
process_params(pzOptions, pParams, config);
Config config(zName, pParams);
auto_ptr<MaskingRules> sRules = MaskingRules::load(config.rules_file().c_str());
@ -171,10 +169,3 @@ void MaskingFilter::reload(DCB* pOut)
"detailed information.\n");
}
}
// static
void MaskingFilter::process_params(char **pzOptions, CONFIG_PARAMETER *pParams, Config& config)
{
string rules_file = config_get_string(pParams, "rules_file");
config.set_rules_file(rules_file);
}

View File

@ -51,8 +51,6 @@ private:
MaskingFilter(const MaskingFilter&);
MaskingFilter& operator = (const MaskingFilter&);
static void process_params(char **pzOptions, CONFIG_PARAMETER *ppParams, Config& config);
private:
Config m_config;
SMaskingRules m_sRules;

View File

@ -16,17 +16,45 @@
namespace
{
const char config_name_large_payload[] = "large_payload";
const char config_name_rules_file[] = "rules_file";
const char config_name_warn_type_mismatch[] = "warn_type_mismatch";
const char config_value_abort[] = "abort";
const char config_value_ignore[] = "ignore";
const char config_value_never[] = "never";
const char config_value_always[] = "always";
}
/*
* PARAM large_payload
*/
//static
const char* MaskingFilterConfig::large_payload_name = config_name_large_payload;
//static
const MXS_ENUM_VALUE MaskingFilterConfig::large_payload_values[] =
{
{ config_value_abort, MaskingFilterConfig::LARGE_ABORT },
{ config_value_ignore, MaskingFilterConfig::LARGE_IGNORE },
{ NULL }
};
//static
const char* MaskingFilterConfig::large_payload_default = config_value_abort;
/*
* PARAM rules_file
*/
//static
const char* MaskingFilterConfig::rules_file_name = config_name_rules_file;
/*
* PARAM warn_type_mismatch
*/
//static
const char* MaskingFilterConfig::warn_type_mismatch_name = config_name_warn_type_mismatch;
@ -42,11 +70,28 @@ const MXS_ENUM_VALUE MaskingFilterConfig::warn_type_mismatch_values[] =
//static
const char* MaskingFilterConfig::warn_type_mismatch_default = config_value_never;
/*
* MaskingFilterConfig
*/
//static
MaskingFilterConfig::large_payload_t
MaskingFilterConfig::get_large_payload(const CONFIG_PARAMETER* pParams)
{
int value = config_get_enum(pParams, large_payload_name, large_payload_values);
return static_cast<large_payload_t>(value);
}
//static
std::string MaskingFilterConfig::get_rules_file(const CONFIG_PARAMETER* pParams)
{
return config_get_string(pParams, rules_file_name);
}
//static
MaskingFilterConfig::warn_type_mismatch_t
MaskingFilterConfig::get_warn_type_mismatch(const CONFIG_PARAMETER* pParams)
{
int warn = config_get_enum(pParams, warn_type_mismatch_name, warn_type_mismatch_values);
return static_cast<warn_type_mismatch_t>(warn);
int value = config_get_enum(pParams, warn_type_mismatch_name, warn_type_mismatch_values);
return static_cast<warn_type_mismatch_t>(value);
}

View File

@ -26,31 +26,55 @@ public:
WARN_ALWAYS
};
enum large_payload_t
{
LARGE_IGNORE,
LARGE_ABORT
};
static const char* large_payload_name;
static const MXS_ENUM_VALUE large_payload_values[];
static const char* large_payload_default;
static const char* rules_file_name;
static const char* warn_type_mismatch_name;
static const MXS_ENUM_VALUE warn_type_mismatch_values[];
static const char* warn_type_mismatch_default;
MaskingFilterConfig(const char* zName)
MaskingFilterConfig(const char* zName, const CONFIG_PARAMETER* pParams)
: m_name(zName)
, m_warn_type_mismatch(WARN_NEVER)
, m_large_payload(get_large_payload(pParams))
, m_rules_file(get_rules_file(pParams))
, m_warn_type_mismatch(get_warn_type_mismatch(pParams))
{}
~MaskingFilterConfig() {}
const std::string& name() const
const std::string& name() const
{
return m_name;
}
const std::string& rules_file() const
large_payload_t large_payload() const
{
return m_large_payload;
}
const std::string& rules_file() const
{
return m_rules_file;
}
warn_type_mismatch_t warn_type_mismatch() const
{
return m_warn_type_mismatch;
}
void set_large_payload(large_payload_t l)
{
m_large_payload = l;
}
void set_rules_file(const std::string& s)
{
m_rules_file = s;
@ -60,10 +84,13 @@ public:
m_warn_type_mismatch = w;
}
static large_payload_t get_large_payload(const CONFIG_PARAMETER* pParams);
static std::string get_rules_file(const CONFIG_PARAMETER* pParams);
static warn_type_mismatch_t get_warn_type_mismatch(const CONFIG_PARAMETER* pParams);
private:
std::string m_name;
large_payload_t m_large_payload;
std::string m_rules_file;
warn_type_mismatch_t m_warn_type_mismatch;
};