version 1.29, 2002/09/26 11:38:43 |
version 1.29.2.2, 2003/04/03 23:27:12 |
|
|
u_int numprompts; |
u_int numprompts; |
u_int *echo_on; |
u_int *echo_on; |
char **prompts; |
char **prompts; |
int res; |
u_int success; |
|
|
res = bsdauth_query(authctxt, &name, &infotxt, &numprompts, |
success = bsdauth_query(authctxt, &name, &infotxt, &numprompts, |
&prompts, &echo_on); |
&prompts, &echo_on) < 0 ? 0 : 1; |
|
|
buffer_clear(m); |
buffer_clear(m); |
buffer_put_int(m, res); |
buffer_put_int(m, success); |
if (res != -1) |
if (success) |
buffer_put_cstring(m, prompts[0]); |
buffer_put_cstring(m, prompts[0]); |
|
|
debug3("%s: sending challenge res: %d", __func__, res); |
debug3("%s: sending challenge success: %u", __func__, success); |
mm_request_send(socket, MONITOR_ANS_BSDAUTHQUERY, m); |
mm_request_send(socket, MONITOR_ANS_BSDAUTHQUERY, m); |
|
|
if (res != -1) { |
if (success) { |
xfree(name); |
xfree(name); |
xfree(infotxt); |
xfree(infotxt); |
xfree(prompts); |
xfree(prompts); |
|
|
{ |
{ |
struct skey skey; |
struct skey skey; |
char challenge[1024]; |
char challenge[1024]; |
int res; |
u_int success; |
|
|
res = skeychallenge(&skey, authctxt->user, challenge); |
success = skeychallenge(&skey, authctxt->user, challenge) < 0 ? 0 : 1; |
|
|
buffer_clear(m); |
buffer_clear(m); |
buffer_put_int(m, res); |
buffer_put_int(m, success); |
if (res != -1) |
if (success) |
buffer_put_cstring(m, challenge); |
buffer_put_cstring(m, challenge); |
|
|
debug3("%s: sending challenge res: %d", __func__, res); |
debug3("%s: sending challenge success: %u", __func__, success); |
mm_request_send(socket, MONITOR_ANS_SKEYQUERY, m); |
mm_request_send(socket, MONITOR_ANS_SKEYQUERY, m); |
|
|
return (0); |
return (0); |
|
|
fatal("%s: unknown key type %d", __func__, type); |
fatal("%s: unknown key type %d", __func__, type); |
break; |
break; |
} |
} |
key_free(key); |
|
} |
} |
|
if (key != NULL) |
|
key_free(key); |
|
|
/* clear temporarily storage (used by verify) */ |
/* clear temporarily storage (used by verify) */ |
monitor_reset_key_state(); |
monitor_reset_key_state(); |
|
|
|
|
buffer_clear(m); |
buffer_clear(m); |
buffer_put_int(m, allowed); |
buffer_put_int(m, allowed); |
|
buffer_put_int(m, forced_command != NULL); |
|
|
mm_append_debug(m); |
mm_append_debug(m); |
|
|
|
|
} |
} |
buffer_clear(m); |
buffer_clear(m); |
buffer_put_int(m, allowed); |
buffer_put_int(m, allowed); |
|
buffer_put_int(m, forced_command != NULL); |
|
|
/* clear temporarily storage (used by generate challenge) */ |
/* clear temporarily storage (used by generate challenge) */ |
monitor_reset_key_state(); |
monitor_reset_key_state(); |
|
|
key_blob = blob; |
key_blob = blob; |
key_bloblen = blen; |
key_bloblen = blen; |
key_blobtype = MM_RSAUSERKEY; |
key_blobtype = MM_RSAUSERKEY; |
key_free(key); |
|
} |
} |
|
if (key != NULL) |
|
key_free(key); |
|
|
mm_append_debug(m); |
mm_append_debug(m); |
|
|
|
|
mm_request_send(socket, MONITOR_ANS_RSACHALLENGE, m); |
mm_request_send(socket, MONITOR_ANS_RSACHALLENGE, m); |
|
|
monitor_permit(mon_dispatch, MONITOR_REQ_RSARESPONSE, 1); |
monitor_permit(mon_dispatch, MONITOR_REQ_RSARESPONSE, 1); |
|
|
|
xfree(blob); |
|
key_free(key); |
return (0); |
return (0); |
} |
} |
|
|
|
|
fatal("%s: received bad response to challenge", __func__); |
fatal("%s: received bad response to challenge", __func__); |
success = auth_rsa_verify_response(key, ssh1_challenge, response); |
success = auth_rsa_verify_response(key, ssh1_challenge, response); |
|
|
|
xfree(blob); |
key_free(key); |
key_free(key); |
xfree(response); |
xfree(response); |
|
|
|
|
(memcmp(kex->session_id, session_id2, session_id2_len) != 0)) |
(memcmp(kex->session_id, session_id2, session_id2_len) != 0)) |
fatal("mm_get_get: internal error: bad session id"); |
fatal("mm_get_get: internal error: bad session id"); |
kex->we_need = buffer_get_int(m); |
kex->we_need = buffer_get_int(m); |
|
kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; |
|
kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; |
kex->server = 1; |
kex->server = 1; |
kex->hostkey_type = buffer_get_int(m); |
kex->hostkey_type = buffer_get_int(m); |
kex->kex_type = buffer_get_int(m); |
kex->kex_type = buffer_get_int(m); |
|
|
void * |
void * |
mm_zalloc(struct mm_master *mm, u_int ncount, u_int size) |
mm_zalloc(struct mm_master *mm, u_int ncount, u_int size) |
{ |
{ |
size_t len = size * ncount; |
size_t len = (size_t) size * ncount; |
void *address; |
void *address; |
|
|
if (len == 0 || ncount > SIZE_T_MAX / size) |
if (len == 0 || ncount > SIZE_T_MAX / size) |