1
1

auth: Make ssh_userauth_privatekey_file() legacy.

Этот коммит содержится в:
Andreas Schneider 2011-08-25 16:14:29 +02:00
родитель 5c601115c3
Коммит c59939d4a2
4 изменённых файлов: 49 добавлений и 70 удалений

Просмотреть файл

@ -38,6 +38,8 @@ LIBSSH_API int ssh_userauth_agent_pubkey(ssh_session session, const char *userna
ssh_public_key publickey);
#endif
LIBSSH_API int ssh_userauth_autopubkey(ssh_session session, const char *passphrase);
LIBSSH_API int ssh_userauth_privatekey_file(ssh_session session, const char *username,
const char *filename, const char *passphrase);
LIBSSH_API void buffer_free(ssh_buffer buffer);
LIBSSH_API void *buffer_get(ssh_buffer buffer);

Просмотреть файл

@ -518,8 +518,6 @@ 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_privatekey_file(ssh_session session, const char *username,
const char *filename, const char *passphrase);
LIBSSH_API const char *ssh_version(int req_version);
LIBSSH_API int ssh_write_knownhost(ssh_session session);

Просмотреть файл

@ -1341,76 +1341,9 @@ fail:
return SSH_AUTH_ERROR;
}
/**
* @brief Try to authenticate through a private key file.
*
* @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] filename Filename containing the private key.
*
* @param[in] passphrase Passphrase to decrypt the private key. Set to null if
* none is needed or it is unknown.
*
* @returns SSH_AUTH_ERROR: A serious error happened.\n
* SSH_AUTH_DENIED: Authentication failed: use another method.\n
* SSH_AUTH_PARTIAL: You've been partially authenticated, you still
* have to use another method.\n
* SSH_AUTH_SUCCESS: Authentication successful.\n
* SSH_AUTH_AGAIN: In nonblocking mode, you've got to call this again
* later.
*
* @see publickey_from_file()
* @see privatekey_from_file()
* @see privatekey_free()
* @see ssh_userauth_pubkey()
*/
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;
}
#ifndef _WIN32
/* LEGACY */
int ssh_userauth_agent_pubkey(ssh_session session,
const char *username,
ssh_public_key publickey)

Просмотреть файл

@ -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){