Added error message for multi-statements to dbfwfilter.
This commit is contained in:
@ -830,11 +830,17 @@ int modutil_count_statements(GWBUF* buffer)
|
|||||||
char* end = ((char*)(buffer)->end);
|
char* end = ((char*)(buffer)->end);
|
||||||
int num = 1;
|
int num = 1;
|
||||||
|
|
||||||
while((ptr = strnchr_esc(ptr,';', end - ptr)))
|
while(ptr < end && (ptr = strnchr_esc(ptr,';', end - ptr)))
|
||||||
{
|
{
|
||||||
num++;
|
num++;
|
||||||
|
while(*ptr == ';')
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(*(end - 1) == ';')
|
||||||
|
{
|
||||||
|
num--;
|
||||||
|
}
|
||||||
|
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
@ -1983,6 +1983,15 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
|
|||||||
ipaddr = strdup(dcb->remote);
|
ipaddr = strdup(dcb->remote);
|
||||||
sprintf(uname_addr,"%s@%s",dcb->user,ipaddr);
|
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){
|
if((user = (USER*)hashtable_fetch(my_instance->htable, uname_addr)) == NULL){
|
||||||
while(user == NULL && next_ip_class(ipaddr)){
|
while(user == NULL && next_ip_class(ipaddr)){
|
||||||
|
|||||||
Reference in New Issue
Block a user