It is my first time to submit a patch by 'git send-email'.
If it doesn't work, please let me know. Thanks.

Regards,
hmj

---
 src/forward.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/forward.c b/src/forward.c
index e4745a3..d291695 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -150,10 +150,19 @@ static unsigned int search_servers(time_t now, union 
all_addr **addrpp, unsigned
       }
     else if (serv->flags & SERV_HAS_DOMAIN)
       {
+       int isequal;
        unsigned int domainlen = strlen(serv->domain);
-       char *matchstart = qdomain + namelen - domainlen;
+       char *matchstart = strcasestr(qdomain, serv->domain);
+       if ((matchstart != NULL) && (*(matchstart+domainlen) == 0 || 
*(matchstart+domainlen) == '.'))
+           isequal = 1;
+       else
+         {
+           matchstart = qdomain + namelen - domainlen;
+           isequal = hostname_isequal(matchstart, serv->domain);
+         }
+
        if (namelen >= domainlen &&
-           hostname_isequal(matchstart, serv->domain) &&
+           isequal &&
            (domainlen == 0 || namelen == domainlen || *(matchstart-1) == '.' ))
          {
            if ((serv->flags & SERV_NO_REBIND) && norebind)     
@@ -589,9 +598,17 @@ static size_t process_reply(struct dns_header *header, 
time_t now, struct server
       unsigned int matchlen = 0;
       for (ipset_pos = daemon->ipsets; ipset_pos; ipset_pos = ipset_pos->next) 
        {
+         int isequal;
          unsigned int domainlen = strlen(ipset_pos->domain);
-         char *matchstart = daemon->namebuff + namelen - domainlen;
-         if (namelen >= domainlen && hostname_isequal(matchstart, 
ipset_pos->domain) &&
+         char *matchstart = strcasestr(daemon->namebuff, ipset_pos->domain);
+         if ((matchstart != NULL) && (*(matchstart+domainlen) == 0 || 
*(matchstart+domainlen) == '.'))
+             isequal = 1;
+         else
+           {
+             matchstart = daemon->namebuff + namelen - domainlen;
+             isequal = hostname_isequal(matchstart, ipset_pos->domain);
+           }
+         if (namelen >= domainlen && isequal &&
              (domainlen == 0 || namelen == domainlen || *(matchstart - 1) == 
'.' ) &&
              domainlen >= matchlen) 
            {
-- 
2.21.0


_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to