version 1.11, 2000/11/25 16:42:53 |
version 1.12, 2000/12/10 17:01:53 |
|
|
int type, i; |
int type, i; |
int payload_len; |
int payload_len; |
unsigned int clen; |
unsigned int clen; |
|
char prompt[1024]; |
char *challenge, *response; |
char *challenge, *response; |
|
|
debug("Doing skey authentication."); |
debug("Doing skey authentication."); |
|
|
/* request a challenge */ |
|
packet_start(SSH_CMSG_AUTH_TIS); |
|
packet_send(); |
|
packet_write_wait(); |
|
|
|
type = packet_read(&payload_len); |
|
if (type != SSH_SMSG_FAILURE && |
|
type != SSH_SMSG_AUTH_TIS_CHALLENGE) { |
|
packet_disconnect("Protocol error: got %d in response " |
|
"to skey-auth", type); |
|
} |
|
if (type != SSH_SMSG_AUTH_TIS_CHALLENGE) { |
|
debug("No challenge for skey authentication."); |
|
return 0; |
|
} |
|
challenge = packet_get_string(&clen); |
|
packet_integrity_check(payload_len, (4 + clen), type); |
|
if (options.cipher == SSH_CIPHER_NONE) |
|
log("WARNING: Encryption is disabled! " |
|
"Reponse will be transmitted in clear text."); |
|
fprintf(stderr, "%s\n", challenge); |
|
xfree(challenge); |
|
fflush(stderr); |
|
for (i = 0; i < options.number_of_password_prompts; i++) { |
for (i = 0; i < options.number_of_password_prompts; i++) { |
|
/* request a challenge */ |
|
packet_start(SSH_CMSG_AUTH_TIS); |
|
packet_send(); |
|
packet_write_wait(); |
|
|
|
type = packet_read(&payload_len); |
|
if (type != SSH_SMSG_FAILURE && |
|
type != SSH_SMSG_AUTH_TIS_CHALLENGE) { |
|
packet_disconnect("Protocol error: got %d in response " |
|
"to skey-auth", type); |
|
} |
|
if (type != SSH_SMSG_AUTH_TIS_CHALLENGE) { |
|
debug("No challenge for skey authentication."); |
|
return 0; |
|
} |
|
challenge = packet_get_string(&clen); |
|
packet_integrity_check(payload_len, (4 + clen), type); |
|
snprintf(prompt, sizeof prompt, "%s\nResponse: ", challenge); |
|
xfree(challenge); |
if (i != 0) |
if (i != 0) |
error("Permission denied, please try again."); |
error("Permission denied, please try again."); |
response = read_passphrase("Response: ", 0); |
if (options.cipher == SSH_CIPHER_NONE) |
|
log("WARNING: Encryption is disabled! " |
|
"Reponse will be transmitted in clear text."); |
|
response = read_passphrase(prompt, 0); |
|
if (strcmp(response, "") == 0) { |
|
xfree(response); |
|
break; |
|
} |
packet_start(SSH_CMSG_AUTH_TIS_RESPONSE); |
packet_start(SSH_CMSG_AUTH_TIS_RESPONSE); |
packet_put_string(response, strlen(response)); |
packet_put_string(response, strlen(response)); |
memset(response, 0, strlen(response)); |
memset(response, 0, strlen(response)); |
|
|
return 1; |
return 1; |
if (type != SSH_SMSG_FAILURE) |
if (type != SSH_SMSG_FAILURE) |
packet_disconnect("Protocol error: got %d in response " |
packet_disconnect("Protocol error: got %d in response " |
"to skey-auth-reponse", type); |
"to skey-auth-reponse", type); |
} |
} |
/* failure */ |
/* failure */ |
return 0; |
return 0; |