Changing:
> ‘

> if (!g->chosen_name || (g->replace_wildcards && strstr(g->name, "%h"))) {

to

> if (!g->chosen_name && (g->replace_wildcards && strstr(g->name, "%h"))) {

seems to fix the issue.


> On Jan 31, 2018, at 9:10 AM, Timothy Potter <[email protected]> wrote:
> 
> I think I have found the issue.
> 
> My service file is setup like this:
> 
> <!-- See avahi.service(5) for more information about this configuration file 
> -->
>  
> <service-group>
>  
>   <name replace-wildcards="yes">%h</name>
>  
>   <service protocol="ipv6">
>     <type>_http._tcp</type>
>     <port>80</port>
>   </service>
>  
> </service-group>
> 
> 
> In the file 
> 
> avahi-daemon/static-services.c
>  
> function:  entry_group_callback, if a conflict is detected a new name is 
> created and stored in g->chosen_name and an attempt is made to add the 
> service again with this new name.
>  
> case AVAHI_ENTRY_GROUP_COLLISION: {
>             char *n;
>  
>             remove_static_service_group_from_server(g);
>  
>             n = avahi_alternative_service_name(g->chosen_name);
>             avahi_free(g->chosen_name);
>             g->chosen_name = n;
>  
>             avahi_log_notice("Service name conflict for \"%s\" (%s), retrying 
> with \"%s\".", g->name, g->filename, g->chosen_name);
>  
>             add_static_service_group_to_server(g);
>             break;
>         }
>  
> 
> The problem is in add_static_service_group_to_server.    There is an if to 
> see if g->chosen_name = NULL or if the replace-wildcards is set to yes.  If 
> either of those are true ( in my chase it is ) it then frees the 
> g->chosen_name and rebuilds it with the same name that was in conflict to 
> begin with.  It never tries to add the service with the new service name so I 
> continually receive the “Service name conflict”.
> 
> static void add_static_service_group_to_server(StaticServiceGroup *g) {
>     StaticService *s;
>  
>     assert(g);
>  
>     if (g->entry_group && !avahi_s_entry_group_is_empty(g->entry_group))
>         /* This service group is already registered in the server */
>         return;
>  
>     if (!g->chosen_name || (g->replace_wildcards && strstr(g->name, "%h"))) {
>  
>         avahi_free(g->chosen_name);
>  
>         if (g->replace_wildcards) {
>             char label[AVAHI_LABEL_MAX];
>             const char *p;
>  
>             p = avahi_server_get_host_name(avahi_server);
>             avahi_unescape_label(&p, label, sizeof(label));
>  
>             g->chosen_name = replacestr(g->name, "%h", label);
>         } else
>             g->chosen_name = avahi_strdup(g->name);
>  
>     }
> 
> 
> 
>> On Jan 26, 2018, at 9:50 AM, Timothy Potter <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> I have several Linux machines all running kernel version 3.12 and 
>> avahi-daemon 0.6.31. Each machine has a unique host name and they are all 
>> advertising an ssh, sftp, and http. When I start all the machines up 
>> everything runs just fine. If one of the machines gets re-booted, when the 
>> avahi-daemon on that machine starts up again, it reports service conflicts 
>> every couple of seconds:
>> 
>> Jun  1 16:20:12 Node00b01973d6c8 daemon.notice avahi-daemon[1624]: Service 
>> name conflict for "%h" (/services/ssh.service), retrying with 
>> "Node00b01973d6c8 #2".
>> Jun  1 16:20:12 Node00b01973d6c8 daemon.notice avahi-daemon[1624]: Service 
>> name conflict for "%h" (/services/http.service), retrying with 
>> "Node00b01973d6c8 #2".
>> Jun  1 16:20:32 Node00b01973d6c8 daemon.notice avahi-daemon[1624]: Service 
>> name conflict for "%h" (/services/sftp-ssh.service), retrying with 
>> "Node00b01973d6c8 #2".
>> 
>> These message print every few seconds. The only way I have been able to make 
>> them go away is to reboot all the machines running the avahi-daemon. Any 
>> suggestions on how to fix this?
>> 
> 

_______________________________________________
avahi mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/avahi

Reply via email to