MXS-1346: Convert rule name to std::string
The rule name is now a std::string.
This commit is contained in:
@ -69,6 +69,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <maxscale/filter.h>
|
#include <maxscale/filter.h>
|
||||||
#include <maxscale/atomic.h>
|
#include <maxscale/atomic.h>
|
||||||
@ -275,7 +276,7 @@ typedef struct queryspeed_t
|
|||||||
typedef struct rule_t
|
typedef struct rule_t
|
||||||
{
|
{
|
||||||
void* data; /*< Actual implementation of the rule */
|
void* data; /*< Actual implementation of the rule */
|
||||||
char* name; /*< Name of the rule */
|
std::string name; /*< Name of the rule */
|
||||||
ruletype_t type; /*< Type of the rule */
|
ruletype_t type; /*< Type of the rule */
|
||||||
uint32_t on_queries; /*< Types of queries to inspect */
|
uint32_t on_queries; /*< Types of queries to inspect */
|
||||||
int times_matched; /*< Number of times this rule has been matched */
|
int times_matched; /*< Number of times this rule has been matched */
|
||||||
@ -364,7 +365,7 @@ static void print_rule(RULE *rules, char *dest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sprintf(dest, "%s, %s, %d",
|
sprintf(dest, "%s, %s, %d",
|
||||||
rules->name,
|
rules->name.c_str(),
|
||||||
rule_names[type],
|
rule_names[type],
|
||||||
rules->times_matched);
|
rules->times_matched);
|
||||||
}
|
}
|
||||||
@ -380,7 +381,7 @@ static json_t* rule_to_json(RULE *rule)
|
|||||||
|
|
||||||
json_t* rval = json_object();
|
json_t* rval = json_object();
|
||||||
|
|
||||||
json_object_set_new(rval, "name", json_string(rule->name));
|
json_object_set_new(rval, "name", json_string(rule->name.c_str()));
|
||||||
json_object_set_new(rval, "type", json_string(rule_names[type]));
|
json_object_set_new(rval, "type", json_string(rule_names[type]));
|
||||||
json_object_set_new(rval, "times_matched", json_integer(rule->times_matched));
|
json_object_set_new(rval, "times_matched", json_integer(rule->times_matched));
|
||||||
|
|
||||||
@ -873,7 +874,7 @@ bool dbfw_show_rules(const MODULECMD_ARG *argv, json_t** output)
|
|||||||
|
|
||||||
for (RULE *rule = thr_rules; rule; rule = rule->next)
|
for (RULE *rule = thr_rules; rule; rule = rule->next)
|
||||||
{
|
{
|
||||||
char buf[strlen(rule->name) + 200]; // Some extra space
|
char buf[rule->name.length() + 200]; // Some extra space
|
||||||
print_rule(rule, buf);
|
print_rule(rule, buf);
|
||||||
dcb_printf(dcb, "%s\n", buf);
|
dcb_printf(dcb, "%s\n", buf);
|
||||||
}
|
}
|
||||||
@ -1105,6 +1106,7 @@ struct parser_stack
|
|||||||
STRLINK* active_rules;
|
STRLINK* active_rules;
|
||||||
enum match_type active_mode;
|
enum match_type active_mode;
|
||||||
user_template_t* templates;
|
user_template_t* templates;
|
||||||
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1129,7 +1131,7 @@ static RULE* find_rule_by_name(RULE* rules, const char* name)
|
|||||||
{
|
{
|
||||||
while (rules)
|
while (rules)
|
||||||
{
|
{
|
||||||
if (strcmp(rules->name, name) == 0)
|
if (strcmp(rules->name.c_str(), name) == 0)
|
||||||
{
|
{
|
||||||
return rules;
|
return rules;
|
||||||
}
|
}
|
||||||
@ -2043,7 +2045,7 @@ bool match_throttle(FW_SESSION* my_session, RULE_BOOK *rulebook, char **msg)
|
|||||||
matches = true;
|
matches = true;
|
||||||
|
|
||||||
MXS_INFO("rule '%s': user denied for %f seconds",
|
MXS_INFO("rule '%s': user denied for %f seconds",
|
||||||
rulebook->rule->name, blocked_for);
|
rulebook->rule->name.c_str(), blocked_for);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2056,7 +2058,7 @@ bool match_throttle(FW_SESSION* my_session, RULE_BOOK *rulebook, char **msg)
|
|||||||
if (queryspeed->count >= queryspeed->limit)
|
if (queryspeed->count >= queryspeed->limit)
|
||||||
{
|
{
|
||||||
MXS_INFO("rule '%s': query limit triggered (%d queries in %d seconds), "
|
MXS_INFO("rule '%s': query limit triggered (%d queries in %d seconds), "
|
||||||
"denying queries from user for %d seconds.", rulebook->rule->name,
|
"denying queries from user for %d seconds.", rulebook->rule->name.c_str(),
|
||||||
queryspeed->limit, queryspeed->period, queryspeed->cooldown);
|
queryspeed->limit, queryspeed->period, queryspeed->cooldown);
|
||||||
|
|
||||||
queryspeed->triggered = time_now;
|
queryspeed->triggered = time_now;
|
||||||
@ -2092,7 +2094,7 @@ void match_regex(RULE_BOOK *rulebook, const char *query, bool *matches, char **m
|
|||||||
(PCRE2_SPTR)query, PCRE2_ZERO_TERMINATED,
|
(PCRE2_SPTR)query, PCRE2_ZERO_TERMINATED,
|
||||||
0, 0, mdata, NULL) > 0)
|
0, 0, mdata, NULL) > 0)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("rule '%s': regex matched on query", rulebook->rule->name);
|
MXS_NOTICE("rule '%s': regex matched on query", rulebook->rule->name.c_str());
|
||||||
*matches = true;
|
*matches = true;
|
||||||
*msg = create_error("Permission denied, query matched regular expression.");
|
*msg = create_error("Permission denied, query matched regular expression.");
|
||||||
}
|
}
|
||||||
@ -2122,7 +2124,7 @@ void match_column(RULE_BOOK *rulebook, GWBUF *queue, bool *matches, char **msg)
|
|||||||
if (strcasecmp(tok, strln->value) == 0)
|
if (strcasecmp(tok, strln->value) == 0)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("rule '%s': query targets forbidden column: %s",
|
MXS_NOTICE("rule '%s': query targets forbidden column: %s",
|
||||||
rulebook->rule->name, strln->value);
|
rulebook->rule->name.c_str(), strln->value);
|
||||||
*msg = create_error("Permission denied to column '%s'.", strln->value);
|
*msg = create_error("Permission denied to column '%s'.", strln->value);
|
||||||
*matches = true;
|
*matches = true;
|
||||||
break;
|
break;
|
||||||
@ -2154,7 +2156,7 @@ void match_function(RULE_BOOK *rulebook, GWBUF *queue, enum fw_actions mode,
|
|||||||
if (strcasecmp(tok, strln->value) == 0)
|
if (strcasecmp(tok, strln->value) == 0)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("rule '%s': query uses forbidden function: %s",
|
MXS_NOTICE("rule '%s': query uses forbidden function: %s",
|
||||||
rulebook->rule->name, strln->value);
|
rulebook->rule->name.c_str(), strln->value);
|
||||||
*msg = create_error("Permission denied to function '%s'.", strln->value);
|
*msg = create_error("Permission denied to function '%s'.", strln->value);
|
||||||
*matches = true;
|
*matches = true;
|
||||||
break;
|
break;
|
||||||
@ -2182,7 +2184,7 @@ void match_function_usage(RULE *rule, GWBUF *queue, enum fw_actions mode,
|
|||||||
if (strcasecmp(tok, s->value) == 0)
|
if (strcasecmp(tok, s->value) == 0)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("rule '%s': query uses a function with forbidden column: %s",
|
MXS_NOTICE("rule '%s': query uses a function with forbidden column: %s",
|
||||||
rule->name, s->value);
|
rule->name.c_str(), s->value);
|
||||||
*msg = create_error("Permission denied to column '%s' with function.", s->value);
|
*msg = create_error("Permission denied to column '%s' with function.", s->value);
|
||||||
*matches = true;
|
*matches = true;
|
||||||
return;
|
return;
|
||||||
@ -2202,7 +2204,7 @@ void match_wildcard(RULE_BOOK *rulebook, GWBUF *queue, bool *matches, char **msg
|
|||||||
{
|
{
|
||||||
if (strcmp(infos[i].column, "*") == 0)
|
if (strcmp(infos[i].column, "*") == 0)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("rule '%s': query contains a wildcard.", rulebook->rule->name);
|
MXS_NOTICE("rule '%s': query contains a wildcard.", rulebook->rule->name.c_str());
|
||||||
*matches = true;
|
*matches = true;
|
||||||
*msg = create_error("Usage of wildcard denied.");
|
*msg = create_error("Usage of wildcard denied.");
|
||||||
}
|
}
|
||||||
@ -2289,7 +2291,7 @@ bool rule_matches(FW_INSTANCE* my_instance,
|
|||||||
case RT_PERMISSION:
|
case RT_PERMISSION:
|
||||||
matches = true;
|
matches = true;
|
||||||
msg = create_error("Permission denied at this time.");
|
msg = create_error("Permission denied at this time.");
|
||||||
MXS_NOTICE("rule '%s': query denied at this time.", rulebook->rule->name);
|
MXS_NOTICE("rule '%s': query denied at this time.", rulebook->rule->name.c_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RT_COLUMN:
|
case RT_COLUMN:
|
||||||
@ -2330,7 +2332,7 @@ bool rule_matches(FW_INSTANCE* my_instance,
|
|||||||
matches = true;
|
matches = true;
|
||||||
msg = create_error("Required WHERE/HAVING clause is missing.");
|
msg = create_error("Required WHERE/HAVING clause is missing.");
|
||||||
MXS_NOTICE("rule '%s': query has no where/having "
|
MXS_NOTICE("rule '%s': query has no where/having "
|
||||||
"clause, query is denied.", rulebook->rule->name);
|
"clause, query is denied.", rulebook->rule->name.c_str());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2390,7 +2392,7 @@ bool check_match_any(FW_INSTANCE* my_instance, FW_SESSION* my_session,
|
|||||||
}
|
}
|
||||||
if (rule_matches(my_instance, my_session, queue, user, rulebook, fullquery))
|
if (rule_matches(my_instance, my_session, queue, user, rulebook, fullquery))
|
||||||
{
|
{
|
||||||
*rulename = MXS_STRDUP_A(rulebook->rule->name);
|
*rulename = MXS_STRDUP_A(rulebook->rule->name.c_str());
|
||||||
rval = true;
|
rval = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2474,7 +2476,7 @@ bool check_match_all(FW_INSTANCE* my_instance, FW_SESSION* my_session,
|
|||||||
|
|
||||||
if (rule_matches(my_instance, my_session, queue, user, rulebook, fullquery))
|
if (rule_matches(my_instance, my_session, queue, user, rulebook, fullquery))
|
||||||
{
|
{
|
||||||
append_string(&matched_rules, &size, rulebook->rule->name);
|
append_string(&matched_rules, &size, rulebook->rule->name.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2727,7 +2729,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
|
|||||||
|
|
||||||
for (RULE *rule = thr_rules; rule; rule = rule->next)
|
for (RULE *rule = thr_rules; rule; rule = rule->next)
|
||||||
{
|
{
|
||||||
char buf[strlen(rule->name) + 200];
|
char buf[rule->name.length() + 200];
|
||||||
print_rule(rule, buf);
|
print_rule(rule, buf);
|
||||||
dcb_printf(dcb, "%s\n", buf);
|
dcb_printf(dcb, "%s\n", buf);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user