Lines Matching refs:ssh

101 typedef void chan_fn(struct ssh *, Channel *c);
216 static void port_open_helper(struct ssh *ssh, Channel *c, char *rtype);
222 static Channel *rdynamic_connect_prepare(struct ssh *, char *, char *);
223 static int rdynamic_connect_finish(struct ssh *, Channel *);
231 channel_init_channels(struct ssh *ssh) in channel_init_channels() argument
242 ssh->chanctxt = sc; in channel_init_channels()
246 channel_by_id(struct ssh *ssh, int id) in channel_by_id() argument
250 if (id < 0 || (u_int)id >= ssh->chanctxt->channels_alloc) { in channel_by_id()
254 c = ssh->chanctxt->channels[id]; in channel_by_id()
263 channel_by_remote_id(struct ssh *ssh, u_int remote_id) in channel_by_remote_id() argument
268 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_by_remote_id()
269 c = ssh->chanctxt->channels[i]; in channel_by_remote_id()
281 channel_lookup(struct ssh *ssh, int id) in channel_lookup() argument
285 if ((c = channel_by_id(ssh, id)) == NULL) in channel_lookup()
310 channel_add_timeout(struct ssh *ssh, const char *type_pattern, in channel_add_timeout() argument
313 struct ssh_channels *sc = ssh->chanctxt; in channel_add_timeout()
331 channel_clear_timeouts(struct ssh *ssh) in channel_clear_timeouts() argument
333 struct ssh_channels *sc = ssh->chanctxt; in channel_clear_timeouts()
345 lookup_timeout(struct ssh *ssh, const char *type) in lookup_timeout() argument
347 struct ssh_channels *sc = ssh->chanctxt; in lookup_timeout()
365 channel_set_xtype(struct ssh *ssh, int id, const char *xctype) in channel_set_xtype() argument
369 if ((c = channel_by_id(ssh, id)) == NULL) in channel_set_xtype()
375 c->inactive_deadline = lookup_timeout(ssh, c->xctype); in channel_set_xtype()
385 channel_set_used_time(struct ssh *ssh, Channel *c) in channel_set_used_time() argument
387 ssh->chanctxt->lastused = monotime(); in channel_set_used_time()
389 c->lastused = ssh->chanctxt->lastused; in channel_set_used_time()
397 channel_get_expiry(struct ssh *ssh, Channel *c) in channel_get_expiry() argument
399 struct ssh_channels *sc = ssh->chanctxt; in channel_get_expiry()
417 channel_register_fds(struct ssh *ssh, Channel *c, int rfd, int wfd, int efd, in channel_register_fds() argument
478 channel_set_used_time(ssh, NULL); in channel_register_fds()
485 channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd, in channel_new() argument
489 struct ssh_channels *sc = ssh->chanctxt; in channel_new()
526 channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, 0); in channel_new()
536 c->inactive_deadline = lookup_timeout(ssh, c->ctype); in channel_new()
544 channel_close_fd(struct ssh *ssh, Channel *c, int *fdp) in channel_close_fd() argument
594 channel_close_fds(struct ssh *ssh, Channel *c) in channel_close_fds() argument
598 channel_close_fd(ssh, c, &c->sock); in channel_close_fds()
600 channel_close_fd(ssh, c, &c->rfd); in channel_close_fds()
602 channel_close_fd(ssh, c, &c->wfd); in channel_close_fds()
604 channel_close_fd(ssh, c, &c->efd); in channel_close_fds()
636 permission_set_get(struct ssh *ssh, int where) in permission_set_get() argument
638 struct ssh_channels *sc = ssh->chanctxt; in permission_set_get()
654 permission_set_get_array(struct ssh *ssh, int who, int where, in permission_set_get_array() argument
657 struct permission_set *pset = permission_set_get(ssh, where); in permission_set_get_array()
675 permission_set_add(struct ssh *ssh, int who, int where, in permission_set_add() argument
683 permission_set_get_array(ssh, who, where, &permp, &npermp); in permission_set_add()
702 mux_remove_remote_forwardings(struct ssh *ssh, Channel *c) in mux_remove_remote_forwardings() argument
704 struct ssh_channels *sc = ssh->chanctxt; in mux_remove_remote_forwardings()
718 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in mux_remove_remote_forwardings()
719 (r = sshpkt_put_cstring(ssh, in mux_remove_remote_forwardings()
721 (r = sshpkt_put_u8(ssh, 0)) != 0 || in mux_remove_remote_forwardings()
722 (r = sshpkt_put_cstring(ssh, in mux_remove_remote_forwardings()
724 (r = sshpkt_put_u32(ssh, perm->listen_port)) != 0 || in mux_remove_remote_forwardings()
725 (r = sshpkt_send(ssh)) != 0) { in mux_remove_remote_forwardings()
734 channel_free(struct ssh *ssh, Channel *c) in channel_free() argument
736 struct ssh_channels *sc = ssh->chanctxt; in channel_free()
760 mux_remove_remote_forwardings(ssh, c); in channel_free()
769 s = channel_open_message(ssh); in channel_free()
774 channel_close_fds(ssh, c); in channel_free()
789 cc->abandon_cb(ssh, c, cc->ctx); in channel_free()
794 c->filter_cleanup(ssh, c->self, c->filter_ctx); in channel_free()
800 channel_free_all(struct ssh *ssh) in channel_free_all() argument
803 struct ssh_channels *sc = ssh->chanctxt; in channel_free_all()
807 channel_free(ssh, sc->channels[i]); in channel_free_all()
833 channel_close_all(struct ssh *ssh) in channel_close_all() argument
837 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) in channel_close_all()
838 if (ssh->chanctxt->channels[i] != NULL) in channel_close_all()
839 channel_close_fds(ssh, ssh->chanctxt->channels[i]); in channel_close_all()
846 channel_stop_listening(struct ssh *ssh) in channel_stop_listening() argument
851 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_stop_listening()
852 c = ssh->chanctxt->channels[i]; in channel_stop_listening()
861 channel_close_fd(ssh, c, &c->sock); in channel_stop_listening()
862 channel_free(ssh, c); in channel_stop_listening()
874 channel_not_very_much_buffered_data(struct ssh *ssh) in channel_not_very_much_buffered_data() argument
877 u_int maxsize = ssh_packet_get_maxsize(ssh); in channel_not_very_much_buffered_data()
880 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_not_very_much_buffered_data()
881 c = ssh->chanctxt->channels[i]; in channel_not_very_much_buffered_data()
895 channel_still_open(struct ssh *ssh) in channel_still_open() argument
900 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_still_open()
901 c = ssh->chanctxt->channels[i]; in channel_still_open()
938 channel_tty_open(struct ssh *ssh) in channel_tty_open() argument
943 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_tty_open()
944 c = ssh->chanctxt->channels[i]; in channel_tty_open()
955 channel_find_open(struct ssh *ssh) in channel_find_open() argument
960 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_find_open()
961 c = ssh->chanctxt->channels[i]; in channel_find_open()
1039 channel_open_message(struct ssh *ssh) in channel_open_message() argument
1052 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_open_message()
1053 c = ssh->chanctxt->channels[i]; in channel_open_message()
1098 open_preamble(struct ssh *ssh, const char *where, Channel *c, const char *type) in open_preamble() argument
1102 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN)) != 0 || in open_preamble()
1103 (r = sshpkt_put_cstring(ssh, type)) != 0 || in open_preamble()
1104 (r = sshpkt_put_u32(ssh, c->self)) != 0 || in open_preamble()
1105 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || in open_preamble()
1106 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0) { in open_preamble()
1112 channel_send_open(struct ssh *ssh, int id) in channel_send_open() argument
1114 Channel *c = channel_lookup(ssh, id); in channel_send_open()
1122 open_preamble(ssh, __func__, c, c->ctype); in channel_send_open()
1123 if ((r = sshpkt_send(ssh)) != 0) in channel_send_open()
1128 channel_request_start(struct ssh *ssh, int id, char *service, int wantconfirm) in channel_request_start() argument
1130 Channel *c = channel_lookup(ssh, id); in channel_request_start()
1141 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_REQUEST)) != 0 || in channel_request_start()
1142 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_request_start()
1143 (r = sshpkt_put_cstring(ssh, service)) != 0 || in channel_request_start()
1144 (r = sshpkt_put_u8(ssh, wantconfirm)) != 0) { in channel_request_start()
1150 channel_register_status_confirm(struct ssh *ssh, int id, in channel_register_status_confirm() argument
1156 if ((c = channel_lookup(ssh, id)) == NULL) in channel_register_status_confirm()
1167 channel_register_open_confirm(struct ssh *ssh, int id, in channel_register_open_confirm() argument
1170 Channel *c = channel_lookup(ssh, id); in channel_register_open_confirm()
1181 channel_register_cleanup(struct ssh *ssh, int id, in channel_register_cleanup() argument
1184 Channel *c = channel_by_id(ssh, id); in channel_register_cleanup()
1195 channel_cancel_cleanup(struct ssh *ssh, int id) in channel_cancel_cleanup() argument
1197 Channel *c = channel_by_id(ssh, id); in channel_cancel_cleanup()
1208 channel_register_filter(struct ssh *ssh, int id, channel_infilter_fn *ifn, in channel_register_filter() argument
1211 Channel *c = channel_lookup(ssh, id); in channel_register_filter()
1224 channel_set_fds(struct ssh *ssh, int id, int rfd, int wfd, int efd, in channel_set_fds() argument
1227 Channel *c = channel_lookup(ssh, id); in channel_set_fds()
1235 channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, is_tty); in channel_set_fds()
1237 channel_set_used_time(ssh, c); in channel_set_fds()
1240 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_WINDOW_ADJUST)) != 0 || in channel_set_fds()
1241 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_set_fds()
1242 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || in channel_set_fds()
1243 (r = sshpkt_send(ssh)) != 0) in channel_set_fds()
1248 channel_pre_listener(struct ssh *ssh, Channel *c) in channel_pre_listener() argument
1254 channel_pre_connecting(struct ssh *ssh, Channel *c) in channel_pre_connecting() argument
1261 channel_pre_open(struct ssh *ssh, Channel *c) in channel_pre_open() argument
1279 chan_obuf_empty(ssh, c); in channel_pre_open()
1307 x11_open_helper(struct ssh *ssh, struct sshbuf *b) in x11_open_helper() argument
1309 struct ssh_channels *sc = ssh->chanctxt; in x11_open_helper()
1374 channel_force_close(struct ssh *ssh, Channel *c, int abandon) in channel_force_close() argument
1378 chan_read_failed(ssh, c); in channel_force_close()
1381 chan_ibuf_empty(ssh, c); in channel_force_close()
1386 chan_write_failed(ssh, c); in channel_force_close()
1389 c->detach_user(ssh, c->self, 1, NULL); in channel_force_close()
1391 channel_close_fd(ssh, c, &c->efd); in channel_force_close()
1400 channel_pre_x11_open(struct ssh *ssh, Channel *c) in channel_pre_x11_open() argument
1402 int ret = x11_open_helper(ssh, c->output); in channel_pre_x11_open()
1408 channel_set_used_time(ssh, c); in channel_pre_x11_open()
1409 channel_pre_open(ssh, c); in channel_pre_x11_open()
1415 channel_force_close(ssh, c, 0); in channel_pre_x11_open()
1420 channel_pre_mux_client(struct ssh *ssh, Channel *c) in channel_pre_mux_client() argument
1429 chan_ibuf_empty(ssh, c); in channel_pre_mux_client()
1431 chan_rcvd_oclose(ssh, c); in channel_pre_mux_client()
1438 chan_obuf_empty(ssh, c); in channel_pre_mux_client()
1690 channel_connect_stdio_fwd(struct ssh *ssh, in channel_connect_stdio_fwd() argument
1698 c = channel_new(ssh, "stdio-forward", SSH_CHANNEL_OPENING, in, out, in channel_connect_stdio_fwd()
1707 channel_register_fds(ssh, c, in, out, -1, 0, 1, 0); in channel_connect_stdio_fwd()
1708 port_open_helper(ssh, c, port_to_connect == PORT_STREAMLOCAL ? in channel_connect_stdio_fwd()
1716 channel_pre_dynamic(struct ssh *ssh, Channel *c) in channel_pre_dynamic() argument
1747 chan_mark_dead(ssh, c); in channel_pre_dynamic()
1757 port_open_helper(ssh, c, "direct-tcpip"); in channel_pre_dynamic()
1763 rdynamic_close(struct ssh *ssh, Channel *c) in rdynamic_close() argument
1766 channel_force_close(ssh, c, 0); in rdynamic_close()
1771 channel_before_prepare_io_rdynamic(struct ssh *ssh, Channel *c) in channel_before_prepare_io_rdynamic() argument
1784 rdynamic_close(ssh, c); in channel_before_prepare_io_rdynamic()
1805 rdynamic_close(ssh, c); in channel_before_prepare_io_rdynamic()
1811 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || in channel_before_prepare_io_rdynamic()
1812 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_before_prepare_io_rdynamic()
1813 (r = sshpkt_put_stringb(ssh, c->input)) != 0 || in channel_before_prepare_io_rdynamic()
1814 (r = sshpkt_send(ssh)) != 0) { in channel_before_prepare_io_rdynamic()
1821 } else if (rdynamic_connect_finish(ssh, c) < 0) { in channel_before_prepare_io_rdynamic()
1823 rdynamic_close(ssh, c); in channel_before_prepare_io_rdynamic()
1829 channel_post_x11_listener(struct ssh *ssh, Channel *c) in channel_post_x11_listener() argument
1846 channel_close_fd(ssh, c, &c->sock); in channel_post_x11_listener()
1847 chan_mark_dead(ssh, c); in channel_post_x11_listener()
1864 nc = channel_new(ssh, "x11-connection", in channel_post_x11_listener()
1867 open_preamble(ssh, __func__, nc, "x11"); in channel_post_x11_listener()
1868 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 || in channel_post_x11_listener()
1869 (r = sshpkt_put_u32(ssh, remote_port)) != 0) { in channel_post_x11_listener()
1872 if ((r = sshpkt_send(ssh)) != 0) in channel_post_x11_listener()
1878 port_open_helper(struct ssh *ssh, Channel *c, char *rtype) in port_open_helper() argument
1900 open_preamble(ssh, __func__, c, rtype); in port_open_helper()
1903 if ((r = sshpkt_put_cstring(ssh, c->path)) != 0 || in port_open_helper()
1904 (r = sshpkt_put_u32(ssh, c->host_port)) != 0) in port_open_helper()
1908 if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) in port_open_helper()
1912 if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) in port_open_helper()
1916 if ((r = sshpkt_put_cstring(ssh, c->path)) != 0 || in port_open_helper()
1917 (r = sshpkt_put_u32(ssh, local_port)) != 0) in port_open_helper()
1922 if ((r = sshpkt_put_cstring(ssh, "")) != 0) in port_open_helper()
1926 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 || in port_open_helper()
1927 (r = sshpkt_put_u32(ssh, (u_int)remote_port)) != 0) in port_open_helper()
1930 if ((r = sshpkt_send(ssh)) != 0) in port_open_helper()
1937 channel_set_x11_refuse_time(struct ssh *ssh, time_t refuse_time) in channel_set_x11_refuse_time() argument
1939 ssh->chanctxt->x11_refuse_time = refuse_time; in channel_set_x11_refuse_time()
1946 channel_post_port_listener(struct ssh *ssh, Channel *c) in channel_post_port_listener() argument
1989 nc = channel_new(ssh, rtype, nextstate, newsock, newsock, -1, in channel_post_port_listener()
1997 port_open_helper(ssh, nc, rtype); in channel_post_port_listener()
2005 channel_post_auth_listener(struct ssh *ssh, Channel *c) in channel_post_auth_listener() argument
2023 nc = channel_new(ssh, "agent-connection", in channel_post_auth_listener()
2027 open_preamble(ssh, __func__, nc, "auth-agent@openssh.com"); in channel_post_auth_listener()
2028 if ((r = sshpkt_send(ssh)) != 0) in channel_post_auth_listener()
2033 channel_post_connecting(struct ssh *ssh, Channel *c) in channel_post_connecting() argument
2056 channel_set_used_time(ssh, c); in channel_post_connecting()
2060 if ((r = sshpkt_start(ssh, in channel_post_connecting()
2062 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_post_connecting()
2063 (r = sshpkt_put_u32(ssh, c->self)) != 0 || in channel_post_connecting()
2064 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || in channel_post_connecting()
2065 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 || in channel_post_connecting()
2066 (r = sshpkt_send(ssh)) != 0) in channel_post_connecting()
2084 rdynamic_close(ssh, c); in channel_post_connecting()
2086 if ((r = sshpkt_start(ssh, in channel_post_connecting()
2088 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_post_connecting()
2089 (r = sshpkt_put_u32(ssh, in channel_post_connecting()
2091 (r = sshpkt_put_cstring(ssh, strerror(err))) != 0 || in channel_post_connecting()
2092 (r = sshpkt_put_cstring(ssh, "")) != 0 || in channel_post_connecting()
2093 (r = sshpkt_send(ssh)) != 0) in channel_post_connecting()
2095 chan_mark_dead(ssh, c); in channel_post_connecting()
2105 channel_handle_rfd(struct ssh *ssh, Channel *c) in channel_handle_rfd() argument
2148 channel_set_used_time(ssh, c); in channel_handle_rfd()
2167 chan_mark_dead(ssh, c); in channel_handle_rfd()
2170 chan_read_failed(ssh, c); in channel_handle_rfd()
2174 channel_set_used_time(ssh, c); in channel_handle_rfd()
2176 if (c->input_filter(ssh, c, buf, len) == -1) { in channel_handle_rfd()
2178 chan_read_failed(ssh, c); in channel_handle_rfd()
2190 channel_handle_wfd(struct ssh *ssh, Channel *c) in channel_handle_wfd() argument
2205 if ((buf = c->output_filter(ssh, c, &data, &dlen)) == NULL) { in channel_handle_wfd()
2208 chan_mark_dead(ssh, c); in channel_handle_wfd()
2210 chan_write_failed(ssh, c); in channel_handle_wfd()
2248 chan_mark_dead(ssh, c); in channel_handle_wfd()
2251 chan_write_failed(ssh, c); in channel_handle_wfd()
2255 channel_set_used_time(ssh, c); in channel_handle_wfd()
2266 if ((r = sshpkt_msg_ignore(ssh, 4+len)) != 0 || in channel_handle_wfd()
2267 (r = sshpkt_send(ssh)) != 0) in channel_handle_wfd()
2281 channel_handle_efd_write(struct ssh *ssh, Channel *c) in channel_handle_efd_write() argument
2299 channel_close_fd(ssh, c, &c->efd); in channel_handle_efd_write()
2304 channel_set_used_time(ssh, c); in channel_handle_efd_write()
2310 channel_handle_efd_read(struct ssh *ssh, Channel *c) in channel_handle_efd_read() argument
2328 channel_close_fd(ssh, c, &c->efd); in channel_handle_efd_read()
2331 channel_set_used_time(ssh, c); in channel_handle_efd_read()
2340 channel_handle_efd(struct ssh *ssh, Channel *c) in channel_handle_efd() argument
2348 return channel_handle_efd_write(ssh, c); in channel_handle_efd()
2351 return channel_handle_efd_read(ssh, c); in channel_handle_efd()
2357 channel_check_window(struct ssh *ssh, Channel *c) in channel_check_window() argument
2369 if ((r = sshpkt_start(ssh, in channel_check_window()
2371 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_check_window()
2372 (r = sshpkt_put_u32(ssh, c->local_consumed)) != 0 || in channel_check_window()
2373 (r = sshpkt_send(ssh)) != 0) { in channel_check_window()
2385 channel_post_open(struct ssh *ssh, Channel *c) in channel_post_open() argument
2387 channel_handle_rfd(ssh, c); in channel_post_open()
2388 channel_handle_wfd(ssh, c); in channel_post_open()
2389 channel_handle_efd(ssh, c); in channel_post_open()
2390 channel_check_window(ssh, c); in channel_post_open()
2394 read_mux(struct ssh *ssh, Channel *c, u_int need) in read_mux() argument
2409 chan_read_failed(ssh, c); in read_mux()
2418 channel_post_mux_client_read(struct ssh *ssh, Channel *c) in channel_post_mux_client_read() argument
2433 if (read_mux(ssh, c, 4) < 4) /* read header */ in channel_post_mux_client_read()
2441 chan_rcvd_oclose(ssh, c); in channel_post_mux_client_read()
2444 if (read_mux(ssh, c, need + 4) < need + 4) /* read body */ in channel_post_mux_client_read()
2446 if (c->mux_rcb(ssh, c) != 0) { in channel_post_mux_client_read()
2448 chan_mark_dead(ssh, c); in channel_post_mux_client_read()
2454 channel_post_mux_client_write(struct ssh *ssh, Channel *c) in channel_post_mux_client_write() argument
2468 chan_mark_dead(ssh, c); in channel_post_mux_client_write()
2476 channel_post_mux_client(struct ssh *ssh, Channel *c) in channel_post_mux_client() argument
2478 channel_post_mux_client_read(ssh, c); in channel_post_mux_client()
2479 channel_post_mux_client_write(ssh, c); in channel_post_mux_client()
2483 channel_post_mux_listener(struct ssh *ssh, Channel *c) in channel_post_mux_listener() argument
2521 nc = channel_new(ssh, "mux-control", SSH_CHANNEL_MUX_CLIENT, in channel_post_mux_listener()
2527 nc->mux_rcb(ssh, nc); in channel_post_mux_listener()
2574 channel_garbage_collect(struct ssh *ssh, Channel *c) in channel_garbage_collect() argument
2579 if (!chan_is_dead(ssh, c, c->detach_close)) in channel_garbage_collect()
2583 c->detach_user(ssh, c->self, 0, NULL); in channel_garbage_collect()
2589 if (!chan_is_dead(ssh, c, 1)) in channel_garbage_collect()
2592 channel_free(ssh, c); in channel_garbage_collect()
2598 channel_handler(struct ssh *ssh, int table, struct timespec *timeout) in channel_handler() argument
2600 struct ssh_channels *sc = ssh->chanctxt; in channel_handler()
2612 if (ssh_packet_is_rekeying(ssh) && c->type != SSH_CHANNEL_OPEN) in channel_handler()
2622 channel_get_expiry(ssh, c) != 0 && in channel_handler()
2623 now >= channel_get_expiry(ssh, c)) { in channel_handler()
2628 channel_force_close(ssh, c, 1); in channel_handler()
2631 (*ftab[c->type])(ssh, c); in channel_handler()
2635 channel_get_expiry(ssh, c) != 0) { in channel_handler()
2637 channel_get_expiry(ssh, c)); in channel_handler()
2648 channel_garbage_collect(ssh, c); in channel_handler()
2659 channel_before_prepare_io(struct ssh *ssh) in channel_before_prepare_io() argument
2661 struct ssh_channels *sc = ssh->chanctxt; in channel_before_prepare_io()
2670 channel_before_prepare_io_rdynamic(ssh, c); in channel_before_prepare_io()
2794 channel_prepare_poll(struct ssh *ssh, struct pollfd **pfdp, u_int *npfd_allocp, in channel_prepare_poll() argument
2797 struct ssh_channels *sc = ssh->chanctxt; in channel_prepare_poll()
2800 channel_before_prepare_io(ssh); /* might create a new channel */ in channel_prepare_poll()
2819 channel_handler(ssh, CHAN_PRE, timeout); in channel_prepare_poll()
2863 channel_after_poll(struct ssh *ssh, struct pollfd *pfd, u_int npfd) in channel_after_poll() argument
2865 struct ssh_channels *sc = ssh->chanctxt; in channel_after_poll()
2940 channel_handler(ssh, CHAN_POST, NULL); in channel_after_poll()
2948 channel_output_poll_input_open(struct ssh *ssh, Channel *c) in channel_output_poll_input_open() argument
2968 chan_ibuf_empty(ssh, c); in channel_output_poll_input_open()
2990 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || in channel_output_poll_input_open()
2991 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_output_poll_input_open()
2992 (r = sshpkt_put_string(ssh, pkt, plen)) != 0 || in channel_output_poll_input_open()
2993 (r = sshpkt_send(ssh)) != 0) in channel_output_poll_input_open()
3006 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || in channel_output_poll_input_open()
3007 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_output_poll_input_open()
3008 (r = sshpkt_put_string(ssh, sshbuf_ptr(c->input), len)) != 0 || in channel_output_poll_input_open()
3009 (r = sshpkt_send(ssh)) != 0) in channel_output_poll_input_open()
3022 channel_output_poll_extended_read(struct ssh *ssh, Channel *c) in channel_output_poll_extended_read() argument
3040 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA)) != 0 || in channel_output_poll_extended_read()
3041 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in channel_output_poll_extended_read()
3042 (r = sshpkt_put_u32(ssh, SSH2_EXTENDED_DATA_STDERR)) != 0 || in channel_output_poll_extended_read()
3043 (r = sshpkt_put_string(ssh, sshbuf_ptr(c->extended), len)) != 0 || in channel_output_poll_extended_read()
3044 (r = sshpkt_send(ssh)) != 0) in channel_output_poll_extended_read()
3058 channel_output_poll(struct ssh *ssh) in channel_output_poll() argument
3060 struct ssh_channels *sc = ssh->chanctxt; in channel_output_poll()
3086 ret |= channel_output_poll_input_open(ssh, c); in channel_output_poll()
3090 ret |= channel_output_poll_extended_read(ssh, c); in channel_output_poll()
3136 channel_proxy_downstream(struct ssh *ssh, Channel *downstream) in channel_proxy_downstream() argument
3177 c = channel_new(ssh, "mux-proxy", SSH_CHANNEL_MUX_PROXY, in channel_proxy_downstream()
3185 channel_free(ssh, c); in channel_proxy_downstream()
3204 c = channel_new(ssh, "mux-proxy", SSH_CHANNEL_MUX_PROXY, in channel_proxy_downstream()
3214 channel_free(ssh, c); in channel_proxy_downstream()
3243 permission_set_add(ssh, FORWARD_USER, FORWARD_LOCAL, "<mux>", in channel_proxy_downstream()
3250 if ((c = channel_by_remote_id(ssh, remote_id)) != NULL) { in channel_proxy_downstream()
3252 channel_free(ssh, c); in channel_proxy_downstream()
3259 if ((r = sshpkt_start(ssh, type)) != 0 || in channel_proxy_downstream()
3260 (r = sshpkt_putb(ssh, modified)) != 0 || in channel_proxy_downstream()
3261 (r = sshpkt_send(ssh)) != 0) { in channel_proxy_downstream()
3266 if ((r = sshpkt_start(ssh, type)) != 0 || in channel_proxy_downstream()
3267 (r = sshpkt_put(ssh, cp, have)) != 0 || in channel_proxy_downstream()
3268 (r = sshpkt_send(ssh)) != 0) { in channel_proxy_downstream()
3289 channel_proxy_upstream(Channel *c, int type, u_int32_t seq, struct ssh *ssh) in channel_proxy_upstream() argument
3328 cp = sshpkt_ptr(ssh, &len); in channel_proxy_upstream()
3357 channel_free(ssh, c); in channel_proxy_upstream()
3370 channel_parse_id(struct ssh *ssh, const char *where, const char *what) in channel_parse_id() argument
3375 if ((r = sshpkt_get_u32(ssh, &id)) != 0) { in channel_parse_id()
3377 ssh_packet_disconnect(ssh, "Invalid %s message", what); in channel_parse_id()
3381 ssh_packet_disconnect(ssh, "Invalid %s channel id", what); in channel_parse_id()
3388 channel_from_packet_id(struct ssh *ssh, const char *where, const char *what) in channel_from_packet_id() argument
3390 int id = channel_parse_id(ssh, where, what); in channel_from_packet_id()
3393 if ((c = channel_lookup(ssh, id)) == NULL) { in channel_from_packet_id()
3394 ssh_packet_disconnect(ssh, in channel_from_packet_id()
3401 channel_input_data(int type, u_int32_t seq, struct ssh *ssh) in channel_input_data() argument
3405 Channel *c = channel_from_packet_id(ssh, __func__, "data"); in channel_input_data()
3408 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_data()
3419 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 || in channel_input_data()
3420 (r = sshpkt_get_end(ssh)) != 0) in channel_input_data()
3451 ssh_packet_disconnect(ssh, "channel %d: peer ignored " in channel_input_data()
3469 channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) in channel_input_extended_data() argument
3474 Channel *c = channel_from_packet_id(ssh, __func__, "extended data"); in channel_input_extended_data()
3477 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_extended_data()
3484 if (ssh->compat & SSH_BUG_EXTEOF) in channel_input_extended_data()
3488 ssh_packet_disconnect(ssh, "Received extended_data " in channel_input_extended_data()
3492 if ((r = sshpkt_get_u32(ssh, &tcode)) != 0) { in channel_input_extended_data()
3494 ssh_packet_disconnect(ssh, "Invalid extended_data message"); in channel_input_extended_data()
3502 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 || in channel_input_extended_data()
3503 (r = sshpkt_get_end(ssh)) != 0) { in channel_input_extended_data()
3505 ssh_packet_disconnect(ssh, "Invalid extended_data message"); in channel_input_extended_data()
3522 channel_input_ieof(int type, u_int32_t seq, struct ssh *ssh) in channel_input_ieof() argument
3524 Channel *c = channel_from_packet_id(ssh, __func__, "ieof"); in channel_input_ieof()
3527 if ((r = sshpkt_get_end(ssh)) != 0) { in channel_input_ieof()
3529 ssh_packet_disconnect(ssh, "Invalid ieof message"); in channel_input_ieof()
3532 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_ieof()
3534 chan_rcvd_ieof(ssh, c); in channel_input_ieof()
3541 chan_ibuf_empty(ssh, c); in channel_input_ieof()
3547 channel_input_oclose(int type, u_int32_t seq, struct ssh *ssh) in channel_input_oclose() argument
3549 Channel *c = channel_from_packet_id(ssh, __func__, "oclose"); in channel_input_oclose()
3552 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_oclose()
3554 if ((r = sshpkt_get_end(ssh)) != 0) { in channel_input_oclose()
3556 ssh_packet_disconnect(ssh, "Invalid oclose message"); in channel_input_oclose()
3558 chan_rcvd_oclose(ssh, c); in channel_input_oclose()
3563 channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh) in channel_input_open_confirmation() argument
3565 Channel *c = channel_from_packet_id(ssh, __func__, "open confirmation"); in channel_input_open_confirmation()
3569 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_open_confirmation()
3572 ssh_packet_disconnect(ssh, "Received open confirmation for " in channel_input_open_confirmation()
3578 if ((r = sshpkt_get_u32(ssh, &c->remote_id)) != 0 || in channel_input_open_confirmation()
3579 (r = sshpkt_get_u32(ssh, &remote_window)) != 0 || in channel_input_open_confirmation()
3580 (r = sshpkt_get_u32(ssh, &remote_maxpacket)) != 0 || in channel_input_open_confirmation()
3581 (r = sshpkt_get_end(ssh)) != 0) { in channel_input_open_confirmation()
3583 ssh_packet_disconnect(ssh, "Invalid open confirmation message"); in channel_input_open_confirmation()
3592 c->open_confirm(ssh, c->self, 1, c->open_confirm_ctx); in channel_input_open_confirmation()
3595 channel_set_used_time(ssh, c); in channel_input_open_confirmation()
3618 channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh) in channel_input_open_failure() argument
3620 Channel *c = channel_from_packet_id(ssh, __func__, "open failure"); in channel_input_open_failure()
3625 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_open_failure()
3628 ssh_packet_disconnect(ssh, "Received open failure for " in channel_input_open_failure()
3630 if ((r = sshpkt_get_u32(ssh, &reason)) != 0) { in channel_input_open_failure()
3632 ssh_packet_disconnect(ssh, "Invalid open failure message"); in channel_input_open_failure()
3635 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 || in channel_input_open_failure()
3636 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0 || in channel_input_open_failure()
3637 (r = sshpkt_get_end(ssh)) != 0) { in channel_input_open_failure()
3639 ssh_packet_disconnect(ssh, "Invalid open failure message"); in channel_input_open_failure()
3646 c->open_confirm(ssh, c->self, 0, c->open_confirm_ctx); in channel_input_open_failure()
3650 chan_mark_dead(ssh, c); in channel_input_open_failure()
3655 channel_input_window_adjust(int type, u_int32_t seq, struct ssh *ssh) in channel_input_window_adjust() argument
3657 int id = channel_parse_id(ssh, __func__, "window adjust"); in channel_input_window_adjust()
3663 if ((c = channel_lookup(ssh, id)) == NULL) { in channel_input_window_adjust()
3668 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_window_adjust()
3670 if ((r = sshpkt_get_u32(ssh, &adjust)) != 0 || in channel_input_window_adjust()
3671 (r = sshpkt_get_end(ssh)) != 0) { in channel_input_window_adjust()
3673 ssh_packet_disconnect(ssh, "Invalid window adjust message"); in channel_input_window_adjust()
3685 channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh) in channel_input_status_confirm() argument
3687 int id = channel_parse_id(ssh, __func__, "status confirm"); in channel_input_status_confirm()
3692 ssh_packet_set_alive_timeouts(ssh, 0); in channel_input_status_confirm()
3696 if ((c = channel_lookup(ssh, id)) == NULL) { in channel_input_status_confirm()
3700 if (channel_proxy_upstream(c, type, seq, ssh)) in channel_input_status_confirm()
3702 if (sshpkt_get_end(ssh) != 0) in channel_input_status_confirm()
3703 ssh_packet_disconnect(ssh, "Invalid status confirm message"); in channel_input_status_confirm()
3706 cc->cb(ssh, type, c, cc->ctx); in channel_input_status_confirm()
3715 channel_set_af(struct ssh *ssh, int af) in channel_set_af() argument
3717 ssh->chanctxt->IPv4or6 = af; in channel_set_af()
3737 channel_fwd_bind_addr(struct ssh *ssh, const char *listen_addr, int *wildcardp, in channel_fwd_bind_addr() argument
3748 if (((ssh->compat & SSH_OLD_FORWARD_ADDR) && in channel_fwd_bind_addr()
3760 ssh_packet_send_debug(ssh, in channel_fwd_bind_addr()
3791 channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, in channel_setup_fwd_listener_tcpip() argument
3820 addr = channel_fwd_bind_addr(ssh, fwd->listen_host, &wildcard, in channel_setup_fwd_listener_tcpip()
3830 hints.ai_family = ssh->chanctxt->IPv4or6; in channel_setup_fwd_listener_tcpip()
3837 ssh_packet_disconnect(ssh, "getaddrinfo: fatal error: %s", in channel_setup_fwd_listener_tcpip()
3929 c = channel_new(ssh, "port-listener", type, sock, sock, -1, in channel_setup_fwd_listener_tcpip()
3936 !(ssh->compat & SSH_BUG_DYNAMIC_RPORT)) in channel_setup_fwd_listener_tcpip()
3949 channel_setup_fwd_listener_streamlocal(struct ssh *ssh, int type, in channel_setup_fwd_listener_streamlocal() argument
4012 c = channel_new(ssh, "unix-listener", type, sock, sock, -1, in channel_setup_fwd_listener_streamlocal()
4023 channel_cancel_rport_listener_tcpip(struct ssh *ssh, in channel_cancel_rport_listener_tcpip() argument
4029 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_cancel_rport_listener_tcpip()
4030 Channel *c = ssh->chanctxt->channels[i]; in channel_cancel_rport_listener_tcpip()
4035 channel_free(ssh, c); in channel_cancel_rport_listener_tcpip()
4044 channel_cancel_rport_listener_streamlocal(struct ssh *ssh, const char *path) in channel_cancel_rport_listener_streamlocal() argument
4049 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_cancel_rport_listener_streamlocal()
4050 Channel *c = ssh->chanctxt->channels[i]; in channel_cancel_rport_listener_streamlocal()
4057 channel_free(ssh, c); in channel_cancel_rport_listener_streamlocal()
4066 channel_cancel_rport_listener(struct ssh *ssh, struct Forward *fwd) in channel_cancel_rport_listener() argument
4069 return channel_cancel_rport_listener_streamlocal(ssh, in channel_cancel_rport_listener()
4072 return channel_cancel_rport_listener_tcpip(ssh, in channel_cancel_rport_listener()
4078 channel_cancel_lport_listener_tcpip(struct ssh *ssh, in channel_cancel_lport_listener_tcpip() argument
4084 const char *addr = channel_fwd_bind_addr(ssh, lhost, NULL, 1, fwd_opts); in channel_cancel_lport_listener_tcpip()
4086 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_cancel_lport_listener_tcpip()
4087 Channel *c = ssh->chanctxt->channels[i]; in channel_cancel_lport_listener_tcpip()
4105 channel_free(ssh, c); in channel_cancel_lport_listener_tcpip()
4114 channel_cancel_lport_listener_streamlocal(struct ssh *ssh, const char *path) in channel_cancel_lport_listener_streamlocal() argument
4124 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { in channel_cancel_lport_listener_streamlocal()
4125 Channel *c = ssh->chanctxt->channels[i]; in channel_cancel_lport_listener_streamlocal()
4132 channel_free(ssh, c); in channel_cancel_lport_listener_streamlocal()
4141 channel_cancel_lport_listener(struct ssh *ssh, in channel_cancel_lport_listener() argument
4145 return channel_cancel_lport_listener_streamlocal(ssh, in channel_cancel_lport_listener()
4148 return channel_cancel_lport_listener_tcpip(ssh, in channel_cancel_lport_listener()
4155 channel_setup_local_fwd_listener(struct ssh *ssh, in channel_setup_local_fwd_listener() argument
4159 return channel_setup_fwd_listener_streamlocal(ssh, in channel_setup_local_fwd_listener()
4162 return channel_setup_fwd_listener_tcpip(ssh, in channel_setup_local_fwd_listener()
4196 check_rfwd_permission(struct ssh *ssh, struct Forward *fwd) in check_rfwd_permission() argument
4198 struct ssh_channels *sc = ssh->chanctxt; in check_rfwd_permission()
4232 channel_setup_remote_fwd_listener(struct ssh *ssh, struct Forward *fwd, in channel_setup_remote_fwd_listener() argument
4235 if (!check_rfwd_permission(ssh, fwd)) { in channel_setup_remote_fwd_listener()
4236 ssh_packet_send_debug(ssh, "port forwarding refused"); in channel_setup_remote_fwd_listener()
4242 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), in channel_setup_remote_fwd_listener()
4248 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), in channel_setup_remote_fwd_listener()
4253 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); in channel_setup_remote_fwd_listener()
4257 return channel_setup_fwd_listener_streamlocal(ssh, in channel_setup_remote_fwd_listener()
4260 return channel_setup_fwd_listener_tcpip(ssh, in channel_setup_remote_fwd_listener()
4288 channel_request_remote_forwarding(struct ssh *ssh, struct Forward *fwd) in channel_request_remote_forwarding() argument
4296 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in channel_request_remote_forwarding()
4297 (r = sshpkt_put_cstring(ssh, in channel_request_remote_forwarding()
4299 (r = sshpkt_put_u8(ssh, 1)) != 0 || /* want reply */ in channel_request_remote_forwarding()
4300 (r = sshpkt_put_cstring(ssh, fwd->listen_path)) != 0 || in channel_request_remote_forwarding()
4301 (r = sshpkt_send(ssh)) != 0 || in channel_request_remote_forwarding()
4302 (r = ssh_packet_write_wait(ssh)) != 0) in channel_request_remote_forwarding()
4305 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in channel_request_remote_forwarding()
4306 (r = sshpkt_put_cstring(ssh, "tcpip-forward")) != 0 || in channel_request_remote_forwarding()
4307 (r = sshpkt_put_u8(ssh, 1)) != 0 || /* want reply */ in channel_request_remote_forwarding()
4308 (r = sshpkt_put_cstring(ssh, in channel_request_remote_forwarding()
4310 (r = sshpkt_put_u32(ssh, fwd->listen_port)) != 0 || in channel_request_remote_forwarding()
4311 (r = sshpkt_send(ssh)) != 0 || in channel_request_remote_forwarding()
4312 (r = ssh_packet_write_wait(ssh)) != 0) in channel_request_remote_forwarding()
4335 idx = permission_set_add(ssh, FORWARD_USER, FORWARD_LOCAL, in channel_request_remote_forwarding()
4404 channel_request_rforward_cancel_tcpip(struct ssh *ssh, in channel_request_rforward_cancel_tcpip() argument
4407 struct ssh_channels *sc = ssh->chanctxt; in channel_request_rforward_cancel_tcpip()
4423 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in channel_request_rforward_cancel_tcpip()
4424 (r = sshpkt_put_cstring(ssh, "cancel-tcpip-forward")) != 0 || in channel_request_rforward_cancel_tcpip()
4425 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* want reply */ in channel_request_rforward_cancel_tcpip()
4426 (r = sshpkt_put_cstring(ssh, channel_rfwd_bind_host(host))) != 0 || in channel_request_rforward_cancel_tcpip()
4427 (r = sshpkt_put_u32(ssh, port)) != 0 || in channel_request_rforward_cancel_tcpip()
4428 (r = sshpkt_send(ssh)) != 0) in channel_request_rforward_cancel_tcpip()
4441 channel_request_rforward_cancel_streamlocal(struct ssh *ssh, const char *path) in channel_request_rforward_cancel_streamlocal() argument
4443 struct ssh_channels *sc = ssh->chanctxt; in channel_request_rforward_cancel_streamlocal()
4459 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || in channel_request_rforward_cancel_streamlocal()
4460 (r = sshpkt_put_cstring(ssh, in channel_request_rforward_cancel_streamlocal()
4462 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* want reply */ in channel_request_rforward_cancel_streamlocal()
4463 (r = sshpkt_put_cstring(ssh, path)) != 0 || in channel_request_rforward_cancel_streamlocal()
4464 (r = sshpkt_send(ssh)) != 0) in channel_request_rforward_cancel_streamlocal()
4476 channel_request_rforward_cancel(struct ssh *ssh, struct Forward *fwd) in channel_request_rforward_cancel() argument
4479 return channel_request_rforward_cancel_streamlocal(ssh, in channel_request_rforward_cancel()
4482 return channel_request_rforward_cancel_tcpip(ssh, in channel_request_rforward_cancel()
4494 channel_permit_all(struct ssh *ssh, int where) in channel_permit_all() argument
4496 struct permission_set *pset = permission_set_get(ssh, where); in channel_permit_all()
4506 channel_add_permission(struct ssh *ssh, int who, int where, in channel_add_permission() argument
4510 struct permission_set *pset = permission_set_get(ssh, where); in channel_add_permission()
4518 permission_set_add(ssh, who, where, in channel_add_permission()
4528 channel_disable_admin(struct ssh *ssh, int where) in channel_disable_admin() argument
4530 channel_clear_permission(ssh, FORWARD_ADM, where); in channel_disable_admin()
4531 permission_set_add(ssh, FORWARD_ADM, where, in channel_disable_admin()
4539 channel_clear_permission(struct ssh *ssh, int who, int where) in channel_clear_permission() argument
4544 permission_set_get_array(ssh, who, where, &permp, &npermp); in channel_clear_permission()
4555 channel_update_permission(struct ssh *ssh, int idx, int newport) in channel_update_permission() argument
4557 struct permission_set *pset = &ssh->chanctxt->local_perms; in channel_update_permission()
4573 (ssh->compat & SSH_BUG_DYNAMIC_RPORT) ? 0 : newport; in channel_update_permission()
4655 connect_to_helper(struct ssh *ssh, const char *name, int port, int socktype, in connect_to_helper() argument
4691 hints.ai_family = ssh->chanctxt->IPv4or6; in connect_to_helper()
4721 connect_to(struct ssh *ssh, const char *host, int port, in connect_to() argument
4729 sock = connect_to_helper(ssh, host, port, SOCK_STREAM, ctype, rname, in connect_to()
4735 c = channel_new(ssh, ctype, SSH_CHANNEL_CONNECTING, sock, sock, -1, in connect_to()
4749 channel_connect_by_listen_address(struct ssh *ssh, const char *listen_host, in channel_connect_by_listen_address() argument
4752 struct ssh_channels *sc = ssh->chanctxt; in channel_connect_by_listen_address()
4764 return rdynamic_connect_prepare(ssh, in channel_connect_by_listen_address()
4766 return connect_to(ssh, in channel_connect_by_listen_address()
4777 channel_connect_by_listen_path(struct ssh *ssh, const char *path, in channel_connect_by_listen_path() argument
4780 struct ssh_channels *sc = ssh->chanctxt; in channel_connect_by_listen_path()
4788 return connect_to(ssh, in channel_connect_by_listen_path()
4800 channel_connect_to_port(struct ssh *ssh, const char *host, u_short port, in channel_connect_to_port() argument
4803 struct ssh_channels *sc = ssh->chanctxt; in channel_connect_to_port()
4836 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), host, port); in channel_connect_to_port()
4843 sock = connect_to_helper(ssh, host, port, SOCK_STREAM, ctype, rname, in channel_connect_to_port()
4850 c = channel_new(ssh, ctype, SSH_CHANNEL_CONNECTING, sock, sock, -1, in channel_connect_to_port()
4861 channel_connect_to_path(struct ssh *ssh, const char *path, in channel_connect_to_path() argument
4864 struct ssh_channels *sc = ssh->chanctxt; in channel_connect_to_path()
4896 return connect_to(ssh, path, PORT_STREAMLOCAL, ctype, rname); in channel_connect_to_path()
4900 channel_send_window_changes(struct ssh *ssh) in channel_send_window_changes() argument
4902 struct ssh_channels *sc = ssh->chanctxt; in channel_send_window_changes()
4913 channel_request_start(ssh, i, "window-change", 0); in channel_send_window_changes()
4914 if ((r = sshpkt_put_u32(ssh, (u_int)ws.ws_col)) != 0 || in channel_send_window_changes()
4915 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_row)) != 0 || in channel_send_window_changes()
4916 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_xpixel)) != 0 || in channel_send_window_changes()
4917 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_ypixel)) != 0 || in channel_send_window_changes()
4918 (r = sshpkt_send(ssh)) != 0) in channel_send_window_changes()
4925 rdynamic_connect_prepare(struct ssh *ssh, char *ctype, char *rname) in rdynamic_connect_prepare() argument
4930 c = channel_new(ssh, ctype, SSH_CHANNEL_RDYNAMIC_OPEN, -1, -1, -1, in rdynamic_connect_prepare()
4939 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION)) != 0 || in rdynamic_connect_prepare()
4940 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || in rdynamic_connect_prepare()
4941 (r = sshpkt_put_u32(ssh, c->self)) != 0 || in rdynamic_connect_prepare()
4942 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || in rdynamic_connect_prepare()
4943 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0) in rdynamic_connect_prepare()
4950 rdynamic_connect_finish(struct ssh *ssh, Channel *c) in rdynamic_connect_finish() argument
4952 struct ssh_channels *sc = ssh->chanctxt; in rdynamic_connect_finish()
4975 sock = connect_to_helper(ssh, c->path, c->host_port, SOCK_STREAM, NULL, in rdynamic_connect_finish()
4983 channel_register_fds(ssh, c, sock, sock, -1, 0, 1, 0); in rdynamic_connect_finish()
4996 x11_create_display_inet(struct ssh *ssh, int x11_display_offset, in x11_create_display_inet() argument
5015 hints.ai_family = ssh->chanctxt->IPv4or6; in x11_create_display_inet()
5084 nc = channel_new(ssh, "x11-listener", in x11_create_display_inet()
5155 x11_connect_display(struct ssh *ssh) in x11_connect_display() argument
5237 hints.ai_family = ssh->chanctxt->IPv4or6; in x11_connect_display()
5278 x11_request_forwarding_with_spoofing(struct ssh *ssh, int client_session_id, in x11_request_forwarding_with_spoofing() argument
5281 struct ssh_channels *sc = ssh->chanctxt; in x11_request_forwarding_with_spoofing()
5329 channel_request_start(ssh, client_session_id, "x11-req", want_reply); in x11_request_forwarding_with_spoofing()
5330 if ((r = sshpkt_put_u8(ssh, 0)) != 0 || /* bool: single connection */ in x11_request_forwarding_with_spoofing()
5331 (r = sshpkt_put_cstring(ssh, proto)) != 0 || in x11_request_forwarding_with_spoofing()
5332 (r = sshpkt_put_cstring(ssh, new_data)) != 0 || in x11_request_forwarding_with_spoofing()
5333 (r = sshpkt_put_u32(ssh, screen_number)) != 0 || in x11_request_forwarding_with_spoofing()
5334 (r = sshpkt_send(ssh)) != 0 || in x11_request_forwarding_with_spoofing()
5335 (r = ssh_packet_write_wait(ssh)) != 0) in x11_request_forwarding_with_spoofing()