[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