From 49fdb9f7a5454f7e11e8bcd621bff17cbf9da5ca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Wed, 10 May 2017 22:45:49 +0200 Subject: [PATCH] Support PTR queries for a specific service MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We should check if queried name starts with a _ to see if it is about a specific service + domain. Fixes: 70c66fbbcde86 ("Fix sending replies to PTR questions") Reported-by: Cristian Morales Vega Signed-off-by: Rafał Miłecki --- dns.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/dns.c b/dns.c index bccaa29..aadfdd8 100644 --- a/dns.c +++ b/dns.c @@ -378,15 +378,18 @@ parse_question(struct interface *iface, struct sockaddr *from, char *name, struc dns_reply_a(iface, to, announce_ttl); service_announce_services(iface, to, 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(umdns_host_label) && - !strncmp(name, umdns_host_label, len)) - service_reply(iface, to, NULL, dot + 1, announce_ttl); + if (name[0] == '_') { + service_reply(iface, to, NULL, name, announce_ttl); + } else { + /* First dot separates instance name from the rest */ + char *dot = strchr(name, '.'); + + if (dot) { + *dot = '\0'; + service_reply(iface, to, name, dot + 1, announce_ttl); + *dot = '.'; + } + } } break; -- 2.11.0