| 2407 |
return FALSE; |
return FALSE; |
| 2408 |
} |
} |
| 2409 |
|
|
|
#define OBFUSCATING_ROUND_TO 32 |
|
|
|
|
|
static int obfuscating_round_up(PTInstVar pvar, int size) |
|
|
{ |
|
|
return (size + OBFUSCATING_ROUND_TO - 1) & ~(OBFUSCATING_ROUND_TO - 1); |
|
|
} |
|
|
|
|
| 2410 |
static void try_send_credentials(PTInstVar pvar) |
static void try_send_credentials(PTInstVar pvar) |
| 2411 |
{ |
{ |
| 2412 |
if ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_CREDENTIALS) == 0) { |
if ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_CREDENTIALS) == 0) { |
| 2429 |
return; |
return; |
| 2430 |
case SSH_AUTH_PASSWORD:{ |
case SSH_AUTH_PASSWORD:{ |
| 2431 |
int len = strlen(cred->password); |
int len = strlen(cred->password); |
|
// Round up password length to discourage traffic analysis |
|
|
int obfuscated_len = obfuscating_round_up(pvar, len); |
|
| 2432 |
unsigned char FAR *outmsg = |
unsigned char FAR *outmsg = |
| 2433 |
begin_send_packet(pvar, SSH_CMSG_AUTH_PASSWORD, |
begin_send_packet(pvar, SSH_CMSG_AUTH_PASSWORD, |
| 2434 |
4 + obfuscated_len); |
4 + len); |
| 2435 |
|
|
| 2436 |
notify_verbose_message(pvar, |
notify_verbose_message(pvar, |
| 2437 |
"Trying PASSWORD authentication...", |
"Trying PASSWORD authentication...", |
| 2438 |
LOG_LEVEL_VERBOSE); |
LOG_LEVEL_VERBOSE); |
| 2439 |
|
|
| 2440 |
set_uint32(outmsg, obfuscated_len); |
set_uint32(outmsg, len); |
| 2441 |
memcpy(outmsg + 4, cred->password, len); |
memcpy(outmsg + 4, cred->password, len); |
|
memset(outmsg + 4 + len, 0, obfuscated_len - len); |
|
| 2442 |
|
|
| 2443 |
// セッション複製時にパスワードを使い回したいので、ここでのリソース解放はやめる。 |
// セッション複製時にパスワードを使い回したいので、ここでのリソース解放はやめる。 |
| 2444 |
// socket close時にもこの関数は呼ばれているので、たぶん問題ない。(2005.4.8 yutaka) |
// socket close時にもこの関数は呼ばれているので、たぶん問題ない。(2005.4.8 yutaka) |
| 2554 |
begin_send_packet(pvar, SSH_CMSG_AUTH_TIS, 0); |
begin_send_packet(pvar, SSH_CMSG_AUTH_TIS, 0); |
| 2555 |
|
|
| 2556 |
notify_verbose_message(pvar, |
notify_verbose_message(pvar, |
| 2557 |
"Trying TIS authentication...", |
"Trying TIS authentication...", |
| 2558 |
LOG_LEVEL_VERBOSE); |
LOG_LEVEL_VERBOSE); |
| 2559 |
enque_handlers(pvar, 2, TIS_msgs, TIS_handlers); |
enque_handlers(pvar, 2, TIS_msgs, TIS_handlers); |
| 2560 |
} else { |
} else { |
| 2561 |
int len = strlen(cred->password); |
int len = strlen(cred->password); |
|
int obfuscated_len = obfuscating_round_up(pvar, len); |
|
| 2562 |
unsigned char FAR *outmsg = |
unsigned char FAR *outmsg = |
| 2563 |
begin_send_packet(pvar, SSH_CMSG_AUTH_TIS_RESPONSE, |
begin_send_packet(pvar, SSH_CMSG_AUTH_TIS_RESPONSE, |
| 2564 |
4 + obfuscated_len); |
4 + len); |
| 2565 |
|
|
| 2566 |
notify_verbose_message(pvar, "Sending TIS response", |
notify_verbose_message(pvar, |
| 2567 |
LOG_LEVEL_VERBOSE); |
"Sending TIS response", |
| 2568 |
|
LOG_LEVEL_VERBOSE); |
| 2569 |
|
|
| 2570 |
set_uint32(outmsg, obfuscated_len); |
set_uint32(outmsg, len); |
| 2571 |
memcpy(outmsg + 4, cred->password, len); |
memcpy(outmsg + 4, cred->password, len); |
|
memset(outmsg + 4 + len, 0, obfuscated_len - len); |
|
| 2572 |
enque_simple_auth_handlers(pvar); |
enque_simple_auth_handlers(pvar); |
| 2573 |
} |
} |
| 2574 |
|
|
| 2598 |
|
|
| 2599 |
if (username != NULL) { |
if (username != NULL) { |
| 2600 |
int len = strlen(username); |
int len = strlen(username); |
|
int obfuscated_len = obfuscating_round_up(pvar, len); |
|
| 2601 |
unsigned char FAR *outmsg = |
unsigned char FAR *outmsg = |
| 2602 |
begin_send_packet(pvar, SSH_CMSG_USER, 4 + obfuscated_len); |
begin_send_packet(pvar, SSH_CMSG_USER, 4 + len); |
| 2603 |
char buf[1024] = "Sending user name: "; |
char buf[1024] = "Sending user name: "; |
| 2604 |
static const int msgs[] = |
static const int msgs[] = |
| 2605 |
{ SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE }; |
{ SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE }; |
| 2606 |
static const SSHPacketHandler handlers[] |
static const SSHPacketHandler handlers[] |
| 2607 |
= { handle_noauth_success, handle_auth_required }; |
= { handle_noauth_success, handle_auth_required }; |
| 2608 |
|
|
| 2609 |
set_uint32(outmsg, obfuscated_len); |
set_uint32(outmsg, len); |
| 2610 |
memcpy(outmsg + 4, username, len); |
memcpy(outmsg + 4, username, len); |
|
memset(outmsg + 4 + len, 0, obfuscated_len - len); |
|
| 2611 |
finish_send_packet(pvar); |
finish_send_packet(pvar); |
| 2612 |
|
|
| 2613 |
pvar->ssh_state.status_flags |= STATUS_DONT_SEND_USER_NAME; |
pvar->ssh_state.status_flags |= STATUS_DONT_SEND_USER_NAME; |