version 1.304, 2010/05/14 23:29:23 |
version 1.305, 2010/06/25 07:14:45 |
|
|
} ForwardPermission; |
} ForwardPermission; |
|
|
/* List of all permitted host/port pairs to connect by the user. */ |
/* List of all permitted host/port pairs to connect by the user. */ |
static ForwardPermission permitted_opens[SSH_MAX_FORWARDS_PER_DIRECTION]; |
static ForwardPermission *permitted_opens = NULL; |
|
|
/* List of all permitted host/port pairs to connect by the admin. */ |
/* List of all permitted host/port pairs to connect by the admin. */ |
static ForwardPermission permitted_adm_opens[SSH_MAX_FORWARDS_PER_DIRECTION]; |
static ForwardPermission *permitted_adm_opens = NULL; |
|
|
/* Number of permitted host/port pairs in the array permitted by the user. */ |
/* Number of permitted host/port pairs in the array permitted by the user. */ |
static int num_permitted_opens = 0; |
static int num_permitted_opens = 0; |
|
|
{ |
{ |
int type, success = 0; |
int type, success = 0; |
|
|
/* Record locally that connection to this host/port is permitted. */ |
|
if (num_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
|
fatal("channel_request_remote_forwarding: too many forwards"); |
|
|
|
/* Send the forward request to the remote side. */ |
/* Send the forward request to the remote side. */ |
if (compat20) { |
if (compat20) { |
const char *address_to_bind; |
const char *address_to_bind; |
|
|
} |
} |
} |
} |
if (success) { |
if (success) { |
|
/* Record that connection to this host/port is permitted. */ |
|
permitted_opens = xrealloc(permitted_opens, |
|
num_permitted_opens + 1, sizeof(*permitted_opens)); |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host_to_connect); |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host_to_connect); |
permitted_opens[num_permitted_opens].port_to_connect = port_to_connect; |
permitted_opens[num_permitted_opens].port_to_connect = port_to_connect; |
permitted_opens[num_permitted_opens].listen_port = listen_port; |
permitted_opens[num_permitted_opens].listen_port = listen_port; |
|
|
void |
void |
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) |
|
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 = xrealloc(permitted_opens, |
|
num_permitted_opens + 1, sizeof(*permitted_opens)); |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |
permitted_opens[num_permitted_opens].port_to_connect = port; |
permitted_opens[num_permitted_opens].port_to_connect = port; |
num_permitted_opens++; |
num_permitted_opens++; |
|
|
int |
int |
channel_add_adm_permitted_opens(char *host, int port) |
channel_add_adm_permitted_opens(char *host, int port) |
{ |
{ |
if (num_adm_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
|
fatal("channel_add_adm_permitted_opens: too many forwards"); |
|
debug("config allows port forwarding to host %s port %d", host, port); |
debug("config allows port forwarding to host %s port %d", host, port); |
|
|
|
permitted_adm_opens = xrealloc(permitted_adm_opens, |
|
num_adm_permitted_opens + 1, sizeof(*permitted_adm_opens)); |
permitted_adm_opens[num_adm_permitted_opens].host_to_connect |
permitted_adm_opens[num_adm_permitted_opens].host_to_connect |
= xstrdup(host); |
= xstrdup(host); |
permitted_adm_opens[num_adm_permitted_opens].port_to_connect = port; |
permitted_adm_opens[num_adm_permitted_opens].port_to_connect = port; |
|
|
for (i = 0; i < num_permitted_opens; i++) |
for (i = 0; i < num_permitted_opens; i++) |
if (permitted_opens[i].host_to_connect != NULL) |
if (permitted_opens[i].host_to_connect != NULL) |
xfree(permitted_opens[i].host_to_connect); |
xfree(permitted_opens[i].host_to_connect); |
|
if (num_permitted_opens > 0) { |
|
xfree(permitted_opens); |
|
permitted_opens = NULL; |
|
} |
num_permitted_opens = 0; |
num_permitted_opens = 0; |
} |
} |
|
|
|
|
for (i = 0; i < num_adm_permitted_opens; i++) |
for (i = 0; i < num_adm_permitted_opens; i++) |
if (permitted_adm_opens[i].host_to_connect != NULL) |
if (permitted_adm_opens[i].host_to_connect != NULL) |
xfree(permitted_adm_opens[i].host_to_connect); |
xfree(permitted_adm_opens[i].host_to_connect); |
|
if (num_adm_permitted_opens > 0) { |
|
xfree(permitted_adm_opens); |
|
permitted_adm_opens = NULL; |
|
} |
num_adm_permitted_opens = 0; |
num_adm_permitted_opens = 0; |
} |
} |
|
|