| 125 |
static int fork_server(void) |
static int fork_server(void) |
| 126 |
{ |
{ |
| 127 |
ssh_event event; |
ssh_event event; |
| 128 |
|
long int ssh_timeout = 0; |
| 129 |
int pid; |
int pid; |
| 130 |
int i; |
int i; |
| 131 |
int ret; |
int ret; |
| 177 |
ssh_callbacks_init(&cb); |
ssh_callbacks_init(&cb); |
| 178 |
ssh_set_server_callbacks(SSH_session, &cb); |
ssh_set_server_callbacks(SSH_session, &cb); |
| 179 |
|
|
| 180 |
|
ssh_timeout = 60; // second |
| 181 |
|
if (ssh_options_set(SSH_session, SSH_OPTIONS_TIMEOUT, &ssh_timeout) < 0) |
| 182 |
|
{ |
| 183 |
|
log_error("Error setting SSH options: %s\n", ssh_get_error(SSH_session)); |
| 184 |
|
goto cleanup; |
| 185 |
|
} |
| 186 |
|
|
| 187 |
if (ssh_handle_key_exchange(SSH_session)) |
if (ssh_handle_key_exchange(SSH_session)) |
| 188 |
{ |
{ |
| 189 |
log_error("ssh_handle_key_exchange() error: %s\n", ssh_get_error(SSH_session)); |
log_error("ssh_handle_key_exchange() error: %s\n", ssh_get_error(SSH_session)); |
| 199 |
ret = ssh_event_dopoll(event, 100); // 0.1 second |
ret = ssh_event_dopoll(event, 100); // 0.1 second |
| 200 |
if (ret == SSH_ERROR) |
if (ret == SSH_ERROR) |
| 201 |
{ |
{ |
| 202 |
|
#ifdef _DEBUG |
| 203 |
log_error("ssh_event_dopoll() error: %s\n", ssh_get_error(SSH_session)); |
log_error("ssh_event_dopoll() error: %s\n", ssh_get_error(SSH_session)); |
| 204 |
|
#endif |
| 205 |
goto cleanup; |
goto cleanup; |
| 206 |
} |
} |
| 207 |
} |
} |
| 211 |
log_error("SSH auth error, tried %d times\n", cb_data.tries); |
log_error("SSH auth error, tried %d times\n", cb_data.tries); |
| 212 |
goto cleanup; |
goto cleanup; |
| 213 |
} |
} |
| 214 |
|
|
| 215 |
|
ssh_timeout = 0; |
| 216 |
|
if (ssh_options_set(SSH_session, SSH_OPTIONS_TIMEOUT, &ssh_timeout) < 0) |
| 217 |
|
{ |
| 218 |
|
log_error("Error setting SSH options: %s\n", ssh_get_error(SSH_session)); |
| 219 |
|
goto cleanup; |
| 220 |
|
} |
| 221 |
} |
} |
| 222 |
|
|
| 223 |
// Redirect Input |
// Redirect Input |
| 282 |
time_t tm_notify_child_exit = time(NULL); |
time_t tm_notify_child_exit = time(NULL); |
| 283 |
int sd_notify_stopping = 0; |
int sd_notify_stopping = 0; |
| 284 |
MENU_SET bbs_menu_new; |
MENU_SET bbs_menu_new; |
| 285 |
|
MENU_SET top10_menu_new; |
| 286 |
int i, j; |
int i, j; |
| 287 |
pid_t pid; |
pid_t pid; |
| 288 |
int ssh_log_level = SSH_LOG_NOLOG; |
int ssh_log_level = SSH_LOG_NOLOG; |
| 476 |
if (load_menu(&bbs_menu_new, CONF_MENU) < 0) |
if (load_menu(&bbs_menu_new, CONF_MENU) < 0) |
| 477 |
{ |
{ |
| 478 |
unload_menu(&bbs_menu_new); |
unload_menu(&bbs_menu_new); |
| 479 |
log_error("Reload menu failed\n"); |
log_error("Reload bbs menu failed\n"); |
| 480 |
} |
} |
| 481 |
else |
else |
| 482 |
{ |
{ |
| 483 |
unload_menu(&bbs_menu); |
unload_menu(&bbs_menu); |
| 484 |
memcpy(&bbs_menu, &bbs_menu_new, sizeof(bbs_menu_new)); |
memcpy(&bbs_menu, &bbs_menu_new, sizeof(bbs_menu_new)); |
| 485 |
log_common("Reload menu successfully\n"); |
log_common("Reload bbs menu successfully\n"); |
| 486 |
|
} |
| 487 |
|
|
| 488 |
|
if (load_menu(&top10_menu_new, CONF_TOP10_MENU) < 0) |
| 489 |
|
{ |
| 490 |
|
unload_menu(&top10_menu_new); |
| 491 |
|
log_error("Reload top10 menu failed\n"); |
| 492 |
|
} |
| 493 |
|
else |
| 494 |
|
{ |
| 495 |
|
unload_menu(&top10_menu); |
| 496 |
|
top10_menu_new.allow_exit = 1; |
| 497 |
|
memcpy(&top10_menu, &top10_menu_new, sizeof(top10_menu_new)); |
| 498 |
|
log_common("Reload top10 menu successfully\n"); |
| 499 |
} |
} |
| 500 |
|
|
| 501 |
for (int i = 0; i < data_files_load_startup_count; i++) |
for (int i = 0; i < data_files_load_startup_count; i++) |