summaryrefslogtreecommitdiff
path: root/sshconnect2.c
diff options
context:
space:
mode:
authormarkus@openbsd.org <markus@openbsd.org>2017-05-30 14:19:15 +0000
committerDamien Miller <djm@mindrot.org>2017-05-31 10:49:50 +1000
commit94583beb24a6c5fd19cedb9104ab2d2d5cd052b6 (patch)
tree90649f02c786f34ec71c0de35c3ae800bd624e3d /sshconnect2.c
parent5f4082d886c6173b9e90b9768c9a38a3bfd92c2b (diff)
upstream commit
ssh: pass struct ssh to auth functions, too; ok djm@ Upstream-ID: d13c509cc782f8f19728fbea47ac7cf36f6e85dd
Diffstat (limited to 'sshconnect2.c')
-rw-r--r--sshconnect2.c42
1 files changed, 27 insertions, 15 deletions
diff --git a/sshconnect2.c b/sshconnect2.c
index 5193c9cea..affc5667f 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect2.c,v 1.259 2017/05/30 08:52:20 markus Exp $ */ 1/* $OpenBSD: sshconnect2.c,v 1.260 2017/05/30 14:19:15 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Damien Miller. All rights reserved. 4 * Copyright (c) 2008 Damien Miller. All rights reserved.
@@ -397,10 +397,12 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
397 (r = sshpkt_send(ssh)) != 0) 397 (r = sshpkt_send(ssh)) != 0)
398 fatal("%s: %s", __func__, ssh_err(r)); 398 fatal("%s: %s", __func__, ssh_err(r));
399 399
400 ssh->authctxt = &authctxt;
400 ssh_dispatch_init(ssh, &input_userauth_error); 401 ssh_dispatch_init(ssh, &input_userauth_error);
401 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_ext_info); 402 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_ext_info);
402 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_ACCEPT, &input_userauth_service_accept); 403 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_ACCEPT, &input_userauth_service_accept);
403 ssh_dispatch_run(ssh, DISPATCH_BLOCK, &authctxt.success, &authctxt); /* loop until success */ 404 ssh_dispatch_run(ssh, DISPATCH_BLOCK, &authctxt.success, ssh); /* loop until success */
405 ssh->authctxt = NULL;
404 406
405 pubkey_cleanup(&authctxt); 407 pubkey_cleanup(&authctxt);
406 ssh_dispatch_range(ssh, SSH2_MSG_USERAUTH_MIN, SSH2_MSG_USERAUTH_MAX, NULL); 408 ssh_dispatch_range(ssh, SSH2_MSG_USERAUTH_MIN, SSH2_MSG_USERAUTH_MAX, NULL);
@@ -414,8 +416,8 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
414int 416int
415input_userauth_service_accept(int type, u_int32_t seqnr, void *ctxt) 417input_userauth_service_accept(int type, u_int32_t seqnr, void *ctxt)
416{ 418{
417 Authctxt *authctxt = ctxt; 419 struct ssh *ssh = ctxt;
418 struct ssh *ssh = active_state; 420 Authctxt *authctxt = ssh->authctxt;
419 int r; 421 int r;
420 422
421 if (ssh_packet_remaining(ssh) > 0) { 423 if (ssh_packet_remaining(ssh) > 0) {
@@ -448,7 +450,7 @@ input_userauth_service_accept(int type, u_int32_t seqnr, void *ctxt)
448int 450int
449input_userauth_ext_info(int type, u_int32_t seqnr, void *ctxt) 451input_userauth_ext_info(int type, u_int32_t seqnr, void *ctxt)
450{ 452{
451 return kex_input_ext_info(type, seqnr, active_state); 453 return kex_input_ext_info(type, seqnr, ctxt);
452} 454}
453 455
454void 456void
@@ -516,7 +518,8 @@ input_userauth_banner(int type, u_int32_t seq, void *ctxt)
516int 518int
517input_userauth_success(int type, u_int32_t seq, void *ctxt) 519input_userauth_success(int type, u_int32_t seq, void *ctxt)
518{ 520{
519 Authctxt *authctxt = ctxt; 521 struct ssh *ssh = ctxt;
522 Authctxt *authctxt = ssh->authctxt;
520 523
521 if (authctxt == NULL) 524 if (authctxt == NULL)
522 fatal("input_userauth_success: no authentication context"); 525 fatal("input_userauth_success: no authentication context");
@@ -533,7 +536,8 @@ input_userauth_success(int type, u_int32_t seq, void *ctxt)
533int 536int
534input_userauth_success_unexpected(int type, u_int32_t seq, void *ctxt) 537input_userauth_success_unexpected(int type, u_int32_t seq, void *ctxt)
535{ 538{
536 Authctxt *authctxt = ctxt; 539 struct ssh *ssh = ctxt;
540 Authctxt *authctxt = ssh->authctxt;
537 541
538 if (authctxt == NULL) 542 if (authctxt == NULL)
539 fatal("%s: no authentication context", __func__); 543 fatal("%s: no authentication context", __func__);
@@ -547,7 +551,8 @@ input_userauth_success_unexpected(int type, u_int32_t seq, void *ctxt)
547int 551int
548input_userauth_failure(int type, u_int32_t seq, void *ctxt) 552input_userauth_failure(int type, u_int32_t seq, void *ctxt)
549{ 553{
550 Authctxt *authctxt = ctxt; 554 struct ssh *ssh = ctxt;
555 Authctxt *authctxt = ssh->authctxt;
551 char *authlist = NULL; 556 char *authlist = NULL;
552 int partial; 557 int partial;
553 558
@@ -573,7 +578,8 @@ input_userauth_failure(int type, u_int32_t seq, void *ctxt)
573int 578int
574input_userauth_pk_ok(int type, u_int32_t seq, void *ctxt) 579input_userauth_pk_ok(int type, u_int32_t seq, void *ctxt)
575{ 580{
576 Authctxt *authctxt = ctxt; 581 struct ssh *ssh = ctxt;
582 Authctxt *authctxt = ssh->authctxt;
577 struct sshkey *key = NULL; 583 struct sshkey *key = NULL;
578 Identity *id = NULL; 584 Identity *id = NULL;
579 Buffer b; 585 Buffer b;
@@ -704,7 +710,8 @@ userauth_gssapi(Authctxt *authctxt)
704static OM_uint32 710static OM_uint32
705process_gssapi_token(void *ctxt, gss_buffer_t recv_tok) 711process_gssapi_token(void *ctxt, gss_buffer_t recv_tok)
706{ 712{
707 Authctxt *authctxt = ctxt; 713 struct ssh *ssh = ctxt;
714 Authctxt *authctxt = ssh->authctxt;
708 Gssctxt *gssctxt = authctxt->methoddata; 715 Gssctxt *gssctxt = authctxt->methoddata;
709 gss_buffer_desc send_tok = GSS_C_EMPTY_BUFFER; 716 gss_buffer_desc send_tok = GSS_C_EMPTY_BUFFER;
710 gss_buffer_desc mic = GSS_C_EMPTY_BUFFER; 717 gss_buffer_desc mic = GSS_C_EMPTY_BUFFER;
@@ -759,7 +766,8 @@ process_gssapi_token(void *ctxt, gss_buffer_t recv_tok)
759int 766int
760input_gssapi_response(int type, u_int32_t plen, void *ctxt) 767input_gssapi_response(int type, u_int32_t plen, void *ctxt)
761{ 768{
762 Authctxt *authctxt = ctxt; 769 struct ssh *ssh = ctxt;
770 Authctxt *authctxt = ssh->authctxt;
763 Gssctxt *gssctxt; 771 Gssctxt *gssctxt;
764 int oidlen; 772 int oidlen;
765 char *oidv; 773 char *oidv;
@@ -800,7 +808,8 @@ input_gssapi_response(int type, u_int32_t plen, void *ctxt)
800int 808int
801input_gssapi_token(int type, u_int32_t plen, void *ctxt) 809input_gssapi_token(int type, u_int32_t plen, void *ctxt)
802{ 810{
803 Authctxt *authctxt = ctxt; 811 struct ssh *ssh = ctxt;
812 Authctxt *authctxt = ssh->authctxt;
804 gss_buffer_desc recv_tok; 813 gss_buffer_desc recv_tok;
805 OM_uint32 status; 814 OM_uint32 status;
806 u_int slen; 815 u_int slen;
@@ -829,7 +838,8 @@ input_gssapi_token(int type, u_int32_t plen, void *ctxt)
829int 838int
830input_gssapi_errtok(int type, u_int32_t plen, void *ctxt) 839input_gssapi_errtok(int type, u_int32_t plen, void *ctxt)
831{ 840{
832 Authctxt *authctxt = ctxt; 841 struct ssh *ssh = ctxt;
842 Authctxt *authctxt = ssh->authctxt;
833 Gssctxt *gssctxt; 843 Gssctxt *gssctxt;
834 gss_buffer_desc send_tok = GSS_C_EMPTY_BUFFER; 844 gss_buffer_desc send_tok = GSS_C_EMPTY_BUFFER;
835 gss_buffer_desc recv_tok; 845 gss_buffer_desc recv_tok;
@@ -931,7 +941,8 @@ userauth_passwd(Authctxt *authctxt)
931int 941int
932input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt) 942input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt)
933{ 943{
934 Authctxt *authctxt = ctxt; 944 struct ssh *ssh = ctxt;
945 Authctxt *authctxt = ssh->authctxt;
935 char *info, *lang, *password = NULL, *retype = NULL; 946 char *info, *lang, *password = NULL, *retype = NULL;
936 char prompt[150]; 947 char prompt[150];
937 const char *host; 948 const char *host;
@@ -1561,7 +1572,8 @@ userauth_kbdint(Authctxt *authctxt)
1561int 1572int
1562input_userauth_info_req(int type, u_int32_t seq, void *ctxt) 1573input_userauth_info_req(int type, u_int32_t seq, void *ctxt)
1563{ 1574{
1564 Authctxt *authctxt = ctxt; 1575 struct ssh *ssh = ctxt;
1576 Authctxt *authctxt = ssh->authctxt;
1565 char *name, *inst, *lang, *prompt, *response; 1577 char *name, *inst, *lang, *prompt, *response;
1566 u_int num_prompts, i; 1578 u_int num_prompts, i;
1567 int echo = 0; 1579 int echo = 0;