diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-07-06 14:35:03 +0000 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-07-06 14:35:03 +0000 |
commit | 636432e47593f145675e40e21bb8c8b6eb6ce8be (patch) | |
tree | ae21dfd533829c79fc2cad82da3353dae4c5e59c /libssh/client.c | |
parent | 55846a4c7b09af2d105c7f7dfd0a43aab2f6e5a5 (diff) | |
download | libssh-636432e47593f145675e40e21bb8c8b6eb6ce8be.tar.gz libssh-636432e47593f145675e40e21bb8c8b6eb6ce8be.tar.xz libssh-636432e47593f145675e40e21bb8c8b6eb6ce8be.zip |
sample sshd server accepts a client and sends a banner.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@4 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/client.c')
-rw-r--r-- | libssh/client.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/libssh/client.c b/libssh/client.c index 7f8da56..ef61115 100644 --- a/libssh/client.c +++ b/libssh/client.c @@ -49,14 +49,14 @@ char *ssh_get_banner(SSH_SESSION *session){ } i++; } - ssh_set_error(NULL,SSH_FATAL,"Too large banner"); + ssh_set_error(session,SSH_FATAL,"Too large banner"); return NULL; } int ssh_analyze_banner(SSH_SESSION *session, int *ssh1, int *ssh2){ char *banner=session->serverbanner; if(strncmp(banner,"SSH-",4)!=0){ - ssh_set_error(NULL,SSH_FATAL,"Protocol mismatch: %s",banner); + ssh_set_error(session,SSH_FATAL,"Protocol mismatch: %s",banner); return -1; } /* a typical banner is : @@ -77,7 +77,7 @@ int ssh_analyze_banner(SSH_SESSION *session, int *ssh1, int *ssh2){ *ssh2=1; break; default: - ssh_set_error(NULL,SSH_FATAL,"Protocol mismatch: %s",banner); + ssh_set_error(session,SSH_FATAL,"Protocol mismatch: %s",banner); return -1; } return 0; @@ -88,15 +88,19 @@ int ssh_analyze_banner(SSH_SESSION *session, int *ssh1, int *ssh2){ /* switch SSH1/1.5/2 */ /* and quit when the server is SSH1 only */ -void ssh_send_banner(SSH_SESSION *session){ - char *banner; +int ssh_send_banner(SSH_SESSION *session,int server){ + char *banner; char buffer[128]; banner=session->version==1?CLIENTBANNER1:CLIENTBANNER2; if(session->options->banner) banner=session->options->banner; - session->clientbanner=strdup(banner); - snprintf(buffer,128,"%s\r\n",session->clientbanner); + if(server) + session->serverbanner=strdup(banner); + else + session->clientbanner=strdup(banner); + snprintf(buffer,128,"%s\r\n",banner); write(session->fd,buffer,strlen(buffer)); + return 0; } @@ -114,19 +118,19 @@ int dh_handshake(SSH_SESSION *session){ return -1; pubkey=buffer_get_ssh_string(session->in_buffer); if(!pubkey){ - ssh_set_error(NULL,SSH_FATAL,"No public key in packet"); + ssh_set_error(session,SSH_FATAL,"No public key in packet"); return -1; } dh_import_pubkey(session,pubkey); f=buffer_get_ssh_string(session->in_buffer); if(!f){ - ssh_set_error(NULL,SSH_FATAL,"No F number in packet"); + ssh_set_error(session,SSH_FATAL,"No F number in packet"); return -1; } dh_import_f(session,f); free(f); if(!(signature=buffer_get_ssh_string(session->in_buffer))){ - ssh_set_error(NULL,SSH_FATAL,"No signature in packet"); + ssh_set_error(session,SSH_FATAL,"No signature in packet"); return -1; } @@ -222,7 +226,7 @@ int ssh_connect(SSH_SESSION *session){ return -1; } } - ssh_send_banner(session); + ssh_send_banner(session,0); set_status(options,0.5); switch(session->version){ case 2: |