[SCM] Samba Shared Repository - branch v4-9-stable updated

Karolin Seeger kseeger at samba.org
Tue Oct 22 09:02:23 UTC 2019


The branch, v4-9-stable has been updated
       via  2250bc58aea VERSION: Disable GIT_SNAPSHOT for the 4.9.14 release.
       via  72a2a1b5630 WHATSNEW: Add release notes for Samba 4.9.14.
       via  a5ffe3982cc spnego: fix server handling of no optimistic exchange
       via  e7603aa87f0 selftest: add tests for no optimistic spnego exchange
       via  16b10d1a433 spnego: add client option to omit sending an optimistic token
       via  6024163e177 ctdb-vacuum: Process all records not deleted on a remote node
       via  c788ff56bae fault.c: improve fault_report message text pointing to our wiki
       via  9a5bdc6c9e6 ctdb-tools: Stop deleted nodes from influencing ctdb nodestatus exit code
       via  c50486c09a2 s3/4: libsmbclient test. Test using smbc_telldir/smbc_lseekdir with smbc_readdir/smbc_readdirplus/smbc_getdents.
       via  5cd57eb58b7 s3: libsmbclient: Fix smbc_lseekdir() to work with smbc_readdirplus().
       via  588c84d4882 s3: libsmbclient: Ensure SMBC_getdents_ctx() also updates the readdirplus pointers.
       via  b44cc7f07e3 s3: libsmbclient: Ensure SMBC_readdirplus_ctx() also updates the readdir pointers.
       via  04cb3d3ee13 s3: libsmbclient: Ensure SMBC_readdir_ctx() also updates the readdirplus pointers.
       via  36439305afc libcli/smb: send SMB2_NETNAME_NEGOTIATE_CONTEXT_ID
       via  9b60134b8bb libcli/smb: add new COMPRESSION and NETNAME negotiate context ids
       via  00a810d8fdd s3:ldap: Fix join with don't exists machine account
       via  b9f1be5cf45 ctdb: fix compilation on systems with glibc robust mutexes
       via  5a308ef8e07 vfs_glusterfs: Use pthreadpool for scheduling aio operations
       via  745052cb6b9 ctdb-recoverd: Fix typo in previous fix
       via  89b08e4fbcf ctdb-tests: Clear deleted record via recovery instead of vacuuming
       via  4cbd3cd970a ctdb-tests: Strengthen volatile DB traverse test
       via  3801c9582b7 ctdb-recoverd: Only check for LMASTER nodes in the VNN map
       via  68cc58437fa ctdb-tests: Don't retrieve the VNN map from target node for notlmaster
       via  31066fde8c5 ctdb-tests: Handle special cases first and return
       via  c3f2c55320d ctdb-tests: Inline handling of recovered and notlmaster statuses
       via  cf39c0fc3b0 ctdb-tests: Drop unused node statuses frozen/unfrozen
       via  fd8a55bb3f4 ctdb-tests: Reformat node_has_status()
       via  b40bef3c5ee VERSION: Bump version up to 4.9.14.
       via  7cb10fc9976 Merge tag 'samba-4.9.13' into v4-9-test
       via  fcf29cda0e7 ctdb-daemon: Make node inactive in the NODE_STOP control
       via  fa705bc7dee ctdb-daemon: Drop unused function ctdb_local_node_got_banned()
       via  c2ee9bbeeea ctdb-daemon: Switch banning code to use ctdb_node_become_inactive()
       via  13780a3ee01 ctdb-daemon: Factor out new function ctdb_node_become_inactive()
       via  f4442942fbb ctdb-tcp: Mark node as disconnected if incoming connection goes away
       via  1e45ab3c23d ctdb-tcp: Only mark a node connected if both directions are up
       via  9155ad23d43 ctdb-tcp: Create outbound queue when the connection becomes writable
       via  f2ce6c745cf ctdb-tcp: Use TALLOC_FREE()
       via  b21bc19bae5 ctdb-tcp: Move incoming fd and queue into struct ctdb_tcp_node
       via  17f1a95203a ctdb-tcp: Rename fd -> out_fd
       via  a8dd1a0577e ctdb-daemon: Add function ctdb_ip_to_node()
       via  a309b862e8f ctdb-daemon: Replace function ctdb_ip_to_nodeid() with ctdb_ip_to_pnn()
       via  b74fde880de undoguididx: blackbox test
       via  4da5d9c9761 undoguididx: Add "or later" to warning about using tools from Samba 4.8
       via  00950aa7cf7 sambaundoguididx: fix for -s
       via  f3f259e7369 sambaundoguididx: Add flags=ldb.FLG_DONT_CREATE_DB and port to Python3
       via  c61d824e3ca s4/scripting: MORE py3 compatible print functions
       via  47a971f5841 s4/scripting/*: py3 compatible print
       via  8818401b301 ldb: release ldb 1.4.8
       via  e22c1fbd56f ldb: ldbdump key and pack format version comments
       via  388cb30bd7d ldb: baseinfo pack format check on init
       via  3cb3b34def3 ldb: Fix segfault parsing new pack formats
       via  3e9e7afc259 ldb: test for parse errors
       via  abc63d6eab0 VERSION: Bump version up to 4.9.13...
      from  1acf30ac5c1 VERSION: Disable GIT_SNAPSHOT for the 4.9.13 release.

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-9-stable


- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 VERSION                                            |   2 +-
 WHATSNEW.txt                                       |  86 +++-
 auth/gensec/spnego.c                               |  24 +
 ctdb/include/ctdb_private.h                        |   8 +-
 ctdb/server/ctdb_banning.c                         |  26 +-
 ctdb/server/ctdb_daemon.c                          |  11 +-
 ctdb/server/ctdb_recover.c                         |  45 ++
 ctdb/server/ctdb_recoverd.c                        |  14 +-
 ctdb/server/ctdb_server.c                          |  28 +-
 ctdb/server/ctdb_vacuum.c                          |   2 +-
 ctdb/tcp/ctdb_tcp.h                                |  16 +-
 ctdb/tcp/tcp_connect.c                             | 212 +++++---
 ctdb/tcp/tcp_init.c                                |  21 +-
 ctdb/tcp/tcp_io.c                                  |  17 +-
 ctdb/tests/scripts/integration.bash                |  80 +--
 ctdb/tests/simple/69_recovery_resurrect_deleted.sh |  16 +-
 ctdb/tests/simple/79_volatile_db_traverse.sh       |  67 ++-
 ctdb/tools/ctdb.c                                  |   8 +-
 ctdb/wscript                                       |   2 +-
 lib/ldb/ABI/{ldb-1.3.0.sigs => ldb-1.4.8.sigs}     |   1 +
 ...yldb-util-1.1.10.sigs => pyldb-util-1.4.8.sigs} |   0
 ...-util-1.1.10.sigs => pyldb-util.py3-1.4.8.sigs} |   0
 lib/ldb/common/ldb_pack.c                          |  23 +-
 lib/ldb/include/ldb_module.h                       |   9 +
 lib/ldb/ldb_tdb/ldb_cache.c                        |  45 +-
 lib/ldb/ldb_tdb/ldb_tdb.c                          |  10 +-
 lib/ldb/ldb_tdb/ldb_tdb.h                          |   1 +
 lib/ldb/tests/ldb_kv_ops_test.c                    |  23 +
 lib/ldb/tools/ldbdump.c                            |  24 +
 lib/ldb/wscript                                    |   2 +-
 lib/util/fault.c                                   |   6 +-
 libcli/smb/smb2_constants.h                        |   2 +
 libcli/smb/smbXcli_base.c                          |  17 +
 python/samba/tests/blackbox/undoguididx.py         | 108 ++++
 source3/libads/ldap.c                              |   5 +-
 source3/libsmb/libsmb_dir.c                        | 102 +++-
 source3/modules/vfs_glusterfs.c                    | 545 ++++++++++-----------
 source4/scripting/bin/autoidl                      |  19 +-
 source4/scripting/bin/enablerecyclebin             |   2 +-
 source4/scripting/bin/findprovisionusnranges       |  14 +-
 source4/scripting/bin/fullschema                   |  11 +-
 source4/scripting/bin/get-descriptors              |  11 +-
 source4/scripting/bin/minschema                    |  49 +-
 source4/scripting/bin/mymachinepw                  |   7 +-
 source4/scripting/bin/rebuildextendeddn            |  12 +-
 source4/scripting/bin/sambaundoguididx             |  30 +-
 source4/scripting/bin/smbstatus                    |  29 +-
 source4/scripting/devel/addlotscontacts            |   6 +-
 source4/scripting/devel/config_base                |   2 +-
 source4/scripting/devel/crackname                  |  12 +-
 source4/scripting/devel/enumprivs                  |   2 +-
 source4/scripting/devel/getncchanges               |  10 +-
 source4/selftest/tests.py                          |   6 +
 source4/torture/libsmbclient/libsmbclient.c        | 340 +++++++++++++
 54 files changed, 1533 insertions(+), 637 deletions(-)
 copy lib/ldb/ABI/{ldb-1.3.0.sigs => ldb-1.4.8.sigs} (99%)
 copy lib/ldb/ABI/{pyldb-util-1.1.10.sigs => pyldb-util-1.4.8.sigs} (100%)
 copy lib/ldb/ABI/{pyldb-util-1.1.10.sigs => pyldb-util.py3-1.4.8.sigs} (100%)
 create mode 100644 python/samba/tests/blackbox/undoguididx.py


Changeset truncated at 500 lines:

diff --git a/VERSION b/VERSION
index d2721c27c8e..8f1bacd9ced 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=4
 SAMBA_VERSION_MINOR=9
-SAMBA_VERSION_RELEASE=13
+SAMBA_VERSION_RELEASE=14
 
 ########################################################
 # If a official release has a serious bug              #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index fe8086b436a..cf34f50129f 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,85 @@
+                   ==============================
+                   Release Notes for Samba 4.9.14
+                          October 22, 2019
+                   ==============================
+
+
+This is the last bugfix release of the Samba 4.9 release series. There will be
+security releases only beyond this point.
+
+
+Changes since 4.9.13:
+---------------------
+
+o  Jeremy Allison <jra at samba.org>
+   * BUG 14094: smbc_readdirplus() is incompatible with smbc_telldir() and
+     smbc_lseekdir().
+
+o  Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
+   * BUG 13978: s4/scripting: MORE py3 compatible print functions.
+
+o  Andrew Bartlett <abartlet at samba.org>
+   * ldb: release ldb 1.4.8
+   * BUG 13959: ldb_tdb fails to check error return when parsing pack formats.
+   * BUG 13978: undoguididx: Add "or later" to warning about using tools from
+     Samba 4.8.
+
+o  Ralph Boehme <slow at samba.org>
+   * BUG 14038: ctdb: Fix compilation on systems with glibc robust mutexes.
+
+o  Isaac Boukris <iboukris at gmail.com>
+   * BUG 14106: Fix spnego fallback from kerberos to ntlmssp in smbd server.
+
+o  Poornima G <pgurusid at redhat.com>
+   * BUG 14098: vfs_glusterfs: Use pthreadpool for scheduling aio operations.
+
+o  Aaron Haslett <aaronhaslett at catalyst.net.nz>
+   * BUG 13977: ldb: baseinfo pack format check on init.
+   * BUG 13978: sambaundoguidindex is untested and py2-only.
+
+o  Amitay Isaacs <amitay at gmail.com>
+   * BUG 14147: ctdb-vacuum: Process all records not deleted on a remote node.
+
+o  Björn Jacke <bj at sernet.de>
+   * BUG 14139: Fault.c: Improve fault_report message text pointing to our wiki.
+
+o  Stefan Metzmacher <metze at samba.org>
+   * BUG 14055: libcli/smb: send SMB2_NETNAME_NEGOTIATE_CONTEXT_ID.
+
+o  Martin Schwenke <martin at meltin.net>
+   * BUG 14084: ctdb-tcp: Mark node as disconnected if incoming connection goes
+     away.
+   * BUG 14087: 'ctdb stop' command completes before databases are frozen.
+   * BUG 14129: Exit code of ctdb nodestatus should not be influenced by deleted
+     nodes.
+
+o  Evgeny Sinelnikov <sin at altlinux.org>
+   * BUG 14007: s3:ldap: Fix join with don't exists machine account.
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored.  All bug reports should
+be filed under the "Samba 4.1 and newer" product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
+
                    ==============================
                    Release Notes for Samba 4.9.13
                          September 03, 2019
@@ -53,8 +135,8 @@ database (https://bugzilla.samba.org/).
 ======================================================================
 
 
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
+
 
                    ==============================
                    Release Notes for Samba 4.9.12
diff --git a/auth/gensec/spnego.c b/auth/gensec/spnego.c
index 0b3fbdce7ac..5f78267281d 100644
--- a/auth/gensec/spnego.c
+++ b/auth/gensec/spnego.c
@@ -136,6 +136,7 @@ struct spnego_state {
 	bool done_mic_check;
 
 	bool simulate_w2k;
+	bool no_optimistic;
 
 	/*
 	 * The following is used to implement
@@ -187,6 +188,10 @@ static NTSTATUS gensec_spnego_client_start(struct gensec_security *gensec_securi
 
 	spnego_state->simulate_w2k = gensec_setting_bool(gensec_security->settings,
 						"spnego", "simulate_w2k", false);
+	spnego_state->no_optimistic = gensec_setting_bool(gensec_security->settings,
+							  "spnego",
+							  "client_no_optimistic",
+							  false);
 
 	gensec_security->private_data = spnego_state;
 	return NT_STATUS_OK;
@@ -1295,6 +1300,10 @@ static NTSTATUS gensec_spnego_server_negTokenInit_step(
 			spnego_state->mic_requested = true;
 		}
 
+		if (sub_in.length == 0) {
+			spnego_state->no_optimistic = true;
+		}
+
 		/*
 		 * Note that 'cur_sec' is temporary memory, but
 		 * cur_sec->oid points to a const string in the
@@ -1923,6 +1932,21 @@ static void gensec_spnego_update_pre(struct tevent_req *req)
 		 * blob and NT_STATUS_OK.
 		 */
 		state->sub.status = NT_STATUS_OK;
