|
|
|
|
@ -40,7 +40,9 @@
|
|
|
|
|
#define READ_ONLY_OFF "\x01\x00\x00\x01\x02\x23\x00\x00\x02\x03\x64\x65\x66\x00\x00\x00\x0d\x56\x61\x72\x69\x61\x62\x6c\x65\x5f\x6e\x61\x6d\x65\x00\x0c\x21\x00\x0f\x00\x00\x00\xfd\x01\x00\x1f\x00\x00\x1b\x00\x00\x03\x03\x64\x65\x66\x00\x00\x00\x05\x56\x61\x6c\x75\x65\x00\x0c\x21\x00\x0f\x00\x00\x00\xfd\x01\x00\x1f\x00\x00\x05\x00\x00\x04\xfe\x00\x00\x02\x00\x0e\x00\x00\x05\x09\x72\x65\x61\x64\x5f\x6f\x6e\x6c\x79\x03\x4f\x46\x46\x05\x00\x00\x06\xfe\x00\x00\x02\x00"
|
|
|
|
|
#define READ_ONLY_ON "\x01\x00\x00\x01\x02\x23\x00\x00\x02\x03\x64\x65\x66\x00\x00\x00\x0d\x56\x61\x72\x69\x61\x62\x6c\x65\x5f\x6e\x61\x6d\x65\x00\x0c\x21\x00\x0f\x00\x00\x00\xfd\x01\x00\x1f\x00\x00\x1b\x00\x00\x03\x03\x64\x65\x66\x00\x00\x00\x05\x56\x61\x6c\x75\x65\x00\x0c\x21\x00\x0f\x00\x00\x00\xfd\x01\x00\x1f\x00\x00\x05\x00\x00\x04\xfe\x00\x00\x02\x00\x0d\x00\x00\x05\x09\x72\x65\x61\x64\x5f\x6f\x6e\x6c\x79\x02\x4f\x4e\x05\x00\x00\x06\xfe\x00\x00\x02\x00"
|
|
|
|
|
|
|
|
|
|
#define READ_ONLY_0 "\x01\x00\x00\x01\x01\x28\x00\x00\x02\x03\x64\x65\x66\x00\x00\x00\x12\x40\x40\x67\x6c\x6f\x62\x61\x6c\x2e\x72\x65\x61\x64\x5f\x6f\x6e\x6c\x79\x00\x0c\x3f\x00\x01\x00\x00\x00\x08\x80\x00\x00\x00\x00\x05\x00\x00\x03\xfe\x00\x00\x02\x00\x02\x00\x00\x04\x01\x30\x05\x00\x00\x05\xfe\x00\x00\x02\x00"
|
|
|
|
|
|
|
|
|
|
#define READ_ONLY_1 "\x01\x00\x00\x01\x01\x28\x00\x00\x02\x03\x64\x65\x66\x00\x00\x00\x12\x40\x40\x67\x6c\x6f\x62\x61\x6c\x2e\x72\x65\x61\x64\x5f\x6f\x6e\x6c\x79\x00\x0c\x3f\x00\x01\x00\x00\x00\x08\x80\x00\x00\x00\x00\x05\x00\x00\x03\xfe\x00\x00\x02\x00\x02\x00\x00\x04\x01\x31\x05\x00\x00\x05\xfe\x00\x00\x02\x00"
|
|
|
|
|
|
|
|
|
|
struct MHD_Daemon *Admin_HTTP_Server;
|
|
|
|
|
|
|
|
|
|
@ -2366,6 +2368,31 @@ void admin_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *pkt) {
|
|
|
|
|
goto __run_query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!strncasecmp("SELECT @@global.read_only", query_no_space, strlen("SELECT @@global.read_only"))) {
|
|
|
|
|
l_free(query_length,query);
|
|
|
|
|
char *q=(char *)"SELECT 'read_only' Variable_name, '%s' Value FROM global_variables WHERE Variable_name='admin-read_only'";
|
|
|
|
|
query_length=strlen(q)+5;
|
|
|
|
|
query=(char *)l_alloc(query_length);
|
|
|
|
|
ProxySQL_Admin *SPA=(ProxySQL_Admin *)pa;
|
|
|
|
|
bool ro=SPA->get_read_only();
|
|
|
|
|
//sprintf(query,q,( ro ? "ON" : "OFF"));
|
|
|
|
|
PtrSize_t pkt_2;
|
|
|
|
|
if (ro) {
|
|
|
|
|
pkt_2.size=73;
|
|
|
|
|
pkt_2.ptr=l_alloc(pkt_2.size);
|
|
|
|
|
memcpy(pkt_2.ptr,READ_ONLY_1,pkt_2.size);
|
|
|
|
|
} else {
|
|
|
|
|
pkt_2.size=73;
|
|
|
|
|
pkt_2.ptr=l_alloc(pkt_2.size);
|
|
|
|
|
memcpy(pkt_2.ptr,READ_ONLY_0,pkt_2.size);
|
|
|
|
|
}
|
|
|
|
|
sess->status=WAITING_CLIENT_DATA;
|
|
|
|
|
sess->client_myds->DSS=STATE_SLEEP;
|
|
|
|
|
sess->client_myds->PSarrayOUT->add(pkt_2.ptr,pkt_2.size);
|
|
|
|
|
run_query=false;
|
|
|
|
|
goto __run_query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sess->session_type == PROXYSQL_SESSION_ADMIN) { // no stats
|
|
|
|
|
if ((query_no_space_length>13) && (!strncasecmp("PULL VERSION ", query_no_space, 13))) {
|
|
|
|
|
proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received PULL command\n");
|
|
|
|
|
|