diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2014-04-16 18:05:30 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2014-08-06 09:46:14 +0200 |
commit | 3703389febb6817e7c8c7bbf6c7ef7fd0554b3de (patch) | |
tree | bdeb761b401aff4533fac63e32205b1a19d928eb | |
parent | 673990f56854a489f9d10712a835f4fb3d81d1bc (diff) | |
download | libssh-3703389febb6817e7c8c7bbf6c7ef7fd0554b3de.tar.gz libssh-3703389febb6817e7c8c7bbf6c7ef7fd0554b3de.tar.xz libssh-3703389febb6817e7c8c7bbf6c7ef7fd0554b3de.zip |
buffers: adapt gssapi.c to ssh_buffer_(un)pack()
-rw-r--r-- | src/gssapi.c | 180 |
1 files changed, 47 insertions, 133 deletions
diff --git a/src/gssapi.c b/src/gssapi.c index da358994..140542a0 100644 --- a/src/gssapi.c +++ b/src/gssapi.c @@ -311,14 +311,11 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ return SSH_PACKET_USED; } if (ssh_string_len(out_token) != 0){ - rc = buffer_add_u8(session->out_buffer, - SSH2_MSG_USERAUTH_GSSAPI_TOKEN); - if (rc < 0) { - ssh_set_error_oom(session); - return SSH_PACKET_USED; - } - rc = buffer_add_ssh_string(session->out_buffer, out_token); - if (rc < 0) { + rc = ssh_buffer_pack(session->out_buffer, + "bS", + SSH2_MSG_USERAUTH_GSSAPI_TOKEN, + out_token); + if (rc != SSH_OK) { ssh_set_error_oom(session); return SSH_PACKET_USED; } @@ -356,12 +353,12 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ hexa = ssh_get_hexa(output_token.value, output_token.length); SSH_LOG(SSH_LOG_PACKET, "GSSAPI: sending token %s",hexa); SAFE_FREE(hexa); - token = ssh_string_new(output_token.length); - ssh_string_fill(token, output_token.value, output_token.length); - buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_GSSAPI_TOKEN); - buffer_add_ssh_string(session->out_buffer,token); + ssh_buffer_pack(session->out_buffer, + "bdP", + SSH2_MSG_USERAUTH_GSSAPI_TOKEN, + output_token.length, + (size_t)output_token.length, output_token.value); packet_send(session); - ssh_string_free(token); } if(maj_stat == GSS_S_COMPLETE){ session->gssapi->state = SSH_GSSAPI_STATE_RCV_MIC; @@ -373,69 +370,24 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ static ssh_buffer ssh_gssapi_build_mic(ssh_session session){ ssh_buffer mic_buffer; - ssh_string str; int rc; - str = ssh_string_new(session->current_crypto->digest_len); - if (str == NULL) { - return NULL; - } - ssh_string_fill(str, session->current_crypto->session_id, - session->current_crypto->digest_len); - mic_buffer = ssh_buffer_new(); if (mic_buffer == NULL) { - ssh_string_free(str); - return NULL; - } - - rc = buffer_add_ssh_string(mic_buffer, str); - ssh_string_free(str); - if (rc < 0) { - ssh_buffer_free(mic_buffer); - return NULL; - } - - rc = buffer_add_u8(mic_buffer, SSH2_MSG_USERAUTH_REQUEST); - if (rc < 0) { - ssh_buffer_free(mic_buffer); - return NULL; - } - - str = ssh_string_from_char(session->gssapi->user); - if (str == NULL) { - ssh_buffer_free(mic_buffer); - return NULL; - } - - rc = buffer_add_ssh_string(mic_buffer, str); - ssh_string_free(str); - if (rc < 0) { - ssh_buffer_free(mic_buffer); - return NULL; - } - - str = ssh_string_from_char("ssh-connection"); - if (str == NULL) { - ssh_buffer_free(mic_buffer); - return NULL; - } - rc = buffer_add_ssh_string(mic_buffer, str); - ssh_string_free(str); - if (rc < 0) { - ssh_buffer_free(mic_buffer); - return NULL; - } - - str = ssh_string_from_char("gssapi-with-mic"); - if (str == NULL) { - ssh_buffer_free(mic_buffer); + ssh_set_error_oom(session); return NULL; } - rc = buffer_add_ssh_string(mic_buffer, str); - ssh_string_free(str); - if (rc < 0) { + rc = ssh_buffer_pack(mic_buffer, + "dPbsss", + session->current_crypto->digest_len, + (size_t)session->current_crypto->digest_len, session->current_crypto->session_id, + SSH2_MSG_USERAUTH_REQUEST, + session->gssapi->user, + "ssh-connection", + "gssapi-with-mic"); + if (rc != SSH_OK) { + ssh_set_error_oom(session); ssh_buffer_free(mic_buffer); return NULL; } @@ -562,46 +514,19 @@ void ssh_gssapi_set_creds(ssh_session session, const ssh_gssapi_creds creds) #endif /* SERVER */ static int ssh_gssapi_send_auth_mic(ssh_session session, ssh_string *oid_set, int n_oid){ - ssh_string str; int rc; int i; - rc = buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_REQUEST); - if (rc < 0) { - goto fail; - } - /* username */ - str = ssh_string_from_char(session->opts.username); - if (str == NULL) { - goto fail; - } - rc = buffer_add_ssh_string(session->out_buffer, str); - ssh_string_free(str); - if (rc < 0) { - goto fail; - } - /* service */ - str = ssh_string_from_char("ssh-connection"); - if (str == NULL) { - goto fail; - } - rc = buffer_add_ssh_string(session->out_buffer, str); - ssh_string_free(str); - if (rc < 0) { - goto fail; - } - /* method */ - str = ssh_string_from_char("gssapi-with-mic"); - if (str == NULL) { - goto fail; - } - rc = buffer_add_ssh_string(session->out_buffer, str); - ssh_string_free(str); - if (rc < 0) { - goto fail; - } - rc = buffer_add_u32(session->out_buffer, htonl(n_oid)); - if (rc < 0) { + rc = ssh_buffer_pack(session->out_buffer, + "bsssd", + SSH2_MSG_USERAUTH_REQUEST, + session->opts.username, + "ssh-connection", + "gssapi-with-mic", + n_oid); + + if (rc != SSH_OK) { + ssh_set_error_oom(session); goto fail; } @@ -797,7 +722,6 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_response){ gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER; char *hexa; - ssh_string token; (void)type; (void)user; @@ -840,12 +764,12 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_response){ hexa = ssh_get_hexa(output_token.value, output_token.length); SSH_LOG(SSH_LOG_PACKET, "GSSAPI: sending token %s",hexa); SAFE_FREE(hexa); - token = ssh_string_new(output_token.length); - ssh_string_fill(token, output_token.value, output_token.length); - buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_GSSAPI_TOKEN); - buffer_add_ssh_string(session->out_buffer,token); + ssh_buffer_pack(session->out_buffer, + "bdP", + SSH2_MSG_USERAUTH_GSSAPI_TOKEN, + output_token.length, + (size_t)output_token.length, output_token.value); packet_send(session); - ssh_string_free(token); session->auth_state = SSH_AUTH_STATE_GSSAPI_TOKEN; } return SSH_PACKET_USED; @@ -875,27 +799,17 @@ static int ssh_gssapi_send_mic(ssh_session session){ return SSH_ERROR; } - rc = buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_GSSAPI_MIC); - if (rc < 0) { + rc = ssh_buffer_pack(session->out_buffer, + "bdP", + SSH2_MSG_USERAUTH_GSSAPI_MIC, + mic_token_buf.length, + (size_t)mic_token_buf.length, mic_token_buf.value); + if (rc != SSH_OK) { ssh_buffer_free(mic_buffer); ssh_set_error_oom(session); return SSH_ERROR; } - rc = buffer_add_u32(session->out_buffer, htonl(mic_token_buf.length)); - if (rc < 0) { - ssh_buffer_free(mic_buffer); - ssh_set_error_oom(session); - return SSH_ERROR; - } - - rc = ssh_buffer_add_data(session->out_buffer, mic_token_buf.value, mic_token_buf.length); - ssh_buffer_free(mic_buffer); - if (rc < 0) { - ssh_set_error_oom(session); - return SSH_ERROR; - } - return packet_send(session); } @@ -945,12 +859,12 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_client){ hexa = ssh_get_hexa(output_token.value, output_token.length); SSH_LOG(SSH_LOG_PACKET, "GSSAPI: sending token %s",hexa); SAFE_FREE(hexa); - token = ssh_string_new(output_token.length); - ssh_string_fill(token, output_token.value, output_token.length); - buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_GSSAPI_TOKEN); - buffer_add_ssh_string(session->out_buffer,token); + ssh_buffer_pack(session->out_buffer, + "bdP", + SSH2_MSG_USERAUTH_GSSAPI_TOKEN, + output_token.length, + (size_t)output_token.length, output_token.value); packet_send(session); - ssh_string_free(token); } if(maj_stat == GSS_S_COMPLETE){ session->auth_state = SSH_AUTH_STATE_NONE; |