Allow restriction of module command arguments
The module commands now support an optional flag for arguments that when enabled checks that the argument module name matches the registered domain name. This can be used to enforce argument type validity for arguments that are given to modules that expect objects of a certain type. For example, this is used by the cache and dbfwfilter to prevent valid filters but of the wrong type being given as arguments.
This commit is contained in:
16
server/modules/filter/cache/cachefilter.cc
vendored
16
server/modules/filter/cache/cachefilter.cc
vendored
@ -93,17 +93,11 @@ bool cache_command_show(const MODULECMD_ARG* pArgs)
|
||||
|
||||
const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter;
|
||||
ss_dassert(pFilterDef);
|
||||
ss_dassert(strcmp(pFilterDef->module, MXS_MODULE_NAME) == 0);
|
||||
|
||||
if (strcmp(pFilterDef->module, "cache") == 0)
|
||||
{
|
||||
CacheFilter* pFilter = reinterpret_cast<CacheFilter*>(pFilterDef->filter);
|
||||
CacheFilter* pFilter = reinterpret_cast<CacheFilter*>(pFilterDef->filter);
|
||||
|
||||
pFilter->cache().show(pDcb);
|
||||
}
|
||||
else
|
||||
{
|
||||
dcb_printf(pDcb, "Filter %s exists, but it is not a cache.", pFilterDef->name);
|
||||
}
|
||||
pFilter->cache().show(pDcb);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -127,10 +121,10 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE()
|
||||
static modulecmd_arg_type_t show_argv[] =
|
||||
{
|
||||
{ MODULECMD_ARG_OUTPUT, "The output dcb" },
|
||||
{ MODULECMD_ARG_FILTER, "Cache name" }
|
||||
{ MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Cache name" }
|
||||
};
|
||||
|
||||
modulecmd_register_command("cache", "show", cache_command_show,
|
||||
modulecmd_register_command(MXS_MODULE_NAME, "show", cache_command_show,
|
||||
MXS_ARRAY_NELEMS(show_argv), show_argv);
|
||||
|
||||
MXS_NOTICE("Initialized cache module %s.\n", VERSION_STRING);
|
||||
|
||||
@ -60,6 +60,7 @@
|
||||
*@endcode
|
||||
*/
|
||||
|
||||
#define MXS_MODULE_NAME "dbfwfilter"
|
||||
#include <maxscale/cdefs.h>
|
||||
|
||||
#include <stdio.h>
|
||||
@ -791,19 +792,19 @@ MXS_MODULE* MXS_CREATE_MODULE()
|
||||
{
|
||||
modulecmd_arg_type_t args_rules_reload[] =
|
||||
{
|
||||
{MODULECMD_ARG_FILTER, "Filter to reload"},
|
||||
{MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Filter to reload"},
|
||||
{MODULECMD_ARG_STRING | MODULECMD_ARG_OPTIONAL, "Path to rule file"}
|
||||
};
|
||||
|
||||
modulecmd_register_command("dbfwfilter", "rules/reload", dbfw_reload_rules, 2, args_rules_reload);
|
||||
modulecmd_register_command(MXS_MODULE_NAME, "rules/reload", dbfw_reload_rules, 2, args_rules_reload);
|
||||
|
||||
modulecmd_arg_type_t args_rules_show[] =
|
||||
{
|
||||
{MODULECMD_ARG_OUTPUT, "DCB where result is written"},
|
||||
{MODULECMD_ARG_FILTER, "Filter to inspect"}
|
||||
{MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Filter to inspect"}
|
||||
};
|
||||
|
||||
modulecmd_register_command("dbfwfilter", "rules", dbfw_show_rules, 2, args_rules_show);
|
||||
modulecmd_register_command(MXS_MODULE_NAME, "rules", dbfw_show_rules, 2, args_rules_show);
|
||||
|
||||
static MXS_FILTER_OBJECT MyObject =
|
||||
{
|
||||
|
||||
@ -43,17 +43,11 @@ bool masking_command_reload(const MODULECMD_ARG* pArgs)
|
||||
|
||||
const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter;
|
||||
ss_dassert(pFilterDef);
|
||||
ss_dassert(strcmp(pFilterDef->module, MXS_MODULE_NAME) == 0);
|
||||
|
||||
if (strcmp(pFilterDef->module, "masking") == 0)
|
||||
{
|
||||
MaskingFilter* pFilter = reinterpret_cast<MaskingFilter*>(pFilterDef->filter);
|
||||
MaskingFilter* pFilter = reinterpret_cast<MaskingFilter*>(pFilterDef->filter);
|
||||
|
||||
MXS_EXCEPTION_GUARD(pFilter->reload(pDcb));
|
||||
}
|
||||
else
|
||||
{
|
||||
dcb_printf(pDcb, "Filter %s exists, but it is not a masking filter.", pFilterDef->name);
|
||||
}
|
||||
MXS_EXCEPTION_GUARD(pFilter->reload(pDcb));
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -69,10 +63,10 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE()
|
||||
static modulecmd_arg_type_t reload_argv[] =
|
||||
{
|
||||
{ MODULECMD_ARG_OUTPUT, "The output dcb" },
|
||||
{ MODULECMD_ARG_FILTER, "Masking name" }
|
||||
{ MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Masking name" }
|
||||
};
|
||||
|
||||
modulecmd_register_command("masking", "reload", masking_command_reload,
|
||||
modulecmd_register_command(MXS_MODULE_NAME, "reload", masking_command_reload,
|
||||
MXS_ARRAY_NELEMS(reload_argv), reload_argv);
|
||||
|
||||
MXS_NOTICE("Masking module %s initialized.", VERSION_STRING);
|
||||
|
||||
Reference in New Issue
Block a user