sftp: format modified

Signed-off-by: tatataeki <shengzeyu19_98@163.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Reviewed-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
This commit is contained in:
tatataeki
2022-08-31 21:46:22 +08:00
committed by Jakub Jelen
parent 48d14ee9a9
commit 69ad6985de
2 changed files with 223 additions and 223 deletions

View File

@@ -375,8 +375,8 @@ int sftp_process_init_packet(sftp_client_message client_msg) {
"1", "1",
"hardlink@openssh.com", "hardlink@openssh.com",
"1", "1",
"statvfs@openssh.com", "statvfs@openssh.com",
"2"); "2");
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
SSH_BUFFER_FREE(reply); SSH_BUFFER_FREE(reply);
@@ -444,7 +444,7 @@ int sftp_decode_channel_data_to_packet(sftp_session sftp, void *data) {
if(packet->sftp == NULL) if(packet->sftp == NULL)
packet->sftp = sftp; packet->sftp = sftp;
packet->type = *((uint8_t *)data + sizeof(int)); packet->type = *((uint8_t *)data + sizeof(uint32_t));
payload_len = PULL_BE_U32(data, 0); payload_len = PULL_BE_U32(data, 0);
/* We should check the legality of payload length */ /* We should check the legality of payload length */

View File

@@ -250,235 +250,235 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) {
} }
sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp) { sftp_client_message sftp_get_client_message_from_packet(sftp_session sftp) {
ssh_session session = sftp->session; ssh_session session = sftp->session;
sftp_packet packet; sftp_packet packet;
sftp_client_message msg; sftp_client_message msg;
ssh_buffer payload; ssh_buffer payload;
int rc; int rc;
int version; int version;
msg = calloc(1, sizeof(struct sftp_client_message_struct)); msg = calloc(1, sizeof(struct sftp_client_message_struct));
if (msg == NULL) { if (msg == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
return NULL; return NULL;
} }
packet = sftp->read_packet; packet = sftp->read_packet;
if (packet == NULL) { if (packet == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
payload = packet->payload; payload = packet->payload;
msg->type = packet->type; msg->type = packet->type;
msg->sftp = sftp; msg->sftp = sftp;
/* take a copy of the whole packet */ /* take a copy of the whole packet */
msg->complete_message = ssh_buffer_new(); msg->complete_message = ssh_buffer_new();
if (msg->complete_message == NULL) { if (msg->complete_message == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
rc = ssh_buffer_add_data(msg->complete_message, rc = ssh_buffer_add_data(msg->complete_message,
ssh_buffer_get(payload), ssh_buffer_get(payload),
ssh_buffer_get_len(payload)); ssh_buffer_get_len(payload));
if (rc < 0) { if (rc < 0) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
if(msg->type!=SSH_FXP_INIT) if(msg->type!=SSH_FXP_INIT)
ssh_buffer_get_u32(payload, &msg->id); ssh_buffer_get_u32(payload, &msg->id);
switch(msg->type) { switch(msg->type) {
case SSH_FXP_INIT: case SSH_FXP_INIT:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"d", "d",
&version); &version);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
printf("unpack init failed!\n"); printf("unpack init failed!\n");
return NULL; return NULL;
} }
version = ntohl(version); version = ntohl(version);
sftp->client_version = (int)version; sftp->client_version = (int)version;
break; break;
case SSH_FXP_CLOSE: case SSH_FXP_CLOSE:
case SSH_FXP_READDIR: case SSH_FXP_READDIR:
msg->handle = ssh_buffer_get_ssh_string(payload); msg->handle = ssh_buffer_get_ssh_string(payload);
if (msg->handle == NULL) { if (msg->handle == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_READ: case SSH_FXP_READ:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"Sqd", "Sqd",
&msg->handle, &msg->handle,
&msg->offset, &msg->offset,
&msg->len); &msg->len);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_WRITE: case SSH_FXP_WRITE:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"SqS", "SqS",
&msg->handle, &msg->handle,
&msg->offset, &msg->offset,
&msg->data); &msg->data);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_REMOVE: case SSH_FXP_REMOVE:
case SSH_FXP_RMDIR: case SSH_FXP_RMDIR:
case SSH_FXP_OPENDIR: case SSH_FXP_OPENDIR:
case SSH_FXP_READLINK: case SSH_FXP_READLINK:
case SSH_FXP_REALPATH: case SSH_FXP_REALPATH:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"s", "s",
&msg->filename); &msg->filename);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_RENAME: case SSH_FXP_RENAME:
case SSH_FXP_SYMLINK: case SSH_FXP_SYMLINK:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"sS", "sS",
&msg->filename, &msg->filename,
&msg->data); &msg->data);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_MKDIR: case SSH_FXP_MKDIR:
case SSH_FXP_SETSTAT: case SSH_FXP_SETSTAT:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"s", "s",
&msg->filename); &msg->filename);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
msg->attr = sftp_parse_attr(sftp, payload, 0); msg->attr = sftp_parse_attr(sftp, payload, 0);
if (msg->attr == NULL) { if (msg->attr == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_FSETSTAT: case SSH_FXP_FSETSTAT:
msg->handle = ssh_buffer_get_ssh_string(payload); msg->handle = ssh_buffer_get_ssh_string(payload);
if (msg->handle == NULL) { if (msg->handle == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
msg->attr = sftp_parse_attr(sftp, payload, 0); msg->attr = sftp_parse_attr(sftp, payload, 0);
if (msg->attr == NULL) { if (msg->attr == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_LSTAT: case SSH_FXP_LSTAT:
case SSH_FXP_STAT: case SSH_FXP_STAT:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"s", "s",
&msg->filename); &msg->filename);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
if(sftp->version > 3) { if(sftp->version > 3) {
ssh_buffer_unpack(payload, "d", &msg->flags); ssh_buffer_unpack(payload, "d", &msg->flags);
} }
break; break;
case SSH_FXP_OPEN: case SSH_FXP_OPEN:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"sd", "sd",
&msg->filename, &msg->filename,
&msg->flags); &msg->flags);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
msg->attr = sftp_parse_attr(sftp, payload, 0); msg->attr = sftp_parse_attr(sftp, payload, 0);
if (msg->attr == NULL) { if (msg->attr == NULL) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_FSTAT: case SSH_FXP_FSTAT:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"S", "S",
&msg->handle); &msg->handle);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
break; break;
case SSH_FXP_EXTENDED: case SSH_FXP_EXTENDED:
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"s", "s",
&msg->submessage); &msg->submessage);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
if (strcmp(msg->submessage, "hardlink@openssh.com") == 0 || if (strcmp(msg->submessage, "hardlink@openssh.com") == 0 ||
strcmp(msg->submessage, "posix-rename@openssh.com") == 0) { strcmp(msg->submessage, "posix-rename@openssh.com") == 0) {
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"sS", "sS",
&msg->filename, &msg->filename,
&msg->data); &msg->data);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
} else if (strcmp(msg->submessage, "statvfs@openssh.com") == 0 ){ } else if (strcmp(msg->submessage, "statvfs@openssh.com") == 0 ){
rc = ssh_buffer_unpack(payload, rc = ssh_buffer_unpack(payload,
"s", "s",
&msg->filename); &msg->filename);
if (rc != SSH_OK) { if (rc != SSH_OK) {
ssh_set_error_oom(session); ssh_set_error_oom(session);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
} }
break; break;
default: default:
ssh_set_error(sftp->session, SSH_FATAL, ssh_set_error(sftp->session, SSH_FATAL,
"Received unhandled sftp message %d", msg->type); "Received unhandled sftp message %d", msg->type);
sftp_client_message_free(msg); sftp_client_message_free(msg);
return NULL; return NULL;
} }
return msg; return msg;
} }