Lines Matching refs:ssh

97 static void server_init_dispatch(struct ssh *);
128 client_alive_check(struct ssh *ssh) in client_alive_check() argument
135 ssh_packet_inc_alive_timeouts(ssh) > in client_alive_check()
137 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); in client_alive_check()
146 if ((channel_id = channel_find_open(ssh)) == -1) { in client_alive_check()
147 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in client_alive_check()
148 (r = sshpkt_put_cstring(ssh, "[email protected]")) in client_alive_check()
150 (r = sshpkt_put_u8(ssh, 1)) != 0) /* boolean: want reply */ in client_alive_check()
153 channel_request_start(ssh, channel_id, in client_alive_check()
156 if ((r = sshpkt_send(ssh)) != 0) in client_alive_check()
167 wait_until_can_do_something(struct ssh *ssh, in wait_until_can_do_something() argument
180 channel_prepare_select(ssh, readsetp, writesetp, maxfdp, in wait_until_can_do_something()
217 if (ssh_packet_have_data_to_write(ssh)) in wait_until_can_do_something()
224 if (child_terminated && ssh_packet_not_very_much_data_to_write(ssh)) in wait_until_can_do_something()
253 client_alive_check(ssh); in wait_until_can_do_something()
266 process_input(struct ssh *ssh, fd_set *readset, int connection_in) in process_input() argument
276 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); in process_input()
283 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), in process_input()
288 if ((r = ssh_packet_process_incoming(ssh, buf, len)) != 0) in process_input()
298 process_output(struct ssh *ssh, fd_set *writeset, int connection_out) in process_output() argument
304 if ((r = ssh_packet_write_poll(ssh)) != 0) { in process_output()
305 sshpkt_fatal(ssh, r, "%s: ssh_packet_write_poll", in process_output()
312 process_buffered_input_packets(struct ssh *ssh) in process_buffered_input_packets() argument
314 ssh_dispatch_run_fatal(ssh, DISPATCH_NONBLOCK, NULL); in process_buffered_input_packets()
318 collect_children(struct ssh *ssh) in collect_children() argument
328 session_close_by_pid(ssh, pid, status); in collect_children()
334 server_loop2(struct ssh *ssh, Authctxt *authctxt) in server_loop2() argument
348 connection_in = ssh_packet_get_connection_in(ssh); in server_loop2()
349 connection_out = ssh_packet_get_connection_out(ssh); in server_loop2()
359 server_init_dispatch(ssh); in server_loop2()
362 process_buffered_input_packets(ssh); in server_loop2()
364 if (!ssh_packet_is_rekeying(ssh) && in server_loop2()
365 ssh_packet_not_very_much_data_to_write(ssh)) in server_loop2()
366 channel_output_poll(ssh); in server_loop2()
368 !ssh_packet_is_rekeying(ssh)) { in server_loop2()
369 rekey_timeout_ms = ssh_packet_get_rekey_timeout(ssh) * in server_loop2()
382 collect_children(ssh); in server_loop2()
383 wait_until_can_do_something(ssh, connection_in, connection_out, in server_loop2()
395 if (!ssh_packet_is_rekeying(ssh)) in server_loop2()
396 channel_after_select(ssh, readset, writeset); in server_loop2()
397 if (process_input(ssh, readset, connection_in) < 0) in server_loop2()
400 if ((r = ssh_packet_check_rekey(ssh)) != 0) in server_loop2()
402 process_output(ssh, writeset, connection_out); in server_loop2()
404 collect_children(ssh); in server_loop2()
410 channel_free_all(ssh); in server_loop2()
413 session_destroy_all(ssh, NULL); in server_loop2()
417 server_input_keep_alive(int type, u_int32_t seq, struct ssh *ssh) in server_input_keep_alive() argument
425 ssh_packet_set_alive_timeouts(ssh, 0); in server_input_keep_alive()
430 server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg) in server_request_direct_tcpip() argument
437 if ((r = sshpkt_get_cstring(ssh, &target, NULL)) != 0 || in server_request_direct_tcpip()
438 (r = sshpkt_get_u32(ssh, &target_port)) != 0 || in server_request_direct_tcpip()
439 (r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 || in server_request_direct_tcpip()
440 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 || in server_request_direct_tcpip()
441 (r = sshpkt_get_end(ssh)) != 0) in server_request_direct_tcpip()
442 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_request_direct_tcpip()
461 c = channel_connect_to_port(ssh, target, target_port, in server_request_direct_tcpip()
478 server_request_direct_streamlocal(struct ssh *ssh) in server_request_direct_streamlocal() argument
489 if ((r = sshpkt_get_cstring(ssh, &target, NULL)) != 0 || in server_request_direct_streamlocal()
490 (r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 || in server_request_direct_streamlocal()
491 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 || in server_request_direct_streamlocal()
492 (r = sshpkt_get_end(ssh)) != 0) in server_request_direct_streamlocal()
493 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_request_direct_streamlocal()
506 c = channel_connect_to_path(ssh, target, in server_request_direct_streamlocal()
521 server_request_tun(struct ssh *ssh) in server_request_tun() argument
528 if ((r = sshpkt_get_u32(ssh, &mode)) != 0) in server_request_tun()
529 sshpkt_fatal(ssh, r, "%s: parse mode", __func__); in server_request_tun()
535 ssh_packet_send_debug(ssh, "Unsupported tunnel device mode."); in server_request_tun()
539 ssh_packet_send_debug(ssh, "Server has rejected tunnel device " in server_request_tun()
544 if ((r = sshpkt_get_u32(ssh, &tun)) != 0) in server_request_tun()
545 sshpkt_fatal(ssh, r, "%s: parse device", __func__); in server_request_tun()
561 c = channel_new(ssh, "tun", SSH_CHANNEL_OPEN, sock, sock, -1, in server_request_tun()
566 channel_register_filter(ssh, c->self, sys_tun_infilter, in server_request_tun()
585 ssh_packet_send_debug(ssh, "Failed to open the tunnel device."); in server_request_tun()
590 server_request_session(struct ssh *ssh) in server_request_session() argument
596 if ((r = sshpkt_get_end(ssh)) != 0) in server_request_session()
597 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_request_session()
600 ssh_packet_disconnect(ssh, "Possible attack: attempt to open a " in server_request_session()
610 c = channel_new(ssh, "session", SSH_CHANNEL_LARVAL, in server_request_session()
615 channel_free(ssh, c); in server_request_session()
618 channel_register_cleanup(ssh, c->self, session_close_by_channel, 0); in server_request_session()
623 server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) in server_input_channel_open() argument
631 if ((r = sshpkt_get_cstring(ssh, &ctype, NULL)) != 0 || in server_input_channel_open()
632 (r = sshpkt_get_u32(ssh, &rchan)) != 0 || in server_input_channel_open()
633 (r = sshpkt_get_u32(ssh, &rwindow)) != 0 || in server_input_channel_open()
634 (r = sshpkt_get_u32(ssh, &rmaxpack)) != 0) in server_input_channel_open()
635 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_input_channel_open()
640 c = server_request_session(ssh); in server_input_channel_open()
642 c = server_request_direct_tcpip(ssh, &reason, &errmsg); in server_input_channel_open()
644 c = server_request_direct_streamlocal(ssh); in server_input_channel_open()
646 c = server_request_tun(ssh); in server_input_channel_open()
655 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION)) != 0 || in server_input_channel_open()
656 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in server_input_channel_open()
657 (r = sshpkt_put_u32(ssh, c->self)) != 0 || in server_input_channel_open()
658 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || in server_input_channel_open()
659 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 || in server_input_channel_open()
660 (r = sshpkt_send(ssh)) != 0) { in server_input_channel_open()
661 sshpkt_fatal(ssh, r, in server_input_channel_open()
667 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 || in server_input_channel_open()
668 (r = sshpkt_put_u32(ssh, rchan)) != 0 || in server_input_channel_open()
669 (r = sshpkt_put_u32(ssh, reason)) != 0 || in server_input_channel_open()
670 (r = sshpkt_put_cstring(ssh, errmsg ? errmsg : "open failed")) != 0 || in server_input_channel_open()
671 (r = sshpkt_put_cstring(ssh, "")) != 0 || in server_input_channel_open()
672 (r = sshpkt_send(ssh)) != 0) { in server_input_channel_open()
673 sshpkt_fatal(ssh, r, in server_input_channel_open()
682 server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) in server_input_hostkeys_prove() argument
696 sshkey_type_from_name(ssh->kex->hostkey_alg)); in server_input_hostkeys_prove()
697 while (ssh_packet_remaining(ssh) > 0) { in server_input_hostkeys_prove()
700 if ((r = sshpkt_get_string_direct(ssh, &blob, &blen)) != 0 || in server_input_hostkeys_prove()
709 if ((ndx = ssh->kex->host_key_index(key, 1, ssh)) == -1) { in server_input_hostkeys_prove()
718 (key_pub = get_hostkey_public_by_index(ndx, ssh)) == NULL) { in server_input_hostkeys_prove()
734 ssh->kex->session_id)) != 0 || in server_input_hostkeys_prove()
736 (r = ssh->kex->sign(ssh, key_prv, key_pub, &sig, &slen, in server_input_hostkeys_prove()
738 use_kexsigtype ? ssh->kex->hostkey_alg : NULL)) != 0 || in server_input_hostkeys_prove()
757 server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) in server_input_global_request() argument
771 if ((r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 || in server_input_global_request()
772 (r = sshpkt_get_u8(ssh, &want_reply)) != 0) in server_input_global_request()
773 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_input_global_request()
778 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 || in server_input_global_request()
779 (r = sshpkt_get_u32(ssh, &port)) != 0) in server_input_global_request()
780 sshpkt_fatal(ssh, r, "%s: parse tcpip-forward", __func__); in server_input_global_request()
794 ssh_packet_send_debug(ssh, "Server has disabled port forwarding."); in server_input_global_request()
797 success = channel_setup_remote_fwd_listener(ssh, &fwd, in server_input_global_request()
806 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 || in server_input_global_request()
807 (r = sshpkt_get_u32(ssh, &port)) != 0) in server_input_global_request()
808 sshpkt_fatal(ssh, r, "%s: parse cancel-tcpip-forward", __func__); in server_input_global_request()
814 success = channel_cancel_rport_listener(ssh, &fwd); in server_input_global_request()
817 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0) in server_input_global_request()
818 sshpkt_fatal(ssh, r, "%s: parse [email protected]", __func__); in server_input_global_request()
828 ssh_packet_send_debug(ssh, "Server has disabled " in server_input_global_request()
832 success = channel_setup_remote_fwd_listener(ssh, in server_input_global_request()
836 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0) in server_input_global_request()
837 sshpkt_fatal(ssh, r, "%s: parse [email protected]", __func__); in server_input_global_request()
841 success = channel_cancel_rport_listener(ssh, &fwd); in server_input_global_request()
846 success = server_input_hostkeys_prove(ssh, &resp); in server_input_global_request()
850 if ((r = sshpkt_start(ssh, success ? in server_input_global_request()
852 (success && resp != NULL && (r = sshpkt_putb(ssh, resp)) != 0) || in server_input_global_request()
853 (r = sshpkt_send(ssh)) != 0 || in server_input_global_request()
854 (r = ssh_packet_write_wait(ssh)) != 0) in server_input_global_request()
855 sshpkt_fatal(ssh, r, "%s: send reply", __func__); in server_input_global_request()
865 server_input_channel_req(int type, u_int32_t seq, struct ssh *ssh) in server_input_channel_req() argument
873 if ((r = sshpkt_get_u32(ssh, &id)) != 0 || in server_input_channel_req()
874 (r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 || in server_input_channel_req()
875 (r = sshpkt_get_u8(ssh, &want_reply)) != 0) in server_input_channel_req()
876 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_input_channel_req()
881 if (id >= INT_MAX || (c = channel_lookup(ssh, (int)id)) == NULL) { in server_input_channel_req()
882 ssh_packet_disconnect(ssh, "%s: unknown channel %d", in server_input_channel_req()
886 if ((r = sshpkt_get_end(ssh)) != 0) in server_input_channel_req()
887 sshpkt_fatal(ssh, r, "%s: parse packet", __func__); in server_input_channel_req()
888 chan_rcvd_eow(ssh, c); in server_input_channel_req()
891 success = session_input_channel_req(ssh, c, rtype); in server_input_channel_req()
895 if ((r = sshpkt_start(ssh, success ? in server_input_channel_req()
897 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in server_input_channel_req()
898 (r = sshpkt_send(ssh)) != 0) in server_input_channel_req()
899 sshpkt_fatal(ssh, r, "%s: send reply", __func__); in server_input_channel_req()
906 server_init_dispatch(struct ssh *ssh) in server_init_dispatch() argument
909 ssh_dispatch_init(ssh, &dispatch_protocol_error); in server_init_dispatch()
910 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose); in server_init_dispatch()
911 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_DATA, &channel_input_data); in server_init_dispatch()
912 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EOF, &channel_input_ieof); in server_init_dispatch()
913 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA, &channel_input_extended_data); in server_init_dispatch()
914 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN, &server_input_channel_open); in server_init_dispatch()
915 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, &channel_input_open_confirmation); in server_init_dispatch()
916 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE, &channel_input_open_failure); in server_init_dispatch()
917 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_REQUEST, &server_input_channel_req); in server_init_dispatch()
918 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_WINDOW_ADJUST, &channel_input_window_adjust); in server_init_dispatch()
919 ssh_dispatch_set(ssh, SSH2_MSG_GLOBAL_REQUEST, &server_input_global_request); in server_init_dispatch()
921 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_SUCCESS, &server_input_keep_alive); in server_init_dispatch()
922 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_FAILURE, &server_input_keep_alive); in server_init_dispatch()
923 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_SUCCESS, &server_input_keep_alive); in server_init_dispatch()
924 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_FAILURE, &server_input_keep_alive); in server_init_dispatch()
926 ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, &kex_input_kexinit); in server_init_dispatch()