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 0e3e1d0..43cbe5a 100644
--- a/src/proto_uxdg.c
+++ b/src/proto_uxdg.c
@@ -29,6 +29,7 @@
#include <haproxy/protocol.h>
#include <haproxy/sock.h>
#include <haproxy/sock_unix.h>
+#include <haproxy/tools.h>
static int uxdg_bind_listener(struct listener *listener, char *errmsg, int errlen);
static void uxdg_enable_listener(struct listener *listener);
@@ -103,8 +104,11 @@
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 9678a49..ed1fa53 100644
--- a/src/proto_uxst.c
+++ b/src/proto_uxst.c
@@ -142,8 +142,11 @@
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 d549684..ac3cb64 100644
--- a/src/sock_unix.c
+++ b/src/sock_unix.c
@@ -337,8 +337,13 @@
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);
}