test-dnsdist_cc.cc \
test-dnsdistpacketcache_cc.cc \
test-dnscrypt_cc.cc \
+ test-iputils_hh.cc \
dnsdist.hh \
dnsdist-cache.cc dnsdist-cache.hh \
dnsdist-ecs.cc dnsdist-ecs.hh \
--- /dev/null
+../test-iputils_hh.cc
\ No newline at end of file
unsigned int port;
if(addr[0]=='[') { // [::]:53 style address
string::size_type pos = addr.find(']');
- if(pos == string::npos || pos + 2 > addr.size() || addr[pos+1]!=':')
+ if(pos == string::npos)
return -1;
ourAddr.assign(addr.c_str() + 1, pos-1);
- try {
- port = pdns_stou(addr.substr(pos+2));
- portSet = true;
- }
- catch(std::out_of_range) {
- return -1;
+ if (pos + 1 == addr.size()) {
+ port = 0;
+ } else {
+ if (pos + 2 > addr.size() || addr[pos+1]!=':')
+ return -1;
+ try {
+ port = pdns_stou(addr.substr(pos+2));
+ portSet = true;
+ }
+ catch(std::out_of_range) {
+ return -1;
+ }
}
}
ret->sin6_scope_id=0;
withport = ComboAddress("[::]:5300", 53);
BOOST_CHECK_EQUAL(withport.sin4.sin_port, htons(5300));
+ ComboAddress defaultport("213.244.168.210");
+ BOOST_CHECK_EQUAL(defaultport.sin4.sin_port, htons(0));
+
+ defaultport = ComboAddress("[::1]");
+ BOOST_CHECK_EQUAL(defaultport.sin4.sin_port, htons(0));
+
+ defaultport = ComboAddress("::1");
+ BOOST_CHECK_EQUAL(defaultport.sin4.sin_port, htons(0));
+
// Verify that 2 'empty' ComboAddresses are equal, used in syncres.hh to
// signal auth-zones
ComboAddress a = ComboAddress();