Lines Matching defs:ssh

13  * called by a name other than "ssh" or "Secure Shell".
75 #include "ssh.h"
209 struct ssh *
212 struct ssh *ssh = NULL;
215 if ((ssh = calloc(1, sizeof(*ssh))) == NULL ||
217 (ssh->kex = kex_new()) == NULL ||
224 TAILQ_INIT(&ssh->private_keys);
225 TAILQ_INIT(&ssh->public_keys);
237 ssh->state = state;
238 return ssh;
240 if (ssh) {
241 kex_free(ssh->kex);
242 free(ssh);
255 ssh_packet_set_input_hook(struct ssh *ssh, ssh_packet_hook_fn *hook, void *ctx)
257 ssh->state->hook_in = hook;
258 ssh->state->hook_in_ctx = ctx;
263 ssh_packet_is_rekeying(struct ssh *ssh)
265 return ssh->state->rekeying ||
266 (ssh->kex != NULL && ssh->kex->done == 0);
272 struct ssh *
273 ssh_packet_set_connection(struct ssh *ssh, int fd_in, int fd_out)
283 if (ssh == NULL)
284 ssh = ssh_alloc_session_state();
285 if (ssh == NULL) {
289 state = ssh->state;
297 free(ssh); /* XXX need ssh_free_session_state? */
305 (void)ssh_remote_ipaddr(ssh);
306 return ssh;
310 ssh_packet_set_timeout(struct ssh *ssh, int timeout, int count)
312 struct session_state *state = ssh->state;
325 ssh_packet_set_mux(struct ssh *ssh)
327 ssh->state->mux = 1;
328 ssh->state->rekeying = 0;
329 kex_free(ssh->kex);
330 ssh->kex = NULL;
334 ssh_packet_get_mux(struct ssh *ssh)
336 return ssh->state->mux;
340 ssh_packet_set_log_preamble(struct ssh *ssh, const char *fmt, ...)
345 free(ssh->log_preamble);
347 ssh->log_preamble = NULL;
350 r = vasprintf(&ssh->log_preamble, fmt, args);
352 if (r < 0 || ssh->log_preamble == NULL)
359 ssh_packet_stop_discard(struct ssh *ssh)
361 struct session_state *state = ssh->state;
381 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
386 ssh_packet_start_discard(struct ssh *ssh, struct sshenc *enc,
389 struct session_state *state = ssh->state;
393 if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0)
406 return ssh_packet_stop_discard(ssh);
414 ssh_packet_connection_is_on_socket(struct ssh *ssh)
420 if (ssh == NULL || ssh->state == NULL)
423 state = ssh->state;
447 ssh_packet_get_bytes(struct ssh *ssh, u_int64_t *ibytes, u_int64_t *obytes)
450 *ibytes = ssh->state->p_read.bytes;
452 *obytes = ssh->state->p_send.bytes;
456 ssh_packet_connection_af(struct ssh *ssh)
458 return get_sock_af(ssh->state->connection_out);
464 ssh_packet_set_nonblocking(struct ssh *ssh)
467 set_nonblock(ssh->state->connection_in);
469 if (ssh->state->connection_out != ssh->state->connection_in)
470 set_nonblock(ssh->state->connection_out);
476 ssh_packet_get_connection_in(struct ssh *ssh)
478 return ssh->state->connection_in;
484 ssh_packet_get_connection_out(struct ssh *ssh)
486 return ssh->state->connection_out;
495 ssh_remote_ipaddr(struct ssh *ssh)
500 if (ssh->remote_ipaddr == NULL) {
501 if (ssh_packet_connection_is_on_socket(ssh)) {
502 sock = ssh->state->connection_in;
503 ssh->remote_ipaddr = get_peer_ipaddr(sock);
504 ssh->remote_port = get_peer_port(sock);
505 ssh->local_ipaddr = get_local_ipaddr(sock);
506 ssh->local_port = get_local_port(sock);
508 ssh->remote_ipaddr = xstrdup("UNKNOWN");
509 ssh->remote_port = 65535;
510 ssh->local_ipaddr = xstrdup("UNKNOWN");
511 ssh->local_port = 65535;
514 return ssh->remote_ipaddr;
527 ssh_remote_hostname(struct ssh *ssh)
533 const char *ntop = ssh_remote_ipaddr(ssh);
538 if (getpeername(ssh_packet_get_connection_in(ssh),
608 ssh_remote_port(struct ssh *ssh)
610 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */
611 return ssh->remote_port;
620 ssh_local_ipaddr(struct ssh *ssh)
622 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */
623 return ssh->local_ipaddr;
629 ssh_local_port(struct ssh *ssh)
631 (void)ssh_remote_ipaddr(ssh); /* Will lookup and cache. */
632 return ssh->local_port;
637 ssh_packet_rdomain_in(struct ssh *ssh)
639 if (ssh->rdomain_in != NULL)
640 return ssh->rdomain_in;
641 if (!ssh_packet_connection_is_on_socket(ssh))
643 ssh->rdomain_in = get_rdomain(ssh->state->connection_in);
644 return ssh->rdomain_in;
650 ssh_packet_close_internal(struct ssh *ssh, int do_close)
652 struct session_state *state = ssh->state;
673 ssh_clear_newkeys(ssh, mode); /* next keys */
707 free(ssh->local_ipaddr);
708 ssh->local_ipaddr = NULL;
709 free(ssh->remote_ipaddr);
710 ssh->remote_ipaddr = NULL;
711 free(ssh->state);
712 ssh->state = NULL;
713 kex_free(ssh->kex);
714 ssh->kex = NULL;
719 ssh_packet_close(struct ssh *ssh)
721 ssh_packet_close_internal(ssh, 1);
725 ssh_packet_clear_keys(struct ssh *ssh)
727 ssh_packet_close_internal(ssh, 0);
733 ssh_packet_set_protocol_flags(struct ssh *ssh, u_int protocol_flags)
735 ssh->state->remote_protocol_flags = protocol_flags;
741 ssh_packet_get_protocol_flags(struct ssh *ssh)
743 return ssh->state->remote_protocol_flags;
752 ssh_packet_init_compression(struct ssh *ssh)
754 if (!ssh->state->compression_buffer &&
755 ((ssh->state->compression_buffer = sshbuf_new()) == NULL))
762 start_compression_out(struct ssh *ssh, int level)
767 if (ssh->state->compression_out_started == 1)
768 deflateEnd(&ssh->state->compression_out_stream);
769 switch (deflateInit(&ssh->state->compression_out_stream, level)) {
771 ssh->state->compression_out_started = 1;
782 start_compression_in(struct ssh *ssh)
784 if (ssh->state->compression_in_started == 1)
785 inflateEnd(&ssh->state->compression_in_stream);
786 switch (inflateInit(&ssh->state->compression_in_stream)) {
788 ssh->state->compression_in_started = 1;
800 compress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out)
805 if (ssh->state->compression_out_started != 1)
813 if ((ssh->state->compression_out_stream.next_in =
816 ssh->state->compression_out_stream.avail_in = sshbuf_len(in);
821 ssh->state->compression_out_stream.next_out = buf;
822 ssh->state->compression_out_stream.avail_out = sizeof(buf);
825 status = deflate(&ssh->state->compression_out_stream,
833 ssh->state->compression_out_stream.avail_out)) != 0)
838 ssh->state->compression_out_failures++;
841 } while (ssh->state->compression_out_stream.avail_out == 0);
846 uncompress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out)
851 if (ssh->state->compression_in_started != 1)
854 if ((ssh->state->compression_in_stream.next_in =
857 ssh->state->compression_in_stream.avail_in = sshbuf_len(in);
861 ssh->state->compression_in_stream.next_out = buf;
862 ssh->state->compression_in_stream.avail_out = sizeof(buf);
864 status = inflate(&ssh->state->compression_in_stream,
869 ssh->state->compression_in_stream.avail_out)) != 0)
885 ssh->state->compression_in_failures++;
895 start_compression_out(struct ssh *ssh, int level)
901 start_compression_in(struct ssh *ssh)
907 compress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out)
913 uncompress_buffer(struct ssh *ssh, struct sshbuf *in, struct sshbuf *out)
920 ssh_clear_newkeys(struct ssh *ssh, int mode)
922 if (ssh->kex && ssh->kex->newkeys[mode]) {
923 kex_free_newkeys(ssh->kex->newkeys[mode]);
924 ssh->kex->newkeys[mode] = NULL;
929 ssh_set_newkeys(struct ssh *ssh, int mode)
931 struct session_state *state = ssh->state;
968 if ((state->newkeys[mode] = ssh->kex->newkeys[mode]) == NULL)
970 ssh->kex->newkeys[mode] = NULL;
996 if ((r = ssh_packet_init_compression(ssh)) < 0)
999 if ((r = start_compression_out(ssh, 6)) != 0)
1002 if ((r = start_compression_in(ssh)) != 0)
1026 ssh_packet_need_rekeying(struct ssh *ssh, u_int outbound_packet_len)
1028 struct session_state *state = ssh->state;
1036 if (ssh_packet_is_rekeying(ssh))
1040 if (ssh->compat & SSH_BUG_NOREKEY)
1073 ssh_packet_check_rekey(struct ssh *ssh)
1075 if (!ssh_packet_need_rekeying(ssh, 0))
1078 return kex_start_rekex(ssh);
1087 ssh_packet_enable_delayed_compress(struct ssh *ssh)
1089 struct session_state *state = ssh->state;
1104 if ((r = ssh_packet_init_compression(ssh)) != 0)
1107 if ((r = start_compression_out(ssh, 6)) != 0)
1110 if ((r = start_compression_in(ssh)) != 0)
1139 ssh_packet_send2_wrapped(struct ssh *ssh)
1141 struct session_state *state = ssh->state;
1176 if ((r = compress_buffer(ssh, state->outgoing_packet,
1278 if ((ssh->kex->flags & KEX_INITIAL) != 0) {
1279 ssh_packet_disconnect(ssh, "outgoing sequence number "
1285 if (!(ssh->compat & SSH_BUG_NOREKEY))
1291 if (type == SSH2_MSG_NEWKEYS && ssh->kex->kex_strict) {
1297 r = ssh_set_newkeys(ssh, MODE_OUT);
1299 r = ssh_packet_enable_delayed_compress(ssh);
1319 ssh_packet_send2(struct ssh *ssh)
1321 struct session_state *state = ssh->state;
1330 ssh_packet_need_rekeying(ssh, sshbuf_len(state->outgoing_packet));
1355 return kex_start_rekex(ssh);
1364 if ((r = ssh_packet_send2_wrapped(ssh)) != 0)
1378 if (ssh_packet_need_rekeying(ssh,
1381 return kex_start_rekex(ssh);
1389 if ((r = ssh_packet_send2_wrapped(ssh)) != 0)
1403 ssh_packet_read_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1405 struct session_state *state = ssh->state;
1418 if ((r = ssh_packet_write_wait(ssh)) != 0)
1424 if ((r = ssh_packet_read_poll_seqnr(ssh, typep, seqnr_p)) != 0)
1476 if ((r = ssh_packet_process_incoming(ssh, buf, len)) != 0)
1484 ssh_packet_read(struct ssh *ssh)
1489 if ((r = ssh_packet_read_seqnr(ssh, &type, NULL)) != 0)
1495 ssh_packet_read_poll2_mux(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1497 struct session_state *state = ssh->state;
1502 if (ssh->kex)
1533 ssh_packet_read_poll2(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1535 struct session_state *state = ssh->state;
1545 return ssh_packet_read_poll2_mux(ssh, typep, seqnr_p);
1575 if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0)
1605 return ssh_packet_start_discard(ssh, enc, mac, 0,
1628 return ssh_packet_start_discard(ssh, enc, mac, 0,
1675 return ssh_packet_start_discard(ssh, enc, mac,
1688 if ((ssh->kex->flags & KEX_INITIAL) != 0) {
1689 ssh_packet_disconnect(ssh, "incoming sequence number "
1695 if (!(ssh->compat & SSH_BUG_NOREKEY))
1704 if ((r = sshpkt_disconnect(ssh,
1706 (r = ssh_packet_write_wait(ssh)) != 0)
1720 if ((r = uncompress_buffer(ssh, state->incoming_packet,
1739 if ((r = sshpkt_disconnect(ssh,
1741 (r = ssh_packet_write_wait(ssh)) != 0)
1746 (r = state->hook_in(ssh, state->incoming_packet, typep,
1750 r = ssh_packet_enable_delayed_compress(ssh);
1759 if (*typep == SSH2_MSG_NEWKEYS && ssh->kex->kex_strict) {
1764 if ((r = ssh_packet_check_rekey(ssh)) != 0)
1771 ssh_packet_read_poll_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1773 struct session_state *state = ssh->state;
1782 r = ssh_packet_read_poll2(ssh, typep, seqnr_p);
1794 if ((r = sshpkt_get_u32(ssh, &reason)) != 0 ||
1795 (r = sshpkt_get_string(ssh, &msg, NULL)) != 0)
1798 do_log2(ssh->state->server_side &&
1802 "%u: %.400s", ssh_remote_ipaddr(ssh),
1803 ssh_remote_port(ssh), reason, msg);
1814 if (ssh->kex != NULL &&
1815 (ssh->kex->flags & KEX_INITIAL) && ssh->kex->kex_strict)
1823 if ((r = sshpkt_get_u8(ssh, NULL)) != 0 ||
1824 (r = sshpkt_get_string(ssh, &msg, NULL)) != 0 ||
1825 (r = sshpkt_get_string(ssh, NULL, NULL)) != 0) {
1833 if ((r = sshpkt_get_u32(ssh, &seqnr)) != 0)
1839 if ((r = sshpkt_get_string_direct(ssh, &d, &len)) != 0)
1842 if ((r = sshpkt_start(ssh, SSH2_MSG_PONG)) != 0 ||
1843 (r = sshpkt_put_string(ssh, d, len)) != 0 ||
1844 (r = sshpkt_send(ssh)) != 0)
1848 if ((r = sshpkt_get_string_direct(ssh,
1864 ssh_packet_process_incoming(struct ssh *ssh, const char *buf, u_int len)
1866 struct session_state *state = ssh->state;
1872 if ((r = ssh_packet_stop_discard(ssh)) != 0)
1886 ssh_packet_process_read(struct ssh *ssh, int fd)
1888 struct session_state *state = ssh->state;
1900 if ((r = ssh_packet_stop_discard(ssh)) != 0)
1910 ssh_packet_remaining(struct ssh *ssh)
1912 return sshbuf_len(ssh->state->incoming_packet);
1924 ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...)
1930 if ((ssh->compat & SSH_BUG_DEBUG))
1939 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 ||
1940 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */
1941 (r = sshpkt_put_cstring(ssh, buf)) != 0 ||
1942 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
1943 (r = sshpkt_send(ssh)) != 0 ||
1944 (r = ssh_packet_write_wait(ssh)) != 0)
1949 sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l)
1952 ssh->log_preamble ? ssh->log_preamble : "",
1953 ssh->log_preamble ? " " : "",
1954 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
1961 sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap)
1966 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1970 ssh_packet_clear_keys(ssh);
1973 ssh_packet_clear_keys(ssh);
1975 ssh->state->server_side ? "from" : "to", remote_id);
1977 ssh_packet_clear_keys(ssh);
1981 ssh_packet_clear_keys(ssh);
1990 if (ssh->kex && ssh->kex->failed_choice) {
1991 ssh_packet_clear_keys(ssh);
1995 ssh->kex->failed_choice);
2000 ssh_packet_clear_keys(ssh);
2003 ssh_packet_clear_keys(ssh);
2007 ssh->state->server_side ? "from" : "to", remote_id);
2012 sshpkt_fatal(struct ssh *ssh, int r, const char *fmt, ...)
2017 sshpkt_vfatal(ssh, r, fmt, ap);
2030 ssh_packet_disconnect(struct ssh *ssh, const char *fmt,...)
2045 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
2057 if ((r = sshpkt_disconnect(ssh, "%s", buf)) != 0)
2058 sshpkt_fatal(ssh, r, "%s", __func__);
2060 if ((r = ssh_packet_write_wait(ssh)) != 0)
2061 sshpkt_fatal(ssh, r, "%s", __func__);
2064 ssh_packet_close(ssh);
2073 ssh_packet_write_poll(struct ssh *ssh)
2075 struct session_state *state = ssh->state;
2100 ssh_packet_write_wait(struct ssh *ssh)
2105 struct session_state *state = ssh->state;
2108 if ((r = ssh_packet_write_poll(ssh)) != 0)
2110 while (ssh_packet_have_data_to_write(ssh)) {
2137 if ((r = ssh_packet_write_poll(ssh)) != 0)
2146 ssh_packet_have_data_to_write(struct ssh *ssh)
2148 return sshbuf_len(ssh->state->output) != 0;
2154 ssh_packet_not_very_much_data_to_write(struct ssh *ssh)
2156 if (ssh->state->interactive_mode)
2157 return sshbuf_len(ssh->state->output) < 16384;
2159 return sshbuf_len(ssh->state->output) < 128 * 1024;
2168 ssh_packet_interactive_data_to_write(struct ssh *ssh)
2170 return ssh->state->interactive_mode &&
2171 sshbuf_len(ssh->state->output) < 256;
2175 ssh_packet_set_tos(struct ssh *ssh, int tos)
2177 if (!ssh_packet_connection_is_on_socket(ssh) || tos == INT_MAX)
2179 set_sock_tos(ssh->state->connection_in, tos);
2185 ssh_packet_set_interactive(struct ssh *ssh, int interactive, int qos_interactive, int qos_bulk)
2187 struct session_state *state = ssh->state;
2197 if (!ssh_packet_connection_is_on_socket(ssh))
2200 ssh_packet_set_tos(ssh, interactive ? qos_interactive : qos_bulk);
2206 ssh_packet_is_interactive(struct ssh *ssh)
2208 return ssh->state->interactive_mode;
2212 ssh_packet_set_maxsize(struct ssh *ssh, u_int s)
2214 struct session_state *state = ssh->state;
2232 ssh_packet_inc_alive_timeouts(struct ssh *ssh)
2234 return ++ssh->state->keep_alive_timeouts;
2238 ssh_packet_set_alive_timeouts(struct ssh *ssh, int ka)
2240 ssh->state->keep_alive_timeouts = ka;
2244 ssh_packet_get_maxsize(struct ssh *ssh)
2246 return ssh->state->max_packet_size;
2250 ssh_packet_set_rekey_limits(struct ssh *ssh, u_int64_t bytes, u_int32_t seconds)
2254 ssh->state->rekey_limit = bytes;
2255 ssh->state->rekey_interval = seconds;
2259 ssh_packet_get_rekey_timeout(struct ssh *ssh)
2263 seconds = ssh->state->rekey_time + ssh->state->rekey_interval -
2269 ssh_packet_set_server(struct ssh *ssh)
2271 ssh->state->server_side = 1;
2272 ssh->kex->server = 1; /* XXX unify? */
2276 ssh_packet_set_authenticated(struct ssh *ssh)
2278 ssh->state->after_authentication = 1;
2282 ssh_packet_get_input(struct ssh *ssh)
2284 return (void *)ssh->state->input;
2288 ssh_packet_get_output(struct ssh *ssh)
2290 return (void *)ssh->state->output;
2295 ssh_packet_set_postauth(struct ssh *ssh)
2301 ssh->state->after_authentication = 1;
2302 ssh->state->rekeying = 0;
2303 if ((r = ssh_packet_enable_delayed_compress(ssh)) != 0)
2334 newkeys_to_blob(struct sshbuf *m, struct ssh *ssh, int mode)
2344 if ((newkey = ssh->state->newkeys[mode]) == NULL)
2349 cc = (mode == MODE_OUT) ? ssh->state->send_context :
2350 ssh->state->receive_context;
2378 ssh_packet_get_state(struct ssh *ssh, struct sshbuf *m)
2380 struct session_state *state = ssh->state;
2383 if ((r = kex_to_blob(m, ssh->kex)) != 0 ||
2384 (r = newkeys_to_blob(m, ssh, MODE_OUT)) != 0 ||
2385 (r = newkeys_to_blob(m, ssh, MODE_IN)) != 0 ||
2405 newkeys_from_blob(struct sshbuf *m, struct ssh *ssh, int mode)
2461 ssh->kex->newkeys[mode] = newkey;
2512 ssh_packet_set_state(struct ssh *ssh, struct sshbuf *m)
2514 struct session_state *state = ssh->state;
2519 if ((r = kex_from_blob(m, &ssh->kex)) != 0 ||
2520 (r = newkeys_from_blob(m, ssh, MODE_OUT)) != 0 ||
2521 (r = newkeys_from_blob(m, ssh, MODE_IN)) != 0 ||
2539 if ((r = ssh_set_newkeys(ssh, MODE_IN)) != 0 ||
2540 (r = ssh_set_newkeys(ssh, MODE_OUT)) != 0)
2543 if ((r = ssh_packet_set_postauth(ssh)) != 0)
2565 sshpkt_put(struct ssh *ssh, const void *v, size_t len)
2567 return sshbuf_put(ssh->state->outgoing_packet, v, len);
2571 sshpkt_putb(struct ssh *ssh, const struct sshbuf *b)
2573 return sshbuf_putb(ssh->state->outgoing_packet, b);
2577 sshpkt_put_u8(struct ssh *ssh, u_char val)
2579 return sshbuf_put_u8(ssh->state->outgoing_packet, val);
2583 sshpkt_put_u32(struct ssh *ssh, u_int32_t val)
2585 return sshbuf_put_u32(ssh->state->outgoing_packet, val);
2589 sshpkt_put_u64(struct ssh *ssh, u_int64_t val)
2591 return sshbuf_put_u64(ssh->state->outgoing_packet, val);
2595 sshpkt_put_string(struct ssh *ssh, const void *v, size_t len)
2597 return sshbuf_put_string(ssh->state->outgoing_packet, v, len);
2601 sshpkt_put_cstring(struct ssh *ssh, const void *v)
2603 return sshbuf_put_cstring(ssh->state->outgoing_packet, v);
2607 sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v)
2609 return sshbuf_put_stringb(ssh->state->outgoing_packet, v);
2614 sshpkt_put_ec(struct ssh *ssh, const EC_POINT *v, const EC_GROUP *g)
2616 return sshbuf_put_ec(ssh->state->outgoing_packet, v, g);
2620 sshpkt_put_ec_pkey(struct ssh *ssh, EVP_PKEY *pkey)
2622 return sshbuf_put_ec_pkey(ssh->state->outgoing_packet, pkey);
2626 sshpkt_put_bignum2(struct ssh *ssh, const BIGNUM *v)
2628 return sshbuf_put_bignum2(ssh->state->outgoing_packet, v);
2635 sshpkt_get(struct ssh *ssh, void *valp, size_t len)
2637 return sshbuf_get(ssh->state->incoming_packet, valp, len);
2641 sshpkt_get_u8(struct ssh *ssh, u_char *valp)
2643 return sshbuf_get_u8(ssh->state->incoming_packet, valp);
2647 sshpkt_get_u32(struct ssh *ssh, u_int32_t *valp)
2649 return sshbuf_get_u32(ssh->state->incoming_packet, valp);
2653 sshpkt_get_u64(struct ssh *ssh, u_int64_t *valp)
2655 return sshbuf_get_u64(ssh->state->incoming_packet, valp);
2659 sshpkt_get_string(struct ssh *ssh, u_char **valp, size_t *lenp)
2661 return sshbuf_get_string(ssh->state->incoming_packet, valp, lenp);
2665 sshpkt_get_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp)
2667 return sshbuf_get_string_direct(ssh->state->incoming_packet, valp, lenp);
2671 sshpkt_peek_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp)
2673 return sshbuf_peek_string_direct(ssh->state->incoming_packet, valp, lenp);
2677 sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp)
2679 return sshbuf_get_cstring(ssh->state->incoming_packet, valp, lenp);
2683 sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp)
2685 return sshbuf_froms(ssh->state->incoming_packet, valp);
2690 sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g)
2692 return sshbuf_get_ec(ssh->state->incoming_packet, v, g);
2696 sshpkt_get_bignum2(struct ssh *ssh, BIGNUM **valp)
2698 return sshbuf_get_bignum2(ssh->state->incoming_packet, valp);
2703 sshpkt_get_end(struct ssh *ssh)
2705 if (sshbuf_len(ssh->state->incoming_packet) > 0)
2711 sshpkt_ptr(struct ssh *ssh, size_t *lenp)
2714 *lenp = sshbuf_len(ssh->state->incoming_packet);
2715 return sshbuf_ptr(ssh->state->incoming_packet);
2721 sshpkt_start(struct ssh *ssh, u_char type)
2728 sshbuf_reset(ssh->state->outgoing_packet);
2729 return sshbuf_put(ssh->state->outgoing_packet, buf, sizeof(buf));
2733 ssh_packet_send_mux(struct ssh *ssh)
2735 struct session_state *state = ssh->state;
2740 if (ssh->kex)
2774 sshpkt_msg_ignore(struct ssh *ssh, u_int nbytes)
2780 if ((r = sshpkt_start(ssh, SSH2_MSG_IGNORE)) != 0 ||
2781 (r = sshpkt_put_u32(ssh, nbytes)) != 0)
2786 if ((r = sshpkt_put_u8(ssh, (u_char)rnd & 0xff)) != 0)
2796 sshpkt_send(struct ssh *ssh)
2798 if (ssh->state && ssh->state->mux)
2799 return ssh_packet_send_mux(ssh);
2800 return ssh_packet_send2(ssh);
2804 sshpkt_disconnect(struct ssh *ssh, const char *fmt,...)
2815 if ((r = sshpkt_start(ssh, SSH2_MSG_DISCONNECT)) != 0 ||
2816 (r = sshpkt_put_u32(ssh, SSH2_DISCONNECT_PROTOCOL_ERROR)) != 0 ||
2817 (r = sshpkt_put_cstring(ssh, buf)) != 0 ||
2818 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
2819 (r = sshpkt_send(ssh)) != 0)
2826 sshpkt_add_padding(struct ssh *ssh, u_char pad)
2828 ssh->state->extra_pad = pad;