From 70c66fbbcde868d2fe6034b5f706f1524e4f3d44 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 13 Feb 2017 16:42:35 +0100 Subject: [PATCH] Fix sending replies to PTR questions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When we receive PTR question it includes hostname (instance), e.g.: mdnsd: parse_question (391): Q -> PTR lede._http._tcp.local First of all we should check if it matches hostname we use before trying to reply. Secondly service_reply expects service with domain appended (without hostname/instance) so we need to strip received string out of hostname before passing it. Signed-off-by: Rafał Miłecki Acked-by: John Crispin --- dns.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dns.c b/dns.c index 91434f2..dac6f2c 100644 --- a/dns.c +++ b/dns.c @@ -367,9 +367,19 @@ parse_question(struct interface *iface, char *name, struct dns_question *q) break; case TYPE_PTR: - if (!strcmp(name, sdudp)) + if (!strcmp(name, sdudp)) { service_announce_services(iface, announce_ttl); - service_reply(iface, name, announce_ttl); + } else { + /* First dot separates instance name from the rest */ + char *dot = strchr(name, '.'); + /* Length of queried instance */ + size_t len = dot ? dot - name : 0; + + /* Make sure it's query for the instance name we use */ + if (len && len == strlen(mdns_hostname) && + !strncmp(name, mdns_hostname, len)) + service_reply(iface, dot + 1, announce_ttl); + } break; case TYPE_AAAA: -- 2.11.0