Commit 9a3ec071 authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[3222] Made b10-dhcp-ddns server matching case insensitve

The method used in D2 to match a FQDN (or reverse IP addrss)
to a list of servers, DdnsDomainListMgr::matchDomain(), was
made case insensitive.
parent e6d57d89
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <string> #include <string>
...@@ -131,7 +132,7 @@ DdnsDomainListMgr::matchDomain(const std::string& fqdn, DdnsDomainPtr& domain) { ...@@ -131,7 +132,7 @@ DdnsDomainListMgr::matchDomain(const std::string& fqdn, DdnsDomainPtr& domain) {
// If the lengths are identical and the names match we're done. // If the lengths are identical and the names match we're done.
if (req_len == dom_len) { if (req_len == dom_len) {
if (fqdn == domain_name) { if (boost::iequals(fqdn,domain_name)) {
// exact match, done // exact match, done
domain = map_pair.second; domain = map_pair.second;
return (true); return (true);
...@@ -143,7 +144,7 @@ DdnsDomainListMgr::matchDomain(const std::string& fqdn, DdnsDomainPtr& domain) { ...@@ -143,7 +144,7 @@ DdnsDomainListMgr::matchDomain(const std::string& fqdn, DdnsDomainPtr& domain) {
// prevents "onetwo.net" from matching "two.net". // prevents "onetwo.net" from matching "two.net".
size_t offset = req_len - dom_len; size_t offset = req_len - dom_len;
if ((fqdn[offset - 1] == '.') && if ((fqdn[offset - 1] == '.') &&
(fqdn.compare(offset, std::string::npos, domain_name) == 0)) { (boost::iequals(fqdn.substr(offset), domain_name))) {
// Fqdn contains domain name, keep it if its better than // Fqdn contains domain name, keep it if its better than
// any we have matched so far. // any we have matched so far.
if (dom_len > match_len) { if (dom_len > match_len) {
......
...@@ -1066,6 +1066,10 @@ TEST_F(D2CfgMgrTest, forwardMatch) { ...@@ -1066,6 +1066,10 @@ TEST_F(D2CfgMgrTest, forwardMatch) {
EXPECT_TRUE(cfg_mgr_->matchForward("tmark.org", match)); EXPECT_TRUE(cfg_mgr_->matchForward("tmark.org", match));
EXPECT_EQ("tmark.org", match->getName()); EXPECT_EQ("tmark.org", match->getName());
// Verify that search is case insensisitive.
EXPECT_TRUE(cfg_mgr_->matchForward("TMARK.ORG", match));
EXPECT_EQ("tmark.org", match->getName());
// Verify that an exact match works. // Verify that an exact match works.
EXPECT_TRUE(cfg_mgr_->matchForward("one.tmark.org", match)); EXPECT_TRUE(cfg_mgr_->matchForward("one.tmark.org", match));
EXPECT_EQ("one.tmark.org", match->getName()); EXPECT_EQ("one.tmark.org", match->getName());
...@@ -1207,7 +1211,8 @@ TEST_F(D2CfgMgrTest, matchReverse) { ...@@ -1207,7 +1211,8 @@ TEST_F(D2CfgMgrTest, matchReverse) {
" \"dns_servers\" : [ " " \"dns_servers\" : [ "
" { \"ip_address\": \"127.0.0.1\" } " " { \"ip_address\": \"127.0.0.1\" } "
" ] }, " " ] }, "
"{ \"name\": \"2.0.3.0.8.B.D.0.1.0.0.2.ip6.arpa.\" , " // Note mixed case to test case insensitivity.
"{ \"name\": \"2.0.3.0.8.b.d.0.1.0.0.2.IP6.ARPA.\" , "
" \"dns_servers\" : [ " " \"dns_servers\" : [ "
" { \"ip_address\": \"127.0.0.1\" } " " { \"ip_address\": \"127.0.0.1\" } "
" ] }," " ] },"
...@@ -1247,7 +1252,7 @@ TEST_F(D2CfgMgrTest, matchReverse) { ...@@ -1247,7 +1252,7 @@ TEST_F(D2CfgMgrTest, matchReverse) {
// Verify a IPv6 match. // Verify a IPv6 match.
EXPECT_TRUE(cfg_mgr_->matchReverse("2001:db8:302:99::",match)); EXPECT_TRUE(cfg_mgr_->matchReverse("2001:db8:302:99::",match));
EXPECT_EQ("2.0.3.0.8.B.D.0.1.0.0.2.ip6.arpa.", match->getName()); EXPECT_EQ("2.0.3.0.8.b.d.0.1.0.0.2.IP6.ARPA.", match->getName());
// Verify a IPv6 wild card match. // Verify a IPv6 wild card match.
EXPECT_TRUE(cfg_mgr_->matchReverse("2001:db8:99:302::",match)); EXPECT_TRUE(cfg_mgr_->matchReverse("2001:db8:99:302::",match));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment