Lines Matching refs:ssh
230 struct ssh *
233 struct ssh *ssh = NULL; in ssh_alloc_session_state() local
236 if ((ssh = calloc(1, sizeof(*ssh))) == NULL || in ssh_alloc_session_state()
238 (ssh->kex = kex_new()) == NULL || in ssh_alloc_session_state()
245 TAILQ_INIT(&ssh->private_keys); in ssh_alloc_session_state()
246 TAILQ_INIT(&ssh->public_keys); in ssh_alloc_session_state()
258 ssh->state = state; in ssh_alloc_session_state()
259 return ssh; in ssh_alloc_session_state()
261 if (ssh) { in ssh_alloc_session_state()
262 kex_free(ssh->kex); in ssh_alloc_session_state()
263 free(ssh); in ssh_alloc_session_state()
276 ssh_packet_set_input_hook(struct ssh *ssh, ssh_packet_hook_fn *hook, void *ctx) in ssh_packet_set_input_hook() argument
278 ssh->state->hook_in = hook; in ssh_packet_set_input_hook()
279 ssh->state->hook_in_ctx = ctx; in ssh_packet_set_input_hook()
284 ssh_packet_is_rekeying(struct ssh *ssh) in ssh_packet_is_rekeying() argument
286 return ssh->state->rekeying || in ssh_packet_is_rekeying()
287 (ssh->kex != NULL && ssh->kex->done == 0); in ssh_packet_is_rekeying()
293 struct ssh *
294 ssh_packet_set_connection(struct ssh *ssh, int fd_in, int fd_out) in ssh_packet_set_connection() argument
304 if (ssh == NULL) in ssh_packet_set_connection()
305 ssh = ssh_alloc_session_state(); in ssh_packet_set_connection()
306 if (ssh == NULL) { in ssh_packet_set_connection()
310 state = ssh->state; in ssh_packet_set_connection()
318 free(ssh); /* XXX need ssh_free_session_state? */ in ssh_packet_set_connection()
326 (void)ssh_remote_ipaddr(ssh); in ssh_packet_set_connection()
327 return ssh; in ssh_packet_set_connection()
331 ssh_packet_set_timeout(struct ssh *ssh, int timeout, int count) in ssh_packet_set_timeout() argument
333 struct session_state *state = ssh->state; in ssh_packet_set_timeout()
346 ssh_packet_set_mux(struct ssh *ssh) in ssh_packet_set_mux() argument
348 ssh->state->mux = 1; in ssh_packet_set_mux()
349 ssh->state->rekeying = 0; in ssh_packet_set_mux()
350 kex_free(ssh->kex); in ssh_packet_set_mux()
351 ssh->kex = NULL; in ssh_packet_set_mux()
355 ssh_packet_get_mux(struct ssh *ssh) in ssh_packet_get_mux() argument
357 return ssh->state->mux; in ssh_packet_get_mux()
361 ssh_packet_set_log_preamble(struct ssh *ssh, const char *fmt, ...) in ssh_packet_set_log_preamble() argument
366 free(ssh->log_preamble); in ssh_packet_set_log_preamble()
368 ssh->log_preamble = NULL; in ssh_packet_set_log_preamble()
371 r = vasprintf(&ssh->log_preamble, fmt, args); in ssh_packet_set_log_preamble()
373 if (r < 0 || ssh->log_preamble == NULL) in ssh_packet_set_log_preamble()
380 ssh_packet_stop_discard(struct ssh *ssh) in ssh_packet_stop_discard() argument
382 struct session_state *state = ssh->state; in ssh_packet_stop_discard()
402 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); in ssh_packet_stop_discard()
407 ssh_packet_start_discard(struct ssh *ssh, struct sshenc *enc, in ssh_packet_start_discard() argument
410 struct session_state *state = ssh->state; in ssh_packet_start_discard()
414 if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0) in ssh_packet_start_discard()
427 return ssh_packet_stop_discard(ssh); in ssh_packet_start_discard()
435 ssh_packet_connection_is_on_socket(struct ssh *ssh) in ssh_packet_connection_is_on_socket() argument
441 if (ssh == NULL || ssh->state == NULL) in ssh_packet_connection_is_on_socket()
444 state = ssh->state; in ssh_packet_connection_is_on_socket()
468 ssh_packet_get_bytes(struct ssh *ssh, u_int64_t *ibytes, u_int64_t *obytes) in ssh_packet_get_bytes() argument
471 *ibytes = ssh->state->p_read.bytes; in ssh_packet_get_bytes()
473 *obytes = ssh->state->p_send.bytes; in ssh_packet_get_bytes()
477 ssh_packet_connection_af(struct ssh *ssh) in ssh_packet_connection_af() argument
479 return get_sock_af(ssh->state->connection_out); in ssh_packet_connection_af()
485 ssh_packet_set_nonblocking(struct ssh *ssh) in ssh_packet_set_nonblocking() argument
488 set_nonblock(ssh->state->connection_in); in ssh_packet_set_nonblocking()
490 if (ssh->state->connection_out != ssh->state->connection_in) in ssh_packet_set_nonblocking()
491 set_nonblock(ssh->state->connection_out); in ssh_packet_set_nonblocking()
497 ssh_packet_get_connection_in(struct ssh *ssh) in ssh_packet_get_connection_in() argument
499 return ssh->state->connection_in; in ssh_packet_get_connection_in()
505 ssh_packet_get_connection_out(struct ssh *ssh) in ssh_packet_get_connection_out() argument
507 return ssh->state->connection_out; in ssh_packet_get_connection_out()
516 ssh_remote_ipaddr(struct ssh *ssh) in ssh_remote_ipaddr() argument
521 if (ssh->remote_ipaddr == NULL) { in ssh_remote_ipaddr()
522 if (ssh_packet_connection_is_on_socket(ssh)) { in ssh_remote_ipaddr()
523 sock = ssh->state->connection_in; in ssh_remote_ipaddr()
524 ssh->remote_ipaddr = get_peer_ipaddr(sock); in ssh_remote_ipaddr()
525 ssh->remote_port = get_peer_port(sock); in ssh_remote_ipaddr()
526 ssh->local_ipaddr = get_local_ipaddr(sock); in ssh_remote_ipaddr()
527 ssh->local_port = get_local_port(sock); in ssh_remote_ipaddr()
529 ssh->remote_ipaddr = xstrdup("UNKNOWN"); in ssh_remote_ipaddr()
530 ssh->remote_port = 65535; in ssh_remote_ipaddr()
531 ssh->local_ipaddr = xstrdup("UNKNOWN"); in ssh_remote_ipaddr()
532 ssh->local_port = 65535; in ssh_remote_ipaddr()
535 return ssh->remote_ipaddr; in ssh_remote_ipaddr()
548 ssh_remote_hostname(struct ssh *ssh) in ssh_remote_hostname() argument
554 const char *ntop = ssh_remote_ipaddr(ssh); in ssh_remote_hostname()
559 if (getpeername(ssh_packet_get_connection_in(ssh), in ssh_remote_hostname()
633 ssh_remote_port(struct ssh *ssh) in ssh_remote_port() argument
635 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */ in ssh_remote_port()
636 return ssh->remote_port; in ssh_remote_port()
645 ssh_local_ipaddr(struct ssh *ssh) in ssh_local_ipaddr() argument
647 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */ in ssh_local_ipaddr()
648 return ssh->local_ipaddr; in ssh_local_ipaddr()
654 ssh_local_port(struct ssh *ssh) in ssh_local_port() argument
656 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */ in ssh_local_port()
657 return ssh->local_port; in ssh_local_port()
662 ssh_packet_rdomain_in(struct ssh *ssh) in ssh_packet_rdomain_in() argument
664 if (ssh->rdomain_in != NULL) in ssh_packet_rdomain_in()
665 return ssh->rdomain_in; in ssh_packet_rdomain_in()
666 if (!ssh_packet_connection_is_on_socket(ssh)) in ssh_packet_rdomain_in()
668 ssh->rdomain_in = get_rdomain(ssh->state->connection_in); in ssh_packet_rdomain_in()
669 return ssh->rdomain_in; in ssh_packet_rdomain_in()
675 ssh_packet_close_internal(struct ssh *ssh, int do_close) in ssh_packet_close_internal() argument
677 struct session_state *state = ssh->state; in ssh_packet_close_internal()
698 ssh_clear_newkeys(ssh, mode); /* next keys */ in ssh_packet_close_internal()
732 free(ssh->local_ipaddr); in ssh_packet_close_internal()
733 ssh->local_ipaddr = NULL; in ssh_packet_close_internal()
734 free(ssh->remote_ipaddr); in ssh_packet_close_internal()
735 ssh->remote_ipaddr = NULL; in ssh_packet_close_internal()
736 free(ssh->state); in ssh_packet_close_internal()
737 ssh->state = NULL; in ssh_packet_close_internal()
738 kex_free(ssh->kex); in ssh_packet_close_internal()
739 ssh->kex = NULL; in ssh_packet_close_internal()
744 ssh_packet_close(struct ssh *ssh) in ssh_packet_close() argument
746 ssh_packet_close_internal(ssh, 1); in ssh_packet_close()
750 ssh_packet_clear_keys(struct ssh *ssh) in ssh_packet_clear_keys() argument
752 ssh_packet_close_internal(ssh, 0); in ssh_packet_clear_keys()
758 ssh_packet_set_protocol_flags(struct ssh *ssh, u_int protocol_flags) in ssh_packet_set_protocol_flags() argument
760 ssh->state->remote_protocol_flags = protocol_flags; in ssh_packet_set_protocol_flags()
766 ssh_packet_get_protocol_flags(struct ssh *ssh) in ssh_packet_get_protocol_flags() argument
768 return ssh->state->remote_protocol_flags; in ssh_packet_get_protocol_flags()
777 ssh_packet_init_compression(struct ssh *ssh) in ssh_packet_init_compression() argument
779 if (!ssh->state->compression_buffer && in ssh_packet_init_compression()
780 ((ssh->state->compression_buffer = sshbuf_new()) == NULL)) in ssh_packet_init_compression()
787 start_compression_out(struct ssh *ssh, int level) in start_compression_out() argument
792 if (ssh->state->compression_out_started == 1) in start_compression_out()
793 deflateEnd(&ssh->state->compression_out_stream); in start_compression_out()
794 switch (deflateInit(&ssh->state->compression_out_stream, level)) { in start_compression_out()
796 ssh->state->compression_out_started = 1; in start_compression_out()
807 start_compression_in(struct ssh *ssh) in start_compression_in() argument
809 if (ssh->state->compression_in_started == 1) in start_compression_in()
810 inflateEnd(&ssh->state->compression_in_stream); in start_compression_in()
811 switch (inflateInit(&ssh->state->compression_in_stream)) { in start_compression_in()
813 ssh->state->compression_in_started = 1; in start_compression_in()
825 compress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out) in compress_buffer() argument
830 if (ssh->state->compression_out_started != 1) in compress_buffer()
838 if ((ssh->state->compression_out_stream.next_in = in compress_buffer()
841 ssh->state->compression_out_stream.avail_in = sshbuf_len(in); in compress_buffer()
846 ssh->state->compression_out_stream.next_out = buf; in compress_buffer()
847 ssh->state->compression_out_stream.avail_out = sizeof(buf); in compress_buffer()
850 status = deflate(&ssh->state->compression_out_stream, in compress_buffer()
858 ssh->state->compression_out_stream.avail_out)) != 0) in compress_buffer()
863 ssh->state->compression_out_failures++; in compress_buffer()
866 } while (ssh->state->compression_out_stream.avail_out == 0); in compress_buffer()
871 uncompress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out) in uncompress_buffer() argument
876 if (ssh->state->compression_in_started != 1) in uncompress_buffer()
879 if ((ssh->state->compression_in_stream.next_in = in uncompress_buffer()
882 ssh->state->compression_in_stream.avail_in = sshbuf_len(in); in uncompress_buffer()
886 ssh->state->compression_in_stream.next_out = buf; in uncompress_buffer()
887 ssh->state->compression_in_stream.avail_out = sizeof(buf); in uncompress_buffer()
889 status = inflate(&ssh->state->compression_in_stream, in uncompress_buffer()
894 ssh->state->compression_in_stream.avail_out)) != 0) in uncompress_buffer()
910 ssh->state->compression_in_failures++; in uncompress_buffer()
920 start_compression_out(struct ssh *ssh, int level) in start_compression_out() argument
926 start_compression_in(struct ssh *ssh) in start_compression_in() argument
932 compress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out) in compress_buffer() argument
938 uncompress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out) in uncompress_buffer() argument
945 ssh_clear_newkeys(struct ssh *ssh, int mode) in ssh_clear_newkeys() argument
947 if (ssh->kex && ssh->kex->newkeys[mode]) { in ssh_clear_newkeys()
948 kex_free_newkeys(ssh->kex->newkeys[mode]); in ssh_clear_newkeys()
949 ssh->kex->newkeys[mode] = NULL; in ssh_clear_newkeys()
954 ssh_set_newkeys(struct ssh *ssh, int mode) in ssh_set_newkeys() argument
956 struct session_state *state = ssh->state; in ssh_set_newkeys()
993 if ((state->newkeys[mode] = ssh->kex->newkeys[mode]) == NULL) in ssh_set_newkeys()
995 ssh->kex->newkeys[mode] = NULL; in ssh_set_newkeys()
1021 if ((r = ssh_packet_init_compression(ssh)) < 0) in ssh_set_newkeys()
1024 if ((r = start_compression_out(ssh, 6)) != 0) in ssh_set_newkeys()
1027 if ((r = start_compression_in(ssh)) != 0) in ssh_set_newkeys()
1051 ssh_packet_need_rekeying(struct ssh *ssh, u_int outbound_packet_len) in ssh_packet_need_rekeying() argument
1053 struct session_state *state = ssh->state; in ssh_packet_need_rekeying()
1061 if (ssh_packet_is_rekeying(ssh)) in ssh_packet_need_rekeying()
1065 if (ssh->compat & SSH_BUG_NOREKEY) in ssh_packet_need_rekeying()
1098 ssh_packet_check_rekey(struct ssh *ssh) in ssh_packet_check_rekey() argument
1100 if (!ssh_packet_need_rekeying(ssh, 0)) in ssh_packet_check_rekey()
1103 return kex_start_rekex(ssh); in ssh_packet_check_rekey()
1112 ssh_packet_enable_delayed_compress(struct ssh *ssh) in ssh_packet_enable_delayed_compress() argument
1114 struct session_state *state = ssh->state; in ssh_packet_enable_delayed_compress()
1129 if ((r = ssh_packet_init_compression(ssh)) != 0) in ssh_packet_enable_delayed_compress()
1132 if ((r = start_compression_out(ssh, 6)) != 0) in ssh_packet_enable_delayed_compress()
1135 if ((r = start_compression_in(ssh)) != 0) in ssh_packet_enable_delayed_compress()
1164 ssh_packet_send2_wrapped(struct ssh *ssh) in ssh_packet_send2_wrapped() argument
1166 struct session_state *state = ssh->state; in ssh_packet_send2_wrapped()
1201 if ((r = compress_buffer(ssh, state->outgoing_packet, in ssh_packet_send2_wrapped()
1303 if ((ssh->kex->flags & KEX_INITIAL) != 0) { in ssh_packet_send2_wrapped()
1304 ssh_packet_disconnect(ssh, "outgoing sequence number " in ssh_packet_send2_wrapped()
1310 if (!(ssh->compat & SSH_BUG_NOREKEY)) in ssh_packet_send2_wrapped()
1316 if (type == SSH2_MSG_NEWKEYS && ssh->kex->kex_strict) { in ssh_packet_send2_wrapped()
1322 r = ssh_set_newkeys(ssh, MODE_OUT); in ssh_packet_send2_wrapped()
1324 r = ssh_packet_enable_delayed_compress(ssh); in ssh_packet_send2_wrapped()
1344 ssh_packet_send2(struct ssh *ssh) in ssh_packet_send2() argument
1346 struct session_state *state = ssh->state; in ssh_packet_send2()
1355 ssh_packet_need_rekeying(ssh, sshbuf_len(state->outgoing_packet)); in ssh_packet_send2()
1380 return kex_start_rekex(ssh); in ssh_packet_send2()
1389 if ((r = ssh_packet_send2_wrapped(ssh)) != 0) in ssh_packet_send2()
1403 if (ssh_packet_need_rekeying(ssh, in ssh_packet_send2()
1406 return kex_start_rekex(ssh); in ssh_packet_send2()
1414 if ((r = ssh_packet_send2_wrapped(ssh)) != 0) in ssh_packet_send2()
1428 ssh_packet_read_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) in ssh_packet_read_seqnr() argument
1430 struct session_state *state = ssh->state; in ssh_packet_read_seqnr()
1443 if ((r = ssh_packet_write_wait(ssh)) != 0) in ssh_packet_read_seqnr()
1449 if ((r = ssh_packet_read_poll_seqnr(ssh, typep, seqnr_p)) != 0) in ssh_packet_read_seqnr()
1502 if ((r = ssh_packet_process_incoming(ssh, buf, len)) != 0) in ssh_packet_read_seqnr()
1510 ssh_packet_read(struct ssh *ssh) in ssh_packet_read() argument
1515 if ((r = ssh_packet_read_seqnr(ssh, &type, NULL)) != 0) in ssh_packet_read()
1521 ssh_packet_read_poll2_mux(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) in ssh_packet_read_poll2_mux() argument
1523 struct session_state *state = ssh->state; in ssh_packet_read_poll2_mux()
1528 if (ssh->kex) in ssh_packet_read_poll2_mux()
1559 ssh_packet_read_poll2(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) in ssh_packet_read_poll2() argument
1561 struct session_state *state = ssh->state; in ssh_packet_read_poll2()
1571 return ssh_packet_read_poll2_mux(ssh, typep, seqnr_p); in ssh_packet_read_poll2()
1601 if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0) in ssh_packet_read_poll2()
1631 return ssh_packet_start_discard(ssh, enc, mac, 0, in ssh_packet_read_poll2()
1654 return ssh_packet_start_discard(ssh, enc, mac, 0, in ssh_packet_read_poll2()
1701 return ssh_packet_start_discard(ssh, enc, mac, in ssh_packet_read_poll2()
1714 if ((ssh->kex->flags & KEX_INITIAL) != 0) { in ssh_packet_read_poll2()
1715 ssh_packet_disconnect(ssh, "incoming sequence number " in ssh_packet_read_poll2()
1721 if (!(ssh->compat & SSH_BUG_NOREKEY)) in ssh_packet_read_poll2()
1730 if ((r = sshpkt_disconnect(ssh, in ssh_packet_read_poll2()
1732 (r = ssh_packet_write_wait(ssh)) != 0) in ssh_packet_read_poll2()
1746 if ((r = uncompress_buffer(ssh, state->incoming_packet, in ssh_packet_read_poll2()
1765 if ((r = sshpkt_disconnect(ssh, in ssh_packet_read_poll2()
1767 (r = ssh_packet_write_wait(ssh)) != 0) in ssh_packet_read_poll2()
1772 (r = state->hook_in(ssh, state->incoming_packet, typep, in ssh_packet_read_poll2()
1776 r = ssh_packet_enable_delayed_compress(ssh); in ssh_packet_read_poll2()
1785 if (*typep == SSH2_MSG_NEWKEYS && ssh->kex->kex_strict) { in ssh_packet_read_poll2()
1790 if ((r = ssh_packet_check_rekey(ssh)) != 0) in ssh_packet_read_poll2()
1797 ssh_packet_read_poll_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) in ssh_packet_read_poll_seqnr() argument
1799 struct session_state *state = ssh->state; in ssh_packet_read_poll_seqnr()
1808 r = ssh_packet_read_poll2(ssh, typep, seqnr_p); in ssh_packet_read_poll_seqnr()
1820 if ((r = sshpkt_get_u32(ssh, &reason)) != 0 || in ssh_packet_read_poll_seqnr()
1821 (r = sshpkt_get_string(ssh, &msg, NULL)) != 0) in ssh_packet_read_poll_seqnr()
1824 do_log2(ssh->state->server_side && in ssh_packet_read_poll_seqnr()
1828 "%u: %.400s", ssh_remote_ipaddr(ssh), in ssh_packet_read_poll_seqnr()
1829 ssh_remote_port(ssh), reason, msg); in ssh_packet_read_poll_seqnr()
1840 if (ssh->kex != NULL && in ssh_packet_read_poll_seqnr()
1841 (ssh->kex->flags & KEX_INITIAL) && ssh->kex->kex_strict) in ssh_packet_read_poll_seqnr()
1849 if ((r = sshpkt_get_u8(ssh, NULL)) != 0 || in ssh_packet_read_poll_seqnr()
1850 (r = sshpkt_get_string(ssh, &msg, NULL)) != 0 || in ssh_packet_read_poll_seqnr()
1851 (r = sshpkt_get_string(ssh, NULL, NULL)) != 0) { in ssh_packet_read_poll_seqnr()
1859 if ((r = sshpkt_get_u32(ssh, &seqnr)) != 0) in ssh_packet_read_poll_seqnr()
1865 if ((r = sshpkt_get_string_direct(ssh, &d, &len)) != 0) in ssh_packet_read_poll_seqnr()
1868 if (!ssh->state->after_authentication) { in ssh_packet_read_poll_seqnr()
1872 if (ssh_packet_is_rekeying(ssh)) { in ssh_packet_read_poll_seqnr()
1876 if ((r = sshpkt_start(ssh, SSH2_MSG_PONG)) != 0 || in ssh_packet_read_poll_seqnr()
1877 (r = sshpkt_put_string(ssh, d, len)) != 0 || in ssh_packet_read_poll_seqnr()
1878 (r = sshpkt_send(ssh)) != 0) in ssh_packet_read_poll_seqnr()
1882 if ((r = sshpkt_get_string_direct(ssh, in ssh_packet_read_poll_seqnr()
1898 ssh_packet_process_incoming(struct ssh *ssh, const char *buf, u_int len) in ssh_packet_process_incoming() argument
1900 struct session_state *state = ssh->state; in ssh_packet_process_incoming()
1906 if ((r = ssh_packet_stop_discard(ssh)) != 0) in ssh_packet_process_incoming()
1920 ssh_packet_process_read(struct ssh *ssh, int fd) in ssh_packet_process_read() argument
1922 struct session_state *state = ssh->state; in ssh_packet_process_read()
1934 if ((r = ssh_packet_stop_discard(ssh)) != 0) in ssh_packet_process_read()
1944 ssh_packet_remaining(struct ssh *ssh) in ssh_packet_remaining() argument
1946 return sshbuf_len(ssh->state->incoming_packet); in ssh_packet_remaining()
1958 ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...) in ssh_packet_send_debug() argument
1964 if ((ssh->compat & SSH_BUG_DEBUG)) in ssh_packet_send_debug()
1973 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 || in ssh_packet_send_debug()
1974 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */ in ssh_packet_send_debug()
1975 (r = sshpkt_put_cstring(ssh, buf)) != 0 || in ssh_packet_send_debug()
1976 (r = sshpkt_put_cstring(ssh, "")) != 0 || in ssh_packet_send_debug()
1977 (r = sshpkt_send(ssh)) != 0 || in ssh_packet_send_debug()
1978 (r = ssh_packet_write_wait(ssh)) != 0) in ssh_packet_send_debug()
1983 sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l) in sshpkt_fmt_connection_id() argument
1986 ssh->log_preamble ? ssh->log_preamble : "", in sshpkt_fmt_connection_id()
1987 ssh->log_preamble ? " " : "", in sshpkt_fmt_connection_id()
1988 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); in sshpkt_fmt_connection_id()
1995 sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap) in sshpkt_vfatal() argument
2000 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); in sshpkt_vfatal()
2004 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2007 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2009 ssh->state->server_side ? "from" : "to", remote_id); in sshpkt_vfatal()
2011 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2015 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2024 if (ssh->kex && ssh->kex->failed_choice) { in sshpkt_vfatal()
2025 BLACKLIST_NOTIFY(ssh, BLACKLIST_AUTH_FAIL, "ssh"); in sshpkt_vfatal()
2026 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2030 ssh->kex->failed_choice); in sshpkt_vfatal()
2035 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2038 ssh_packet_clear_keys(ssh); in sshpkt_vfatal()
2042 ssh->state->server_side ? "from" : "to", remote_id); in sshpkt_vfatal()
2047 sshpkt_fatal(struct ssh *ssh, int r, const char *fmt, ...) in sshpkt_fatal() argument
2052 sshpkt_vfatal(ssh, r, fmt, ap); in sshpkt_fatal()
2065 ssh_packet_disconnect(struct ssh *ssh, const char *fmt,...) in ssh_packet_disconnect() argument
2080 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); in ssh_packet_disconnect()
2092 if ((r = sshpkt_disconnect(ssh, "%s", buf)) != 0) in ssh_packet_disconnect()
2093 sshpkt_fatal(ssh, r, "%s", __func__); in ssh_packet_disconnect()
2095 if ((r = ssh_packet_write_wait(ssh)) != 0) in ssh_packet_disconnect()
2096 sshpkt_fatal(ssh, r, "%s", __func__); in ssh_packet_disconnect()
2099 ssh_packet_close(ssh); in ssh_packet_disconnect()
2108 ssh_packet_write_poll(struct ssh *ssh) in ssh_packet_write_poll() argument
2110 struct session_state *state = ssh->state; in ssh_packet_write_poll()
2136 ssh_packet_write_wait(struct ssh *ssh) in ssh_packet_write_wait() argument
2141 struct session_state *state = ssh->state; in ssh_packet_write_wait()
2144 if ((r = ssh_packet_write_poll(ssh)) != 0) in ssh_packet_write_wait()
2146 while (ssh_packet_have_data_to_write(ssh)) { in ssh_packet_write_wait()
2174 if ((r = ssh_packet_write_poll(ssh)) != 0) in ssh_packet_write_wait()
2183 ssh_packet_have_data_to_write(struct ssh *ssh) in ssh_packet_have_data_to_write() argument
2185 return sshbuf_len(ssh->state->output) != 0; in ssh_packet_have_data_to_write()
2191 ssh_packet_not_very_much_data_to_write(struct ssh *ssh) in ssh_packet_not_very_much_data_to_write() argument
2193 if (ssh->state->interactive_mode) in ssh_packet_not_very_much_data_to_write()
2194 return sshbuf_len(ssh->state->output) < 16384; in ssh_packet_not_very_much_data_to_write()
2196 return sshbuf_len(ssh->state->output) < 128 * 1024; in ssh_packet_not_very_much_data_to_write()
2205 ssh_packet_interactive_data_to_write(struct ssh *ssh) in ssh_packet_interactive_data_to_write() argument
2207 return ssh->state->interactive_mode && in ssh_packet_interactive_data_to_write()
2208 sshbuf_len(ssh->state->output) < 256; in ssh_packet_interactive_data_to_write()
2212 ssh_packet_set_tos(struct ssh *ssh, int tos) in ssh_packet_set_tos() argument
2214 if (!ssh_packet_connection_is_on_socket(ssh) || tos == INT_MAX) in ssh_packet_set_tos()
2216 set_sock_tos(ssh->state->connection_in, tos); in ssh_packet_set_tos()
2222 ssh_packet_set_interactive(struct ssh *ssh, int interactive, int qos_interactive, int qos_bulk) in ssh_packet_set_interactive() argument
2224 struct session_state *state = ssh->state; in ssh_packet_set_interactive()
2234 if (!ssh_packet_connection_is_on_socket(ssh)) in ssh_packet_set_interactive()
2237 ssh_packet_set_tos(ssh, interactive ? qos_interactive : qos_bulk); in ssh_packet_set_interactive()
2243 ssh_packet_is_interactive(struct ssh *ssh) in ssh_packet_is_interactive() argument
2245 return ssh->state->interactive_mode; in ssh_packet_is_interactive()
2249 ssh_packet_set_maxsize(struct ssh *ssh, u_int s) in ssh_packet_set_maxsize() argument
2251 struct session_state *state = ssh->state; in ssh_packet_set_maxsize()
2269 ssh_packet_inc_alive_timeouts(struct ssh *ssh) in ssh_packet_inc_alive_timeouts() argument
2271 return ++ssh->state->keep_alive_timeouts; in ssh_packet_inc_alive_timeouts()
2275 ssh_packet_set_alive_timeouts(struct ssh *ssh, int ka) in ssh_packet_set_alive_timeouts() argument
2277 ssh->state->keep_alive_timeouts = ka; in ssh_packet_set_alive_timeouts()
2281 ssh_packet_get_maxsize(struct ssh *ssh) in ssh_packet_get_maxsize() argument
2283 return ssh->state->max_packet_size; in ssh_packet_get_maxsize()
2287 ssh_packet_set_rekey_limits(struct ssh *ssh, u_int64_t bytes, u_int32_t seconds) in ssh_packet_set_rekey_limits() argument
2291 ssh->state->rekey_limit = bytes; in ssh_packet_set_rekey_limits()
2292 ssh->state->rekey_interval = seconds; in ssh_packet_set_rekey_limits()
2296 ssh_packet_get_rekey_timeout(struct ssh *ssh) in ssh_packet_get_rekey_timeout() argument
2300 seconds = ssh->state->rekey_time + ssh->state->rekey_interval - in ssh_packet_get_rekey_timeout()
2306 ssh_packet_set_server(struct ssh *ssh) in ssh_packet_set_server() argument
2308 ssh->state->server_side = 1; in ssh_packet_set_server()
2309 ssh->kex->server = 1; /* XXX unify? */ in ssh_packet_set_server()
2313 ssh_packet_set_authenticated(struct ssh *ssh) in ssh_packet_set_authenticated() argument
2315 ssh->state->after_authentication = 1; in ssh_packet_set_authenticated()
2319 ssh_packet_get_input(struct ssh *ssh) in ssh_packet_get_input() argument
2321 return (void *)ssh->state->input; in ssh_packet_get_input()
2325 ssh_packet_get_output(struct ssh *ssh) in ssh_packet_get_output() argument
2327 return (void *)ssh->state->output; in ssh_packet_get_output()
2332 ssh_packet_set_postauth(struct ssh *ssh) in ssh_packet_set_postauth() argument
2338 ssh->state->after_authentication = 1; in ssh_packet_set_postauth()
2339 ssh->state->rekeying = 0; in ssh_packet_set_postauth()
2340 if ((r = ssh_packet_enable_delayed_compress(ssh)) != 0) in ssh_packet_set_postauth()
2371 newkeys_to_blob(struct sshbuf *m, struct ssh *ssh, int mode) in newkeys_to_blob() argument
2381 if ((newkey = ssh->state->newkeys[mode]) == NULL) in newkeys_to_blob()
2386 cc = (mode == MODE_OUT) ? ssh->state->send_context : in newkeys_to_blob()
2387 ssh->state->receive_context; in newkeys_to_blob()
2415 ssh_packet_get_state(struct ssh *ssh, struct sshbuf *m) in ssh_packet_get_state() argument
2417 struct session_state *state = ssh->state; in ssh_packet_get_state()
2420 if ((r = kex_to_blob(m, ssh->kex)) != 0 || in ssh_packet_get_state()
2421 (r = newkeys_to_blob(m, ssh, MODE_OUT)) != 0 || in ssh_packet_get_state()
2422 (r = newkeys_to_blob(m, ssh, MODE_IN)) != 0 || in ssh_packet_get_state()
2442 newkeys_from_blob(struct sshbuf *m, struct ssh *ssh, int mode) in newkeys_from_blob() argument
2498 ssh->kex->newkeys[mode] = newkey; in newkeys_from_blob()
2549 ssh_packet_set_state(struct ssh *ssh, struct sshbuf *m) in ssh_packet_set_state() argument
2551 struct session_state *state = ssh->state; in ssh_packet_set_state()
2556 if ((r = kex_from_blob(m, &ssh->kex)) != 0 || in ssh_packet_set_state()
2557 (r = newkeys_from_blob(m, ssh, MODE_OUT)) != 0 || in ssh_packet_set_state()
2558 (r = newkeys_from_blob(m, ssh, MODE_IN)) != 0 || in ssh_packet_set_state()
2576 if ((r = ssh_set_newkeys(ssh, MODE_IN)) != 0 || in ssh_packet_set_state()
2577 (r = ssh_set_newkeys(ssh, MODE_OUT)) != 0) in ssh_packet_set_state()
2580 if ((r = ssh_packet_set_postauth(ssh)) != 0) in ssh_packet_set_state()
2602 sshpkt_put(struct ssh *ssh, const void *v, size_t len) in sshpkt_put() argument
2604 return sshbuf_put(ssh->state->outgoing_packet, v, len); in sshpkt_put()
2608 sshpkt_putb(struct ssh *ssh, const struct sshbuf *b) in sshpkt_putb() argument
2610 return sshbuf_putb(ssh->state->outgoing_packet, b); in sshpkt_putb()
2614 sshpkt_put_u8(struct ssh *ssh, u_char val) in sshpkt_put_u8() argument
2616 return sshbuf_put_u8(ssh->state->outgoing_packet, val); in sshpkt_put_u8()
2620 sshpkt_put_u32(struct ssh *ssh, u_int32_t val) in sshpkt_put_u32() argument
2622 return sshbuf_put_u32(ssh->state->outgoing_packet, val); in sshpkt_put_u32()
2626 sshpkt_put_u64(struct ssh *ssh, u_int64_t val) in sshpkt_put_u64() argument
2628 return sshbuf_put_u64(ssh->state->outgoing_packet, val); in sshpkt_put_u64()
2632 sshpkt_put_string(struct ssh *ssh, const void *v, size_t len) in sshpkt_put_string() argument
2634 return sshbuf_put_string(ssh->state->outgoing_packet, v, len); in sshpkt_put_string()
2638 sshpkt_put_cstring(struct ssh *ssh, const void *v) in sshpkt_put_cstring() argument
2640 return sshbuf_put_cstring(ssh->state->outgoing_packet, v); in sshpkt_put_cstring()
2644 sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v) in sshpkt_put_stringb() argument
2646 return sshbuf_put_stringb(ssh->state->outgoing_packet, v); in sshpkt_put_stringb()
2652 sshpkt_put_ec(struct ssh *ssh, const EC_POINT *v, const EC_GROUP *g) in sshpkt_put_ec() argument
2654 return sshbuf_put_ec(ssh->state->outgoing_packet, v, g); in sshpkt_put_ec()
2658 sshpkt_put_ec_pkey(struct ssh *ssh, EVP_PKEY *pkey) in sshpkt_put_ec_pkey() argument
2660 return sshbuf_put_ec_pkey(ssh->state->outgoing_packet, pkey); in sshpkt_put_ec_pkey()
2665 sshpkt_put_bignum2(struct ssh *ssh, const BIGNUM *v) in sshpkt_put_bignum2() argument
2667 return sshbuf_put_bignum2(ssh->state->outgoing_packet, v); in sshpkt_put_bignum2()
2674 sshpkt_get(struct ssh *ssh, void *valp, size_t len) in sshpkt_get() argument
2676 return sshbuf_get(ssh->state->incoming_packet, valp, len); in sshpkt_get()
2680 sshpkt_get_u8(struct ssh *ssh, u_char *valp) in sshpkt_get_u8() argument
2682 return sshbuf_get_u8(ssh->state->incoming_packet, valp); in sshpkt_get_u8()
2686 sshpkt_get_u32(struct ssh *ssh, u_int32_t *valp) in sshpkt_get_u32() argument
2688 return sshbuf_get_u32(ssh->state->incoming_packet, valp); in sshpkt_get_u32()
2692 sshpkt_get_u64(struct ssh *ssh, u_int64_t *valp) in sshpkt_get_u64() argument
2694 return sshbuf_get_u64(ssh->state->incoming_packet, valp); in sshpkt_get_u64()
2698 sshpkt_get_string(struct ssh *ssh, u_char **valp, size_t *lenp) in sshpkt_get_string() argument
2700 return sshbuf_get_string(ssh->state->incoming_packet, valp, lenp); in sshpkt_get_string()
2704 sshpkt_get_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp) in sshpkt_get_string_direct() argument
2706 return sshbuf_get_string_direct(ssh->state->incoming_packet, valp, lenp); in sshpkt_get_string_direct()
2710 sshpkt_peek_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp) in sshpkt_peek_string_direct() argument
2712 return sshbuf_peek_string_direct(ssh->state->incoming_packet, valp, lenp); in sshpkt_peek_string_direct()
2716 sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp) in sshpkt_get_cstring() argument
2718 return sshbuf_get_cstring(ssh->state->incoming_packet, valp, lenp); in sshpkt_get_cstring()
2722 sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp) in sshpkt_getb_froms() argument
2724 return sshbuf_froms(ssh->state->incoming_packet, valp); in sshpkt_getb_froms()
2730 sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g) in sshpkt_get_ec() argument
2732 return sshbuf_get_ec(ssh->state->incoming_packet, v, g); in sshpkt_get_ec()
2737 sshpkt_get_bignum2(struct ssh *ssh, BIGNUM **valp) in sshpkt_get_bignum2() argument
2739 return sshbuf_get_bignum2(ssh->state->incoming_packet, valp); in sshpkt_get_bignum2()
2744 sshpkt_get_end(struct ssh *ssh) in sshpkt_get_end() argument
2746 if (sshbuf_len(ssh->state->incoming_packet) > 0) in sshpkt_get_end()
2752 sshpkt_ptr(struct ssh *ssh, size_t *lenp) in sshpkt_ptr() argument
2755 *lenp = sshbuf_len(ssh->state->incoming_packet); in sshpkt_ptr()
2756 return sshbuf_ptr(ssh->state->incoming_packet); in sshpkt_ptr()
2762 sshpkt_start(struct ssh *ssh, u_char type) in sshpkt_start() argument
2769 sshbuf_reset(ssh->state->outgoing_packet); in sshpkt_start()
2770 return sshbuf_put(ssh->state->outgoing_packet, buf, sizeof(buf)); in sshpkt_start()
2774 ssh_packet_send_mux(struct ssh *ssh) in ssh_packet_send_mux() argument
2776 struct session_state *state = ssh->state; in ssh_packet_send_mux()
2781 if (ssh->kex) in ssh_packet_send_mux()
2815 sshpkt_msg_ignore(struct ssh *ssh, u_int nbytes) in sshpkt_msg_ignore() argument
2821 if ((r = sshpkt_start(ssh, SSH2_MSG_IGNORE)) != 0 || in sshpkt_msg_ignore()
2822 (r = sshpkt_put_u32(ssh, nbytes)) != 0) in sshpkt_msg_ignore()
2827 if ((r = sshpkt_put_u8(ssh, (u_char)rnd & 0xff)) != 0) in sshpkt_msg_ignore()
2837 sshpkt_send(struct ssh *ssh) in sshpkt_send() argument
2839 if (ssh->state && ssh->state->mux) in sshpkt_send()
2840 return ssh_packet_send_mux(ssh); in sshpkt_send()
2841 return ssh_packet_send2(ssh); in sshpkt_send()
2845 sshpkt_disconnect(struct ssh *ssh, const char *fmt,...) in sshpkt_disconnect() argument
2856 if ((r = sshpkt_start(ssh, SSH2_MSG_DISCONNECT)) != 0 || in sshpkt_disconnect()
2857 (r = sshpkt_put_u32(ssh, SSH2_DISCONNECT_PROTOCOL_ERROR)) != 0 || in sshpkt_disconnect()
2858 (r = sshpkt_put_cstring(ssh, buf)) != 0 || in sshpkt_disconnect()
2859 (r = sshpkt_put_cstring(ssh, "")) != 0 || in sshpkt_disconnect()
2860 (r = sshpkt_send(ssh)) != 0) in sshpkt_disconnect()
2867 sshpkt_add_padding(struct ssh *ssh, u_char pad) in sshpkt_add_padding() argument
2869 ssh->state->extra_pad = pad; in sshpkt_add_padding()