@@ -2377,33 +2377,47 @@ void handler(int sig) {
2377
2377
}
2378
2378
}
2379
2379
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 ;
2381
2383
MYSQL mysql ;
2382
2384
mysql_init (& mysql );
2383
2385
guint i , tm = 1 ;
2384
2386
sleep (1 );
2385
2387
2386
2388
while (TRUE) {
2387
- GPtrArray * backends = bs -> backends ;
2388
2389
guint len = backends -> len ;
2389
2390
2390
2391
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 );
2392
2393
if (backend == NULL || backend -> state == BACKEND_STATE_UP || backend -> state == BACKEND_STATE_OFFLINE ) continue ;
2393
2394
2394
- gchar * ip = inet_ntoa (backend -> addr -> addr .ipv4 .sin_addr );
2395
+ gchar * ip = inet_ntoa (backend -> addr -> addr .ipv4 .sin_addr );
2395
2396
guint port = ntohs (backend -> addr -> addr .ipv4 .sin_port );
2396
2397
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 ;
2401
2398
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
+ }
2402
2412
mysql_close (& mysql );
2413
+ g_free (user );
2414
+ g_free (pwd );
2403
2415
}
2404
2416
2405
2417
sleep (4 );
2406
2418
}
2419
+
2420
+ return NULL ;
2407
2421
}
2408
2422
2409
2423
/**
0 commit comments