From cc536377f9711d9883678efe4fcf4cb6449c3b1a Mon Sep 17 00:00:00 2001 From: David Wedderwille Date: Wed, 24 Apr 2019 11:37:26 +0200 Subject: [PATCH] sftp server: Implementation of sftp_server_free() as counterpart to sftp_server_new() Fixes T143 Signed-off-by: David Wedderwille Reviewed-by: Andreas Schneider Reviewed-by: Jakub Jelen --- include/libssh/sftp.h | 7 +++++++ src/sftp.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/libssh/sftp.h b/include/libssh/sftp.h index 3750e0c6..774a4bac 100644 --- a/include/libssh/sftp.h +++ b/include/libssh/sftp.h @@ -853,6 +853,13 @@ LIBSSH_API sftp_session sftp_server_new(ssh_session session, ssh_channel chan); * @return 0 on success, < 0 on error. */ LIBSSH_API int sftp_server_init(sftp_session sftp); + +/** + * @brief Close and deallocate a sftp server session. + * + * @param sftp The sftp session handle to free. + */ +LIBSSH_API void sftp_server_free(sftp_session sftp); #endif /* WITH_SERVER */ /* this is not a public interface */ diff --git a/src/sftp.c b/src/sftp.c index d5934527..a122c2c4 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -298,6 +298,32 @@ int sftp_server_init(sftp_session sftp){ return 0; } + +void sftp_server_free(sftp_session sftp) +{ + sftp_request_queue ptr; + + if (sftp == NULL) { + return; + } + + ptr = sftp->queue; + while(ptr) { + sftp_request_queue old; + sftp_message_free(ptr->message); + old = ptr->next; + SAFE_FREE(ptr); + ptr = old; + } + + SAFE_FREE(sftp->handles); + SSH_BUFFER_FREE(sftp->read_packet->payload); + SAFE_FREE(sftp->read_packet); + + sftp_ext_free(sftp->ext); + + SAFE_FREE(sftp); +} #endif /* WITH_SERVER */ void sftp_free(sftp_session sftp)