From fbb9d82bb98b950898eaea727e3f0ca584d1f587 Mon Sep 17 00:00:00 2001 From: venaas Date: Thu, 21 Aug 2008 12:18:01 +0000 Subject: moved bindtoaddr back to radsecproxy.c git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@355 e88ac4ed-0b26-0410-9574-a7f39faa03bf --- radsecproxy.c | 26 ++++++++++++++++++++++++++ radsecproxy.h | 1 + util.c | 27 --------------------------- util.h | 1 - 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/radsecproxy.c b/radsecproxy.c index 853b594..c97e7ed 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -383,6 +383,32 @@ void freeclsrvres(struct clsrvconf *res) { free(res); } +int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only) { + int s, on = 1; + struct addrinfo *res; + + for (res = addrinfo; res; res = res->ai_next) { + if (family != AF_UNSPEC && family != res->ai_family) + continue; + s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (s < 0) { + debug(DBG_WARN, "bindtoaddr: socket failed"); + continue; + } + if (reuse) + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); +#ifdef IPV6_V6ONLY + if (v6only) + setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)); +#endif + if (!bind(s, res->ai_addr, res->ai_addrlen)) + return s; + debug(DBG_WARN, "bindtoaddr: bind failed"); + close(s); + } + return -1; +} + int connecttcp(struct addrinfo *addrinfo, struct addrinfo *src) { int s; struct addrinfo *res; diff --git a/radsecproxy.h b/radsecproxy.h index ee85c79..2546470 100644 --- a/radsecproxy.h +++ b/radsecproxy.h @@ -213,3 +213,4 @@ X509 *verifytlscert(SSL *ssl); int verifyconfcert(X509 *cert, struct clsrvconf *conf); int replyh(struct server *server, unsigned char *buf); int connecttcp(struct addrinfo *addrinfo, struct addrinfo *src); +int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only); diff --git a/util.c b/util.c index f30f0fb..d551cf0 100644 --- a/util.c +++ b/util.c @@ -98,33 +98,6 @@ char *addr2string(struct sockaddr *addr, socklen_t len) { return addr_buf[i]; } -int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only) { - int s, on = 1; - struct addrinfo *res; - - for (res = addrinfo; res; res = res->ai_next) { - if (family != AF_UNSPEC && family != res->ai_family) - continue; - s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (s < 0) { - debug(DBG_WARN, "bindtoaddr: socket failed"); - continue; - } - if (reuse) - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); - #ifdef IPV6_V6ONLY - if (v6only) - setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)); -#endif - - if (!bind(s, res->ai_addr, res->ai_addrlen)) - return s; - debug(DBG_WARN, "bindtoaddr: bind failed"); - close(s); - } - return -1; -} - int connectport(int type, char *host, char *port) { struct addrinfo hints, *res0, *res; int s = -1; diff --git a/util.h b/util.h index ca0b425..c151b90 100644 --- a/util.h +++ b/util.h @@ -5,4 +5,3 @@ char *stringcopy(const char *s, int len); char *addr2string(struct sockaddr *addr, socklen_t len); void printfchars(char *prefixfmt, char *prefix, char *charfmt, char *chars, int len); int connectport(int type, char *host, char *port); -int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only); -- cgit v1.2.3