diff options
| author | Andreas Schneider <mail@cynapses.org> | 2009-04-30 13:58:20 +0000 |
|---|---|---|
| committer | Andreas Schneider <mail@cynapses.org> | 2009-04-30 13:58:20 +0000 |
| commit | 567cc5984abc6b1380f8a807a0a8f197bb8a3b93 (patch) | |
| tree | e8a58771a88ff810214c93ed27db853a632a4abb /libssh/keyfiles.c | |
| parent | 06a0dea2add09bdadc870a7f664c17c00a326f89 (diff) | |
| download | libssh-567cc5984abc6b1380f8a807a0a8f197bb8a3b93.tar.gz libssh-567cc5984abc6b1380f8a807a0a8f197bb8a3b93.tar.xz libssh-567cc5984abc6b1380f8a807a0a8f197bb8a3b93.zip | |
Improve the autopubkey authentication.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@658 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/keyfiles.c')
| -rw-r--r-- | libssh/keyfiles.c | 33 |
1 files changed, 7 insertions, 26 deletions
diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index b6f84da7..6b2cbec6 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -919,18 +919,8 @@ STRING *publickey_from_file(SSH_SESSION *session, const char *filename, return str; } - -/* - * Why a recursive function? - * - * publickey_from_next_file() will be executed until NULL is returned - * We can't return NULL if one of the possible keys is wrong. We want to - * test them before getting over - */ -STRING *publickey_from_next_file(SSH_SESSION *session, - struct keys_struct *keytab, size_t keytab_size, - char **privkeyfile, int *type, - unsigned int *count) { +STRING *try_publickey_from_file(SSH_SESSION *session, struct keys_struct keytab, + char **privkeyfile, int *type) { static char *home = NULL; char public[256] = {0}; @@ -948,36 +938,28 @@ STRING *publickey_from_next_file(SSH_SESSION *session, } } - if (*count >= keytab_size) { - return NULL; - } - - pub = keytab[*count].public; + pub = keytab.public; if (pub == NULL) { return NULL; } - priv = keytab[*count].private; + priv = keytab.private; if (priv == NULL) { return NULL; } - (*count)++; - /* are them readable ? */ snprintf(public, sizeof(public), pub, home); ssh_log(session, SSH_LOG_PACKET, "Trying to open public key %s", public); if (!ssh_file_readaccess_ok(public)) { ssh_log(session, SSH_LOG_PACKET, "Failed"); - return publickey_from_next_file(session, keytab, keytab_size, - privkeyfile, type, count); + return NULL; } snprintf(private, sizeof(private), priv, home); ssh_log(session, SSH_LOG_PACKET, "Trying to open private key %s", private); if (!ssh_file_readaccess_ok(private)) { ssh_log(session, SSH_LOG_PACKET, "Failed"); - return publickey_from_next_file(session, keytab, keytab_size, - privkeyfile, type, count); + return NULL; } ssh_log(session, SSH_LOG_PACKET, "Success reading public and private key"); @@ -992,8 +974,7 @@ STRING *publickey_from_next_file(SSH_SESSION *session, "Wasn't able to open public key file %s: %s", public, ssh_get_error(session)); - return publickey_from_next_file(session, keytab, keytab_size, - privkeyfile, type, count); + return NULL; } new = realloc(*privkeyfile, strlen(private) + 1); |