+	} else if (spnego_state->state_position == SPNEGO_CLIENT_START &&
+		   spnego_state->no_optimistic) {
+		/*
+		 * Skip optimistic token per conf.
+		 */
+		state->sub.status = NT_STATUS_MORE_PROCESSING_REQUIRED;
+	} else if (spnego_state->state_position == SPNEGO_SERVER_START &&
+		   state->sub.in.length == 0 && spnego_state->no_optimistic) {
+		/*
+		 * If we didn't like the mechanism for which the client sent us
+		 * an optimistic token, or if he didn't send any, don't call
+		 * the sub mechanism just yet.
+		 */
+		state->sub.status = NT_STATUS_MORE_PROCESSING_REQUIRED;
+		spnego_state->no_optimistic = false;
 	} else {
 		/*
 		 * MORE_PROCESSING_REQUIRED =>
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index ea00bb12128..0c66725d36c 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -481,7 +481,6 @@ int ctdb_ibw_init(struct ctdb_context *ctdb);
 
 /* from ctdb_banning.c */
 
-void ctdb_local_node_got_banned(struct ctdb_context *ctdb);
 int32_t ctdb_control_set_ban_state(struct ctdb_context *ctdb, TDB_DATA indata);
 int32_t ctdb_control_get_ban_state(struct ctdb_context *ctdb, TDB_DATA *outdata);
 void ctdb_ban_self(struct ctdb_context *ctdb);
@@ -829,6 +828,8 @@ int32_t ctdb_control_recd_ping(struct ctdb_context *ctdb);
 int32_t ctdb_control_set_recmaster(struct ctdb_context *ctdb,
 				   uint32_t opcode, TDB_DATA indata);
 
+void ctdb_node_become_inactive(struct ctdb_context *ctdb);
+
 int32_t ctdb_control_stop_node(struct ctdb_context *ctdb);
 int32_t ctdb_control_continue_node(struct ctdb_context *ctdb);
 
@@ -841,7 +842,10 @@ void ctdb_stop_recoverd(struct ctdb_context *ctdb);
 
 int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport);
 
-int ctdb_ip_to_nodeid(struct ctdb_context *ctdb, const ctdb_sock_addr *nodeip);
+struct ctdb_node *ctdb_ip_to_node(struct ctdb_context *ctdb,
+				  const ctdb_sock_addr *nodeip);
+uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
+			const ctdb_sock_addr *nodeip);
 
 void ctdb_load_nodes_file(struct ctdb_context *ctdb);
 
diff --git a/ctdb/server/ctdb_banning.c b/ctdb/server/ctdb_banning.c
index 9cd163645a1..3c711575e8c 100644
--- a/ctdb/server/ctdb_banning.c
+++ b/ctdb/server/ctdb_banning.c
@@ -57,30 +57,6 @@ static void ctdb_ban_node_event(struct tevent_context *ev,
 	}
 }
 
-void ctdb_local_node_got_banned(struct ctdb_context *ctdb)
-{
-	struct ctdb_db_context *ctdb_db;
-
-	DEBUG(DEBUG_NOTICE, ("This node has been banned - releasing all public "
-			     "IPs and setting the generation to INVALID.\n"));
-
-	/* Reset the generation id to 1 to make us ignore any
-	   REQ/REPLY CALL/DMASTER someone sends to us.
-	   We are now banned so we shouldnt service database calls
-	   anymore.
-	*/
-	ctdb->vnn_map->generation = INVALID_GENERATION;
-	for (ctdb_db = ctdb->db_list; ctdb_db != NULL; ctdb_db = ctdb_db->next) {
-		ctdb_db->generation = INVALID_GENERATION;
-	}
-
-	/* Recovery daemon will set the recovery mode ACTIVE and freeze
-	 * databases.
-	 */
-
-	ctdb_release_all_ips(ctdb);
-}
-
 int32_t ctdb_control_set_ban_state(struct ctdb_context *ctdb, TDB_DATA indata)
 {
 	struct ctdb_ban_state *bantime = (struct ctdb_ban_state *)indata.dptr;
@@ -129,7 +105,7 @@ int32_t ctdb_control_set_ban_state(struct ctdb_context *ctdb, TDB_DATA indata)
 			 ctdb_ban_node_event, ctdb);
 
 	if (!already_banned) {
-		ctdb_local_node_got_banned(ctdb);
+		ctdb_node_become_inactive(ctdb);
 	}
 	return 0;
 }
diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c
index ca98be6a100..d79634c3b54 100644
--- a/ctdb/server/ctdb_daemon.c
+++ b/ctdb/server/ctdb_daemon.c
@@ -1251,21 +1251,18 @@ static void ctdb_initialise_vnn_map(struct ctdb_context *ctdb)
 
 static void ctdb_set_my_pnn(struct ctdb_context *ctdb)
 {
-	int nodeid;
-
 	if (ctdb->address == NULL) {
 		ctdb_fatal(ctdb,
 			   "Can not determine PNN - node address is not set\n");
 	}
 
-	nodeid = ctdb_ip_to_nodeid(ctdb, ctdb->address);
-	if (nodeid == -1) {
+	ctdb->pnn = ctdb_ip_to_pnn(ctdb, ctdb->address);
+	if (ctdb->pnn == CTDB_UNKNOWN_PNN) {
 		ctdb_fatal(ctdb,
-			   "Can not determine PNN - node address not found in node list\n");
+			   "Can not determine PNN - unknown node address\n");
 	}
 
-	ctdb->pnn = ctdb->nodes[nodeid]->pnn;
-	DEBUG(DEBUG_NOTICE, ("PNN is %u\n", ctdb->pnn));
+	D_NOTICE("PNN is %u\n", ctdb->pnn);
 }
 
 /*
diff --git a/ctdb/server/ctdb_recover.c b/ctdb/server/ctdb_recover.c
index f05052e8466..b9646eb4808 100644
--- a/ctdb/server/ctdb_recover.c
+++ b/ctdb/server/ctdb_recover.c
@@ -1415,12 +1415,57 @@ int32_t ctdb_control_set_recmaster(struct ctdb_context *ctdb, uint32_t opcode, T
 	return 0;
 }
 
+void ctdb_node_become_inactive(struct ctdb_context *ctdb)
+{
+	struct ctdb_db_context *ctdb_db;
+
+	D_WARNING("Making node INACTIVE\n");
+
+	/*
+	 * Do not service database calls - reset generation to invalid
+	 * so this node ignores any REQ/REPLY CALL/DMASTER
+	 */
+	ctdb->vnn_map->generation = INVALID_GENERATION;
+	for (ctdb_db = ctdb->db_list; ctdb_db != NULL; ctdb_db = ctdb_db->next) {
+		ctdb_db->generation = INVALID_GENERATION;
+	}
+
+	/*
+	 * Although this bypasses the control, the only thing missing
+	 * is the deferred drop of all public IPs, which isn't
+	 * necessary because they are dropped below
+	 */
+	if (ctdb->recovery_mode != CTDB_RECOVERY_ACTIVE) {
+		D_NOTICE("Recovery mode set to ACTIVE\n");
+		ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE;
+	}
+
+	/*
+	 * Initiate database freeze - this will be scheduled for
+	 * immediate execution and will be in progress long before the
+	 * calling control returns
+	 */
+	ctdb_daemon_send_control(ctdb,
+				 ctdb->pnn,
+				 0,
+				 CTDB_CONTROL_FREEZE,
+				 0,
+				 CTDB_CTRL_FLAG_NOREPLY,
+				 tdb_null,
+				 NULL,
+				 NULL);
+
+	D_NOTICE("Dropping all public IP addresses\n");
+	ctdb_release_all_ips(ctdb);
+}
 
 int32_t ctdb_control_stop_node(struct ctdb_context *ctdb)
 {
 	DEBUG(DEBUG_ERR, ("Stopping node\n"));
 	ctdb->nodes[ctdb->pnn]->flags |= NODE_FLAGS_STOPPED;
 
+	ctdb_node_become_inactive(ctdb);
+
 	return 0;
 }
 
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index 88ef3b1c5a0..4e7e79c264b 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -2982,13 +2982,19 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec,
 		return;
 	}
 
