diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-08-18 10:08:20 +0000 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-08-18 10:08:20 +0000 |
commit | 56602ca031726a7682de3164b8f7f3da4881f7bb (patch) | |
tree | c524a0bec36899fda5c0ce90345ec8acab62a15c /libssh | |
parent | f730d3b361f717135786bddb3c949bfae213bbff (diff) | |
download | libssh-56602ca031726a7682de3164b8f7f3da4881f7bb.tar.gz libssh-56602ca031726a7682de3164b8f7f3da4881f7bb.tar.xz libssh-56602ca031726a7682de3164b8f7f3da4881f7bb.zip |
More work on the server side and sftp.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@9 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh')
-rw-r--r-- | libssh/dh.c | 4 | ||||
-rw-r--r-- | libssh/messages.c | 7 | ||||
-rw-r--r-- | libssh/packet.c | 2 | ||||
-rw-r--r-- | libssh/server.c | 2 | ||||
-rw-r--r-- | libssh/session.c | 6 | ||||
-rw-r--r-- | libssh/sftp.c | 12 |
6 files changed, 26 insertions, 7 deletions
diff --git a/libssh/dh.c b/libssh/dh.c index 407fe97..c96c70a 100644 --- a/libssh/dh.c +++ b/libssh/dh.c @@ -213,14 +213,14 @@ void dh_build_k(SSH_SESSION *session){ #endif bignum_ctx_free(ctx); } - +/* static void sha_add(STRING *str,SHACTX *ctx){ sha1_update(ctx,str,string_len(str)+4); #ifdef DEBUG_CRYPTO ssh_print_hexa("partial hashed sessionid",str,string_len(str)+4); #endif } - +*/ void make_sessionid(SSH_SESSION *session){ SHACTX *ctx; STRING *num,*str; diff --git a/libssh/messages.c b/libssh/messages.c index 0f0aa36..66653d0 100644 --- a/libssh/messages.c +++ b/libssh/messages.c @@ -34,7 +34,11 @@ MA 02111-1307, USA. */ #include <string.h> static SSH_MESSAGE *message_new(SSH_SESSION *session){ - SSH_MESSAGE *msg=malloc(sizeof(SSH_MESSAGE)); + SSH_MESSAGE *msg=session->ssh_message; + if(!msg){ + msg=malloc(sizeof(SSH_MESSAGE)); + session->ssh_message=msg; + } memset(msg,0,sizeof (*msg)); msg->session=session; return msg; @@ -402,5 +406,4 @@ void ssh_message_free(SSH_MESSAGE *msg){ break; } memset(msg,0,sizeof(*msg)); - free(msg); } diff --git a/libssh/packet.c b/libssh/packet.c index 0f86f61..e717ba5 100644 --- a/libssh/packet.c +++ b/libssh/packet.c @@ -375,7 +375,7 @@ static int packet_send1(SSH_SESSION *session){ */ padding=blocksize-(currentlen % blocksize); if(session->current_crypto) - ssh_get_random(padstring,padding); + ssh_get_random(padstring,padding,0); else memset(padstring,0,padding); finallen=htonl(currentlen); diff --git a/libssh/server.c b/libssh/server.c index 336aaf5..fb67875 100644 --- a/libssh/server.c +++ b/libssh/server.c @@ -211,6 +211,8 @@ static int dh_handshake_server(SSH_SESSION *session){ case TYPE_RSA: prv=session->rsa_key; break; + default: + prv=NULL; } pub=publickey_from_privatekey(prv); pubkey=publickey_to_string(pub); diff --git a/libssh/session.c b/libssh/session.c index ef23d03..731446d 100644 --- a/libssh/session.c +++ b/libssh/session.c @@ -24,7 +24,7 @@ #include <string.h> #include "libssh/libssh.h" #include "libssh/priv.h" - +#include "libssh/server.h" #define FIRST_CHANNEL 42 // why not ? it helps to find bugs. SSH_SESSION *ssh_new() { @@ -72,6 +72,10 @@ void ssh_cleanup(SSH_SESSION *session){ 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); + } memset(session,'X',sizeof(SSH_SESSION)); /* burn connection, it could hangs sensitive datas */ free(session); diff --git a/libssh/sftp.c b/libssh/sftp.c index 4135e5b..8e293e1 100644 --- a/libssh/sftp.c +++ b/libssh/sftp.c @@ -2,7 +2,7 @@ /* don't look further if you believe this is just FTP over some tunnel. It IS different */ /* This file contains code written by Nick Zitzmann */ /* -Copyright 2003 Aris Adamantiadis +Copyright 2003-2005 Aris Adamantiadis This file is part of the SSH Library @@ -60,6 +60,16 @@ SFTP_SESSION *sftp_new(SSH_SESSION *session){ return sftp; } +#ifndef NO_SERVER +SFTP_SESSION *sftp_server_new(SSH_SESSION *session, CHANNEL *chan){ + SFTP_SESSION *sftp=malloc(sizeof(SFTP_SESSION)); + memset(sftp,0,sizeof(SFTP_SESSION)); + sftp->session=session; + sftp->channel=chan; + return sftp; +} +#endif + void sftp_free(SFTP_SESSION *sftp){ struct request_queue *ptr; channel_send_eof(sftp->channel); |