sftp: Set sftp error code when fail occurs
When an operation fails in sftp subsystem, set the sftp error, so that it can be obtained by sftp_get_error(). Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
родитель
8e69d435ef
Коммит
0f95295966
83
src/sftp.c
83
src/sftp.c
@ -336,6 +336,7 @@ int sftp_packet_write(sftp_session sftp, uint8_t type, ssh_buffer payload)
|
||||
rc = ssh_buffer_prepend_data(payload, header, sizeof(header));
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -343,6 +344,7 @@ int sftp_packet_write(sftp_session sftp, uint8_t type, ssh_buffer payload)
|
||||
ssh_buffer_get(payload),
|
||||
ssh_buffer_get_len(payload));
|
||||
if (size < 0) {
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -375,12 +377,14 @@ sftp_packet sftp_packet_read(sftp_session sftp)
|
||||
rc = ssh_buffer_reinit(packet->payload);
|
||||
if (rc != 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
packet->payload = ssh_buffer_new();
|
||||
if (packet->payload == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -410,6 +414,7 @@ sftp_packet sftp_packet_read(sftp_session sftp)
|
||||
size = PULL_BE_U32(buffer, 0);
|
||||
if (size == 0 || size > SFTP_PACKET_SIZE_MAX) {
|
||||
ssh_set_error(sftp->session, SSH_FATAL, "Invalid sftp packet size!");
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -437,6 +442,7 @@ sftp_packet sftp_packet_read(sftp_session sftp)
|
||||
nread = ssh_buffer_allocate_size(packet->payload, size);
|
||||
if (nread < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
goto error;
|
||||
}
|
||||
while (size > 0 && size < SFTP_PACKET_SIZE_MAX) {
|
||||
@ -453,6 +459,7 @@ sftp_packet sftp_packet_read(sftp_session sftp)
|
||||
rc = ssh_buffer_add_data(packet->payload, buffer, nread);
|
||||
if (rc != 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
goto error;
|
||||
}
|
||||
} else { /* nread == 0 */
|
||||
@ -520,12 +527,14 @@ static sftp_message sftp_get_message(sftp_packet packet)
|
||||
SSH_FATAL,
|
||||
"Unknown packet type %d",
|
||||
packet->type);
|
||||
sftp_set_error(packet->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
msg = calloc(1, sizeof(struct sftp_message_struct));
|
||||
if (msg == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(packet->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -541,6 +550,7 @@ static sftp_message sftp_get_message(sftp_packet packet)
|
||||
ssh_set_error(packet->sftp->session, SSH_FATAL,
|
||||
"Invalid packet %d: no ID", packet->type);
|
||||
sftp_message_free(msg);
|
||||
sftp_set_error(packet->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -597,6 +607,7 @@ int sftp_init(sftp_session sftp) {
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -604,6 +615,7 @@ int sftp_init(sftp_session sftp) {
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
if (sftp_packet_write(sftp, SSH_FXP_INIT, buffer) < 0) {
|
||||
@ -626,6 +638,7 @@ int sftp_init(sftp_session sftp) {
|
||||
/* TODO: are we sure there are 4 bytes ready? */
|
||||
rc = ssh_buffer_unpack(packet->payload, "d", &version);
|
||||
if (rc != SSH_OK){
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
SSH_LOG(SSH_LOG_RARE,
|
||||
@ -651,6 +664,7 @@ int sftp_init(sftp_session sftp) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
SAFE_FREE(ext_name);
|
||||
SAFE_FREE(ext_data);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
tmp[count - 1] = ext_name;
|
||||
@ -661,6 +675,7 @@ int sftp_init(sftp_session sftp) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
SAFE_FREE(ext_name);
|
||||
SAFE_FREE(ext_data);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
tmp[count - 1] = ext_data;
|
||||
@ -746,6 +761,7 @@ static sftp_request_queue request_queue_new(sftp_message msg) {
|
||||
queue = calloc(1, sizeof(struct sftp_request_queue_struct));
|
||||
if (queue == NULL) {
|
||||
ssh_set_error_oom(msg->sftp->session);
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -848,6 +864,7 @@ static sftp_status_message parse_status_msg(sftp_message msg){
|
||||
status = calloc(1, sizeof(struct sftp_status_message_struct));
|
||||
if (status == NULL) {
|
||||
ssh_set_error_oom(msg->sftp->session);
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -858,6 +875,7 @@ static sftp_status_message parse_status_msg(sftp_message msg){
|
||||
SAFE_FREE(status);
|
||||
ssh_set_error(msg->sftp->session, SSH_FATAL,
|
||||
"Invalid SSH_FXP_STATUS message");
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
rc = ssh_buffer_unpack(msg->payload, "ss",
|
||||
@ -869,6 +887,7 @@ static sftp_status_message parse_status_msg(sftp_message msg){
|
||||
SAFE_FREE(status);
|
||||
ssh_set_error(msg->sftp->session, SSH_FATAL,
|
||||
"Invalid SSH_FXP_STATUS message");
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
if (status->errormsg == NULL)
|
||||
@ -877,6 +896,7 @@ static sftp_status_message parse_status_msg(sftp_message msg){
|
||||
status->langmsg = strdup("");
|
||||
if (status->errormsg == NULL || status->langmsg == NULL) {
|
||||
ssh_set_error_oom(msg->sftp->session);
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
status_msg_free(status);
|
||||
return NULL;
|
||||
}
|
||||
@ -906,6 +926,7 @@ static sftp_file parse_handle_msg(sftp_message msg){
|
||||
file = calloc(1, sizeof(struct sftp_file_struct));
|
||||
if (file == NULL) {
|
||||
ssh_set_error_oom(msg->sftp->session);
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -914,6 +935,7 @@ static sftp_file parse_handle_msg(sftp_message msg){
|
||||
ssh_set_error(msg->sftp->session, SSH_FATAL,
|
||||
"Invalid SSH_FXP_HANDLE message");
|
||||
SAFE_FREE(file);
|
||||
sftp_set_error(msg->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -938,6 +960,7 @@ sftp_dir sftp_opendir(sftp_session sftp, const char *path)
|
||||
payload = ssh_buffer_new();
|
||||
if (payload == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -950,6 +973,7 @@ sftp_dir sftp_opendir(sftp_session sftp, const char *path)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(payload);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1029,6 +1053,7 @@ static sftp_attributes sftp_parse_attr_4(sftp_session sftp, ssh_buffer buf,
|
||||
attr = calloc(1, sizeof(struct sftp_attributes_struct));
|
||||
if (attr == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1246,6 +1271,7 @@ static sftp_attributes sftp_parse_attr_3(sftp_session sftp, ssh_buffer buf,
|
||||
attr = calloc(1, sizeof(struct sftp_attributes_struct));
|
||||
if (attr == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1375,6 +1401,7 @@ static sftp_attributes sftp_parse_attr_3(sftp_session sftp, ssh_buffer buf,
|
||||
SAFE_FREE(attr->group);
|
||||
SAFE_FREE(attr);
|
||||
ssh_set_error(sftp->session, SSH_FATAL, "Invalid ATTR structure");
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -1463,6 +1490,7 @@ sftp_attributes sftp_readdir(sftp_session sftp, sftp_dir dir)
|
||||
payload = ssh_buffer_new();
|
||||
if (payload == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1474,6 +1502,7 @@ sftp_attributes sftp_readdir(sftp_session sftp, sftp_dir dir)
|
||||
dir->handle);
|
||||
if (rc != 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
ssh_buffer_free(payload);
|
||||
return NULL;
|
||||
}
|
||||
@ -1593,6 +1622,7 @@ static int sftp_handle_close(sftp_session sftp, ssh_string handle)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1605,6 +1635,7 @@ static int sftp_handle_close(sftp_session sftp, ssh_string handle)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1735,6 +1766,7 @@ sftp_file sftp_open(sftp_session sftp,
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1742,6 +1774,7 @@ sftp_file sftp_open(sftp_session sftp,
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1786,6 +1819,7 @@ sftp_file sftp_open(sftp_session sftp,
|
||||
SSH_FATAL,
|
||||
"Cannot open in append mode. Unknown file size.");
|
||||
sftp_close(handle);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1840,6 +1874,7 @@ ssize_t sftp_read(sftp_file handle, void *buf, size_t count) {
|
||||
if (rc != SSH_OK){
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
if (sftp_packet_write(handle->sftp, SSH_FXP_READ, buffer) < 0) {
|
||||
@ -1924,6 +1959,7 @@ int sftp_async_read_begin(sftp_file file, uint32_t len){
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1938,6 +1974,7 @@ int sftp_async_read_begin(sftp_file file, uint32_t len){
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
if (sftp_packet_write(sftp, SSH_FXP_READ, buffer) < 0) {
|
||||
@ -2047,6 +2084,7 @@ ssize_t sftp_write(sftp_file file, const void *buf, size_t count) {
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2062,6 +2100,7 @@ ssize_t sftp_write(sftp_file file, const void *buf, size_t count) {
|
||||
if (rc != SSH_OK){
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
packetlen=ssh_buffer_get_len(buffer);
|
||||
@ -2162,6 +2201,7 @@ int sftp_unlink(sftp_session sftp, const char *file) {
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2174,6 +2214,7 @@ int sftp_unlink(sftp_session sftp, const char *file) {
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2234,6 +2275,7 @@ int sftp_rmdir(sftp_session sftp, const char *directory) {
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2246,6 +2288,7 @@ int sftp_rmdir(sftp_session sftp, const char *directory) {
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
if (sftp_packet_write(sftp, SSH_FXP_RMDIR, buffer) < 0) {
|
||||
@ -2305,6 +2348,7 @@ int sftp_mkdir(sftp_session sftp, const char *directory, mode_t mode)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2321,6 +2365,7 @@ int sftp_mkdir(sftp_session sftp, const char *directory, mode_t mode)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2328,6 +2373,7 @@ int sftp_mkdir(sftp_session sftp, const char *directory, mode_t mode)
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2401,6 +2447,7 @@ int sftp_rename(sftp_session sftp, const char *original, const char *newname) {
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2414,6 +2461,7 @@ int sftp_rename(sftp_session sftp, const char *original, const char *newname) {
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2482,6 +2530,7 @@ int sftp_setstat(sftp_session sftp, const char *file, sftp_attributes attr)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2494,6 +2543,7 @@ int sftp_setstat(sftp_session sftp, const char *file, sftp_attributes attr)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2501,6 +2551,7 @@ int sftp_setstat(sftp_session sftp, const char *file, sftp_attributes attr)
|
||||
if (rc != 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2601,12 +2652,14 @@ int sftp_symlink(sftp_session sftp, const char *target, const char *dest) {
|
||||
return -1;
|
||||
if (target == NULL || dest == NULL) {
|
||||
ssh_set_error_invalid(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2629,6 +2682,7 @@ int sftp_symlink(sftp_session sftp, const char *target, const char *dest) {
|
||||
if (rc != SSH_OK){
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2691,15 +2745,18 @@ char *sftp_readlink(sftp_session sftp, const char *path)
|
||||
|
||||
if (path == NULL) {
|
||||
ssh_set_error_invalid(sftp);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
if (sftp->version < 3){
|
||||
ssh_set_error(sftp,SSH_REQUEST_DENIED,"sftp version %d does not support sftp_readlink",sftp->version);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2712,6 +2769,7 @@ char *sftp_readlink(sftp_session sftp, const char *path)
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2741,6 +2799,7 @@ char *sftp_readlink(sftp_session sftp, const char *path)
|
||||
ssh_set_error(sftp->session,
|
||||
SSH_ERROR,
|
||||
"Failed to retrieve link");
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2751,6 +2810,7 @@ char *sftp_readlink(sftp_session sftp, const char *path)
|
||||
if (status == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sftp_set_error(sftp, status->status);
|
||||
ssh_set_error(sftp->session, SSH_REQUEST_DENIED,
|
||||
"SFTP server: %s", status->errormsg);
|
||||
status_msg_free(status);
|
||||
@ -2770,6 +2830,7 @@ static sftp_statvfs_t sftp_parse_statvfs(sftp_session sftp, ssh_buffer buf) {
|
||||
statvfs = calloc(1, sizeof(struct sftp_statvfs_struct));
|
||||
if (statvfs == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2789,6 +2850,7 @@ static sftp_statvfs_t sftp_parse_statvfs(sftp_session sftp, ssh_buffer buf) {
|
||||
if (rc != SSH_OK) {
|
||||
SAFE_FREE(statvfs);
|
||||
ssh_set_error(sftp->session, SSH_FATAL, "Invalid statvfs structure");
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2807,16 +2869,19 @@ sftp_statvfs_t sftp_statvfs(sftp_session sftp, const char *path)
|
||||
return NULL;
|
||||
if (path == NULL) {
|
||||
ssh_set_error_invalid(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
if (sftp->version < 3){
|
||||
ssh_set_error(sftp,SSH_REQUEST_DENIED,"sftp version %d does not support sftp_statvfs",sftp->version);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2830,6 +2895,7 @@ sftp_statvfs_t sftp_statvfs(sftp_session sftp, const char *path)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2860,6 +2926,7 @@ sftp_statvfs_t sftp_statvfs(sftp_session sftp, const char *path)
|
||||
if (status == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sftp_set_error(sftp, status->status);
|
||||
ssh_set_error(sftp->session, SSH_REQUEST_DENIED,
|
||||
"SFTP server: %s", status->errormsg);
|
||||
status_msg_free(status);
|
||||
@ -2888,6 +2955,7 @@ int sftp_fsync(sftp_file file)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2900,6 +2968,7 @@ int sftp_fsync(sftp_file file)
|
||||
file->handle);
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -2985,6 +3054,7 @@ sftp_statvfs_t sftp_fstatvfs(sftp_file file)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -2998,6 +3068,7 @@ sftp_statvfs_t sftp_fstatvfs(sftp_file file)
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3028,6 +3099,7 @@ sftp_statvfs_t sftp_fstatvfs(sftp_file file)
|
||||
if (status == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sftp_set_error(sftp, status->status);
|
||||
ssh_set_error(sftp->session, SSH_REQUEST_DENIED,
|
||||
"SFTP server: %s", status->errormsg);
|
||||
status_msg_free(status);
|
||||
@ -3061,12 +3133,14 @@ char *sftp_canonicalize_path(sftp_session sftp, const char *path)
|
||||
return NULL;
|
||||
if (path == NULL) {
|
||||
ssh_set_error_invalid(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3079,6 +3153,7 @@ char *sftp_canonicalize_path(sftp_session sftp, const char *path)
|
||||
if (rc < 0) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3108,6 +3183,7 @@ char *sftp_canonicalize_path(sftp_session sftp, const char *path)
|
||||
ssh_set_error(sftp->session,
|
||||
SSH_ERROR,
|
||||
"Failed to parse canonicalized path");
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3118,6 +3194,7 @@ char *sftp_canonicalize_path(sftp_session sftp, const char *path)
|
||||
if (status == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sftp_set_error(sftp, status->status);
|
||||
ssh_set_error(sftp->session, SSH_REQUEST_DENIED,
|
||||
"SFTP server: %s", status->errormsg);
|
||||
status_msg_free(status);
|
||||
@ -3142,12 +3219,14 @@ static sftp_attributes sftp_xstat(sftp_session sftp,
|
||||
|
||||
if (path == NULL) {
|
||||
ssh_set_error_invalid(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3160,6 +3239,7 @@ static sftp_attributes sftp_xstat(sftp_session sftp,
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3219,6 +3299,7 @@ sftp_attributes sftp_fstat(sftp_file file)
|
||||
buffer = ssh_buffer_new();
|
||||
if (buffer == NULL) {
|
||||
ssh_set_error_oom(file->sftp->session);
|
||||
sftp_set_error(file->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3231,6 +3312,7 @@ sftp_attributes sftp_fstat(sftp_file file)
|
||||
if (rc != SSH_OK) {
|
||||
ssh_set_error_oom(file->sftp->session);
|
||||
ssh_buffer_free(buffer);
|
||||
sftp_set_error(file->sftp, SSH_FX_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -3258,6 +3340,7 @@ sftp_attributes sftp_fstat(sftp_file file)
|
||||
if (status == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sftp_set_error(file->sftp, status->status);
|
||||
ssh_set_error(file->sftp->session, SSH_REQUEST_DENIED,
|
||||
"SFTP server: %s", status->errormsg);
|
||||
status_msg_free(status);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user