diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-03 13:00:35 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-03 13:00:35 +0000 |
commit | 1100a22e984e916d68cd13d0617fd761ed719e45 (patch) | |
tree | 33b8c006cc701c60c5a97511275e987da2674309 /libssh/session.c | |
parent | 18bce1e209dc9478587c1c6b303a7162eeaf4a0f (diff) | |
download | libssh-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.c | 54 |
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 |