aboutsummaryrefslogtreecommitdiff
path: root/libssh
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-18 10:08:20 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-18 10:08:20 +0000
commit56602ca031726a7682de3164b8f7f3da4881f7bb (patch)
treec524a0bec36899fda5c0ce90345ec8acab62a15c /libssh
parentf730d3b361f717135786bddb3c949bfae213bbff (diff)
downloadlibssh-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.c4
-rw-r--r--libssh/messages.c7
-rw-r--r--libssh/packet.c2
-rw-r--r--libssh/server.c2
-rw-r--r--libssh/session.c6
-rw-r--r--libssh/sftp.c12
6 files changed, 26 insertions, 7 deletions
diff --git a/libssh/dh.c b/libssh/dh.c
index 407fe97e..c96c70ac 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 0f0aa363..66653d04 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 0f86f61a..e717ba59 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 336aaf51..fb678755 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 ef23d03b..731446d1 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 4135e5bc..8e293e19 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);