From: Aurelien DARRAGON Date: Mon, 6 Feb 2023 18:23:40 +0000 (+0100) Subject: MINOR: proto_ux: ability to dump ABNS names in error messages X-Git-Tag: v2.8-dev5~104 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=de63efba5ad3c2ceb5942d0cb078c0fa823d93c9;p=thirdparty%2Fhaproxy.git MINOR: proto_ux: ability to dump ABNS names in error messages In sock_unix_bind_receiver(), uxst_bind_listener() and uxdg_bind_listener(), properly dump ABNS socket names by leveraging sa2str() function which does the hard work for us. UNIX sockets are reported as is (unchanged) while ABNS UNIX sockets are prefixed with 'abns@' to match the syntax used in config file. (they where previously showing as empty strings because of the leading NULL-byte that was not properly handled in this case) This is only a minor debug improvement, however it could be useful to backport it up to 2.4. [for 2.4: you should replace "%s [%s]" by "%s for [%s]" for uxst and uxgd if you wan't the patch to apply properly] --- diff --git a/src/proto_uxdg.c b/src/proto_uxdg.c index 0e3e1d0f34..43cbe5a920 100644 --- a/src/proto_uxdg.c +++ b/src/proto_uxdg.c @@ -29,6 +29,7 @@ #include #include #include +#include static int uxdg_bind_listener(struct listener *listener, char *errmsg, int errlen); static void uxdg_enable_listener(struct listener *listener); @@ -103,8 +104,11 @@ int uxdg_bind_listener(struct listener *listener, char *errmsg, int errlen) uxdg_return: if (msg && errlen) { - const char *path = ((struct sockaddr_un *)&listener->rx.addr)->sun_path; - snprintf(errmsg, errlen, "%s for [%s]", msg, path); + char *path_str; + + path_str = sa2str((struct sockaddr_storage *)&listener->rx.addr, 0, 0); + snprintf(errmsg, errlen, "%s for [%s]", msg, ((path_str) ? path_str : "")); + ha_free(&path_str); } return err; } diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 9678a49a8c..ed1fa53efd 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -142,8 +142,11 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle close(fd); uxst_return: if (msg && errlen) { - const char *path = ((struct sockaddr_un *)&listener->rx.addr)->sun_path; - snprintf(errmsg, errlen, "%s for [%s]", msg, path); + char *path_str; + + path_str = sa2str((struct sockaddr_storage *)&listener->rx.addr, 0, 0); + snprintf(errmsg, errlen, "%s for [%s]", msg, ((path_str) ? path_str : "")); + ha_free(&path_str); } return err; } diff --git a/src/sock_unix.c b/src/sock_unix.c index d549684c57..ac3cb642d7 100644 --- a/src/sock_unix.c +++ b/src/sock_unix.c @@ -337,8 +337,13 @@ int sock_unix_bind_receiver(struct receiver *rx, char **errmsg) unlink(backname); bind_return: if (errmsg && *errmsg) { - if (!ext) - memprintf(errmsg, "%s [%s]", *errmsg, path); + if (!ext) { + char *path_str; + + path_str = sa2str((struct sockaddr_storage *)&rx->addr, 0, 0); + memprintf(errmsg, "%s [%s]", *errmsg, ((path_str) ? path_str : "")); + ha_free(&path_str); + } else memprintf(errmsg, "%s [fd %d]", *errmsg, fd); }