version 1.252, 2006/07/10 12:08:08 |
version 1.253, 2006/07/11 18:50:47 |
|
|
* the secure channel to host:port from local side. |
* the secure channel to host:port from local side. |
*/ |
*/ |
|
|
void |
int |
channel_request_remote_forwarding(const char *listen_host, u_short listen_port, |
channel_request_remote_forwarding(const char *listen_host, u_short listen_port, |
const char *host_to_connect, u_short port_to_connect) |
const char *host_to_connect, u_short port_to_connect) |
{ |
{ |
|
|
success = 1; |
success = 1; |
break; |
break; |
case SSH_SMSG_FAILURE: |
case SSH_SMSG_FAILURE: |
logit("Warning: Server denied remote port forwarding."); |
|
break; |
break; |
default: |
default: |
/* Unknown packet */ |
/* Unknown packet */ |
|
|
permitted_opens[num_permitted_opens].listen_port = listen_port; |
permitted_opens[num_permitted_opens].listen_port = listen_port; |
num_permitted_opens++; |
num_permitted_opens++; |
} |
} |
|
return (success ? 0 : -1); |
} |
} |
|
|
/* |
/* |
|
|
/* |
/* |
* This is called after receiving CHANNEL_FORWARDING_REQUEST. This initates |
* This is called after receiving CHANNEL_FORWARDING_REQUEST. This initates |
* listening for the port, and sends back a success reply (or disconnect |
* listening for the port, and sends back a success reply (or disconnect |
* message if there was an error). This never returns if there was an error. |
* message if there was an error). |
*/ |
*/ |
void |
int |
channel_input_port_forward_request(int is_root, int gateway_ports) |
channel_input_port_forward_request(int is_root, int gateway_ports) |
{ |
{ |
u_short port, host_port; |
u_short port, host_port; |
|
int success = 0; |
char *hostname; |
char *hostname; |
|
|
/* Get arguments from the packet. */ |
/* Get arguments from the packet. */ |
|
|
packet_disconnect("Dynamic forwarding denied."); |
packet_disconnect("Dynamic forwarding denied."); |
|
|
/* Initiate forwarding */ |
/* Initiate forwarding */ |
channel_setup_local_fwd_listener(NULL, port, hostname, |
success = channel_setup_local_fwd_listener(NULL, port, hostname, |
host_port, gateway_ports); |
host_port, gateway_ports); |
|
|
/* Free the argument string. */ |
/* Free the argument string. */ |
xfree(hostname); |
xfree(hostname); |
|
|
|
return (success ? 0 : -1); |
} |
} |
|
|
/* |
/* |
|
|
channel_add_permitted_opens(char *host, int port) |
channel_add_permitted_opens(char *host, int port) |
{ |
{ |
if (num_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
if (num_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
fatal("channel_request_remote_forwarding: too many forwards"); |
fatal("channel_add_permitted_opens: too many forwards"); |
debug("allow port forwarding to host %s port %d", host, port); |
debug("allow port forwarding to host %s port %d", host, port); |
|
|
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |