]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/resolve/resolved-dns-query.c
tree-wide: use ASSERT_PTR more
[thirdparty/systemd.git] / src / resolve / resolved-dns-query.c
index d9c61148364eac737fbe60e49bc32ef381153e52..8daaacfc197f58a8a5842768fd5eb9e9e8dfe433 100644 (file)
@@ -427,6 +427,7 @@ DnsQuery *dns_query_free(DnsQuery *q) {
         }
 
         free(q->request_address_string);
+        free(q->request_name);
 
         if (q->manager) {
                 LIST_REMOVE(queries, q->manager->dns_queries, q);
@@ -585,16 +586,22 @@ void dns_query_complete(DnsQuery *q, DnsTransactionState state) {
 
         q->state = state;
 
+        if (state == DNS_TRANSACTION_SUCCESS && set_size(q->manager->varlink_subscription) > 0) {
+                DnsQuestion *question = q->request_packet ? q->request_packet->question : NULL;
+                const char *query_name = question ? dns_question_first_name(question) : q->request_name;
+                if (query_name)
+                        (void) send_dns_notification(q->manager, q->answer, query_name);
+        }
+
         dns_query_stop(q);
         if (q->complete)
                 q->complete(q);
 }
 
 static int on_query_timeout(sd_event_source *s, usec_t usec, void *userdata) {
-        DnsQuery *q = userdata;
+        DnsQuery *q = ASSERT_PTR(userdata);
 
         assert(s);
-        assert(q);
 
         dns_query_complete(q, DNS_TRANSACTION_TIMEOUT);
         return 0;