[SCM] Samba Shared Repository - branch master updated -
465176b7e2fc1370dded850a80a8fe8519e79db8
Stefan Metzmacher
metze at samba.org
Tue Dec 30 15:19:10 GMT 2008
The branch, master has been updated
via 465176b7e2fc1370dded850a80a8fe8519e79db8 (commit)
from fee2664dad37536b05ce8bdae3e74d45b257f632 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 465176b7e2fc1370dded850a80a8fe8519e79db8
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Dec 18 15:02:42 2008 +0100
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
-----------------------------------------------------------------------
Summary of changes:
source3/include/ctdbd_conn.h | 4 ++--
source3/include/proto.h | 1 -
source3/lib/ctdbd_conn.c | 26 +++++++++++++++++++-------
source3/smbd/server.c | 9 ++++++---
4 files changed, 27 insertions(+), 13 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/ctdbd_conn.h b/source3/include/ctdbd_conn.h
index 39f50c2..44c3516 100644
--- a/source3/include/ctdbd_conn.h
+++ b/source3/include/ctdbd_conn.h
@@ -57,8 +57,8 @@ NTSTATUS ctdbd_traverse(uint32 db_id,
void *private_data);
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);
diff --git a/source3/include/proto.h b/source3/include/proto.h
index b874beb..7c00d7b 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -7690,7 +7690,6 @@ void init_sec_ctx(void);
int smbd_server_fd(void);
int get_client_fd(void);
-int client_get_tcp_info(struct sockaddr_in *server, struct sockaddr_in *client);
struct event_context *smbd_event_context(void);
struct messaging_context *smbd_messaging_context(void);
struct memcache *smbd_memcache(void);
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index 10a65c5..8d97606 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);
}
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index f7bdb58..cfdd05b 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -59,7 +59,8 @@ int get_client_fd(void)
return server_fd;
}
-int client_get_tcp_info(struct sockaddr_in *server, struct sockaddr_in *client)
+static int client_get_tcp_info(struct sockaddr_storage *server,
+ struct sockaddr_storage *client)
{
socklen_t length;
if (server_fd == -1) {
@@ -1466,7 +1467,7 @@ extern void build_options(bool screen);
* client.
*/
- struct sockaddr_in srv, clnt;
+ struct sockaddr_storage srv, clnt;
if (client_get_tcp_info(&srv, &clnt) == 0) {
@@ -1474,7 +1475,9 @@ extern void build_options(bool screen);
status = ctdbd_register_ips(
messaging_ctdbd_connection(),
- &srv, &clnt, release_ip, NULL);
+ (struct sockaddr *)&srv,
+ (struct sockaddr *)&clnt,
+ release_ip, NULL);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("ctdbd_register_ips failed: %s\n",
--
Samba Shared Repository
More information about the samba-cvs
mailing list