aboutsummaryrefslogtreecommitdiff
path: root/libssh/session.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-03 13:00:35 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-03 13:00:35 +0000
commit1100a22e984e916d68cd13d0617fd761ed719e45 (patch)
tree33b8c006cc701c60c5a97511275e987da2674309 /libssh/session.c
parent18bce1e209dc9478587c1c6b303a7162eeaf4a0f (diff)
downloadlibssh-1100a22e984e916d68cd13d0617fd761ed719e45.tar.gz
libssh-1100a22e984e916d68cd13d0617fd761ed719e45.tar.xz
libssh-1100a22e984e916d68cd13d0617fd761ed719e45.zip
Improve ssh_cleanup().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@385 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/session.c')
-rw-r--r--libssh/session.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/libssh/session.c b/libssh/session.c
index 972dc29..7086b77 100644
--- a/libssh/session.c
+++ b/libssh/session.c
@@ -105,35 +105,37 @@ void ssh_cleanup(SSH_SESSION *session) {
crypto_free(session->next_crypto);
ssh_socket_free(session->socket);
ssh_options_free(session->options);
- // delete all channels
- while(session->channels)
- channel_free(session->channels);
+ /* delete all channels */
+ while (session->channels) {
+ channel_free(session->channels);
+ }
#ifndef _WIN32
- if (session->agent)
- agent_free(session->agent);
+ agent_free(session->agent);
#endif /* _WIN32 */
- if(session->client_kex.methods)
- for(i=0;i<10;i++)
- if(session->client_kex.methods[i])
- free(session->client_kex.methods[i]);
- if(session->server_kex.methods)
- for(i=0;i<10;++i)
- if(session->server_kex.methods[i])
- free(session->server_kex.methods[i]);
- free(session->client_kex.methods);
- free(session->server_kex.methods);
- if(session->dsa_key)
- private_key_free(session->dsa_key);
- if(session->rsa_key)
- private_key_free(session->rsa_key);
- if(session->ssh_message){
- ssh_message_free(session->ssh_message);
- free(session->ssh_message);
+ if (session->client_kex.methods) {
+ for (i = 0; i < 10; i++) {
+ SAFE_FREE(session->client_kex.methods[i]);
}
- memset(session,'X',sizeof(SSH_SESSION)); /* burn connection, it could hangs
- sensitive datas */
- free(session);
- //leave_function();
+ }
+
+ if (session->server_kex.methods) {
+ for (i = 0; i < 10; i++) {
+ SAFE_FREE(session->server_kex.methods[i]);
+ }
+ }
+ SAFE_FREE(session->client_kex.methods);
+ SAFE_FREE(session->server_kex.methods);
+
+ private_key_free(session->dsa_key);
+ private_key_free(session->rsa_key);
+ ssh_message_free(session->ssh_message);
+ SAFE_FREE(session->ssh_message);
+
+ /* burn connection, it could hang sensitive datas */
+ memset(session,'X',sizeof(SSH_SESSION));
+
+ SAFE_FREE(session);
+ /* FIXME: leave_function(); ??? */
}
/** \brief disconnect impolitely from remote host