-	/* verify that all active nodes in the nodemap also exist in 
-	   the vnnmap.
+	/*
+	 * Verify that all active lmaster nodes in the nodemap also
+	 * exist in the vnnmap
 	 */
 	for (j=0; j<nodemap->num; j++) {
 		if (nodemap->nodes[j].flags & NODE_FLAGS_INACTIVE) {
 			continue;
 		}
+		if (! ctdb_node_has_capabilities(rec->caps,
+						 nodemap->nodes[j].pnn,
+						 CTDB_CAP_LMASTER)) {
+			continue;
+		}
 		if (nodemap->nodes[j].pnn == pnn) {
 			continue;
 		}
@@ -2999,8 +3005,8 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec,
 			}
 		}
 		if (i == vnnmap->size) {
-			DEBUG(DEBUG_ERR, (__location__ " Node %u is active in the nodemap but did not exist in the vnnmap\n", 
-				  nodemap->nodes[j].pnn));
+			D_ERR("Active LMASTER node %u is not in the vnnmap\n",
+			      nodemap->nodes[j].pnn);
 			ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
 			do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
 			return;
diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c
index c991b85d99b..ddff85b81c5 100644
--- a/ctdb/server/ctdb_server.c
+++ b/ctdb/server/ctdb_server.c
@@ -45,24 +45,36 @@ int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport)
 	return 0;
 }
 
