Hi Olivier,

On Wed, Jun 06, 2018 at 06:40:05PM +0200, Olivier Houchard wrote:
> You're right indeed, that code was not written with abns sockets in mind.
> The attached patch should fix it. It was created from master, but should
> apply to 1.8 as well.
> 
> Thanks !
> 
> Olivier

> >From 3ba0fbb7c9e854aafb8a6b98482ad7d23bbb414d Mon Sep 17 00:00:00 2001
> From: Olivier Houchard <ohouch...@haproxy.com>
> Date: Wed, 6 Jun 2018 18:34:34 +0200
> Subject: [PATCH] MINOR: unix: Make sure we can transfer abns sockets as well  
> on seamless reload.

Would you be so kind as to tag it "BUG" so that our beloved stable
team catches it for the next 1.8 ? ;-)

> diff --git a/src/proto_uxst.c b/src/proto_uxst.c
> index 9fc50dff4..a1da337fe 100644
> --- a/src/proto_uxst.c
> +++ b/src/proto_uxst.c
> @@ -146,7 +146,12 @@ static int uxst_find_compatible_fd(struct listener *l)
>                                       after_sockname++;
>                               if (!strcmp(after_sockname, ".tmp"))
>                                       break;
> -                     }
> +                     /* abns sockets sun_path starts with a \0 */
> +                     } else if (un1->sun_path[0] == 0
> +                         && un2->sun_path[0] == 0
> +                         && !strncmp(&un1->sun_path[1], &un2->sun_path[1],
> +                         sizeof(un1->sun_path) - 1))
> +                             break;

It may still randomly fail here because null bytes are explicitly permitted
in the sun_path. Instead I'd suggest this :

        } else if (un1->sun_path[0] == 0 &&
                   memcmp(un1->sun_path, un2->sun_path, sizeof(un1->sun_path) 
== 0)

Jarno, if you still notice occasional failures, please try with this.

Thanks
Willy

Reply via email to