mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-24 00:29:58 -05:00
- Fix permission denied printed for auth zone probe random port nrs.
git-svn-id: file:///svn/unbound/trunk@4769 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
82e1e3959f
commit
5d298ed474
2 changed files with 36 additions and 26 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
3 July 2018: Wouter
|
3 July 2018: Wouter
|
||||||
- Better documentation for unblock-lan-zones and insecure-lan-zones
|
- Better documentation for unblock-lan-zones and insecure-lan-zones
|
||||||
config statements.
|
config statements.
|
||||||
|
- Fix permission denied printed for auth zone probe random port nrs.
|
||||||
|
|
||||||
2 July 2018: Wouter
|
2 July 2018: Wouter
|
||||||
- Fix checking for libhiredis printout in configure output.
|
- Fix checking for libhiredis printout in configure output.
|
||||||
|
|
|
||||||
|
|
@ -2192,8 +2192,16 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr,
|
||||||
{
|
{
|
||||||
struct sockaddr_storage* addr;
|
struct sockaddr_storage* addr;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
int i;
|
int i, try, pnum;
|
||||||
int try;
|
struct port_if* pif;
|
||||||
|
|
||||||
|
/* create fd */
|
||||||
|
for(try = 0; try<1000; try++) {
|
||||||
|
int port = 0;
|
||||||
|
int freebind = 0;
|
||||||
|
int noproto = 0;
|
||||||
|
int inuse = 0;
|
||||||
|
int fd = -1;
|
||||||
|
|
||||||
/* select interface */
|
/* select interface */
|
||||||
if(addr_is_ip6(to_addr, to_addrlen)) {
|
if(addr_is_ip6(to_addr, to_addrlen)) {
|
||||||
|
|
@ -2204,8 +2212,7 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
i = ub_random_max(outnet->rnd, outnet->num_ip6);
|
i = ub_random_max(outnet->rnd, outnet->num_ip6);
|
||||||
addr = &outnet->ip6_ifs[i].addr;
|
pif = &outnet->ip6_ifs[i];
|
||||||
addrlen = outnet->ip6_ifs[i].addrlen;
|
|
||||||
} else {
|
} else {
|
||||||
if(outnet->num_ip4 == 0) {
|
if(outnet->num_ip4 == 0) {
|
||||||
char to[64];
|
char to[64];
|
||||||
|
|
@ -2214,17 +2221,19 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
i = ub_random_max(outnet->rnd, outnet->num_ip4);
|
i = ub_random_max(outnet->rnd, outnet->num_ip4);
|
||||||
addr = &outnet->ip4_ifs[i].addr;
|
pif = &outnet->ip4_ifs[i];
|
||||||
addrlen = outnet->ip4_ifs[i].addrlen;
|
}
|
||||||
|
addr = &pif->addr;
|
||||||
|
addrlen = pif->addrlen;
|
||||||
|
pnum = ub_random_max(outnet->rnd, pif->avail_total);
|
||||||
|
if(pnum < pif->inuse) {
|
||||||
|
/* port already open */
|
||||||
|
port = pif->out[pnum]->number;
|
||||||
|
} else {
|
||||||
|
/* unused ports in start part of array */
|
||||||
|
port = pif->avail_ports[pnum - pif->inuse];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create fd */
|
|
||||||
for(try = 0; try<1000; try++) {
|
|
||||||
int freebind = 0;
|
|
||||||
int noproto = 0;
|
|
||||||
int inuse = 0;
|
|
||||||
int port = ub_random(outnet->rnd)&0xffff;
|
|
||||||
int fd = -1;
|
|
||||||
if(addr_is_ip6(to_addr, to_addrlen)) {
|
if(addr_is_ip6(to_addr, to_addrlen)) {
|
||||||
struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr;
|
struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr;
|
||||||
sa.sin6_port = (in_port_t)htons((uint16_t)port);
|
sa.sin6_port = (in_port_t)htons((uint16_t)port);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue