Mercurial > dropbear
changeset 740:3062da90dab8 kexguess
Add kexguess2 behaviour
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 29 Mar 2013 23:29:48 +0800 |
parents | d44325108d0e |
children | eafdf8b363f5 |
files | algo.h cli-algo.c common-algo.c common-kex.c debug.h kex.h options.h session.h svr-algo.c |
diffstat | 9 files changed, 86 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/algo.h Fri Mar 29 20:44:13 2013 +0800 +++ b/algo.h Fri Mar 29 23:29:48 2013 +0800 @@ -83,10 +83,20 @@ int have_algo(char* algo, size_t algolen, algo_type algos[]); void buf_put_algolist(buffer * buf, algo_type localalgos[]); +enum kexguess2_used { + KEXGUESS2_LOOK, + KEXGUESS2_NO, + KEXGUESS2_YES, +}; + +#define KEXGUESS2_ALGO_NAME "[email protected]" +#define KEXGUESS2_ALGO_ID 99 + + algo_type * svr_buf_match_algo(buffer* buf, algo_type localalgos[], - int *goodguess); + enum kexguess2_used *kexguess2, int *goodguess); algo_type * cli_buf_match_algo(buffer* buf, algo_type localalgos[], - int *goodguess); + enum kexguess2_used *kexguess2, int *goodguess); #ifdef ENABLE_USER_ALGO_LIST int check_user_algos(const char* user_algo_list, algo_type * algos,
--- a/cli-algo.c Fri Mar 29 20:44:13 2013 +0800 +++ b/cli-algo.c Fri Mar 29 23:29:48 2013 +0800 @@ -34,7 +34,7 @@ * that is also on the server's list. */ algo_type * cli_buf_match_algo(buffer* buf, algo_type localalgos[], - int *goodguess) { + enum kexguess2_used *kexguess2, int *goodguess) { unsigned char * algolist = NULL; unsigned char * remotealgos[MAX_PROPOSED_ALGO]; @@ -42,7 +42,9 @@ unsigned int count, i, j; algo_type * ret = NULL; - *goodguess = 0; + if (goodguess) { + *goodguess = 0; + } /* get the comma-separated list from the buffer ie "algo1,algo2,algo3" */ algolist = buf_getstring(buf, &len); @@ -72,6 +74,19 @@ } } + if (kexguess2 && *kexguess2 == KEXGUESS2_LOOK) { + for (i = 0; i < count; i++) + { + if (strcmp(remotealgos[i], KEXGUESS2_ALGO_NAME) == 0) { + *kexguess2 = KEXGUESS2_YES; + break; + } + } + if (*kexguess2 == KEXGUESS2_LOOK) { + *kexguess2 = KEXGUESS2_NO; + } + } + /* iterate and find the first match */ for (j = 0; localalgos[j].name != NULL; j++) { @@ -81,9 +96,16 @@ if (len == strlen(remotealgos[i]) && strncmp(localalgos[j].name, remotealgos[i], len) == 0) { - if (i == 0 && j == 0) { - /* was a good guess */ - *goodguess = 1; + if (goodguess && kexguess2) { + if (*kexguess2 == KEXGUESS2_YES) { + if (j == 0) { + *goodguess = 1; + } + } else { + if (i == 0 && j == 0) { + *goodguess = 1; + } + } } ret = &localalgos[j]; goto out;
--- a/common-algo.c Fri Mar 29 20:44:13 2013 +0800 +++ b/common-algo.c Fri Mar 29 23:29:48 2013 +0800 @@ -215,6 +215,7 @@ algo_type sshkex[] = { {"diffie-hellman-group1-sha1", DROPBEAR_KEX_DH_GROUP1, NULL, 1, NULL}, {"diffie-hellman-group14-sha1", DROPBEAR_KEX_DH_GROUP14, NULL, 1, NULL}, + {KEXGUESS2_ALGO_NAME, KEXGUESS2_ALGO_ID, NULL, 1, NULL}, {NULL, 0, NULL, 0, NULL} };