From dbdcd0986280eef0dabc1dff887ddf16c2cfb7c7 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 15 Aug 2023 08:57:57 +0200 Subject: [PATCH] s3:ctdbd_conn: fix ctdbd_public_ip_foreach() for ipv6 addresses BUG: https://bugzilla.samba.org/show_bug.cgi?id=15534 Signed-off-by: Stefan Metzmacher Reviewed-by: Volker Lendecke Autobuild-User(master): Stefan Metzmacher Autobuild-Date(master): Thu Dec 21 11:09:30 UTC 2023 on atb-devel-224 (cherry picked from commit 828f3c99122fb033ecb79e24ed24821b8510f0f8) --- source3/lib/ctdbd_conn.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c index a739c97f3fd2..3698c9d36724 100644 --- a/source3/lib/ctdbd_conn.c +++ b/source3/lib/ctdbd_conn.c @@ -1438,6 +1438,32 @@ static int ctdbd_control_get_public_ips(struct ctdbd_connection *conn, return 0; } +static struct samba_sockaddr ctdbd_sock_addr_to_samba(const ctdb_sock_addr *c) +{ + struct samba_sockaddr s = {}; + + switch (c->sa.sa_family) { + case AF_INET: + s.u.in = c->ip; + break; + case AF_INET6: + /* + * ctdb always requires HAVE_IPV6, + * so we don't need an ifdef here. + */ + s.u.in6 = c->ip6; + break; + default: + /* + * ctdb_sock_addr only supports ipv4 and ipv6 + */ + smb_panic(__location__); + break; + } + + return s; +} + int ctdbd_public_ip_foreach(struct ctdbd_connection *conn, int (*cb)(uint32_t total_ip_count, const struct sockaddr_storage *ip, @@ -1457,11 +1483,8 @@ int ctdbd_public_ip_foreach(struct ctdbd_connection *conn, } for (i=0; i < ips->num; i++) { - struct samba_sockaddr tmp = { - .u = { - .sa = ips->ips[i].addr.sa, - }, - }; + const ctdb_sock_addr *addr = &ips->ips[i].addr; + struct samba_sockaddr tmp = ctdbd_sock_addr_to_samba(addr); ret = cb(ips->num, &tmp.u.ss, -- 2.34.1