Prevent prepared statement use with dbfwfilter

Since the prepared statements can't be processed, they should not be
allowed.
This commit is contained in:
Markus Mäkelä 2017-01-10 12:14:06 +02:00
parent 1ceafb9723
commit 67894b2c7b

View File

@ -2310,6 +2310,8 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
thr_rule_version = rule_version;
}
uint32_t type = qc_get_type(queue);
if (modutil_is_SQL(queue) && modutil_count_statements(queue) > 1)
{
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;
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
{
DBFW_USER *user = find_user_data(thr_users, dcb->user, dcb->remote);