diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2009-10-09 21:44:05 +0200 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2009-10-09 21:44:05 +0200 |
commit | 58294442d3589f464571ff86071a260e0f548d26 (patch) | |
tree | 355f2683d657ec44de047741b9fc8202d0c46d83 /samplesshd.c | |
parent | 2e9c13dad00c038fe7fa0eb8e81fc8990cb8893c (diff) | |
download | libssh-58294442d3589f464571ff86071a260e0f548d26.tar.gz libssh-58294442d3589f464571ff86071a260e0f548d26.tar.xz libssh-58294442d3589f464571ff86071a260e0f548d26.zip |
Moved samples into examples directory
Diffstat (limited to 'samplesshd.c')
-rw-r--r-- | samplesshd.c | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/samplesshd.c b/samplesshd.c deleted file mode 100644 index 4c8a5bc9..00000000 --- a/samplesshd.c +++ /dev/null @@ -1,152 +0,0 @@ -/* This is a sample implementation of a libssh based SSH server */ -/* -Copyright 2003-2009 Aris Adamantiadis - -This file is part of the SSH Library - -You are free to copy this file, modify it in any way, consider it being public -domain. This does not apply to the rest of the library though, but it is -allowed to cut-and-paste working code from this file to any license of -program. -The goal is to show the API in action. It's not a reference on how terminal -clients must be made or how a client should react. -*/ - -#include <libssh/libssh.h> -#include <libssh/server.h> -#include <unistd.h> -#include <string.h> -#include <stdio.h> -#ifndef KEYS_FOLDER -#ifdef _WIN32 -#define KEYS_FOLDER -#else -#define KEYS_FOLDER "/etc/ssh/" -#endif -#endif - -static int auth_password(char *user, char *password){ - if(strcmp(user,"aris")) - return 0; - if(strcmp(password,"lala")) - return 0; - return 1; // authenticated -} - -int main(int argc, char **argv){ - ssh_session session; - ssh_bind sshbind; - ssh_message message; - ssh_channel chan=0; - ssh_buffer buf; - int auth=0; - int sftp=0; - int i; - int r; - - sshbind=ssh_bind_new(); - session=ssh_new(); - ssh_bind_options_set(sshbind, SSH_BIND_OPTIONS_DSAKEY, KEYS_FOLDER "ssh_host_dsa_key"); - ssh_bind_options_set(sshbind, SSH_BIND_OPTIONS_RSAKEY, KEYS_FOLDER "ssh_host_rsa_key"); - - if(ssh_bind_listen(sshbind)<0){ - printf("Error listening to socket: %s\n",ssh_get_error(sshbind)); - return 1; - } - r=ssh_bind_accept(sshbind,session); - if(r==SSH_ERROR){ - printf("error accepting a connection : %s\n",ssh_get_error(sshbind)); - return 1; - } - if(ssh_accept(session)){ - printf("ssh_accept: %s\n",ssh_get_error(session)); - return 1; - } - do { - message=ssh_message_get(session); - if(!message) - break; - switch(ssh_message_type(message)){ - case SSH_REQUEST_AUTH: - switch(ssh_message_subtype(message)){ - case SSH_AUTH_METHOD_PASSWORD: - printf("User %s wants to auth with pass %s\n", - ssh_message_auth_user(message), - ssh_message_auth_password(message)); - if(auth_password(ssh_message_auth_user(message), - ssh_message_auth_password(message))){ - auth=1; - ssh_message_auth_reply_success(message,0); - break; - } - // not authenticated, send default message - case SSH_AUTH_METHOD_NONE: - default: - ssh_message_auth_set_methods(message,SSH_AUTH_METHOD_PASSWORD); - ssh_message_reply_default(message); - break; - } - break; - default: - ssh_message_reply_default(message); - } - ssh_message_free(message); - } while (!auth); - if(!auth){ - printf("auth error: %s\n",ssh_get_error(session)); - ssh_disconnect(session); - return 1; - } - do { - message=ssh_message_get(session); - if(message){ - switch(ssh_message_type(message)){ - case SSH_REQUEST_CHANNEL_OPEN: - if(ssh_message_subtype(message)==SSH_CHANNEL_SESSION){ - chan=ssh_message_channel_request_open_reply_accept(message); - break; - } - default: - ssh_message_reply_default(message); - } - ssh_message_free(message); - } - } while(message && !chan); - if(!chan){ - printf("error : %s\n",ssh_get_error(session)); - ssh_finalize(); - return 1; - } - do { - message=ssh_message_get(session); - if(message && ssh_message_type(message)==SSH_REQUEST_CHANNEL && - ssh_message_subtype(message)==SSH_CHANNEL_REQUEST_SHELL){ -// if(!strcmp(ssh_message_channel_request_subsystem(message),"sftp")){ - sftp=1; - ssh_message_channel_request_reply_success(message); - break; - // } - } - if(!sftp){ - ssh_message_reply_default(message); - } - ssh_message_free(message); - } while (message && !sftp); - if(!sftp){ - printf("error : %s\n",ssh_get_error(session)); - return 1; - } - printf("it works !\n"); - buf=buffer_new(); - do{ - i=channel_read_buffer(chan,buf,0,0); - if(i>0) - write(1,buffer_get(buf),buffer_get_len(buf)); - } while (i>0); - buffer_free(buf); - ssh_disconnect(session); - ssh_bind_free(sshbind); - ssh_finalize(); - return 0; -} - |