When a question is incoming the service was incorrectly resettig the
query timeout regardless of it being the right service. This causes
the code to never answer the questions it is being asked.

Reported-by: Cristian Morales Vega <crist...@samknows.com>
Signed-off-by: John Crispin <j...@phrozen.org>
---
 service.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

Hi Cristian

the patch is only runtime tested, could you give it a spin to see if it solves 
your problem ?

        John

diff --git a/service.c b/service.c
index fe6e5a9..8d514c2 100644
--- a/service.c
+++ b/service.c
@@ -107,7 +107,7 @@ service_add_srv(struct service *s, int ttl)
 
 #define TOUT_LOOKUP    60
 
-static int
+static time_t
 service_timeout(struct service *s)
 {
        time_t t = monotonic_time();
@@ -115,9 +115,7 @@ service_timeout(struct service *s)
        if (t - s->t <= TOUT_LOOKUP)
                return 0;
 
-       s->t = t;
-
-       return 1;
+       return t;
 }
 
 void
@@ -154,8 +152,10 @@ service_reply_single(struct interface *iface, struct 
service *s, const char *mat
 {
        const char *host = service_name(s->service);
        char *service = strstr(host, "._");
+       time_t t = service_timeout(s);
+
 
-       if (!force && (!s->active || !service || !service_timeout(s)))
+       if (!force && (!s->active || !service || !t))
                return;
 
        service++;
@@ -163,6 +163,8 @@ service_reply_single(struct interface *iface, struct 
service *s, const char *mat
        if (match && strcmp(match, s->service))
                return;
 
+       s->t = t;
+
        dns_init_answer();
        service_add_ptr(service_name(s->service), ttl);
        dns_send_answer(iface, service);
-- 
1.7.10.4


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to