-/*
-  Check whether an ip is a valid node ip
-  Returns the node id for this ip address or -1
-*/
-int ctdb_ip_to_nodeid(struct ctdb_context *ctdb, const ctdb_sock_addr *nodeip)
+/* Return the node structure for nodeip, NULL if nodeip is invalid */
+struct ctdb_node *ctdb_ip_to_node(struct ctdb_context *ctdb,
+				  const ctdb_sock_addr *nodeip)
 {
-	int nodeid;
+	unsigned int nodeid;
 
 	for (nodeid=0;nodeid<ctdb->num_nodes;nodeid++) {
 		if (ctdb->nodes[nodeid]->flags & NODE_FLAGS_DELETED) {
 			continue;
 		}
 		if (ctdb_same_ip(&ctdb->nodes[nodeid]->address, nodeip)) {
-			return nodeid;
+			return ctdb->nodes[nodeid];
 		}
 	}
 
-	return -1;
+	return NULL;
+}
+
+/* Return the PNN for nodeip, CTDB_UNKNOWN_PNN if nodeip is invalid */
+uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
+			const ctdb_sock_addr *nodeip)
+{
+	struct ctdb_node *node;
+
+	node = ctdb_ip_to_node(ctdb, nodeip);
+	if (node == NULL) {
+		return CTDB_UNKNOWN_PNN;
+	}
+
+	return node->pnn;
 }
 
 /* Load a nodes list file into a nodes array */
