Skip to content

Commit 91aab08

Browse files
author
zhuchao-hit
committed
check_state with username and password
1 parent 013e250 commit 91aab08

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

plugins/proxy/proxy-plugin.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2377,33 +2377,47 @@ void handler(int sig) {
23772377
}
23782378
}
23792379

2380-
void* check_state(network_backends_t* bs) {
2380+
gpointer check_state(network_backends_t *bs) {
2381+
GPtrArray *backends = bs->backends;
2382+
GPtrArray *raw_pwds = bs->raw_pwds;
23812383
MYSQL mysql;
23822384
mysql_init(&mysql);
23832385
guint i, tm = 1;
23842386
sleep(1);
23852387

23862388
while (TRUE) {
2387-
GPtrArray* backends = bs->backends;
23882389
guint len = backends->len;
23892390

23902391
for (i = 0; i < len; ++i) {
2391-
network_backend_t* backend = g_ptr_array_index(backends, i);
2392+
network_backend_t *backend = g_ptr_array_index(backends, i);
23922393
if (backend == NULL || backend->state == BACKEND_STATE_UP || backend->state == BACKEND_STATE_OFFLINE) continue;
23932394

2394-
gchar* ip = inet_ntoa(backend->addr->addr.ipv4.sin_addr);
2395+
gchar *ip = inet_ntoa(backend->addr->addr.ipv4.sin_addr);
23952396
guint port = ntohs(backend->addr->addr.ipv4.sin_port);
23962397
mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, &tm);
2397-
mysql_real_connect(&mysql, ip, NULL, NULL, NULL, port, NULL, 0);
2398-
2399-
if (mysql_errno(&mysql) == 1045 || mysql_errno(&mysql) == 0) backend->state = BACKEND_STATE_UP;
2400-
else if (backend->state == BACKEND_STATE_UNKNOWN) backend->state = BACKEND_STATE_DOWN;
24012398

2399+
gchar *user = NULL, *pwd = NULL;
2400+
if (raw_pwds->len > 0) {
2401+
gchar *user_pwd = g_ptr_array_index(raw_pwds, 0);
2402+
gchar *pos = strchr(user_pwd, ':');
2403+
g_assert(pos);
2404+
user = g_strndup(user_pwd, pos-user_pwd);
2405+
pwd = decrypt(pos+1);
2406+
}
2407+
if (mysql_real_connect(&mysql, ip, user, pwd, NULL, port, NULL, 0) && mysql_query(&mysql, "SELECT 1") == 0) {
2408+
backend->state = BACKEND_STATE_UP;
2409+
} else if (backend->state == BACKEND_STATE_UNKNOWN) {
2410+
backend->state = BACKEND_STATE_DOWN;
2411+
}
24022412
mysql_close(&mysql);
2413+
g_free(user);
2414+
g_free(pwd);
24032415
}
24042416

24052417
sleep(4);
24062418
}
2419+
2420+
return NULL;
24072421
}
24082422

24092423
/**

0 commit comments

Comments
 (0)