diff options
author | markus@openbsd.org <markus@openbsd.org> | 2017-05-30 14:19:15 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-05-31 10:49:50 +1000 |
commit | 94583beb24a6c5fd19cedb9104ab2d2d5cd052b6 (patch) | |
tree | 90649f02c786f34ec71c0de35c3ae800bd624e3d /sshconnect2.c | |
parent | 5f4082d886c6173b9e90b9768c9a38a3bfd92c2b (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.c | 42 |
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, | |||
414 | int | 416 | int |
415 | input_userauth_service_accept(int type, u_int32_t seqnr, void *ctxt) | 417 | input_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) | |||
448 | int | 450 | int |
449 | input_userauth_ext_info(int type, u_int32_t seqnr, void *ctxt) | 451 | input_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 | ||
454 | void | 456 | void |
@@ -516,7 +518,8 @@ input_userauth_banner(int type, u_int32_t seq, void *ctxt) | |||
516 | int | 518 | int |
517 | input_userauth_success(int type, u_int32_t seq, void *ctxt) | 519 | input_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) | |||
533 | int | 536 | int |
534 | input_userauth_success_unexpected(int type, u_int32_t seq, void *ctxt) | 537 | input_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) | |||
547 | int | 551 | int |
548 | input_userauth_failure(int type, u_int32_t seq, void *ctxt) | 552 | input_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) | |||
573 | int | 578 | int |
574 | input_userauth_pk_ok(int type, u_int32_t seq, void *ctxt) | 579 | input_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) | |||
704 | static OM_uint32 | 710 | static OM_uint32 |
705 | process_gssapi_token(void *ctxt, gss_buffer_t recv_tok) | 711 | process_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) | |||
759 | int | 766 | int |
760 | input_gssapi_response(int type, u_int32_t plen, void *ctxt) | 767 | input_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) | |||
800 | int | 808 | int |
801 | input_gssapi_token(int type, u_int32_t plen, void *ctxt) | 809 | input_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) | |||
829 | int | 838 | int |
830 | input_gssapi_errtok(int type, u_int32_t plen, void *ctxt) | 839 | input_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) | |||
931 | int | 941 | int |
932 | input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt) | 942 | input_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) | |||
1561 | int | 1572 | int |
1562 | input_userauth_info_req(int type, u_int32_t seq, void *ctxt) | 1573 | input_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; |