summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-12-18 15:02:42 +0100
committerStefan Metzmacher <metze@samba.org>2008-12-30 16:18:08 +0100
commit465176b7e2fc1370dded850a80a8fe8519e79db8 (patch)
treeea30f048d79a7a0ce5d7b382a9312908e1825d05 /source3/lib
parentfee2664dad37536b05ce8bdae3e74d45b257f632 (diff)
downloadsamba-465176b7e2fc1370dded850a80a8fe8519e79db8.tar.gz
samba-465176b7e2fc1370dded850a80a8fe8519e79db8.tar.bz2
samba-465176b7e2fc1370dded850a80a8fe8519e79db8.zip
s3:cluster: register the client connection via CTDB_CONTROL_TCP_ADD
This means we correctly pass IPv6 addresses too. (CTDB_CONTROL_TCP_CLIENT was IPv4 only) metze
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/ctdbd_conn.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index 10a65c5bcc..8d97606b85 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -1175,13 +1175,13 @@ NTSTATUS ctdbd_traverse(uint32 db_id,
*/
NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
- const struct sockaddr_in *server,
- const struct sockaddr_in *client,
+ const struct sockaddr *server,
+ const struct sockaddr *client,
void (*release_ip_handler)(const char *ip_addr,
void *private_data),
void *private_data)
{
- struct ctdb_control_tcp p;
+ struct ctdb_control_tcp_vnn p;
TDB_DATA data;
NTSTATUS status;
@@ -1190,6 +1190,21 @@ NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
*/
SMB_ASSERT(conn->release_ip_handler == NULL);
+ switch (client->sa_family) {
+ case AF_INET:
+ p.dest.ip = *(struct sockaddr_in *)server;
+ p.src.ip = *(struct sockaddr_in *)client;
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ p.dest.ip6 = *(struct sockaddr_in6 *)server;
+ p.src.ip6 = *(struct sockaddr_in6 *)client;
+ break;
+#endif
+ default:
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+
conn->release_ip_handler = release_ip_handler;
/*
@@ -1201,9 +1216,6 @@ NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
return status;
}
- p.dest = *server;
- p.src = *client;
-
/*
* inform ctdb of our tcp connection, so if IP takeover happens ctdb
* can send an extra ack to trigger a reset for our client, so it
@@ -1213,7 +1225,7 @@ NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
data.dsize = sizeof(p);
return ctdbd_control(conn, CTDB_CURRENT_NODE,
- CTDB_CONTROL_TCP_CLIENT, 0,
+ CTDB_CONTROL_TCP_ADD, 0,
CTDB_CTRL_FLAG_NOREPLY, data, NULL, NULL, NULL);
}