From 6c03b7a9c9831021207e01d51157a9ec79e570dc Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Mon, 22 Aug 2011 16:16:34 +0200 Subject: [PATCH] misc: Add ssh_match_group(). --- include/libssh/misc.h | 2 ++ src/dh.c | 27 ++------------------------- src/misc.c | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/include/libssh/misc.h b/include/libssh/misc.h index 9e562e2c..be013372 100644 --- a/include/libssh/misc.h +++ b/include/libssh/misc.h @@ -81,4 +81,6 @@ void ssh_timestamp_init(struct ssh_timestamp *ts); int ssh_timeout_elapsed(struct ssh_timestamp *ts, int timeout); int ssh_timeout_update(struct ssh_timestamp *ts, int timeout); +int ssh_match_group(const char *group, const char *object); + #endif /* MISC_H_ */ diff --git a/src/dh.c b/src/dh.c index ee83a66a..d82fdcc4 100644 --- a/src/dh.c +++ b/src/dh.c @@ -54,6 +54,7 @@ #include "libssh/buffer.h" #include "libssh/session.h" #include "libssh/keys.h" +#include "libssh/misc.h" #include "libssh/dh.h" #include "libssh/ssh2.h" @@ -1016,30 +1017,6 @@ ssh_string ssh_get_pubkey(ssh_session session){ return ssh_string_copy(session->current_crypto->server_pubkey); } -static int match(const char *group, const char *object){ - const char *a; - const char *z; - - z = group; - do { - a = strchr(z, ','); - if (a == NULL) { - if (strcmp(z, object) == 0) { - return 1; - } - return 0; - } else { - if (strncmp(z, object, a - z) == 0) { - return 1; - } - } - z = a + 1; - } while(1); - - /* not reached */ - return 0; -} - int sig_verify(ssh_session session, ssh_public_key pubkey, SIGNATURE *signature, unsigned char *digest, int size) { #ifdef HAVE_LIBGCRYPT @@ -1149,7 +1126,7 @@ int signature_verify(ssh_session session, ssh_string signature) { } if (session->wanted_methods[SSH_HOSTKEYS]) { - if(!match(session->wanted_methods[SSH_HOSTKEYS],pubkey->type_c)) { + if(!ssh_match_group(session->wanted_methods[SSH_HOSTKEYS],pubkey->type_c)) { ssh_set_error(session, SSH_FATAL, "Public key from server (%s) doesn't match user preference (%s)", pubkey->type_c, session->wanted_methods[SSH_HOSTKEYS]); diff --git a/src/misc.c b/src/misc.c index f3fcf110..c1e6ef2d 100644 --- a/src/misc.c +++ b/src/misc.c @@ -952,6 +952,33 @@ int ssh_timeout_update(struct ssh_timestamp *ts, int timeout){ ret = timeout - ms; return ret >= 0 ? ret: 0; } + + +int ssh_match_group(const char *group, const char *object) +{ + const char *a; + const char *z; + + z = group; + do { + a = strchr(z, ','); + if (a == NULL) { + if (strcmp(z, object) == 0) { + return 1; + } + return 0; + } else { + if (strncmp(z, object, a - z) == 0) { + return 1; + } + } + z = a + 1; + } while(1); + + /* not reached */ + return 0; +} + /** @} */ /* vim: set ts=4 sw=4 et cindent: */