From 2be90be7409219efa3577ac97c56f47a4d664fd8 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 15 Jun 2011 10:30:38 +0200 Subject: known_hosts: Added a log message for key type mismatch. --- src/known_hosts.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/known_hosts.c b/src/known_hosts.c index 7c935a8..7ec73de 100644 --- a/src/known_hosts.c +++ b/src/known_hosts.c @@ -474,6 +474,12 @@ int ssh_is_server_known(ssh_session session) { if (match) { /* We got a match. Now check the key type */ if (strcmp(session->current_crypto->server_pubkey_type, type) != 0) { + ssh_log(session, + SSH_LOG_PACKET, + "ssh_is_server_known: server type [%s] doesn't match the " + "type [%s] in known_hosts file", + session->current_crypto->server_pubkey_type, + type); /* Different type. We don't override the known_changed error which is * more important */ if (ret != SSH_SERVER_KNOWN_CHANGED) -- cgit From 27cedaa0b6705d01a99dfe2b072f59b1fe1fb198 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 14 Jun 2011 22:33:58 +0200 Subject: pki: Make ssh_key_is_public() a public function. --- include/libssh/libssh.h | 2 ++ include/libssh/pki.h | 1 - src/pki.c | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 3453177..45e1112 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -422,6 +422,8 @@ LIBSSH_API void ssh_key_free (ssh_key key); LIBSSH_API enum ssh_keytypes_e ssh_key_type(ssh_key key); LIBSSH_API const char *ssh_key_type_to_char(enum ssh_keytypes_e type); LIBSSH_API enum ssh_keytypes_e ssh_key_type_from_name(const char *name); +LIBSSH_API int ssh_key_is_public(ssh_key k); + LIBSSH_API int ssh_pki_import_privkey_base64(ssh_key key, ssh_session session, const char *b64_key, const char *passphrase); LIBSSH_API int ssh_userauth_pki_pubkey(ssh_session session, const char *username, diff --git a/include/libssh/pki.h b/include/libssh/pki.h index 06c933c..d51a358 100644 --- a/include/libssh/pki.h +++ b/include/libssh/pki.h @@ -39,7 +39,6 @@ struct ssh_key_struct { #endif }; -#define ssh_key_is_public(k) (k && k->flags & SSH_KEY_FLAG_PUBLIC) #define ssh_key_is_private(k) (k && k->flags & SSH_KEY_FLAG_PRIVATE) void ssh_key_clean (ssh_key key); diff --git a/src/pki.c b/src/pki.c index fe3b13b..52672db 100644 --- a/src/pki.c +++ b/src/pki.c @@ -150,6 +150,21 @@ enum ssh_keytypes_e ssh_key_type_from_name(const char *name) { return SSH_KEYTYPE_UNKNOWN; } +/** + * @brief Check if the key has/is a public key. + * + * @param[in] k The key to check. + * + * @return 1 if it is a public key, 0 if not. + */ +int ssh_key_is_public(ssh_key k) { + if (k == NULL) { + return 0; + } + + return (k->flags & SSH_KEY_FLAG_PUBLIC); +} + /** * @brief import a key from a file * @param[out] key the ssh_key to update -- cgit From c75581fb939e5be9ea51c1741e57b75626da03a3 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 14 Jun 2011 22:37:00 +0200 Subject: pki: Make ssh_key_is_private() a public function. --- include/libssh/libssh.h | 1 + include/libssh/pki.h | 2 -- src/pki.c | 15 +++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 45e1112..e6f0847 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -423,6 +423,7 @@ LIBSSH_API enum ssh_keytypes_e ssh_key_type(ssh_key key); LIBSSH_API const char *ssh_key_type_to_char(enum ssh_keytypes_e type); LIBSSH_API enum ssh_keytypes_e ssh_key_type_from_name(const char *name); LIBSSH_API int ssh_key_is_public(ssh_key k); +LIBSSH_API int ssh_key_is_private(ssh_key k); LIBSSH_API int ssh_pki_import_privkey_base64(ssh_key key, ssh_session session, const char *b64_key, const char *passphrase); diff --git a/include/libssh/pki.h b/include/libssh/pki.h index d51a358..8d3ef0c 100644 --- a/include/libssh/pki.h +++ b/include/libssh/pki.h @@ -39,8 +39,6 @@ struct ssh_key_struct { #endif }; -#define ssh_key_is_private(k) (k && k->flags & SSH_KEY_FLAG_PRIVATE) - void ssh_key_clean (ssh_key key); int ssh_key_import_private(ssh_key key, ssh_session session, const char *filename, const char *passphrase); diff --git a/src/pki.c b/src/pki.c index 52672db..fd30ee4 100644 --- a/src/pki.c +++ b/src/pki.c @@ -165,6 +165,21 @@ int ssh_key_is_public(ssh_key k) { return (k->flags & SSH_KEY_FLAG_PUBLIC); } +/** + * @brief Check if the key is a private key. + * + * @param[in] k The key to check. + * + * @return 1 if it is a private key, 0 if not. + */ +int ssh_key_is_private(ssh_key k) { + if (k == NULL) { + return 0; + } + + return (k->flags & SSH_KEY_FLAG_PRIVATE); +} + /** * @brief import a key from a file * @param[out] key the ssh_key to update -- cgit