diff options
Diffstat (limited to 'kex.c')
-rw-r--r-- | kex.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -55,6 +55,10 @@ | |||
55 | #include "sshbuf.h" | 55 | #include "sshbuf.h" |
56 | #include "digest.h" | 56 | #include "digest.h" |
57 | 57 | ||
58 | #ifdef GSSAPI | ||
59 | #include "ssh-gss.h" | ||
60 | #endif | ||
61 | |||
58 | #if OPENSSL_VERSION_NUMBER >= 0x00907000L | 62 | #if OPENSSL_VERSION_NUMBER >= 0x00907000L |
59 | # if defined(HAVE_EVP_SHA256) | 63 | # if defined(HAVE_EVP_SHA256) |
60 | # define evp_ssh_sha256 EVP_sha256 | 64 | # define evp_ssh_sha256 EVP_sha256 |
@@ -113,6 +117,14 @@ static const struct kexalg kexalgs[] = { | |||
113 | #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ | 117 | #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ |
114 | { NULL, -1, -1, -1}, | 118 | { NULL, -1, -1, -1}, |
115 | }; | 119 | }; |
120 | static const struct kexalg kexalg_prefixes[] = { | ||
121 | #ifdef GSSAPI | ||
122 | { KEX_GSS_GEX_SHA1_ID, KEX_GSS_GEX_SHA1, 0, SSH_DIGEST_SHA1 }, | ||
123 | { KEX_GSS_GRP1_SHA1_ID, KEX_GSS_GRP1_SHA1, 0, SSH_DIGEST_SHA1 }, | ||
124 | { KEX_GSS_GRP14_SHA1_ID, KEX_GSS_GRP14_SHA1, 0, SSH_DIGEST_SHA1 }, | ||
125 | #endif | ||
126 | { NULL, -1, -1, -1 }, | ||
127 | }; | ||
116 | 128 | ||
117 | char * | 129 | char * |
118 | kex_alg_list(char sep) | 130 | kex_alg_list(char sep) |
@@ -145,6 +157,10 @@ kex_alg_by_name(const char *name) | |||
145 | if (strcmp(k->name, name) == 0) | 157 | if (strcmp(k->name, name) == 0) |
146 | return k; | 158 | return k; |
147 | } | 159 | } |
160 | for (k = kexalg_prefixes; k->name != NULL; k++) { | ||
161 | if (strncmp(k->name, name, strlen(k->name)) == 0) | ||
162 | return k; | ||
163 | } | ||
148 | return NULL; | 164 | return NULL; |
149 | } | 165 | } |
150 | 166 | ||
@@ -587,6 +603,9 @@ kex_free(struct kex *kex) | |||
587 | sshbuf_free(kex->peer); | 603 | sshbuf_free(kex->peer); |
588 | sshbuf_free(kex->my); | 604 | sshbuf_free(kex->my); |
589 | free(kex->session_id); | 605 | free(kex->session_id); |
606 | #ifdef GSSAPI | ||
607 | free(kex->gss_host); | ||
608 | #endif /* GSSAPI */ | ||
590 | free(kex->client_version_string); | 609 | free(kex->client_version_string); |
591 | free(kex->server_version_string); | 610 | free(kex->server_version_string); |
592 | free(kex->failed_choice); | 611 | free(kex->failed_choice); |