- (djm) [channels.c misc.c misc.h sshd.c] add missing setsockopt() to
set IPV6_V6ONLY for local forwarding with GatwayPorts=yes. Unify setting IPV6_V6ONLY behind a new function misc.c:sock_set_v6only() report and fix from jan.kratochvil AT redhat.com
This commit is contained in:
parent
df6578bb4d
commit
04ee0f8f12
|
@ -1,3 +1,9 @@
|
||||||
|
20091107
|
||||||
|
- (djm) [channels.c misc.c misc.h sshd.c] add missing setsockopt() to
|
||||||
|
set IPV6_V6ONLY for local forwarding with GatwayPorts=yes. Unify
|
||||||
|
setting IPV6_V6ONLY behind a new function misc.c:sock_set_v6only()
|
||||||
|
report and fix from jan.kratochvil AT redhat.com
|
||||||
|
|
||||||
20091107
|
20091107
|
||||||
- (dtucker) [authfile.c] Fall back to 3DES for the encryption of private
|
- (dtucker) [authfile.c] Fall back to 3DES for the encryption of private
|
||||||
keys when built with OpenSSL versions that don't do AES.
|
keys when built with OpenSSL versions that don't do AES.
|
||||||
|
|
11
channels.c
11
channels.c
|
@ -2577,6 +2577,8 @@ channel_setup_fwd_listener(int type, const char *listen_addr,
|
||||||
}
|
}
|
||||||
|
|
||||||
channel_set_reuseaddr(sock);
|
channel_set_reuseaddr(sock);
|
||||||
|
if (ai->ai_family == AF_INET6)
|
||||||
|
sock_set_v6only(sock);
|
||||||
|
|
||||||
debug("Local forwarding listening on %s port %s.",
|
debug("Local forwarding listening on %s port %s.",
|
||||||
ntop, strport);
|
ntop, strport);
|
||||||
|
@ -3108,13 +3110,8 @@ x11_create_display_inet(int x11_display_offset, int x11_use_localhost,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef IPV6_V6ONLY
|
if (ai->ai_family == AF_INET6)
|
||||||
if (ai->ai_family == AF_INET6) {
|
sock_set_v6only(sock);
|
||||||
int on = 1;
|
|
||||||
if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) < 0)
|
|
||||||
error("setsockopt IPV6_V6ONLY: %.100s", strerror(errno));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (x11_use_localhost)
|
if (x11_use_localhost)
|
||||||
channel_set_reuseaddr(sock);
|
channel_set_reuseaddr(sock);
|
||||||
if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
|
if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
|
||||||
|
|
11
misc.c
11
misc.c
|
@ -849,3 +849,14 @@ ms_to_timeval(struct timeval *tv, int ms)
|
||||||
tv->tv_usec = (ms % 1000) * 1000;
|
tv->tv_usec = (ms % 1000) * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sock_set_v6only(int s)
|
||||||
|
{
|
||||||
|
#ifdef IPV6_V6ONLY
|
||||||
|
int on = 1;
|
||||||
|
|
||||||
|
debug3("%s: set socket %d IPV6_V6ONLY", __func__, s);
|
||||||
|
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) == -1)
|
||||||
|
error("setsockopt IPV6_V6ONLY: %s", strerror(errno));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
1
misc.h
1
misc.h
|
@ -35,6 +35,7 @@ char *tohex(const void *, size_t);
|
||||||
void sanitise_stdfd(void);
|
void sanitise_stdfd(void);
|
||||||
void ms_subtract_diff(struct timeval *, int *);
|
void ms_subtract_diff(struct timeval *, int *);
|
||||||
void ms_to_timeval(struct timeval *, int);
|
void ms_to_timeval(struct timeval *, int);
|
||||||
|
void sock_set_v6only(int);
|
||||||
|
|
||||||
struct passwd *pwcopy(struct passwd *);
|
struct passwd *pwcopy(struct passwd *);
|
||||||
const char *ssh_gai_strerror(int);
|
const char *ssh_gai_strerror(int);
|
||||||
|
|
10
sshd.c
10
sshd.c
|
@ -979,15 +979,9 @@ server_listen(void)
|
||||||
&on, sizeof(on)) == -1)
|
&on, sizeof(on)) == -1)
|
||||||
error("setsockopt SO_REUSEADDR: %s", strerror(errno));
|
error("setsockopt SO_REUSEADDR: %s", strerror(errno));
|
||||||
|
|
||||||
#ifdef IPV6_V6ONLY
|
|
||||||
/* Only communicate in IPv6 over AF_INET6 sockets. */
|
/* Only communicate in IPv6 over AF_INET6 sockets. */
|
||||||
if (ai->ai_family == AF_INET6) {
|
if (ai->ai_family == AF_INET6)
|
||||||
if (setsockopt(listen_sock, IPPROTO_IPV6, IPV6_V6ONLY,
|
sock_set_v6only(listen_sock);
|
||||||
&on, sizeof(on)) == -1)
|
|
||||||
error("setsockopt IPV6_V6ONLY: %s",
|
|
||||||
strerror(errno));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
debug("Bind to port %s on %s.", strport, ntop);
|
debug("Bind to port %s on %s.", strport, ntop);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue