aboutsummaryrefslogtreecommitdiff
path: root/include/libssh
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-10 13:22:52 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-10 13:22:52 +0000
commit96a99bab7853998ec8c23da6bcb9ffb10855705d (patch)
tree25a79efb0fbcddb346fb65a4cdb554e78c7bec3b /include/libssh
parent5c26ae735483d140f802d58b1872b2fe9468d219 (diff)
downloadlibssh-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.h2
-rw-r--r--include/libssh/priv.h5
-rw-r--r--include/libssh/server.h76
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