Fix replying to "QU" questions received on unicast interface
authorRafał Miłecki <rafal@milecki.pl>
Mon, 20 Mar 2017 16:35:21 +0000 (17:35 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 20 Mar 2017 16:39:33 +0000 (17:39 +0100)
We may receive questions on unicast interface, e.g. when another client
is refreshing its entries. "QU" questions are "questions requesting
unicast responses" which means we should obviously send unicast replies.

Old code wasn't setting "to" variable correctly so IP address wasn't
passed back to the interface layer. It means replies were never sent.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
dns.c

diff --git a/dns.c b/dns.c
index b19ad17719b7e542a29011e1c68017e2fb0bb146..51a015056d3a4d41d9c80e56488ff97f090905a7 100644 (file)
--- a/dns.c
+++ b/dns.c
@@ -351,15 +351,14 @@ parse_answer(struct interface *iface, uint8_t *buffer, int len, uint8_t **b, int
 static void
 parse_question(struct interface *iface, struct sockaddr *from, char *name, struct dns_question *q)
 {
-       struct sockaddr *to;
+       struct sockaddr *to = NULL;
        char *host;
 
        /* TODO: Multicast if more than one quarter of TTL has passed */
-       if ((q->class & CLASS_UNICAST) && iface->multicast) {
-               iface = iface->peer;
+       if (q->class & CLASS_UNICAST) {
                to = from;
-       } else {
-               to = NULL;
+               if (iface->multicast)
+                       iface = iface->peer;
        }
 
        DBG(1, "Q -> %s %s\n", dns_type_string(q->type), name);