Added error message for multi-statements to dbfwfilter.

This commit is contained in:
Markus Makela
2015-04-02 16:47:19 +03:00
parent 795a683c55
commit fa7e0ea7c0
2 changed files with 18 additions and 3 deletions

View File

@ -830,11 +830,17 @@ int modutil_count_statements(GWBUF* buffer)
char* end = ((char*)(buffer)->end);
int num = 1;
while((ptr = strnchr_esc(ptr,';', end - ptr)))
while(ptr < end && (ptr = strnchr_esc(ptr,';', end - ptr)))
{
num++;
while(*ptr == ';')
ptr++;
}
if(*(end - 1) == ';')
{
num--;
}
return num;
}

View File

@ -1983,6 +1983,15 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
ipaddr = strdup(dcb->remote);
sprintf(uname_addr,"%s@%s",dcb->user,ipaddr);
if(modutil_is_SQL(queue) && modutil_count_statements(queue) > 1)
{
if(my_session->errmsg)
free(my_session->errmsg);
my_session->errmsg = strdup("This filter does not support multi-statements.");
accept = false;
goto queryresolved;
}
if((user = (USER*)hashtable_fetch(my_instance->htable, uname_addr)) == NULL){
while(user == NULL && next_ip_class(ipaddr)){