The branch, v4-10-stable has been updated
       via  9aa60fc0e53 VERSION: Disable GIT_SNAPSHOT for the 4.10.14 release.
       via  b645568e385 WHATSNEW: Add release notes for Samba 4.10.14.
       via  d7936eab41d ctdb-tcp: Do not stop outbound connection in 
ctdb_tcp_node_connect()
       via  3d7da451367 ctdb-tcp: Factor out function ctdb_tcp_start_outgoing()
       via  ec0d2193c32 ctdb-tcp: add ctdb_tcp_stop_incoming()
       via  7f135cb6ceb ctdb-tcp: rename ctdb_tcp_stop_connection() to 
ctdb_tcp_stop_outgoing()
       via  37c03834d99 ctdb-tcp: Remove redundant restart in 
ctdb_tcp_tnode_cb()
       via  d156db3b084 ctdb-tcp: always call node_dead() upcall in 
ctdb_tcp_tnode_cb()
       via  d80e1985da7 ctdb-tcp: move free of inbound queue to TCP restart
       via  5d4e66b3df8 ctdb-daemon: more logical whitespace, debug 
modernisation
       via  8a3a942b520 ctdb-daemon: ensure restart() callback is called in 
half-connected state
       via  6528833ee7e ctdb-daemon: Rename ctdb_context private_data to 
transport_data
       via  f6d45183709 ctdb-daemon: Rename ctdb_node private_data to 
transport_data
       via  1bca6456030 nmblib: avoid undefined behaviour in handle_name_ptrs()
       via  43b343786e3 selftest: Export DC conf path for special cases
       via  1905ed84f8a selftest: Test behaviour of DNS scavenge with an 
existing dNSTombstoned value
       via  4bc3641a083 dsdb: Correctly handle memory in objectclass_attrs
       via  9b805c08442 wafsamba: Do not use 'rU' as the 'U' is deprecated in 
Python 3.9
       via  ee7e298bd70 s3: VFS: full_audit. Use system session_info if called 
from a temporary share definition.
       via  3230cf3e23e auth: Fix CID 1458418 Null pointer dereferences 
(REVERSE_INULL)
       via  11f214df1e3 auth: Fix CID 1458420 Null pointer dereferences 
(REVERSE_INULL)
       via  7f836b10103 ctdb-tcp: Make error handling for outbound connection 
consistent
       via  f3eebacb127 winbindd: handling missing idmap in getgrgid()
       via  8d069f20ec1 s3:auth_sam: map an empty domain or '.' to the local 
SAM name
       via  f1b3a95852a s3:selftest: test authentication with an empty 
userdomain and upn names
       via  f4706d85b95 s3:auth_sam: introduce effective_domain helper variables
       via  731ae2864d8 s3:auth_sam: make sure we never handle empty usernames
       via  33b37926b25 s3:auth_sam: unify the debug messages of all 
auth_sam*_auth() functions
       via  d5fa47e02ff s3:auth_sam: replace confusing FALL_THROUGH; with break;
       via  105e48e2712 script/release.sh: Don't use quotations any longer.
       via  677362ca796 lib:util: Log mkdir error on correct debug levels
       via  9fd10a2cacd s4:torture: Skip the deltest20 as user root
       via  55177a44258 s3: lib: nmblib. Clean up and harden nmb packet 
processing.
       via  9dca42f43b3 VERSION: Bump version up to 4.10.14...
      from  9678370227a VERSION: Disable GIT_SNAPSHOT for the 4.10.13 release.

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


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

