|
Lines 1138-1143
channel_pre_dynamic(Channel *c, fd_set *
Link Here
|
| 1138 |
u_char *p; |
1138 |
u_char *p; |
| 1139 |
u_int have; |
1139 |
u_int have; |
| 1140 |
int ret; |
1140 |
int ret; |
|
|
1141 |
struct sockaddr_in orig_addr; |
| 1142 |
socklen_t orig_len; |
| 1143 |
struct sockaddr_in sock_addr; |
| 1144 |
socklen_t sock_len; |
| 1145 |
|
| 1146 |
#ifdef __linux__ |
| 1147 |
orig_len = sizeof(orig_addr); |
| 1148 |
sock_len = sizeof(sock_addr); |
| 1149 |
if(!getsockopt(c->sock, SOL_IP, /*SO_ORIGINAL_DST*/ 80, (struct sockaddr *) &orig_addr, &orig_len) |
| 1150 |
&& orig_addr.sin_addr.s_addr |
| 1151 |
&& !getsockname(c->sock, (struct sockaddr*)&sock_addr, &sock_len) |
| 1152 |
&& (orig_addr.sin_family != sock_addr.sin_family || orig_addr.sin_addr.s_addr != sock_addr.sin_addr.s_addr || orig_addr.sin_port != sock_addr.sin_port) |
| 1153 |
) |
| 1154 |
{ |
| 1155 |
c->host_port = ntohs(orig_addr.sin_port); |
| 1156 |
inet_ntop(orig_addr.sin_family, &orig_addr.sin_addr.s_addr, c->path, sizeof(c->path)); |
| 1157 |
c->delayed = 0; |
| 1158 |
c->type = SSH_CHANNEL_OPENING; |
| 1159 |
port_open_helper(c, "direct-tcpip"); |
| 1160 |
return; |
| 1161 |
} |
| 1162 |
#endif |
| 1141 |
|
1163 |
|
| 1142 |
have = buffer_len(&c->input); |
1164 |
have = buffer_len(&c->input); |
| 1143 |
c->delayed = 0; |
1165 |
c->delayed = 0; |