aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2018-12-04 15:05:32 +0100
committerAndreas Schneider <asn@cryptomilk.org>2018-12-07 17:44:52 +0100
commit0f952959664b38ec29d51a16769040d9a0e7e7fa (patch)
treec5c677d68e9258fa55814a98ef856cd8b72c0fb0
parent8e69d435efb4193e474739674c32ec940c51ddd0 (diff)
downloadlibssh-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.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/sftp.c b/src/sftp.c
index c4cd0e16..60c03079 100644
--- a/src/sftp.c
+++ b/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);