Prevent prepared statement use with dbfwfilter
Since the prepared statements can't be processed, they should not be allowed.
This commit is contained in:
@ -2310,6 +2310,8 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
|
|||||||
thr_rule_version = rule_version;
|
thr_rule_version = rule_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t type = qc_get_type(queue);
|
||||||
|
|
||||||
if (modutil_is_SQL(queue) && modutil_count_statements(queue) > 1)
|
if (modutil_is_SQL(queue) && modutil_count_statements(queue) > 1)
|
||||||
{
|
{
|
||||||
GWBUF* err = gen_dummy_error(my_session, "This filter does not support "
|
GWBUF* err = gen_dummy_error(my_session, "This filter does not support "
|
||||||
@ -2319,6 +2321,17 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
|
|||||||
my_session->errmsg = NULL;
|
my_session->errmsg = NULL;
|
||||||
rval = dcb->func.write(dcb, err);
|
rval = dcb->func.write(dcb, err);
|
||||||
}
|
}
|
||||||
|
else if (qc_query_is_type(type, QUERY_TYPE_PREPARE_STMT) ||
|
||||||
|
qc_query_is_type(type, QUERY_TYPE_PREPARE_NAMED_STMT) ||
|
||||||
|
modutil_is_SQL_prepare(queue))
|
||||||
|
{
|
||||||
|
GWBUF* err = gen_dummy_error(my_session, "This filter does not support "
|
||||||
|
"prepared statements.");
|
||||||
|
gwbuf_free(queue);
|
||||||
|
MXS_FREE(my_session->errmsg);
|
||||||
|
my_session->errmsg = NULL;
|
||||||
|
rval = dcb->func.write(dcb, err);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBFW_USER *user = find_user_data(thr_users, dcb->user, dcb->remote);
|
DBFW_USER *user = find_user_data(thr_users, dcb->user, dcb->remote);
|
||||||
|
Reference in New Issue
Block a user