Summary of changes:
 VERSION                                            |   2 +-
 WHATSNEW.txt                                       |  72 ++++++++++++-
 buildtools/wafsamba/samba_utils.py                 |   2 +-
 ctdb/ib/ibw_ctdb.c                                 |  11 +-
 ctdb/ib/ibw_ctdb_init.c                            |  13 ++-
 ctdb/include/ctdb_private.h                        |   4 +-
 ctdb/server/ctdb_server.c                          |  13 ++-
 ctdb/tcp/ctdb_tcp.h                                |   3 +-
 ctdb/tcp/tcp_connect.c                             | 114 +++++++++++++--------
 ctdb/tcp/tcp_init.c                                |  20 ++--
 ctdb/tcp/tcp_io.c                                  |   5 +-
 lib/util/util.c                                    |   7 +-
 python/samba/tests/dns.py                          |  39 +++++++
 script/release.sh                                  |  26 -----
 selftest/knownfail.d/empty-domain-name             |   7 ++
 selftest/selftest.pl                               |   7 ++
 selftest/target/Samba4.pm                          |   6 ++
 source3/auth/auth_sam.c                            |  85 +++++++++++++--
 source3/libsmb/nmblib.c                            |  15 ++-
 source3/modules/vfs_full_audit.c                   |  20 +++-
 source3/selftest/tests.py                          |   8 ++
 source3/winbindd/winbindd_getgrgid.c               |   4 +
 source4/dsdb/samdb/ldb_modules/objectclass_attrs.c |  17 ++-
 source4/torture/basic/delete.c                     |   4 +
 24 files changed, 378 insertions(+), 126 deletions(-)
 create mode 100644 selftest/knownfail.d/empty-domain-name


Changeset truncated at 500 lines:

diff --git a/VERSION b/VERSION
index e7e72c2dc8c..5428aa21c57 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=4
 SAMBA_VERSION_MINOR=10
-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 fae7ac01244..9cdd30b5755 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,71 @@
+                   ===============================
+                   Release Notes for Samba 4.10.14
+                           March 26, 2020
+                   ===============================
+
+
+This is the last bugfix release of the Samba 4.10 release series. There will be
+security releases only beyond this point.
+
+
+Changes since 4.10.13
+---------------------
+
+o  Jeremy Allison <[email protected]>
+   * BUG 14239: s3: lib: nmblib. Clean up and harden nmb packet processing.
+   * BUG 14283: s3: VFS: full_audit. Use system session_info if called from a
+     temporary share definition.
+
+o  Douglas Bagnall <[email protected]>
+   * BUG 20193: nmblib: Avoid undefined behaviour in handle_name_ptrs().
+
+o  Andrew Bartlett <[email protected]>
+   * BUG 14258: dsdb: Correctly handle memory in objectclass_attrs.
+
+o  Volker Lendecke <[email protected]>
+   * BUG 14247: auth: Fix CID 1458418 Null pointer dereferences 
(REVERSE_INULL),
+     auth: Fix CID 1458420 Null pointer dereferences (REVERSE_INULL).
+
+o  Stefan Metzmacher <[email protected]>
+   * BUG 14247: winbind member (source3) fails local SAM auth with empty domain
+     name.
+   * BUG 14265: winbindd: Handling missing idmap in getgrgid().
+
+o  Andreas Schneider <[email protected]>
+   * BUG 14253: lib:util: Log mkdir error on correct debug levels.
+   * BUG 14266: wafsamba: Do not use 'rU' as the 'U' is deprecated in
+     Python 3.9.
+
+o  Martin Schwenke <[email protected]>
+   * BUG 14274: ctdb-tcp: Make error handling for outbound connection
+     consistent.
+   * BUG 14295: Starting ctdb node that was powered off hard before results in
+     recovery loop.
+
+
+#######################################
+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.10.13
                           January 23, 2020
