Disable prepared statement execution in dbfwfilter

The dbfwfilter doesn't parse prepared statements for all rules which
requires that they are disabled.
This commit is contained in:
Markus Mäkelä 2017-01-19 08:56:17 +02:00
parent 3793f685ac
commit fed61fde98

View File

@ -2193,6 +2193,13 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
int rval = 0;
ss_dassert(dcb && dcb->session);
uint32_t type = 0;
if (modutil_is_SQL(queue) || modutil_is_SQL_prepare(queue))
{
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 "
@ -2202,6 +2209,17 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
my_session->errmsg = NULL;
rval = dcb->func.write(dcb, err);
}
else if (QUERY_IS_TYPE(type, QUERY_TYPE_PREPARE_STMT) ||
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);
free(my_session->errmsg);
my_session->errmsg = NULL;
rval = dcb->func.write(dcb, err);
}
else
{
USER *user = find_user_data(my_instance->htable, dcb->user, dcb->remote);