From 3c0a4781e49a4912e191b20ea8ccaeb884eb9dcd Mon Sep 17 00:00:00 2001 From: milo Date: Tue, 8 Feb 2011 00:40:18 +0100 Subject: Added the keyboard-interactive authentication method --- include/libssh/auth.h | 21 +++++++++++++++++++++ include/libssh/libssh.h | 2 ++ include/libssh/messages.h | 1 + include/libssh/server.h | 5 +++++ include/libssh/session.h | 1 - 5 files changed, 29 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/libssh/auth.h b/include/libssh/auth.h index 343b309..c2fba2a 100644 --- a/include/libssh/auth.h +++ b/include/libssh/auth.h @@ -29,6 +29,27 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_failure); SSH_PACKET_CALLBACK(ssh_packet_userauth_success); SSH_PACKET_CALLBACK(ssh_packet_userauth_pk_ok); SSH_PACKET_CALLBACK(ssh_packet_userauth_info_request); +SSH_PACKET_CALLBACK(ssh_packet_userauth_info_response); + +/** @internal + * kdbint structure must be shared with message.c + * and server.c + */ +struct ssh_kbdint_struct { + uint32_t nprompts; + uint32_t nanswers; + char *name; + char *instruction; + char **prompts; + unsigned char *echo; /* bool array */ + char **answers; +}; +typedef struct ssh_kbdint_struct* ssh_kbdint; + +ssh_kbdint kbdint_new(void); +void kbdint_clean(ssh_kbdint kbd); +void kbdint_free(ssh_kbdint kbd); + #ifdef WITH_SSH1 void ssh_auth1_handler(ssh_session session, uint8_t type); diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index a215c31..5430786 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -446,6 +446,8 @@ LIBSSH_API const char *ssh_userauth_kbdint_getinstruction(ssh_session session); LIBSSH_API const char *ssh_userauth_kbdint_getname(ssh_session session); LIBSSH_API int ssh_userauth_kbdint_getnprompts(ssh_session session); LIBSSH_API const char *ssh_userauth_kbdint_getprompt(ssh_session session, unsigned int i, char *echo); +LIBSSH_API int ssh_userauth_kbdint_getnanswers(ssh_session session); +LIBSSH_API const char *ssh_userauth_kbdint_getanswer(ssh_session session, unsigned int i); LIBSSH_API int ssh_userauth_kbdint_setanswer(ssh_session session, unsigned int i, const char *answer); LIBSSH_API int ssh_userauth_list(ssh_session session, const char *username); diff --git a/include/libssh/messages.h b/include/libssh/messages.h index 419c3cb..5001fbe 100644 --- a/include/libssh/messages.h +++ b/include/libssh/messages.h @@ -30,6 +30,7 @@ struct ssh_auth_request { char *password; struct ssh_public_key_struct *public_key; char signature_state; + char kbdint_response; }; struct ssh_channel_request_open { diff --git a/include/libssh/server.h b/include/libssh/server.h index cd334c1..8f67d26 100644 --- a/include/libssh/server.h +++ b/include/libssh/server.h @@ -173,6 +173,7 @@ LIBSSH_API int ssh_message_reply_default(ssh_message msg); LIBSSH_API char *ssh_message_auth_user(ssh_message msg); LIBSSH_API char *ssh_message_auth_password(ssh_message msg); LIBSSH_API ssh_public_key ssh_message_auth_publickey(ssh_message msg); +LIBSSH_API int ssh_message_auth_kbdint_is_response(ssh_message msg); LIBSSH_API enum ssh_publickey_state_e ssh_message_auth_publickey_state(ssh_message msg); LIBSSH_API int ssh_message_auth_reply_success(ssh_message msg,int partial); LIBSSH_API int ssh_message_auth_reply_pk_ok(ssh_message msg, ssh_string algo, ssh_string pubkey); @@ -180,6 +181,10 @@ LIBSSH_API int ssh_message_auth_reply_pk_ok_simple(ssh_message msg); LIBSSH_API int ssh_message_auth_set_methods(ssh_message msg, int methods); +LIBSSH_API int ssh_message_auth_interactive_request(ssh_message msg, + const char *name, const char *instruction, + unsigned int num_prompts, const char **prompts, char *echo); + LIBSSH_API int ssh_message_service_reply_success(ssh_message msg); LIBSSH_API char *ssh_message_service_service(ssh_message msg); diff --git a/include/libssh/session.h b/include/libssh/session.h index 58df0d5..f6ad8c6 100644 --- a/include/libssh/session.h +++ b/include/libssh/session.h @@ -27,7 +27,6 @@ #include "libssh/auth.h" #include "libssh/channels.h" #include "libssh/poll.h" -typedef struct ssh_kbdint_struct* ssh_kbdint; /* These are the different states a SSH session can be into its life */ enum ssh_session_state_e { -- cgit v1.2.3