@@ -96,8 +164,8 @@ database (https://bugzilla.samba.org/).
 ======================================================================
 
 
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
+
 
                    ===============================
                    Release Notes for Samba 4.10.12
diff --git a/buildtools/wafsamba/samba_utils.py 
b/buildtools/wafsamba/samba_utils.py
index bc36d1f194d..086040ebfee 100644
--- a/buildtools/wafsamba/samba_utils.py
+++ b/buildtools/wafsamba/samba_utils.py
@@ -687,7 +687,7 @@ def PROCESS_SEPARATE_RULE(self, rule):
             cache[node] = True
             self.pre_recurse(node)
             try:
-                function_code = node.read('rU', None)
+                function_code = node.read('r', None)
                 exec(compile(function_code, node.abspath(), 'exec'), 
self.exec_dict)
             finally:
                 self.post_recurse(node)
diff --git a/ctdb/ib/ibw_ctdb.c b/ctdb/ib/ibw_ctdb.c
index 458646faae0..53911240ff7 100644
--- a/ctdb/ib/ibw_ctdb.c
+++ b/ctdb/ib/ibw_ctdb.c
@@ -55,7 +55,8 @@ int ctdb_ibw_get_address(struct ctdb_context *ctdb,
 
 int ctdb_ibw_node_connect(struct ctdb_node *node)
 {
-       struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct 
ctdb_ibw_node);
+       struct ctdb_ibw_node *cn = talloc_get_type(node->transport_data,
+                                                  struct ctdb_ibw_node);
        int     rc;
 
        assert(cn!=NULL);
@@ -118,7 +119,9 @@ int ctdb_ibw_connstate_handler(struct ibw_ctx *ctx, struct 
ibw_conn *conn)
                case IBWC_CONNECTED: { /* after ibw_accept or ibw_connect */
                        struct ctdb_node *node = 
talloc_get_type(conn->conn_userdata, struct ctdb_node);
                        if (node!=NULL) { /* after ibw_connect */
-                               struct ctdb_ibw_node *cn = 
talloc_get_type(node->private_data, struct ctdb_ibw_node);
+                               struct ctdb_ibw_node *cn = talloc_get_type(
+                                       node->transport_data,
+                                       struct ctdb_ibw_node);
 
                                node->ctdb->upcalls->node_connected(node);
                                ctdb_flush_cn_queue(cn);
@@ -136,7 +139,9 @@ int ctdb_ibw_connstate_handler(struct ibw_ctx *ctx, struct 
ibw_conn *conn)
                case IBWC_ERROR: {
                        struct ctdb_node *node = 
talloc_get_type(conn->conn_userdata, struct ctdb_node);
                        if (node!=NULL) {
-                               struct ctdb_ibw_node *cn = 
talloc_get_type(node->private_data, struct ctdb_ibw_node);
+                               struct ctdb_ibw_node *cn = talloc_get_type(
+                                       node->transport_data,
+                                       struct ctdb_ibw_node);
                                struct ibw_ctx *ictx = cn->conn->ctx;
 
                                DEBUG(DEBUG_DEBUG, ("IBWC_ERROR, 
reconnecting...\n"));
diff --git a/ctdb/ib/ibw_ctdb_init.c b/ctdb/ib/ibw_ctdb_init.c
index 7e77ec08031..f9d00c60605 100644
--- a/ctdb/ib/ibw_ctdb_init.c
+++ b/ctdb/ib/ibw_ctdb_init.c
@@ -40,7 +40,8 @@
 
 static int ctdb_ibw_listen(struct ctdb_context *ctdb, int backlog)
 {
-       struct ibw_ctx *ictx = talloc_get_type(ctdb->private_data, struct 
ibw_ctx);
+       struct ibw_ctx *ictx = talloc_get_type(ctdb->transport_data,
+                                              struct ibw_ctx);
 
        assert(ictx!=NULL);
 
@@ -62,12 +63,13 @@ static int ctdb_ibw_listen(struct ctdb_context *ctdb, int 
backlog)
  */
 static int ctdb_ibw_add_node(struct ctdb_node *node)
 {
-       struct ibw_ctx *ictx = talloc_get_type(node->ctdb->private_data, struct 
ibw_ctx);
+       struct ibw_ctx *ictx = talloc_get_type(node->ctdb->transport_data,
+                                              struct ibw_ctx);
        struct ctdb_ibw_node *cn = talloc_zero(node, struct ctdb_ibw_node);
 
        assert(cn!=NULL);
        cn->conn = ibw_conn_new(ictx, node);
-       node->private_data = (void *)cn;
+       node->transport_data = (void *)cn;
 
        return (cn->conn!=NULL ? 0 : -1);
 }
@@ -153,7 +155,8 @@ int ctdb_flush_cn_queue(struct ctdb_ibw_node *cn)
 
 static int ctdb_ibw_queue_pkt(struct ctdb_node *node, uint8_t *data, uint32_t 
length)
 {
-       struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct 
ctdb_ibw_node);
+       struct ctdb_ibw_node *cn = talloc_get_type(node->transport_data,
+                                                  struct ctdb_ibw_node);
        int     rc;
 
        assert(length>=sizeof(uint32_t));
@@ -245,7 +248,7 @@ int ctdb_ibw_init(struct ctdb_context *ctdb)
        }
 
        ctdb->methods = &ctdb_ibw_methods;
-       ctdb->private_data = ictx;
+       ctdb->transport_data = ictx;
        
        DEBUG(DEBUG_DEBUG, ("ctdb_ibw_init succeeded.\n"));
        return 0;
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index 0c66725d36c..2c0658eabf3 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -74,7 +74,7 @@ struct ctdb_node {
        struct ctdb_context *ctdb;
        ctdb_sock_addr address;
        const char *name; /* for debug messages */
-       void *private_data; /* private to transport */
+       void *transport_data; /* private to transport */
        uint32_t pnn;
        uint32_t flags;
 
@@ -286,7 +286,7 @@ struct ctdb_context {
        char *err_msg;
        const struct ctdb_methods *methods; /* transport methods */
        const struct ctdb_upcalls *upcalls; /* transport upcalls */
-       void *private_data; /* private to transport */
+       void *transport_data; /* private to transport */
        struct ctdb_db_context *db_list;
        struct srvid_context *srv;
        struct srvid_context *tunnels;
diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c
index ddff85b81c5..3fce791b27e 100644
--- a/ctdb/server/ctdb_server.c
+++ b/ctdb/server/ctdb_server.c
@@ -301,6 +301,12 @@ done:
 */
 void ctdb_node_dead(struct ctdb_node *node)
 {
+       if (node->ctdb->methods == NULL) {
+               DBG_ERR("Can not restart transport while shutting down\n");
+               return;
+       }
+       node->ctdb->methods->restart(node);
+
        if (node->flags & NODE_FLAGS_DISCONNECTED) {
                DEBUG(DEBUG_INFO,("%s: node %s is already marked disconnected: 
%u connected\n", 
                         node->ctdb->name, node->name, 
@@ -315,13 +321,6 @@ void ctdb_node_dead(struct ctdb_node *node)
        DEBUG(DEBUG_ERR,("%s: node %s is dead: %u connected\n",
                 node->ctdb->name, node->name, node->ctdb->num_connected));
        ctdb_daemon_cancel_controls(node->ctdb, node);
-
-       if (node->ctdb->methods == NULL) {
-               DEBUG(DEBUG_ERR,(__location__ " Can not restart transport while 
shutting down daemon.\n"));
-               return;
-       }
-
-       node->ctdb->methods->restart(node);
 }
 
 /*
diff --git a/ctdb/tcp/ctdb_tcp.h b/ctdb/tcp/ctdb_tcp.h
index daabad74297..cb8d66fa5dc 100644
--- a/ctdb/tcp/ctdb_tcp.h
+++ b/ctdb/tcp/ctdb_tcp.h
@@ -48,7 +48,8 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, struct 
tevent_timer *te,
                           struct timeval t, void *private_data);
 void ctdb_tcp_read_cb(uint8_t *data, size_t cnt, void *args);
 void ctdb_tcp_tnode_cb(uint8_t *data, size_t cnt, void *private_data);
-void ctdb_tcp_stop_connection(struct ctdb_node *node);
+void ctdb_tcp_stop_outgoing(struct ctdb_node *node);
+void ctdb_tcp_stop_incoming(struct ctdb_node *node);
 
 #define CTDB_TCP_ALIGNMENT 8
 
diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c
index 0b5d021480a..6ce3dc16a6d 100644
--- a/ctdb/tcp/tcp_connect.c
+++ b/ctdb/tcp/tcp_connect.c
@@ -38,12 +38,12 @@
 #include "ctdb_tcp.h"
 
 /*
-  stop any connecting (established or pending) to a node
+  stop any outgoing connection (established or pending) to a node
  */
-void ctdb_tcp_stop_connection(struct ctdb_node *node)
+void ctdb_tcp_stop_outgoing(struct ctdb_node *node)
 {
        struct ctdb_tcp_node *tnode = talloc_get_type(
-               node->private_data, struct ctdb_tcp_node);
+               node->transport_data, struct ctdb_tcp_node);
 
        TALLOC_FREE(tnode->out_queue);
        TALLOC_FREE(tnode->connect_te);
@@ -54,6 +54,16 @@ void ctdb_tcp_stop_connection(struct ctdb_node *node)
        }
 }
 
+/*
+  stop incoming connection to a node
+ */
+void ctdb_tcp_stop_incoming(struct ctdb_node *node)
+{
+       struct ctdb_tcp_node *tnode = talloc_get_type(
+               node->transport_data, struct ctdb_tcp_node);
+
+       TALLOC_FREE(tnode->in_queue);
+}
 
 /*
   called when a complete packet has come in - should not happen on this socket
@@ -62,17 +72,9 @@ void ctdb_tcp_stop_connection(struct ctdb_node *node)
 void ctdb_tcp_tnode_cb(uint8_t *data, size_t cnt, void *private_data)
 {
        struct ctdb_node *node = talloc_get_type(private_data, struct 
ctdb_node);
-       struct ctdb_tcp_node *tnode = talloc_get_type(
-               node->private_data, struct ctdb_tcp_node);
 
-       if (data == NULL) {
-               node->ctdb->upcalls->node_dead(node);
-       }
+       node->ctdb->upcalls->node_dead(node);
 
-       ctdb_tcp_stop_connection(node);
-       tnode->connect_te = tevent_add_timer(node->ctdb->ev, tnode,
-                                            timeval_current_ofs(3, 0),
-                                            ctdb_tcp_node_connect, node);
        TALLOC_FREE(data);
 }
 
@@ -85,7 +87,7 @@ static void ctdb_node_connect_write(struct tevent_context *ev,
 {
        struct ctdb_node *node = talloc_get_type(private_data,
                                                 struct ctdb_node);
-       struct ctdb_tcp_node *tnode = talloc_get_type(node->private_data,
+       struct ctdb_tcp_node *tnode = talloc_get_type(node->transport_data,
                                                      struct ctdb_tcp_node);
        struct ctdb_context *ctdb = node->ctdb;
        int error = 0;
@@ -98,7 +100,7 @@ static void ctdb_node_connect_write(struct tevent_context 
*ev,
 
        ret = getsockopt(tnode->out_fd, SOL_SOCKET, SO_ERROR, &error, &len);
        if (ret != 0 || error != 0) {
-               ctdb_tcp_stop_connection(node);
+               ctdb_tcp_stop_outgoing(node);
                tnode->connect_te = tevent_add_timer(ctdb->ev, tnode,
                                                    timeval_current_ofs(1, 0),
                                                    ctdb_tcp_node_connect, 
node);
@@ -136,7 +138,7 @@ static void ctdb_node_connect_write(struct tevent_context 
*ev,
                                            node->name);
        if (tnode->out_queue == NULL) {
                DBG_ERR("Failed to set up outgoing queue\n");
-               ctdb_tcp_stop_connection(node);
+               ctdb_tcp_stop_outgoing(node);
                tnode->connect_te = tevent_add_timer(ctdb->ev,
                                                     tnode,
                                                     timeval_current_ofs(1, 0),
@@ -159,15 +161,17 @@ static void ctdb_node_connect_write(struct tevent_context 
*ev,
 }
 
 
+static void ctdb_tcp_node_connect_timeout(struct tevent_context *ev,
+                                         struct tevent_timer *te,
+                                         struct timeval t,
+                                         void *private_data);
+
 /*
   called when we should try and establish a tcp connection to a node
 */
-void ctdb_tcp_node_connect(struct tevent_context *ev, struct tevent_timer *te,
-                          struct timeval t, void *private_data)
+static void ctdb_tcp_start_outgoing(struct ctdb_node *node)
 {
-       struct ctdb_node *node = talloc_get_type(private_data,
-                                                struct ctdb_node);
-       struct ctdb_tcp_node *tnode = talloc_get_type(node->private_data, 
+       struct ctdb_tcp_node *tnode = talloc_get_type(node->transport_data,
                                                      struct ctdb_tcp_node);
        struct ctdb_context *ctdb = node->ctdb;
         ctdb_sock_addr sock_in;
@@ -176,23 +180,19 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, 
struct tevent_timer *te,
         ctdb_sock_addr sock_out;
        int ret;
 
-       ctdb_tcp_stop_connection(node);
-
        sock_out = node->address;
 
        tnode->out_fd = socket(sock_out.sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
        if (tnode->out_fd == -1) {
                DBG_ERR("Failed to create socket\n");
-               return;
+               goto failed;
        }
 
        ret = set_blocking(tnode->out_fd, false);
        if (ret != 0) {
                DBG_ERR("Failed to set socket non-blocking (%s)\n",
                        strerror(errno));
-               close(tnode->out_fd);
-               tnode->out_fd = -1;
-               return;
+               goto failed;
        }
 
        set_close_on_exec(tnode->out_fd);
@@ -224,32 +224,22 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, 
struct tevent_timer *te,
                sockout_size = sizeof(sock_out.ip6);
                break;
        default:
-               DEBUG(DEBUG_ERR, (__location__ " unknown family %u\n",
-                       sock_in.sa.sa_family));
-               close(tnode->out_fd);
-               tnode->out_fd = -1;
-               return;
+               DBG_ERR("Unknown address family %u\n", sock_in.sa.sa_family);
+               /* Can't happen to due to address parsing restrictions */
+               goto failed;
        }
 
        ret = bind(tnode->out_fd, (struct sockaddr *)&sock_in, sockin_size);
        if (ret == -1) {
                DBG_ERR("Failed to bind socket (%s)\n", strerror(errno));
-               close(tnode->out_fd);
-               tnode->out_fd = -1;
-               return;
+               goto failed;
        }
 
        ret = connect(tnode->out_fd,
                      (struct sockaddr *)&sock_out,
                      sockout_size);
        if (ret != 0 && errno != EINPROGRESS) {
-               ctdb_tcp_stop_connection(node);
-               tnode->connect_te = tevent_add_timer(ctdb->ev,
-                                                    tnode,
-                                                    timeval_current_ofs(1, 0),
-                                                    ctdb_tcp_node_connect,
-                                                    node);
-               return;
+               goto failed;
        }
 
        /* non-blocking connect - wait for write event */
@@ -263,6 +253,16 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, 
struct tevent_timer *te,
        /* don't give it long to connect - retry in one second. This ensures
           that we find a node is up quickly (tcp normally backs off a syn reply
           delay by quite a lot) */
+       tnode->connect_te = tevent_add_timer(ctdb->ev,
+                                            tnode,
+                                            timeval_current_ofs(1, 0),
+                                            ctdb_tcp_node_connect_timeout,
+                                            node);
+
+       return;
+
+failed:
+       ctdb_tcp_stop_outgoing(node);
        tnode->connect_te = tevent_add_timer(ctdb->ev,
                                             tnode,
                                             timeval_current_ofs(1, 0),
@@ -270,6 +270,29 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, 
struct tevent_timer *te,
                                             node);
 }
 
+void ctdb_tcp_node_connect(struct tevent_context *ev,
+                          struct tevent_timer *te,
+                          struct timeval t,
+                          void *private_data)
+{
+       struct ctdb_node *node = talloc_get_type_abort(private_data,
+                                                      struct ctdb_node);
+
+       ctdb_tcp_start_outgoing(node);
+}
+
+static void ctdb_tcp_node_connect_timeout(struct tevent_context *ev,
+                                         struct tevent_timer *te,
+                                         struct timeval t,
+                                         void *private_data)
+{
+       struct ctdb_node *node = talloc_get_type_abort(private_data,
+                                                      struct ctdb_node);
+
+       ctdb_tcp_stop_outgoing(node);
+       ctdb_tcp_start_outgoing(node);
+}
+
 /*
   called when we get contacted by another node
   currently makes no attempt to check if the connection is really from a ctdb
@@ -279,7 +302,8 @@ static void ctdb_listen_event(struct tevent_context *ev, 
struct tevent_fd *fde,
                              uint16_t flags, void *private_data)
 {
        struct ctdb_context *ctdb = talloc_get_type(private_data, struct 
ctdb_context);
-       struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data, struct 
ctdb_tcp);
+       struct ctdb_tcp *ctcp = talloc_get_type(ctdb->transport_data,
+                                               struct ctdb_tcp);
        ctdb_sock_addr addr;
        socklen_t len;
        int fd;
@@ -302,7 +326,7 @@ static void ctdb_listen_event(struct tevent_context *ev, 
struct tevent_fd *fde,
                return;
        }
 
-       tnode = talloc_get_type_abort(node->private_data,
+       tnode = talloc_get_type_abort(node->transport_data,
                                      struct ctdb_tcp_node);
        if (tnode == NULL) {


-- 
Samba Shared Repository

Reply via email to