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
This commit is contained in:
Aris Adamantiadis
2005-08-18 10:08:20 +00:00
parent f730d3b361
commit 56602ca031
11 changed files with 43 additions and 20 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);