]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r18189: When tearing down a connection we can be harsher
authorJeremy Allison <jra@samba.org>
Wed, 6 Sep 2006 19:02:39 +0000 (19:02 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:43:56 +0000 (11:43 -0500)
with timeouts. Also, wait for 5 seconds not 10
on connecting to a DC.
Jeremy.
(This used to be commit 6792460ba6a198646404abae10979489ca03ca5c)

source3/nsswitch/winbindd_cm.c

index 85b1d5d6cdc5c1485598606b77ac2ba88b6fec66..76c0c48232a61ff943c44bff63f9b4da50260909 100644 (file)
@@ -757,7 +757,8 @@ static BOOL find_new_dc(TALLOC_CTX *mem_ctx,
        if ((addrs == NULL) || (dcnames == NULL))
                return False;
 
-       if ( !open_any_socket_out(addrs, num_addrs, 10000, &fd_index, fd) ) 
+       /* 5 second timeout. */
+       if ( !open_any_socket_out(addrs, num_addrs, 5000, &fd_index, fd) ) 
        {
                for (i=0; i<num_dcs; i++) {
                        add_failed_connection_entry(domain->name,
@@ -847,7 +848,8 @@ static NTSTATUS cm_open_connection(struct winbindd_domain *domain,
                        add_sockaddr_to_array(mem_ctx, domain->dcaddr.sin_addr, 445, &addrs, &num_addrs);
                        add_sockaddr_to_array(mem_ctx, domain->dcaddr.sin_addr, 139, &addrs, &num_addrs);
 
-                       if (!open_any_socket_out(addrs, num_addrs, 10000, &dummy, &fd)) {
+                       /* 5 second timeout. */
+                       if (!open_any_socket_out(addrs, num_addrs, 5000, &dummy, &fd)) {
                                domain->online = False;
                                fd = -1;
                        }
@@ -890,18 +892,40 @@ static NTSTATUS cm_open_connection(struct winbindd_domain *domain,
 
 void invalidate_cm_connection(struct winbindd_cm_conn *conn)
 {
+       /* We're closing down a possibly dead
+          connection. Don't have impossibly long (10s) timeouts. */
+
+       if (conn->cli) {
+               cli_set_timeout(conn->cli, 1000); /* 1 second. */
+       }
+
        if (conn->samr_pipe != NULL) {
-               cli_rpc_pipe_close(conn->samr_pipe);
+               if (!cli_rpc_pipe_close(conn->samr_pipe)) {
+                       /* Ok, it must be dead. Drop timeout to 0.5 sec. */
+                       if (conn->cli) {
+                               cli_set_timeout(conn->cli, 500);
+                       }
+               }
                conn->samr_pipe = NULL;
        }
 
        if (conn->lsa_pipe != NULL) {
-               cli_rpc_pipe_close(conn->lsa_pipe);
+               if (!cli_rpc_pipe_close(conn->lsa_pipe)) {
+                       /* Ok, it must be dead. Drop timeout to 0.5 sec. */
+                       if (conn->cli) {
+                               cli_set_timeout(conn->cli, 500);
+                       }
+               }
                conn->lsa_pipe = NULL;
        }
 
        if (conn->netlogon_pipe != NULL) {
-               cli_rpc_pipe_close(conn->netlogon_pipe);
+               if (!cli_rpc_pipe_close(conn->netlogon_pipe)) {
+                       /* Ok, it must be dead. Drop timeout to 0.5 sec. */
+                       if (conn->cli) {
+                               cli_set_timeout(conn->cli, 500);
+                       }
+               }
                conn->netlogon_pipe = NULL;
        }