diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-25 16:14:29 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-25 16:14:29 +0200 |
commit | c59939d4a2b5673869ad0b72d5cf030edb680635 (patch) | |
tree | e56d03eaea561daf5f246c61ecf6d4c06ef05252 /src/legacy.c | |
parent | 5c601115c3397864d650ba6e97993c815dc4d377 (diff) | |
download | libssh-c59939d4a2b5673869ad0b72d5cf030edb680635.tar.gz libssh-c59939d4a2b5673869ad0b72d5cf030edb680635.tar.xz libssh-c59939d4a2b5673869ad0b72d5cf030edb680635.zip |
auth: Make ssh_userauth_privatekey_file() legacy.
Diffstat (limited to 'src/legacy.c')
-rw-r--r-- | src/legacy.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/legacy.c b/src/legacy.c index 5abe18e..c223fa3 100644 --- a/src/legacy.c +++ b/src/legacy.c @@ -26,6 +26,8 @@ #include "config.h" +#include <stdio.h> + #include <libssh/priv.h> #include <libssh/session.h> #include <libssh/server.h> @@ -93,6 +95,50 @@ int ssh_userauth_autopubkey(ssh_session session, const char *passphrase) { return ssh_userauth_publickey_auto(session, NULL, passphrase); } +int ssh_userauth_privatekey_file(ssh_session session, + const char *username, + const char *filename, + const char *passphrase) { + char *pubkeyfile = NULL; + ssh_string pubkey = NULL; + ssh_private_key privkey = NULL; + int type = 0; + int rc = SSH_AUTH_ERROR; + + enter_function(); + + pubkeyfile = malloc(strlen(filename) + 1 + 4); + if (pubkeyfile == NULL) { + ssh_set_error_oom(session); + leave_function(); + return SSH_AUTH_ERROR; + } + sprintf(pubkeyfile, "%s.pub", filename); + + pubkey = publickey_from_file(session, pubkeyfile, &type); + if (pubkey == NULL) { + ssh_log(session, SSH_LOG_RARE, "Public key file %s not found. Trying to generate it.", pubkeyfile); + /* auto-detect the key type with type=0 */ + privkey = privatekey_from_file(session, filename, 0, passphrase); + } else { + ssh_log(session, SSH_LOG_RARE, "Public key file %s loaded.", pubkeyfile); + privkey = privatekey_from_file(session, filename, type, passphrase); + } + if (privkey == NULL) { + goto error; + } + /* ssh_userauth_pubkey is responsible for taking care of null-pubkey */ + rc = ssh_userauth_pubkey(session, username, pubkey, privkey); + privatekey_free(privkey); + +error: + SAFE_FREE(pubkeyfile); + ssh_string_free(pubkey); + + leave_function(); + return rc; +} + /* BUFFER FUNCTIONS */ void buffer_free(ssh_buffer buffer){ |