diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-23 19:01:22 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-23 21:54:02 +0200 |
commit | aa018c1484ce053bf88dbe066988b5e39a2c0317 (patch) | |
tree | e33235f8ab9ea59af7d361a3655a1e5ea2f81aeb /src/auth.c | |
parent | 37df5e17c310c438eefaf5150bad55ad12a7d64f (diff) | |
download | libssh-aa018c1484ce053bf88dbe066988b5e39a2c0317.tar.gz libssh-aa018c1484ce053bf88dbe066988b5e39a2c0317.tar.xz libssh-aa018c1484ce053bf88dbe066988b5e39a2c0317.zip |
auth: Make ssh_userauth_try_publickey() legacy.
Diffstat (limited to 'src/auth.c')
-rw-r--r-- | src/auth.c | 154 |
1 files changed, 2 insertions, 152 deletions
@@ -42,6 +42,8 @@ #include "libssh/auth.h" #include "libssh/pki.h" +#include "libssh/legacy.h" + /** * @defgroup libssh_auth The SSH authentication functions. * @ingroup libssh @@ -628,158 +630,6 @@ fail: } /** - * @brief Try to authenticate through public key. - * - * @param[in] session The ssh session to use. - * - * @param[in] username The username to authenticate. You can specify NULL if - * ssh_option_set_username() has been used. You cannot try - * two different logins in a row. - * - * @param[in] type The type of the public key. This value is given by - * publickey_from_file() or ssh_privatekey_type(). - * - * @param[in] publickey A public key returned by publickey_from_file(). - * - * @returns SSH_AUTH_ERROR: A serious error happened.\n - * SSH_AUTH_DENIED: The server doesn't accept that public key as an - * authentication token. Try another key or another - * method.\n - * SSH_AUTH_PARTIAL: You've been partially authenticated, you still - * have to use another method.\n - * SSH_AUTH_SUCCESS: The public key is accepted, you want now to use - * ssh_userauth_pubkey(). - * SSH_AUTH_AGAIN: In nonblocking mode, you've got to call this again - * later. - * - * @see publickey_from_file() - * @see privatekey_from_file() - * @see ssh_privatekey_type() - * @see ssh_userauth_pubkey() - */ -int ssh_userauth_offer_pubkey(ssh_session session, const char *username, - int type, ssh_string publickey) { - ssh_string user = NULL; - ssh_string service = NULL; - ssh_string method = NULL; - ssh_string algo = NULL; - int rc = SSH_AUTH_ERROR; - - if(session==NULL) - return SSH_AUTH_ERROR; - if(publickey==NULL){ - ssh_set_error(session,SSH_FATAL,"invalid arguments"); - return SSH_AUTH_ERROR; - } - enter_function(); - -#ifdef WITH_SSH1 - if (session->version == 1) { - rc = ssh_userauth1_offer_pubkey(session, username, type, publickey); - leave_function(); - return rc; - } -#endif - - if (username == NULL) { - if (session->username == NULL) { - if (ssh_options_apply(session) < 0) { - leave_function(); - return rc; - } - } - user = ssh_string_from_char(session->username); - } else { - user = ssh_string_from_char(username); - } - - if (user == NULL) { - ssh_set_error_oom(session); - leave_function(); - return rc; - } - switch(session->pending_call_state){ - case SSH_PENDING_CALL_NONE: - break; - case SSH_PENDING_CALL_AUTH_OFFER_PUBKEY: - ssh_string_free(user); - user=NULL; - goto pending; - default: - ssh_set_error(session,SSH_FATAL,"Bad call during pending SSH call in ssh_userauth_offer_pubkey"); - goto error; - rc=SSH_ERROR; - } - - rc = ssh_userauth_request_service(session); - if(rc == SSH_AGAIN){ - rc=SSH_AUTH_AGAIN; - ssh_string_free(user); - leave_function(); - return rc; - } else if(rc == SSH_ERROR){ - rc=SSH_AUTH_ERROR; - ssh_string_free(user); - leave_function(); - return rc; - } - - service = ssh_string_from_char("ssh-connection"); - if (service == NULL) { - ssh_set_error_oom(session); - goto error; - } - method = ssh_string_from_char("publickey"); - if (method == NULL) { - ssh_set_error_oom(session); - goto error; - } - algo = ssh_string_from_char(ssh_type_to_char(type)); - if (algo == NULL) { - ssh_set_error_oom(session); - goto error; - } - - if (buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_REQUEST) < 0 || - buffer_add_ssh_string(session->out_buffer, user) < 0 || - buffer_add_ssh_string(session->out_buffer, service) < 0 || - buffer_add_ssh_string(session->out_buffer, method) < 0 || - buffer_add_u8(session->out_buffer, 0) < 0 || - buffer_add_ssh_string(session->out_buffer, algo) < 0 || - buffer_add_ssh_string(session->out_buffer, publickey) < 0) { - ssh_set_error_oom(session); - goto error; - } - - ssh_string_free(user); - ssh_string_free(method); - ssh_string_free(service); - ssh_string_free(algo); - session->auth_state=SSH_AUTH_STATE_NONE; - session->pending_call_state=SSH_PENDING_CALL_AUTH_OFFER_PUBKEY; - if (packet_send(session) == SSH_ERROR) { - leave_function(); - return rc; - } -pending: - rc = ssh_userauth_get_response(session); - if (rc != SSH_AUTH_AGAIN) - session->pending_call_state=SSH_PENDING_CALL_NONE; - leave_function(); - return rc; -error: - buffer_reinit(session->out_buffer); - ssh_string_free(user); - ssh_string_free(method); - ssh_string_free(service); - ssh_string_free(algo); - - leave_function(); - return rc; -} - - -/** * @brief Try to authenticate through public key (deprecated). * * @param[in] session The ssh session to use. |