version 1.12, 2002/06/04 19:42:35 |
version 1.13, 2002/06/04 19:53:40 |
|
|
static u_char *hostbased_cuser = NULL; |
static u_char *hostbased_cuser = NULL; |
static u_char *hostbased_chost = NULL; |
static u_char *hostbased_chost = NULL; |
static char *auth_method = "unknown"; |
static char *auth_method = "unknown"; |
|
static int session_id2_len = 0; |
|
static u_char *session_id2 = NULL; |
|
|
struct mon_table { |
struct mon_table { |
enum monitor_reqtype type; |
enum monitor_reqtype type; |
|
|
if (datlen != 20) |
if (datlen != 20) |
fatal("%s: data length incorrect: %d", __FUNCTION__, datlen); |
fatal("%s: data length incorrect: %d", __FUNCTION__, datlen); |
|
|
|
/* save session id, it will be passed on the first call */ |
|
if (session_id2_len == 0) { |
|
session_id2_len = datlen; |
|
session_id2 = xmalloc(session_id2_len); |
|
memcpy(session_id2, p, session_id2_len); |
|
} |
|
|
if ((key = get_hostkey_by_index(keyid)) == NULL) |
if ((key = get_hostkey_by_index(keyid)) == NULL) |
fatal("%s: no hostkey from index %d", __FUNCTION__, keyid); |
fatal("%s: no hostkey from index %d", __FUNCTION__, keyid); |
if (key_sign(key, &signature, &siglen, p, datlen) < 0) |
if (key_sign(key, &signature, &siglen, p, datlen) < 0) |
|
|
u_char *p; |
u_char *p; |
u_int len; |
u_int len; |
int fail = 0; |
int fail = 0; |
int session_id2_len = 20 /*XXX should get from [net] */; |
|
|
|
buffer_init(&b); |
buffer_init(&b); |
buffer_append(&b, data, datalen); |
buffer_append(&b, data, datalen); |
|
|
if (datafellows & SSH_OLD_SESSIONID) { |
if (datafellows & SSH_OLD_SESSIONID) { |
|
p = buffer_ptr(&b); |
|
len = buffer_len(&b); |
|
if ((session_id2 == NULL) || |
|
(len < session_id2_len) || |
|
(memcmp(p, session_id2, session_id2_len) != 0)) |
|
fail++; |
buffer_consume(&b, session_id2_len); |
buffer_consume(&b, session_id2_len); |
} else { |
} else { |
xfree(buffer_get_string(&b, &len)); |
p = buffer_get_string(&b, &len); |
if (len != session_id2_len) |
if ((session_id2 == NULL) || |
|
(len != session_id2_len) || |
|
(memcmp(p, session_id2, session_id2_len) != 0)) |
fail++; |
fail++; |
|
xfree(p); |
} |
} |
if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |
if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |
fail++; |
fail++; |
|
|
u_char *p; |
u_char *p; |
u_int len; |
u_int len; |
int fail = 0; |
int fail = 0; |
int session_id2_len = 20 /*XXX should get from [net] */; |
|
|
|
buffer_init(&b); |
buffer_init(&b); |
buffer_append(&b, data, datalen); |
buffer_append(&b, data, datalen); |
|
|
xfree(buffer_get_string(&b, &len)); |
p = buffer_get_string(&b, &len); |
if (len != session_id2_len) |
if ((session_id2 == NULL) || |
|
(len != session_id2_len) || |
|
(memcmp(p, session_id2, session_id2_len) != 0)) |
fail++; |
fail++; |
|
xfree(p); |
|
|
if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |
if (buffer_get_char(&b) != SSH2_MSG_USERAUTH_REQUEST) |
fail++; |
fail++; |
p = buffer_get_string(&b, NULL); |
p = buffer_get_string(&b, NULL); |
|
|
kex = xmalloc(sizeof(*kex)); |
kex = xmalloc(sizeof(*kex)); |
memset(kex, 0, sizeof(*kex)); |
memset(kex, 0, sizeof(*kex)); |
kex->session_id = buffer_get_string(m, &kex->session_id_len); |
kex->session_id = buffer_get_string(m, &kex->session_id_len); |
|
if ((session_id2 == NULL) || |
|
(kex->session_id_len != session_id2_len) || |
|
(memcmp(kex->session_id, session_id2, session_id2_len) != 0)) |
|
fatal("mm_get_get: internal error: bad session id"); |
kex->we_need = buffer_get_int(m); |
kex->we_need = buffer_get_int(m); |
kex->server = 1; |
kex->server = 1; |
kex->hostkey_type = buffer_get_int(m); |
kex->hostkey_type = buffer_get_int(m); |