Fixed an infinite loop if network address reached '%' and fixed some null pointer references.
This commit is contained in:
parent
a5ece62327
commit
2e7419e942
@ -318,12 +318,17 @@ char* strip_tags(char* str)
|
|||||||
* Parses a string that contains an IP address and converts the last octet to '%'.
|
* Parses a string that contains an IP address and converts the last octet to '%'.
|
||||||
* This modifies the string passed as the parameter.
|
* This modifies the string passed as the parameter.
|
||||||
* @param str String to parse
|
* @param str String to parse
|
||||||
* @return Pointer to modified string or NULL if an error occurred
|
* @return Pointer to modified string or NULL if an error occurred or the string can't be made any less specific
|
||||||
*/
|
*/
|
||||||
char* next_ip_class(char* str)
|
char* next_ip_class(char* str)
|
||||||
{
|
{
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
|
|
||||||
|
/**The least specific form is reached*/
|
||||||
|
if(*str == '%'){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
char* ptr = strchr(str,'\0');
|
char* ptr = strchr(str,'\0');
|
||||||
|
|
||||||
if(ptr == NULL){
|
if(ptr == NULL){
|
||||||
@ -346,6 +351,7 @@ char* next_ip_class(char* str)
|
|||||||
*++ptr = '%';
|
*++ptr = '%';
|
||||||
*++ptr = '\0';
|
*++ptr = '\0';
|
||||||
|
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -8,8 +8,9 @@ endforeach()
|
|||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
add_executable(harness_ui harness_ui.c harness_common.c)
|
add_executable(harness_ui harness_ui.c harness_common.c)
|
||||||
add_executable(harness harness_util.c harness_common.c ${CORE})
|
add_executable(harness harness_util.c harness_common.c ${CORE})
|
||||||
target_link_libraries(harness_ui fullcore log_manager utils)
|
target_link_libraries(harness_ui fullcore log_manager utils ${EMBEDDED_LIB})
|
||||||
target_link_libraries(harness fullcore)
|
target_link_libraries(harness fullcore ${EMBEDDED_LIB})
|
||||||
|
file(COPY ${ERRMSG} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fwtest.cnf.in ${CMAKE_CURRENT_BINARY_DIR}/fwtest.cnf @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fwtest.cnf.in ${CMAKE_CURRENT_BINARY_DIR}/fwtest.cnf @ONLY)
|
||||||
add_test(TestHintfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.input -o ${CMAKE_CURRENT_BINARY_DIR}/hint_testing.output -c ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.expected")
|
add_test(TestHintfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.input -o ${CMAKE_CURRENT_BINARY_DIR}/hint_testing.output -c ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.expected")
|
||||||
add_test(TestFwfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.input -o ${CMAKE_CURRENT_BINARY_DIR}/fwtest.output -c ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.expected")
|
add_test(TestFwfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.input -o ${CMAKE_CURRENT_BINARY_DIR}/fwtest.output -c ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/fwtest.expected")
|
@ -1,159 +0,0 @@
|
|||||||
#
|
|
||||||
# Example MaxScale.cnf configuration file
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Number of server threads
|
|
||||||
# Valid options are:
|
|
||||||
# threads=<number of threads>
|
|
||||||
|
|
||||||
[maxscale]
|
|
||||||
threads=1
|
|
||||||
|
|
||||||
# Define a monitor that can be used to determine the state and role of
|
|
||||||
# the servers.
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# module=<name of module to load>
|
|
||||||
# servers=<server name>,<server name>,...
|
|
||||||
# user =<user name - must have slave replication and
|
|
||||||
# slave client privileges>
|
|
||||||
# passwd=<password of the above user, plain text currently>
|
|
||||||
# monitor_interval=<sampling interval in milliseconds,
|
|
||||||
# default value is 10000>
|
|
||||||
|
|
||||||
[MySQL Monitor]
|
|
||||||
type=monitor
|
|
||||||
module=mysqlmon
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
|
|
||||||
# A series of service definition
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# router=<name of router module>
|
|
||||||
# servers=<server name>,<server name>,...
|
|
||||||
# user=<User to fetch password inforamtion with>
|
|
||||||
# passwd=<Password of the user, plain text currently>
|
|
||||||
# enable_root_user=<0 or 1, default is 0>
|
|
||||||
# version_string=<specific string for server handshake,
|
|
||||||
# default is the MariaDB embedded library version>
|
|
||||||
#
|
|
||||||
# Valid router modules currently are:
|
|
||||||
# readwritesplit, readconnroute and debugcli
|
|
||||||
|
|
||||||
|
|
||||||
[RW Split Router]
|
|
||||||
type=service
|
|
||||||
router=readwritesplit
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
max_slave_connections=90%
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
#filters=MQ
|
|
||||||
|
|
||||||
[RW Split Hint Router]
|
|
||||||
type=service
|
|
||||||
router=readwritesplit
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
max_slave_connections=90%
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
filters=Hint
|
|
||||||
|
|
||||||
|
|
||||||
[Read Connection Router]
|
|
||||||
type=service
|
|
||||||
router=readconnroute
|
|
||||||
router_options=master
|
|
||||||
servers=server1
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
|
|
||||||
|
|
||||||
[HTTPD Router]
|
|
||||||
type=service
|
|
||||||
router=testroute
|
|
||||||
servers=server1,server2,server3
|
|
||||||
|
|
||||||
[Debug Interface]
|
|
||||||
type=service
|
|
||||||
router=debugcli
|
|
||||||
|
|
||||||
|
|
||||||
[Hint]
|
|
||||||
type=filter
|
|
||||||
module=fwfilter
|
|
||||||
rules=@CMAKE_CURRENT_BINARY_DIR@/rules
|
|
||||||
|
|
||||||
|
|
||||||
# Listener definitions for the services
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# service=<name of service defined elsewhere>
|
|
||||||
# protocol=<name of protocol module with which to listen>
|
|
||||||
# port=<Listening port>
|
|
||||||
# address=<Address to bind to>
|
|
||||||
# socket=<Listening socket>
|
|
||||||
|
|
||||||
[RW Split Listener]
|
|
||||||
type=listener
|
|
||||||
service=RW Split Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4006
|
|
||||||
|
|
||||||
[RW Split Hint Listener]
|
|
||||||
type=listener
|
|
||||||
service=RW Split Hint Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4009
|
|
||||||
|
|
||||||
[Read Connection Listener]
|
|
||||||
type=listener
|
|
||||||
service=Read Connection Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4008
|
|
||||||
#socket=/tmp/readconn.sock
|
|
||||||
|
|
||||||
[Debug Listener]
|
|
||||||
type=listener
|
|
||||||
service=Debug Interface
|
|
||||||
protocol=telnetd
|
|
||||||
port=4442
|
|
||||||
#address=127.0.0.1
|
|
||||||
|
|
||||||
[HTTPD Listener]
|
|
||||||
type=listener
|
|
||||||
service=HTTPD Router
|
|
||||||
protocol=HTTPD
|
|
||||||
port=6444
|
|
||||||
|
|
||||||
# Definition of the servers
|
|
||||||
|
|
||||||
[server1]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3000
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server2]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3001
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server3]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3002
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server4]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3003
|
|
||||||
protocol=MySQLBackend
|
|
@ -1,159 +1,4 @@
|
|||||||
#
|
[Firewall]
|
||||||
# Example MaxScale.cnf configuration file
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Number of server threads
|
|
||||||
# Valid options are:
|
|
||||||
# threads=<number of threads>
|
|
||||||
|
|
||||||
[maxscale]
|
|
||||||
threads=1
|
|
||||||
|
|
||||||
# Define a monitor that can be used to determine the state and role of
|
|
||||||
# the servers.
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# module=<name of module to load>
|
|
||||||
# servers=<server name>,<server name>,...
|
|
||||||
# user =<user name - must have slave replication and
|
|
||||||
# slave client privileges>
|
|
||||||
# passwd=<password of the above user, plain text currently>
|
|
||||||
# monitor_interval=<sampling interval in milliseconds,
|
|
||||||
# default value is 10000>
|
|
||||||
|
|
||||||
[MySQL Monitor]
|
|
||||||
type=monitor
|
|
||||||
module=mysqlmon
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
|
|
||||||
# A series of service definition
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# router=<name of router module>
|
|
||||||
# servers=<server name>,<server name>,...
|
|
||||||
# user=<User to fetch password inforamtion with>
|
|
||||||
# passwd=<Password of the user, plain text currently>
|
|
||||||
# enable_root_user=<0 or 1, default is 0>
|
|
||||||
# version_string=<specific string for server handshake,
|
|
||||||
# default is the MariaDB embedded library version>
|
|
||||||
#
|
|
||||||
# Valid router modules currently are:
|
|
||||||
# readwritesplit, readconnroute and debugcli
|
|
||||||
|
|
||||||
|
|
||||||
[RW Split Router]
|
|
||||||
type=service
|
|
||||||
router=readwritesplit
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
max_slave_connections=90%
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
#filters=MQ
|
|
||||||
|
|
||||||
[RW Split Hint Router]
|
|
||||||
type=service
|
|
||||||
router=readwritesplit
|
|
||||||
servers=server1,server2,server3,server4
|
|
||||||
max_slave_connections=90%
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
filters=Hint
|
|
||||||
|
|
||||||
|
|
||||||
[Read Connection Router]
|
|
||||||
type=service
|
|
||||||
router=readconnroute
|
|
||||||
router_options=master
|
|
||||||
servers=server1
|
|
||||||
user=maxuser
|
|
||||||
passwd=maxpwd
|
|
||||||
|
|
||||||
|
|
||||||
[HTTPD Router]
|
|
||||||
type=service
|
|
||||||
router=testroute
|
|
||||||
servers=server1,server2,server3
|
|
||||||
|
|
||||||
[Debug Interface]
|
|
||||||
type=service
|
|
||||||
router=debugcli
|
|
||||||
|
|
||||||
|
|
||||||
[Hint]
|
|
||||||
type=filter
|
type=filter
|
||||||
module=fwfilter
|
module=fwfilter
|
||||||
rules=@CMAKE_CURRENT_SOURCE_DIR@/rules
|
rules=@CMAKE_CURRENT_SOURCE_DIR@/rules
|
||||||
|
|
||||||
|
|
||||||
# Listener definitions for the services
|
|
||||||
#
|
|
||||||
# Valid options are:
|
|
||||||
#
|
|
||||||
# service=<name of service defined elsewhere>
|
|
||||||
# protocol=<name of protocol module with which to listen>
|
|
||||||
# port=<Listening port>
|
|
||||||
# address=<Address to bind to>
|
|
||||||
# socket=<Listening socket>
|
|
||||||
|
|
||||||
[RW Split Listener]
|
|
||||||
type=listener
|
|
||||||
service=RW Split Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4006
|
|
||||||
|
|
||||||
[RW Split Hint Listener]
|
|
||||||
type=listener
|
|
||||||
service=RW Split Hint Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4009
|
|
||||||
|
|
||||||
[Read Connection Listener]
|
|
||||||
type=listener
|
|
||||||
service=Read Connection Router
|
|
||||||
protocol=MySQLClient
|
|
||||||
port=4008
|
|
||||||
#socket=/tmp/readconn.sock
|
|
||||||
|
|
||||||
[Debug Listener]
|
|
||||||
type=listener
|
|
||||||
service=Debug Interface
|
|
||||||
protocol=telnetd
|
|
||||||
port=4442
|
|
||||||
#address=127.0.0.1
|
|
||||||
|
|
||||||
[HTTPD Listener]
|
|
||||||
type=listener
|
|
||||||
service=HTTPD Router
|
|
||||||
protocol=HTTPD
|
|
||||||
port=6444
|
|
||||||
|
|
||||||
# Definition of the servers
|
|
||||||
|
|
||||||
[server1]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3000
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server2]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3001
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server3]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3002
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
|
||||||
[server4]
|
|
||||||
type=server
|
|
||||||
address=127.0.0.1
|
|
||||||
port=3003
|
|
||||||
protocol=MySQLBackend
|
|
||||||
|
4
server/modules/filter/test/fwtest.output
Executable file
4
server/modules/filter/test/fwtest.output
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
select 1;
|
||||||
|
select 1;
|
||||||
|
select 1;
|
||||||
|
select 1;
|
@ -69,7 +69,9 @@
|
|||||||
#include <ini.h>
|
#include <ini.h>
|
||||||
#include <hint.h>
|
#include <hint.h>
|
||||||
#include <modutil.h>
|
#include <modutil.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <mysql_client_server_protocol.h>
|
#include <mysql_client_server_protocol.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A single name-value pair and a link to the next item in the
|
* A single name-value pair and a link to the next item in the
|
||||||
* configuration.
|
* configuration.
|
||||||
@ -118,6 +120,7 @@ typedef struct
|
|||||||
int running;
|
int running;
|
||||||
int verbose; /**Whether to print to stdout*/
|
int verbose; /**Whether to print to stdout*/
|
||||||
int infile; /**A file where the queries are loaded from*/
|
int infile; /**A file where the queries are loaded from*/
|
||||||
|
int expected;
|
||||||
int error;
|
int error;
|
||||||
char* mod_dir; /**Module directory absolute path*/
|
char* mod_dir; /**Module directory absolute path*/
|
||||||
char* infile_name;
|
char* infile_name;
|
||||||
@ -174,7 +177,7 @@ typedef packet_t PACKET;
|
|||||||
/**
|
/**
|
||||||
* Initialize the static instance.
|
* Initialize the static instance.
|
||||||
*/
|
*/
|
||||||
int harness_init(int argc,char** argv);
|
int harness_init(int argc,char** argv,HARNESS_INSTANCE** inst);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees all the query buffers
|
* Frees all the query buffers
|
||||||
@ -361,4 +364,14 @@ GWBUF* gen_packet(PACKET pkt);
|
|||||||
*/
|
*/
|
||||||
int process_opts(int argc, char** argv);
|
int process_opts(int argc, char** argv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares the contents of two files.
|
||||||
|
* This function resets the offsets of the file descriptors and leaves them in an
|
||||||
|
* undefined state.
|
||||||
|
* @param a The first file
|
||||||
|
* @param b The second file
|
||||||
|
* @return 0 if the files do not differ and 1 if they do or an error occurred.
|
||||||
|
*/
|
||||||
|
int compare_files(int a, int b);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
#include <harness.h>
|
#include <harness.h>
|
||||||
|
|
||||||
|
|
||||||
int dcbfun(struct dcb* dcb, GWBUF * buffer)
|
int dcbfun(struct dcb* dcb, GWBUF * buffer)
|
||||||
{
|
{
|
||||||
printf("Data was written to client DCB.\n");
|
printf("Data was written to client DCB.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int harness_init(int argc, char** argv){
|
int harness_init(int argc, char** argv, HARNESS_INSTANCE** inst){
|
||||||
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if(!(argc == 2 && strcmp(argv[1],"-h") == 0)){
|
if(!(argc == 2 && strcmp(argv[1],"-h") == 0)){
|
||||||
skygw_logmanager_init(0,NULL);
|
skygw_logmanager_init(0,NULL);
|
||||||
@ -20,9 +23,11 @@ int harness_init(int argc, char** argv){
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*inst = &instance;
|
||||||
instance.running = 1;
|
instance.running = 1;
|
||||||
instance.infile = -1;
|
instance.infile = -1;
|
||||||
instance.outfile = -1;
|
instance.outfile = -1;
|
||||||
|
instance.expected = -1;
|
||||||
instance.buff_ind = -1;
|
instance.buff_ind = -1;
|
||||||
instance.last_ind = -1;
|
instance.last_ind = -1;
|
||||||
instance.sess_ind = -1;
|
instance.sess_ind = -1;
|
||||||
@ -33,7 +38,10 @@ int harness_init(int argc, char** argv){
|
|||||||
sprintf(mysqlsess->user,"dummyuser");
|
sprintf(mysqlsess->user,"dummyuser");
|
||||||
sprintf(mysqlsess->db,"dummydb");
|
sprintf(mysqlsess->db,"dummydb");
|
||||||
dcb->func.write = dcbfun;
|
dcb->func.write = dcbfun;
|
||||||
|
dcb->remote = strdup("0.0.0.0");
|
||||||
|
dcb->user = strdup("user");
|
||||||
instance.session->client = (void*)dcb;
|
instance.session->client = (void*)dcb;
|
||||||
|
instance.session->data = (void*)mysqlsess;
|
||||||
|
|
||||||
process_opts(argc,argv);
|
process_opts(argc,argv);
|
||||||
|
|
||||||
@ -98,15 +106,17 @@ void free_buffers()
|
|||||||
}
|
}
|
||||||
int open_file(char* str, unsigned int write)
|
int open_file(char* str, unsigned int write)
|
||||||
{
|
{
|
||||||
int mode;
|
int mode,fd;
|
||||||
|
|
||||||
if(write){
|
if(write){
|
||||||
mode = O_RDWR|O_CREAT;
|
mode = O_RDWR|O_CREAT;
|
||||||
}else{
|
}else{
|
||||||
mode = O_RDONLY;
|
mode = O_RDONLY;
|
||||||
}
|
}
|
||||||
|
if((fd = open(str,mode,S_IRWXU|S_IRGRP|S_IXGRP|S_IXOTH)) < 0){
|
||||||
return open(str,mode,S_IRWXU|S_IRGRP|S_IXGRP|S_IXOTH);
|
printf("Error %d: %s\n",errno,strerror(errno));
|
||||||
|
}
|
||||||
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -622,6 +632,8 @@ int load_filter(FILTERCHAIN* fc, CONFIG* cnf)
|
|||||||
{
|
{
|
||||||
FILTER_PARAMETER** fparams = NULL;
|
FILTER_PARAMETER** fparams = NULL;
|
||||||
int i, paramc = -1;
|
int i, paramc = -1;
|
||||||
|
int sess_err = 0;
|
||||||
|
int x;
|
||||||
if(cnf == NULL){
|
if(cnf == NULL){
|
||||||
|
|
||||||
fparams = read_params(¶mc);
|
fparams = read_params(¶mc);
|
||||||
@ -686,13 +698,16 @@ int load_filter(FILTERCHAIN* fc, CONFIG* cnf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int sess_err = 0;
|
|
||||||
|
|
||||||
if(cnf && fc && fc->instance){
|
if(cnf && fc && fc->instance){
|
||||||
|
|
||||||
|
|
||||||
fc->filter = (FILTER*)fc->instance->createInstance(NULL,fparams);
|
fc->filter = (FILTER*)fc->instance->createInstance(NULL,fparams);
|
||||||
|
if(fc->filter == NULL){
|
||||||
|
printf("Error loading filter:%s: createInstance returned NULL.\n",fc->name);
|
||||||
|
sess_err = 1;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
for(i = 0;i<instance.session_count;i++){
|
for(i = 0;i<instance.session_count;i++){
|
||||||
|
|
||||||
if((fc->session[i] = fc->instance->newSession(fc->filter, instance.session)) &&
|
if((fc->session[i] = fc->instance->newSession(fc->filter, instance.session)) &&
|
||||||
@ -760,8 +775,8 @@ int load_filter(FILTERCHAIN* fc, CONFIG* cnf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
error:
|
||||||
int x;
|
|
||||||
|
|
||||||
if(fparams){
|
if(fparams){
|
||||||
for(x = 0;x<paramc;x++){
|
for(x = 0;x<paramc;x++){
|
||||||
@ -877,9 +892,14 @@ void work_buffer(void* thr_num)
|
|||||||
index < instance.session_count &&
|
index < instance.session_count &&
|
||||||
instance.buff_ind < instance.buffer_count)
|
instance.buff_ind < instance.buffer_count)
|
||||||
{
|
{
|
||||||
instance.head->instance->routeQuery(instance.head->filter,
|
if(instance.head->instance->routeQuery(instance.head->filter,
|
||||||
instance.head->session[index],
|
instance.head->session[index],
|
||||||
instance.buffer[instance.buff_ind]);
|
instance.buffer[instance.buff_ind]) == 0){
|
||||||
|
if(instance.outfile > 0){
|
||||||
|
const char* msg = "Query returned 0.\n";
|
||||||
|
write(instance.outfile,msg,strlen(msg));
|
||||||
|
}
|
||||||
|
}
|
||||||
if(instance.tail->instance->clientReply){
|
if(instance.tail->instance->clientReply){
|
||||||
instance.tail->instance->clientReply(instance.tail->filter,
|
instance.tail->instance->clientReply(instance.tail->filter,
|
||||||
instance.tail->session[index],
|
instance.tail->session[index],
|
||||||
@ -946,7 +966,7 @@ GWBUF* gen_packet(PACKET pkt)
|
|||||||
int process_opts(int argc, char** argv)
|
int process_opts(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int fd, buffsize = 1024;
|
int fd, buffsize = 1024;
|
||||||
int rd,rdsz, rval;
|
int rd,rdsz, rval = 0;
|
||||||
size_t fsize;
|
size_t fsize;
|
||||||
char *buff = calloc(buffsize,sizeof(char)), *tok = NULL;
|
char *buff = calloc(buffsize,sizeof(char)), *tok = NULL;
|
||||||
|
|
||||||
@ -999,10 +1019,18 @@ int process_opts(int argc, char** argv)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* conf_name = NULL;
|
char* conf_name = NULL;
|
||||||
while((rd = getopt(argc,argv,"m:c:i:o:s:t:d:qh")) > 0){
|
rval = 0;
|
||||||
|
|
||||||
|
while((rd = getopt(argc,argv,"e:m:c:i:o:s:t:d:qh")) > 0){
|
||||||
switch(rd){
|
switch(rd){
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
instance.expected = open_file(optarg,0);
|
||||||
|
printf("Expected output is read from: %s\n",optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'o':
|
case 'o':
|
||||||
instance.outfile = open_file(optarg,1);
|
instance.outfile = open_file(optarg,1);
|
||||||
printf("Output is written to: %s\n",optarg);
|
printf("Output is written to: %s\n",optarg);
|
||||||
@ -1067,6 +1095,7 @@ int process_opts(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
if(conf_name && load_config(conf_name)){
|
if(conf_name && load_config(conf_name)){
|
||||||
load_query();
|
load_query();
|
||||||
}else{
|
}else{
|
||||||
@ -1075,5 +1104,30 @@ int process_opts(int argc, char** argv)
|
|||||||
free(conf_name);
|
free(conf_name);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
int compare_files(int a,int b)
|
||||||
|
{
|
||||||
|
char in[4098];
|
||||||
|
char exp[4098];
|
||||||
|
int line = 1;
|
||||||
|
|
||||||
|
if(a < 1 || b < 1){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lseek(a,0,SEEK_SET) < 0 ||
|
||||||
|
lseek(b,0,SEEK_SET) < 0){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(fdgets(a,in,4098) && fdgets(b,exp,4098)){
|
||||||
|
if(strcmp(in,exp)){
|
||||||
|
printf("The files differ at line %d:\n%s\n-------------------------------------\n%s\n",line,in,exp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
line++;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,37 @@
|
|||||||
|
#include <my_config.h>
|
||||||
|
#include <mysql.h>
|
||||||
#include <harness.h>
|
#include <harness.h>
|
||||||
|
|
||||||
int main(int argc,char** argv)
|
int main(int argc,char** argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
static char* server_options[] = {
|
||||||
|
"MariaDB Corporation MaxScale",
|
||||||
|
"--datadir=./",
|
||||||
|
"--language=./",
|
||||||
|
"--skip-innodb",
|
||||||
|
"--default-storage-engine=myisam",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
|
||||||
|
|
||||||
|
static char* server_groups[] = {
|
||||||
|
"embedded",
|
||||||
|
"server",
|
||||||
|
"server",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
HARNESS_INSTANCE* inst;
|
HARNESS_INSTANCE* inst;
|
||||||
|
|
||||||
|
if(mysql_library_init(num_elements, server_options, server_groups)){
|
||||||
|
printf("Embedded server init failed.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(harness_init(argc,argv,&inst) || inst->error){
|
if(harness_init(argc,argv,&inst) || inst->error){
|
||||||
printf("Error: Initialization failed.\n");
|
printf("Error: Initialization failed.\n");
|
||||||
skygw_log_write(LOGFILE_ERROR,"Error: Initialization failed.\n");
|
skygw_log_write(LOGFILE_ERROR,"Error: Initialization failed.\n");
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
rule union_regex deny regex '.*union.*'
|
rule union_regex deny regex '.*union.*'
|
||||||
rule dont_delete_everything deny no_where_clause on_operations delete|update at_times 12:00:00-18:00:00
|
rule dont_delete_everything deny no_where_clause on_operations delete|update
|
||||||
users %@% match any rules union_regex dont_delete_everything
|
users %@% match any rules union_regex dont_delete_everything
|
Loading…
x
Reference in New Issue
Block a user