summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-09-16 02:27:16 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2014-09-16 17:02:32 +0200
commit286369a81fc2e1d77a7a134d5c140f023af1298b (patch)
tree6e93287c02cc6153860ed0323da95a3b9772edd5
parentebda0970765e881feddd1879fb39ac9a3aa951a8 (diff)
downloadlibgit2-286369a81fc2e1d77a7a134d5c140f023af1298b.tar.gz
ssh: provide our own types for host key lengths
Instead of using the libssh2 defines, provide our own, which eases usage as we do not need to check whether libgit2 was built with libssh2 or not.
-rw-r--r--include/git2/transport.h14
-rw-r--r--src/transports/ssh.c16
-rw-r--r--tests/online/clone.c2
3 files changed, 21 insertions, 11 deletions
diff --git a/include/git2/transport.h b/include/git2/transport.h
index 4fa637292..6c568be65 100644
--- a/include/git2/transport.h
+++ b/include/git2/transport.h
@@ -21,6 +21,16 @@
GIT_BEGIN_DECL
/**
+ * Type of SSH host fingerprint
+ */
+typedef enum {
+ /** MD5, 16 bytes */
+ GIT_CERT_SSH_MD5,
+ /** SHA-1, 20 bytes */
+ GIT_CERT_SSH_SHA1,
+} git_cert_ssh_type ;
+
+/**
* Hostkey information taken from libssh2
*/
typedef struct {
@@ -31,9 +41,9 @@ typedef struct {
git_cert_t cert_type;
/**
* A hostkey type from libssh2, either
- * `LIBSSH2_HOSTKEY_HASH_MD5` or `LIBSSH2_HOSTKEY_HASH_SHA1`
+ * `GIT_CERT_SSH_MD5` or `GIT_CERT_SSH_SHA1`
*/
- int type;
+ git_cert_ssh_type type;
/**
* Hostkey hash. If the type is MD5, only the first 16 bytes
* will be set.
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index 298209150..717565327 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -480,23 +480,21 @@ static int _git_ssh_setup_conn(
goto on_error;
if (t->owner->certificate_check_cb != NULL) {
- git_cert_hostkey cert;
+ git_cert_hostkey cert = { 0 };
const char *key;
- size_t certlen;
cert.cert_type = GIT_CERT_HOSTKEY_LIBSSH2;
- cert.type = LIBSSH2_HOSTKEY_HASH_SHA1;
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
if (key != NULL) {
- certlen = 20;
- memcpy(&cert.hash, key, certlen);
+ cert.type = GIT_CERT_SSH_SHA1;
+ memcpy(&cert.hash, key, 20);
} else {
- cert.type = LIBSSH2_HOSTKEY_HASH_MD5;
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
- certlen = 16;
- if (key != NULL)
- memcpy(&cert.hash, key, certlen);
+ if (key != NULL) {
+ cert.type = GIT_CERT_SSH_MD5;
+ memcpy(&cert.hash, key, 16);
+ }
}
if (key == NULL) {
diff --git a/tests/online/clone.c b/tests/online/clone.c
index 2c36b3d22..0dd746a75 100644
--- a/tests/online/clone.c
+++ b/tests/online/clone.c
@@ -492,6 +492,8 @@ int ssh_certificate_check(git_cert *cert, int valid, void *payload)
key = (git_cert_hostkey *) cert;
git_oid_fromraw(&actual, key->hash);
+ cl_assert_equal_i(GIT_CERT_SSH_SHA1, key->type);
+
cl_assert(git_oid_equal(&expected, &actual));
return GIT_EUSER;