Skip to content

Commit

Permalink
Stop trying to set IPV6_V6ONLY on non-ipv6 sockets.
Browse files Browse the repository at this point in the history
See RADSECPROXY-79 for rationale.
  • Loading branch information
Linus Nordberg committed Nov 20, 2017
1 parent 43fbf47 commit 1e8f4c7
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 11 deletions.
6 changes: 3 additions & 3 deletions dtls.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Copyright (c) 2007-2009, UNINETT AS
* Copyright (c) 2012,2016 NORDUnet A/S */
* Copyright (c) 2012,2016-2017, NORDUnet A/S */
/* See LICENSE for licensing information. */

#include <signal.h>
Expand Down Expand Up @@ -670,15 +670,15 @@ void addserverextradtls(struct clsrvconf *conf) {
switch (((struct hostportres *)list_first(conf->hostports)->data)->addrinfo->ai_family) {
case AF_INET:
if (client4_sock < 0) {
client4_sock = bindtoaddr(srcres, AF_INET, 0, 0);
client4_sock = bindtoaddr(srcres, AF_INET, 0);
if (client4_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client4_sock;
break;
case AF_INET6:
if (client6_sock < 0) {
client6_sock = bindtoaddr(srcres, AF_INET6, 0, 1);
client6_sock = bindtoaddr(srcres, AF_INET6, 0);
if (client6_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
Expand Down
6 changes: 3 additions & 3 deletions udp.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Copyright (c) 2007-2009, UNINETT AS
* Copyright (c) 2012, NORDUnet A/S */
* Copyright (c) 2012-2013, 2017, NORDUnet A/S */
/* See LICENSE for licensing information. */

#include <signal.h>
Expand Down Expand Up @@ -320,15 +320,15 @@ void addserverextraudp(struct clsrvconf *conf) {
switch (((struct hostportres *)list_first(conf->hostports)->data)->addrinfo->ai_family) {
case AF_INET:
if (client4_sock < 0) {
client4_sock = bindtoaddr(srcres, AF_INET, 0, 0);
client4_sock = bindtoaddr(srcres, AF_INET, 0);
if (client4_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client4_sock;
break;
case AF_INET6:
if (client6_sock < 0) {
client6_sock = bindtoaddr(srcres, AF_INET6, 0, 1);
client6_sock = bindtoaddr(srcres, AF_INET6, 0);
if (client6_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
Expand Down
6 changes: 3 additions & 3 deletions util.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ void disable_DF_bit(int socket, struct addrinfo *res) {
}
}

int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only) {
int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse) {
int s, on = 1;
struct addrinfo *res;

Expand All @@ -142,7 +142,7 @@ int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only) {
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
debugerrno(errno, DBG_WARN, "Failed to set SO_REUSEADDR");
#ifdef IPV6_V6ONLY
if (v6only)
if (family == AF_INET6)
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) == -1)
debugerrno(errno, DBG_WARN, "Failed to set IPV6_V6ONLY");
#endif
Expand Down Expand Up @@ -204,7 +204,7 @@ int connecttcp(struct addrinfo *addrinfo, struct addrinfo *src, uint16_t timeout
}

for (res = addrinfo; res; res = res->ai_next) {
s = bindtoaddr(src, res->ai_family, 1, 1);
s = bindtoaddr(src, res->ai_family, 1);
if (s < 0) {
debug(DBG_WARN, "connecttoserver: socket failed");
continue;
Expand Down
4 changes: 2 additions & 2 deletions util.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Copyright (c) 2007-2009, UNINETT AS
* Copyright (c) 2016, NORDUnet A/S */
* Copyright (c) 2016-2017, NORDUnet A/S */
/* See LICENSE for licensing information. */

#include <sys/socket.h>
Expand All @@ -20,7 +20,7 @@ void port_set(struct sockaddr *sa, uint16_t port);

void printfchars(char *prefixfmt, char *prefix, char *charfmt, uint8_t *chars, int len);
void disable_DF_bit(int socket, struct addrinfo *res);
int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only);
int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse);
int connecttcp(struct addrinfo *addrinfo, struct addrinfo *src, uint16_t timeout);


Expand Down

0 comments on commit 1e8f4c7

Please sign in to comment.