diff options
author | Anderson Toshiyuki Sasaki <ansasaki@redhat.com> | 2018-12-04 15:05:32 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-12-07 17:44:52 +0100 |
commit | 0f952959664b38ec29d51a16769040d9a0e7e7fa (patch) | |
tree | c5c677d68e9258fa55814a98ef856cd8b72c0fb0 | |
parent | 8e69d435efb4193e474739674c32ec940c51ddd0 (diff) | |
download | libssh-0f952959664b38ec29d51a16769040d9a0e7e7fa.tar.gz libssh-0f952959664b38ec29d51a16769040d9a0e7e7fa.tar.xz libssh-0f952959664b38ec29d51a16769040d9a0e7e7fa.zip |
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>
-rw-r--r-- | src/sftp.c | 83 |
1 files changed, 83 insertions, 0 deletions
@@ -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); |