View | Details | Raw Unified | Return to bug 1295 | Differences between
and this patch

Collapse All | Expand All

(-)channels.c (+22 lines)
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;

Return to bug 1295