diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-08-10 13:22:52 +0000 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2005-08-10 13:22:52 +0000 |
commit | 96a99bab7853998ec8c23da6bcb9ffb10855705d (patch) | |
tree | 25a79efb0fbcddb346fb65a4cdb554e78c7bec3b /include/libssh | |
parent | 5c26ae735483d140f802d58b1872b2fe9468d219 (diff) | |
download | libssh-96a99bab7853998ec8c23da6bcb9ffb10855705d.tar.gz libssh-96a99bab7853998ec8c23da6bcb9ffb10855705d.tar.xz libssh-96a99bab7853998ec8c23da6bcb9ffb10855705d.zip |
The kex works, the client authentifies (with password) then it's possible to choose a subsystem. The channels don't completely work.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@7 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'include/libssh')
-rw-r--r-- | include/libssh/libssh.h | 2 | ||||
-rw-r--r-- | include/libssh/priv.h | 5 | ||||
-rw-r--r-- | include/libssh/server.h | 76 |
3 files changed, 82 insertions, 1 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 1986c8a8..e3a0b652 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -200,6 +200,8 @@ void ssh_options_set_ssh_dir(SSH_OPTIONS *opt, char *dir); void ssh_options_set_known_hosts_file(SSH_OPTIONS *opt, char *dir); void ssh_options_allow_ssh1(SSH_OPTIONS *opt, int allow); void ssh_options_allow_ssh2(SSH_OPTIONS *opt, int allow); +void ssh_options_set_dsa_server_key(SSH_OPTIONS *opt, char *dsakey); +void ssh_options_set_rsa_server_key(SSH_OPTIONS *opt, char *rsakey); /* buffer.c */ diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 1def7d45..c080762b 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -291,6 +291,8 @@ struct ssh_session { /* server host keys */ PRIVATE_KEY *rsa_key; PRIVATE_KEY *dsa_key; + /* auths accepted by server */ + int auth_methods; int hostkeys; /* contains type of host key wanted by client, in server impl */ }; @@ -389,7 +391,8 @@ void channel_handle(SSH_SESSION *session, int type); CHANNEL *channel_new(SSH_SESSION *session); void channel_default_bufferize(CHANNEL *channel, void *data, int len, int is_stderr); - +u32 ssh_channel_new_id(SSH_SESSION *session); +CHANNEL *ssh_channel_from_local(SSH_SESSION *session,u32 num); /* options.c */ diff --git a/include/libssh/server.h b/include/libssh/server.h index ef86febe..4b8a0f89 100644 --- a/include/libssh/server.h +++ b/include/libssh/server.h @@ -47,19 +47,95 @@ int ssh_accept(SSH_SESSION *session); /* messages.c */ +#define SSH_AUTH_REQUEST 1 +#define SSH_CHANNEL_REQUEST_OPEN 2 +#define SSH_CHANNEL_REQUEST 3 + +#define SSH_AUTH_NONE (1<<0) +#define SSH_AUTH_PASSWORD (1<<1) +#define SSH_AUTH_HOSTBASED (1<<2) +#define SSH_AUTH_PUBLICKEY (1<<3) +#define SSH_AUTH_KEYBINT (1<<4) +#define SSH_AUTH_UNKNOWN 0 + struct ssh_auth_request { char *username; int method; char *password; }; + +#define SSH_CHANNEL_SESSION 1 +#define SSH_CHANNEL_TCPIP 2 +#define SSH_CHANNEL_X11 3 +#define SSH_CHANNEL_UNKNOWN 4 +struct ssh_channel_request_open { + int type; + u32 sender; + u32 window; + u32 packet_size; + char *originator; + u16 orignator_port; + char *destination; + u16 destination_port; +}; + +#define SSH_CHANNEL_REQUEST_PTY 1 +#define SSH_CHANNEL_REQUEST_EXEC 2 +#define SSH_CHANNEL_REQUEST_SHELL 3 +#define SSH_CHANNEL_REQUEST_ENV 4 +#define SSH_CHANNEL_REQUEST_SUBSYSTEM 5 +#define SSH_CHANNEL_REQUEST_WINDOW_CHANGE 6 +#define SSH_CHANNEL_REQUEST_UNKNOWN 7 + +struct ssh_channel_request { + int type; + CHANNEL *channel; + u8 want_reply; + /* pty-req type specifics */ + char *TERM; + u32 width; + u32 height; + u32 pxwidth; + u32 pxheight; + STRING *modes; + + /* env type request */ + char *var_name; + char *var_value; + /* exec type request */ + char *command; + /* subsystem */ + char *subsystem; +}; + struct ssh_message { + SSH_SESSION *session; int type; struct ssh_auth_request auth_request; + struct ssh_channel_request_open channel_request_open; + struct ssh_channel_request channel_request; }; typedef struct ssh_message SSH_MESSAGE; SSH_MESSAGE *ssh_message_get(SSH_SESSION *session); +int ssh_message_type(SSH_MESSAGE *msg); +int ssh_message_subtype(SSH_MESSAGE *msg); +int ssh_message_reply_default(SSH_MESSAGE *msg); +void ssh_message_free(SSH_MESSAGE *msg); + +char *ssh_message_auth_user(SSH_MESSAGE *msg); +char *ssh_message_auth_password(SSH_MESSAGE *msg); +int ssh_message_auth_reply_success(SSH_MESSAGE *msg,int partial); +void ssh_message_auth_set_methods(SSH_MESSAGE *msg, int methods); + +CHANNEL *ssh_message_channel_request_open_reply_accept(SSH_MESSAGE *msg); + +CHANNEL *ssh_message_channel_request_channel(SSH_MESSAGE *msg); +// returns the TERM env variable +char *ssh_message_channel_request_pty_term(SSH_MESSAGE *msg); +char *ssh_message_channel_request_subsystem(SSH_MESSAGE *msg); +int ssh_message_channel_request_reply_success(SSH_MESSAGE *msg); #endif |