|
Lines 110-119
typedef struct {
Link Here
|
| 110 |
} ForwardPermission; |
110 |
} ForwardPermission; |
| 111 |
|
111 |
|
| 112 |
/* List of all permitted host/port pairs to connect by the user. */ |
112 |
/* List of all permitted host/port pairs to connect by the user. */ |
| 113 |
static ForwardPermission permitted_opens[SSH_MAX_FORWARDS_PER_DIRECTION]; |
113 |
static ForwardPermission *permitted_opens = NULL; |
| 114 |
|
114 |
|
| 115 |
/* List of all permitted host/port pairs to connect by the admin. */ |
115 |
/* List of all permitted host/port pairs to connect by the admin. */ |
| 116 |
static ForwardPermission permitted_adm_opens[SSH_MAX_FORWARDS_PER_DIRECTION]; |
116 |
static ForwardPermission *permitted_adm_opens = NULL; |
| 117 |
|
117 |
|
| 118 |
/* Number of permitted host/port pairs in the array permitted by the user. */ |
118 |
/* Number of permitted host/port pairs in the array permitted by the user. */ |
| 119 |
static int num_permitted_opens = 0; |
119 |
static int num_permitted_opens = 0; |
|
Lines 2810-2819
channel_request_remote_forwarding(const
Link Here
|
| 2810 |
{ |
2810 |
{ |
| 2811 |
int type, success = 0; |
2811 |
int type, success = 0; |
| 2812 |
|
2812 |
|
| 2813 |
/* Record locally that connection to this host/port is permitted. */ |
|
|
| 2814 |
if (num_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
| 2815 |
fatal("channel_request_remote_forwarding: too many forwards"); |
| 2816 |
|
| 2817 |
/* Send the forward request to the remote side. */ |
2813 |
/* Send the forward request to the remote side. */ |
| 2818 |
if (compat20) { |
2814 |
if (compat20) { |
| 2819 |
const char *address_to_bind; |
2815 |
const char *address_to_bind; |
|
Lines 2863-2868
channel_request_remote_forwarding(const
Link Here
|
| 2863 |
} |
2859 |
} |
| 2864 |
} |
2860 |
} |
| 2865 |
if (success) { |
2861 |
if (success) { |
|
|
2862 |
/* Record that connection to this host/port is permitted. */ |
| 2863 |
permitted_opens = xrealloc(permitted_opens, |
| 2864 |
num_permitted_opens + 1, sizeof(*permitted_opens)); |
| 2866 |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host_to_connect); |
2865 |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host_to_connect); |
| 2867 |
permitted_opens[num_permitted_opens].port_to_connect = port_to_connect; |
2866 |
permitted_opens[num_permitted_opens].port_to_connect = port_to_connect; |
| 2868 |
permitted_opens[num_permitted_opens].listen_port = listen_port; |
2867 |
permitted_opens[num_permitted_opens].listen_port = listen_port; |
|
Lines 2958-2967
channel_permit_all_opens(void)
Link Here
|
| 2958 |
void |
2957 |
void |
| 2959 |
channel_add_permitted_opens(char *host, int port) |
2958 |
channel_add_permitted_opens(char *host, int port) |
| 2960 |
{ |
2959 |
{ |
| 2961 |
if (num_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
|
|
| 2962 |
fatal("channel_add_permitted_opens: too many forwards"); |
| 2963 |
debug("allow port forwarding to host %s port %d", host, port); |
2960 |
debug("allow port forwarding to host %s port %d", host, port); |
| 2964 |
|
2961 |
|
|
|
2962 |
permitted_opens = xrealloc(permitted_opens, |
| 2963 |
num_permitted_opens + 1, sizeof(*permitted_opens)); |
| 2965 |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |
2964 |
permitted_opens[num_permitted_opens].host_to_connect = xstrdup(host); |
| 2966 |
permitted_opens[num_permitted_opens].port_to_connect = port; |
2965 |
permitted_opens[num_permitted_opens].port_to_connect = port; |
| 2967 |
num_permitted_opens++; |
2966 |
num_permitted_opens++; |
|
Lines 2972-2981
channel_add_permitted_opens(char *host,
Link Here
|
| 2972 |
int |
2971 |
int |
| 2973 |
channel_add_adm_permitted_opens(char *host, int port) |
2972 |
channel_add_adm_permitted_opens(char *host, int port) |
| 2974 |
{ |
2973 |
{ |
| 2975 |
if (num_adm_permitted_opens >= SSH_MAX_FORWARDS_PER_DIRECTION) |
|
|
| 2976 |
fatal("channel_add_adm_permitted_opens: too many forwards"); |
| 2977 |
debug("config allows port forwarding to host %s port %d", host, port); |
2974 |
debug("config allows port forwarding to host %s port %d", host, port); |
| 2978 |
|
2975 |
|
|
|
2976 |
permitted_adm_opens = xrealloc(permitted_adm_opens, |
| 2977 |
num_adm_permitted_opens + 1, sizeof(*permitted_adm_opens)); |
| 2979 |
permitted_adm_opens[num_adm_permitted_opens].host_to_connect |
2978 |
permitted_adm_opens[num_adm_permitted_opens].host_to_connect |
| 2980 |
= xstrdup(host); |
2979 |
= xstrdup(host); |
| 2981 |
permitted_adm_opens[num_adm_permitted_opens].port_to_connect = port; |
2980 |
permitted_adm_opens[num_adm_permitted_opens].port_to_connect = port; |
|
Lines 2990-2995
channel_clear_permitted_opens(void)
Link Here
|
| 2990 |
for (i = 0; i < num_permitted_opens; i++) |
2989 |
for (i = 0; i < num_permitted_opens; i++) |
| 2991 |
if (permitted_opens[i].host_to_connect != NULL) |
2990 |
if (permitted_opens[i].host_to_connect != NULL) |
| 2992 |
xfree(permitted_opens[i].host_to_connect); |
2991 |
xfree(permitted_opens[i].host_to_connect); |
|
|
2992 |
if (num_permitted_opens > 0) { |
| 2993 |
xfree(permitted_opens); |
| 2994 |
permitted_opens = NULL; |
| 2995 |
} |
| 2993 |
num_permitted_opens = 0; |
2996 |
num_permitted_opens = 0; |
| 2994 |
} |
2997 |
} |
| 2995 |
|
2998 |
|
|
Lines 3001-3006
channel_clear_adm_permitted_opens(void)
Link Here
|
| 3001 |
for (i = 0; i < num_adm_permitted_opens; i++) |
3004 |
for (i = 0; i < num_adm_permitted_opens; i++) |
| 3002 |
if (permitted_adm_opens[i].host_to_connect != NULL) |
3005 |
if (permitted_adm_opens[i].host_to_connect != NULL) |
| 3003 |
xfree(permitted_adm_opens[i].host_to_connect); |
3006 |
xfree(permitted_adm_opens[i].host_to_connect); |
|
|
3007 |
if (num_adm_permitted_opens > 0) { |
| 3008 |
xfree(permitted_adm_opens); |
| 3009 |
permitted_adm_opens = NULL; |
| 3010 |
} |
| 3004 |
num_adm_permitted_opens = 0; |
3011 |
num_adm_permitted_opens = 0; |
| 3005 |
} |
3012 |
} |
| 3006 |
|
3013 |
|