summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-dnssd.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-05-15 10:23:25 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-05-15 10:23:33 +0900
commita3f87e32b936b6cf8571376df57715ddb6695883 (patch)
treefb80d76552735c015b57f249b68911efc6bda12d /src/resolve/resolved-dnssd.c
parentc4c336e0cdf66a4c0922f2b77a7e6e3811287114 (diff)
downloadsystemd-a3f87e32b936b6cf8571376df57715ddb6695883.tar.gz
resolve/dnssd: make dnssd_render_instance_name() take Manager
As DnssdService object passed to dnssd_render_instance_name() may not owned by Manager. Fixes #23381.
Diffstat (limited to 'src/resolve/resolved-dnssd.c')
-rw-r--r--src/resolve/resolved-dnssd.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c
index 443760ab70..6ed55035b8 100644
--- a/src/resolve/resolved-dnssd.c
+++ b/src/resolve/resolved-dnssd.c
@@ -136,14 +136,12 @@ static int dnssd_service_load(Manager *manager, const char *filename) {
}
static int specifier_dnssd_hostname(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
- DnssdService *s = (DnssdService *) userdata;
+ const Manager *m = ASSERT_PTR(userdata);
char *n;
- assert(s);
- assert(s->manager);
- assert(s->manager->llmnr_hostname);
+ assert(m->llmnr_hostname);
- n = strdup(s->manager->llmnr_hostname);
+ n = strdup(m->llmnr_hostname);
if (!n)
return -ENOMEM;
@@ -151,7 +149,7 @@ static int specifier_dnssd_hostname(char specifier, const void *data, const char
return 0;
}
-int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
+int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret) {
static const Specifier specifier_table[] = {
{ 'a', specifier_architecture, NULL },
{ 'b', specifier_boot_id, NULL },
@@ -167,10 +165,11 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
_cleanup_free_ char *name = NULL;
int r;
+ assert(m);
assert(s);
assert(s->name_template);
- r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, NULL, s, &name);
+ r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, NULL, m, &name);
if (r < 0)
return log_debug_errno(r, "Failed to replace specifiers: %m");
@@ -179,7 +178,8 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
"Service instance name '%s' is invalid.",
name);
- *ret_name = TAKE_PTR(name);
+ if (ret)
+ *ret = TAKE_PTR(name);
return 0;
}
@@ -221,7 +221,7 @@ int dnssd_update_rrs(DnssdService *s) {
LIST_FOREACH(items, txt_data, s->txt_data_items)
txt_data->rr = dns_resource_record_unref(txt_data->rr);
- r = dnssd_render_instance_name(s, &n);
+ r = dnssd_render_instance_name(s->manager, s, &n);
if (r < 0)
return r;