diff --git a/ctdb/server/ctdb_vacuum.c b/ctdb/server/ctdb_vacuum.c
index 2194b7f4da7..fa43eaa8e67 100644
--- a/ctdb/server/ctdb_vacuum.c
+++ b/ctdb/server/ctdb_vacuum.c
@@ -814,7 +814,7 @@ static void ctdb_process_delete_list(struct ctdb_db_context *ctdb_db,
 		 */
 		records = (struct ctdb_marshall_buffer *)outdata.dptr;
 		rec = (struct ctdb_rec_data_old *)&records->data[0];
-		while (records->count-- > 1) {
+		while (records->count-- > 0) {
 			TDB_DATA reckey, recdata;
 			struct ctdb_ltdb_header *rechdr;
 			struct delete_record_data *dd;
diff --git a/ctdb/tcp/ctdb_tcp.h b/ctdb/tcp/ctdb_tcp.h
index 0a998c94da4..9a615fc6393 100644
--- a/ctdb/tcp/ctdb_tcp.h
+++ b/ctdb/tcp/ctdb_tcp.h
@@ -26,23 +26,19 @@ struct ctdb_tcp {
 	int listen_fd;
 };
 
-/*
-  state associated with an incoming connection
-*/
-struct ctdb_incoming {
-	struct ctdb_context *ctdb;
-	int fd;
-	struct ctdb_queue *queue;
-};
-
 /*
   state associated with one tcp node
 */
 struct ctdb_tcp_node {
-	int fd;
+	int out_fd;
 	struct ctdb_queue *out_queue;
+
 	struct tevent_fd *connect_fde;
 	struct tevent_timer *connect_te;
+
+	struct ctdb_context *ctdb;
+	int in_fd;
+	struct ctdb_queue *in_queue;
 };
 
 
diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c
index 385547e0e78..f02340c1789 100644
--- a/ctdb/tcp/tcp_connect.c
+++ b/ctdb/tcp/tcp_connect.c
@@ -44,15 +44,13 @@ void ctdb_tcp_stop_connection(struct ctdb_node *node)
 {
 	struct ctdb_tcp_node *tnode = talloc_get_type(
 		node->private_data, struct ctdb_tcp_node);
-	
-	ctdb_queue_set_fd(tnode->out_queue, -1);
-	talloc_free(tnode->connect_te);
-	talloc_free(tnode->connect_fde);
-	tnode->connect_fde = NULL;
-	tnode->connect_te = NULL;
-	if (tnode->fd != -1) {
-		close(tnode->fd);
-		tnode->fd = -1;
+
+	TALLOC_FREE(tnode->out_queue);
+	TALLOC_FREE(tnode->connect_te);
+	TALLOC_FREE(tnode->connect_fde);
+	if (tnode->out_fd != -1) {
+		close(tnode->out_fd);
+		tnode->out_fd = -1;
 	}
 }
 
@@ -93,12 +91,13 @@ static void ctdb_node_connect_write(struct tevent_context *ev,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list