mirror of
https://github.com/systemd/systemd
synced 2024-09-16 06:43:18 +00:00
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.
This commit is contained in:
parent
c4c336e0cd
commit
a3f87e32b9
|
@ -1900,7 +1900,6 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
|
|||
_cleanup_(dnssd_service_freep) DnssdService *service = NULL;
|
||||
_cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
|
||||
_cleanup_free_ char *path = NULL;
|
||||
_cleanup_free_ char *instance_name = NULL;
|
||||
Manager *m = userdata;
|
||||
DnssdService *s = NULL;
|
||||
const char *name;
|
||||
|
@ -1953,7 +1952,7 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
|
|||
if (!service->type)
|
||||
return log_oom();
|
||||
|
||||
r = dnssd_render_instance_name(service, &instance_name);
|
||||
r = dnssd_render_instance_name(m, service, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data);
|
|||
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
|
||||
|
||||
int dnssd_render_instance_name(DnssdService *s, char **ret_name);
|
||||
int dnssd_render_instance_name(Manager *m, DnssdService *s, char **ret);
|
||||
int dnssd_load(Manager *manager);
|
||||
int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
|
||||
int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);
|
||||
|
|
Loading…
Reference in a new issue