getpeername() and getsockname() will truncate the result if it is larger than the passed-in length. Because here always the size of the `sa` IPv4 union member was passed in, all larger (aka IPv6) results were truncated. Instead use the size of the `addr` union, which is the maximum size of all union members.
The bug was introduced in 0b6450c9. Fixes https://community.openvpn.net/openvpn/ticket/1358 Signed-off-by: corubba <coru...@gmx.de> --- src/openvpn/ps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openvpn/ps.c b/src/openvpn/ps.c index 4ca3a129..06bf91a8 100644 --- a/src/openvpn/ps.c +++ b/src/openvpn/ps.c @@ -344,8 +344,8 @@ journal_add(const char *journal_dir, struct proxy_connection *pc, struct proxy_c char *jfn; int fd; - slen = sizeof(from.addr.sa); - dlen = sizeof(to.addr.sa); + slen = sizeof(from.addr); + dlen = sizeof(to.addr); if (!getpeername(pc->sd, (struct sockaddr *) &from.addr.sa, &slen) && !getsockname(cp->sd, (struct sockaddr *) &to.addr.sa, &dlen)) { -- 2.47.1 _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel