summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--radsecproxy.c26
-rw-r--r--radsecproxy.h1
-rw-r--r--util.c27
-rw-r--r--util.h1
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);