diff options
| author | Aris Adamantiadis <aris@0xbadc0de.be> | 2014-04-22 18:46:45 +0200 |
|---|---|---|
| committer | Andreas Schneider <asn@cryptomilk.org> | 2014-08-06 09:52:29 +0200 |
| commit | 7bd62dd652ba59c2ef4dfb9c3cc8d1262a48901d (patch) | |
| tree | 700ac49ad85102ea41e9a7c211032d4db9849d2e /src | |
| parent | c341da03d30fcdb6ca9f1b3bd6bf45e32b0a89c1 (diff) | |
| download | libssh-7bd62dd652ba59c2ef4dfb9c3cc8d1262a48901d.tar.gz libssh-7bd62dd652ba59c2ef4dfb9c3cc8d1262a48901d.tar.xz libssh-7bd62dd652ba59c2ef4dfb9c3cc8d1262a48901d.zip | |
buffers: adapt sftpserver.c to ssh_buffer_(un)pack()
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/sftpserver.c | 114 |
1 files changed, 41 insertions, 73 deletions
diff --git a/src/sftpserver.c b/src/sftpserver.c index 88fde251..60498794 100644 --- a/src/sftpserver.c +++ b/src/sftpserver.c @@ -42,7 +42,7 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { sftp_packet packet; sftp_client_message msg; ssh_buffer payload; - ssh_string tmp; + int rc; msg = malloc(sizeof (struct sftp_client_message_struct)); if (msg == NULL) { @@ -81,25 +81,24 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { } break; case SSH_FXP_READ: - msg->handle = buffer_get_ssh_string(payload); - if (msg->handle == NULL) { + rc = ssh_buffer_unpack(payload, + "Sqd", + &msg->handle, + &msg->offset, + &msg->len); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; } - buffer_get_u64(payload, &msg->offset); - buffer_get_u32(payload, &msg->len); break; case SSH_FXP_WRITE: - msg->handle = buffer_get_ssh_string(payload); - if (msg->handle == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - buffer_get_u64(payload, &msg->offset); - msg->data = buffer_get_ssh_string(payload); - if (msg->data == NULL) { + rc = ssh_buffer_unpack(payload, + "SqS", + &msg->handle, + &msg->offset, + &msg->data); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; @@ -110,15 +109,10 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { case SSH_FXP_OPENDIR: case SSH_FXP_READLINK: case SSH_FXP_REALPATH: - tmp = buffer_get_ssh_string(payload); - if (tmp == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->filename = ssh_string_to_char(tmp); - ssh_string_free(tmp); - if (msg->filename == NULL) { + rc = ssh_buffer_unpack(payload, + "s", + &msg->filename); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; @@ -126,21 +120,11 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { break; case SSH_FXP_RENAME: case SSH_FXP_SYMLINK: - tmp = buffer_get_ssh_string(payload); - if (tmp == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->filename = ssh_string_to_char(tmp); - ssh_string_free(tmp); - if (msg->filename == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->data = buffer_get_ssh_string(payload); - if (msg->data == NULL) { + rc = ssh_buffer_unpack(payload, + "sS", + &msg->filename, + &msg->data); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; @@ -148,15 +132,10 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { break; case SSH_FXP_MKDIR: case SSH_FXP_SETSTAT: - tmp = buffer_get_ssh_string(payload); - if (tmp == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->filename=ssh_string_to_char(tmp); - ssh_string_free(tmp); - if (msg->filename == NULL) { + rc = ssh_buffer_unpack(payload, + "s", + &msg->filename); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; @@ -184,38 +163,28 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { break; case SSH_FXP_LSTAT: case SSH_FXP_STAT: - tmp = buffer_get_ssh_string(payload); - if (tmp == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->filename = ssh_string_to_char(tmp); - ssh_string_free(tmp); - if (msg->filename == NULL) { + rc = ssh_buffer_unpack(payload, + "s", + &msg->filename); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; } if(sftp->version > 3) { - buffer_get_u32(payload,&msg->flags); + ssh_buffer_unpack(payload, "d", &msg->flags); } break; case SSH_FXP_OPEN: - tmp=buffer_get_ssh_string(payload); - if (tmp == NULL) { - ssh_set_error_oom(session); - sftp_client_message_free(msg); - return NULL; - } - msg->filename = ssh_string_to_char(tmp); - ssh_string_free(tmp); - if (msg->filename == NULL) { + rc = ssh_buffer_unpack(payload, + "sd", + &msg->filename, + &msg->flags); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; } - buffer_get_u32(payload,&msg->flags); msg->attr = sftp_parse_attr(sftp, payload, 0); if (msg->attr == NULL) { ssh_set_error_oom(session); @@ -224,13 +193,15 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { } break; case SSH_FXP_FSTAT: - msg->handle = buffer_get_ssh_string(payload); - if (msg->handle == NULL) { + rc = ssh_buffer_unpack(payload, + "Sd", + &msg->handle, + &msg->flags); + if (rc != SSH_OK) { ssh_set_error_oom(session); sftp_client_message_free(msg); return NULL; } - buffer_get_u32(payload, &msg->flags); break; default: ssh_set_error(sftp->session, SSH_FATAL, @@ -239,9 +210,6 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { return NULL; } - msg->flags = ntohl(msg->flags); - msg->offset = ntohll(msg->offset); - msg->len = ntohl(msg->len); sftp_packet_free(packet); return msg; |
