Merge branch 'develop' into MXS-121
This commit is contained in:
@ -1721,6 +1721,9 @@ SERVER *server;
|
||||
obj->element = server_alloc(address,
|
||||
protocol,
|
||||
atoi(port));
|
||||
|
||||
server_set_unique_name(obj->element, obj->object);
|
||||
|
||||
if (obj->element && monuser && monpw)
|
||||
{
|
||||
serverAddMonUser(obj->element,
|
||||
|
||||
@ -1118,6 +1118,7 @@ getUsers(SERVICE *service, USERS *users)
|
||||
MYSQL_DATABASE_MAXLEN;
|
||||
int dbnames = 0;
|
||||
int db_grants = 0;
|
||||
char dbnm[MYSQL_DATABASE_MAXLEN+1];
|
||||
|
||||
if (serviceGetUser(service, &service_user, &service_passwd) == 0)
|
||||
{
|
||||
@ -1464,16 +1465,32 @@ getUsers(SERVICE *service, USERS *users)
|
||||
*/
|
||||
|
||||
if (db_grants) {
|
||||
/* we have dbgrants, store them */
|
||||
bool havedb = false;
|
||||
/* we have dbgrants, store them */
|
||||
if(row[5]){
|
||||
unsigned long *rowlen = mysql_fetch_lengths(result);
|
||||
memcpy(dbnm,row[5],rowlen[5]);
|
||||
memset(dbnm + rowlen[5],0,1);
|
||||
havedb = true;
|
||||
if(service->strip_db_esc) {
|
||||
strip_escape_chars(dbnm);
|
||||
LOGIF(LD, (skygw_log_write(
|
||||
LOGFILE_DEBUG,
|
||||
"[%s]: %s -> %s",
|
||||
service->name,
|
||||
row[5],
|
||||
dbnm)));
|
||||
}
|
||||
}
|
||||
|
||||
if(service->optimize_wildcard && wildcard_db_grant(row[5]))
|
||||
if(service->optimize_wildcard && havedb && wildcard_db_grant(row[5]))
|
||||
{
|
||||
rc = add_wildcard_users(users, row[0], row[1], password, row[4], row[5], service->resources);
|
||||
rc = add_wildcard_users(users, row[0], row[1], password, row[4], dbnm, service->resources);
|
||||
skygw_log_write(LOGFILE_DEBUG|LOGFILE_TRACE,"%s: Converted '%s' to %d individual database grants.",service->name,row[5],rc);
|
||||
}
|
||||
else
|
||||
{
|
||||
rc = add_mysql_users_with_host_ipv4(users, row[0], row[1], password, row[4], row[5]);
|
||||
rc = add_mysql_users_with_host_ipv4(users, row[0], row[1], password, row[4], havedb ? dbnm : NULL);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
@ -163,6 +163,7 @@ dcb_get_zombies(void)
|
||||
* This routine performs the generic initialisation on the DCB before returning
|
||||
* the newly allocated DCB.
|
||||
*
|
||||
* @param dcb_role_t The role for the new DCB
|
||||
* @return A newly allocated DCB or NULL if non could be allocated.
|
||||
*/
|
||||
DCB *
|
||||
|
||||
@ -69,8 +69,6 @@ int main(int argc, char **argv)
|
||||
arg_vector[5] = "LOGFILE_ERROR";
|
||||
arg_vector[6] = NULL;
|
||||
skygw_logmanager_init(arg_count,arg_vector);
|
||||
skygw_log_enable(LOGFILE_TRACE);
|
||||
skygw_log_enable(LOGFILE_DEBUG);
|
||||
free(arg_vector[2]);
|
||||
free(arg_vector);
|
||||
|
||||
|
||||
@ -78,8 +78,6 @@ main(int argc, char **argv)
|
||||
arg_vector[5] = "LOGFILE_ERROR";
|
||||
arg_vector[6] = NULL;
|
||||
skygw_logmanager_init(arg_count,arg_vector);
|
||||
skygw_log_enable(LOGFILE_TRACE);
|
||||
skygw_log_enable(LOGFILE_DEBUG);
|
||||
free(arg_vector[2]);
|
||||
free(arg_vector);
|
||||
|
||||
|
||||
@ -258,7 +258,8 @@ char *
|
||||
modutil_get_SQL(GWBUF *buf)
|
||||
{
|
||||
unsigned int len, length;
|
||||
char *ptr, *dptr, *rval = NULL;
|
||||
unsigned char *ptr;
|
||||
char *dptr, *rval = NULL;
|
||||
|
||||
if (!modutil_is_SQL(buf) && !modutil_is_SQL_prepare(buf))
|
||||
return rval;
|
||||
|
||||
@ -66,12 +66,39 @@ int result, length, residual;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
test2()
|
||||
{
|
||||
GWBUF *buffer;
|
||||
char len = 128;
|
||||
char query[129];
|
||||
|
||||
buffer = gwbuf_alloc(132);
|
||||
ss_info_dassert((buffer != NULL),"Buffer should not be null");
|
||||
|
||||
memset(query,';',128);
|
||||
memset(query+128,'\0',1);
|
||||
*((unsigned char*)buffer->start) = len;
|
||||
*((unsigned char*)buffer->start+1) = 0;
|
||||
*((unsigned char*)buffer->start+2) = 0;
|
||||
*((unsigned char*)buffer->start+3) = 1;
|
||||
*((unsigned char*)buffer->start+4) = 0x03;
|
||||
memcpy(buffer->start + 5,query,strlen(query));
|
||||
char* result = modutil_get_SQL(buffer);
|
||||
ss_dassert(strcmp(result,query) == 0);
|
||||
gwbuf_free(buffer);
|
||||
free(result);
|
||||
ss_dfprintf(stderr, "\t..done\n");
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
result += test1();
|
||||
|
||||
result += test2();
|
||||
exit(result);
|
||||
}
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ typedef struct server {
|
||||
*/
|
||||
#define SERVER_IS_RUNNING(server) (((server)->status & (SERVER_RUNNING|SERVER_MAINT)) == SERVER_RUNNING)
|
||||
/**
|
||||
* Is the server marked as down - the macro returns true if the server is beleived
|
||||
* Is the server marked as down - the macro returns true if the server is believed
|
||||
* to be inoperable.
|
||||
*/
|
||||
#define SERVER_IS_DOWN(server) (((server)->status & SERVER_RUNNING) == 0)
|
||||
|
||||
@ -172,7 +172,11 @@ char *logfile = NULL;
|
||||
else if (!strcmp(params[i]->name, "log_trace"))
|
||||
my_instance->log_trace = config_truth_value(params[i]->value);
|
||||
else if (!strcmp(params[i]->name, "log_file"))
|
||||
{
|
||||
if(logfile)
|
||||
free(logfile);
|
||||
logfile = strdup(params[i]->value);
|
||||
}
|
||||
else if (!filter_standard_parameter(params[i]->name))
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
@ -207,6 +211,7 @@ char *logfile = NULL;
|
||||
if (my_instance->match == NULL || my_instance->replace == NULL)
|
||||
{
|
||||
free(my_instance);
|
||||
free(logfile);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -218,6 +223,7 @@ char *logfile = NULL;
|
||||
free(my_instance->match);
|
||||
free(my_instance->replace);
|
||||
free(my_instance);
|
||||
free(logfile);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -287,7 +287,7 @@ int gw_read_backend_handshake(
|
||||
pthread_self(),
|
||||
conn->owner_dcb->fd,
|
||||
pthread_self())));
|
||||
|
||||
while(head = gwbuf_consume(head, GWBUF_LENGTH(head)));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -1164,9 +1164,9 @@ static void closeSession(
|
||||
dcb_close(router_cli_ses->dcb_reply);
|
||||
dcb_close(router_cli_ses->dcb_route);
|
||||
|
||||
if(router_cli_ses->queue)
|
||||
router_cli_ses->queue = gwbuf_consume(
|
||||
router_cli_ses->queue,gwbuf_length(router_cli_ses->queue));
|
||||
while(router_cli_ses->queue &&
|
||||
(router_cli_ses->queue = gwbuf_consume(
|
||||
router_cli_ses->queue,gwbuf_length(router_cli_ses->queue))));
|
||||
|
||||
/** Unlock */
|
||||
rses_end_locked_router_action(router_cli_ses);
|
||||
@ -1195,18 +1195,17 @@ static void freeSession(
|
||||
ROUTER_CLIENT_SES* router_cli_ses;
|
||||
ROUTER_INSTANCE* router;
|
||||
int i;
|
||||
backend_ref_t* backend_ref;
|
||||
backend_ref_t* bref;
|
||||
|
||||
router_cli_ses = (ROUTER_CLIENT_SES *)router_client_session;
|
||||
router = (ROUTER_INSTANCE *)router_instance;
|
||||
backend_ref = router_cli_ses->rses_backend_ref;
|
||||
|
||||
for (i=0; i<router_cli_ses->rses_nbackends; i++)
|
||||
{
|
||||
if (!BREF_IS_IN_USE((&backend_ref[i])))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
bref = &router_cli_ses->rses_backend_ref[i];
|
||||
while(bref->bref_pending_cmd &&
|
||||
(bref->bref_pending_cmd = gwbuf_consume(
|
||||
bref->bref_pending_cmd,gwbuf_length(bref->bref_pending_cmd))));
|
||||
}
|
||||
spinlock_acquire(&router->lock);
|
||||
|
||||
@ -2237,7 +2236,8 @@ static int routeQuery(
|
||||
*/
|
||||
if (sescmd_cursor_is_active(scur))
|
||||
{
|
||||
ss_dassert(bref->bref_pending_cmd == NULL);
|
||||
ss_dassert((bref->bref_pending_cmd == NULL ||
|
||||
router_cli_ses->rses_closed));
|
||||
bref->bref_pending_cmd = gwbuf_clone(querybuf);
|
||||
|
||||
rses_end_locked_router_action(router_cli_ses);
|
||||
|
||||
Reference in New Issue
Block a user