From: Rafał Miłecki Date: Wed, 10 May 2017 20:45:49 +0000 (+0200) Subject: Support PTR queries for a specific service X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=commitdiff_plain;h=49fdb9f7a5454f7e11e8bcd621bff17cbf9da5ca Support PTR queries for a specific service 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 --- 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;