summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2014-04-22 18:46:45 +0200
committerAndreas Schneider <asn@cryptomilk.org>2014-08-06 09:52:29 +0200
commit7bd62dd652ba59c2ef4dfb9c3cc8d1262a48901d (patch)
tree700ac49ad85102ea41e9a7c211032d4db9849d2e /src
parentc341da03d30fcdb6ca9f1b3bd6bf45e32b0a89c1 (diff)
downloadlibssh-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.c114
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;